22 lines
582 B
TypeScript
22 lines
582 B
TypeScript
import JSONBig from 'json-bigint';
|
|
|
|
const jsonParser = JSONBig({
|
|
storeAsString: true,
|
|
useNativeBigInt: false,
|
|
});
|
|
|
|
function looksLikeJsonPayload(data: string) {
|
|
const trimmed = data.trim();
|
|
return trimmed.startsWith('{') || trimmed.startsWith('[');
|
|
}
|
|
|
|
export function parseJsonPreservingLong<T>(data: unknown, contentType?: string): T | unknown {
|
|
if (typeof data !== 'string' || !looksLikeJsonPayload(data)) {
|
|
return data;
|
|
}
|
|
if (contentType && !contentType.toLowerCase().includes('application/json')) {
|
|
return data;
|
|
}
|
|
return jsonParser.parse(data) as T;
|
|
}
|