@solana/rpc-spec-types 5.1.0-canary-20251202173352 → 5.1.0-canary-20251202174830
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/parse-json-with-bigints.ts","../src/rpc-message.ts","../src/stringify-json-with-bigints.ts"],"names":["unwrapBigIntValueObject","wrapBigIntValueObject"],"mappings":";;;AAKO,SAAS,qBAAqB,
|
|
1
|
+
{"version":3,"sources":["../src/parse-json-with-bigints.ts","../src/rpc-message.ts","../src/stringify-json-with-bigints.ts"],"names":["unwrapBigIntValueObject","wrapBigIntValueObject"],"mappings":"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","file":"index.browser.cjs","sourcesContent":["/**\n * This function is a replacement for `JSON.parse` that can handle large\n * unsafe integers by parsing them as BigInts. It transforms every\n * numerical value into a BigInt without loss of precision.\n */\nexport function parseJsonWithBigInts(json: string): unknown {\n return JSON.parse(wrapIntegersInBigIntValueObject(json), (_, value) => {\n return isBigIntValueObject(value) ? unwrapBigIntValueObject(value) : value;\n });\n}\n\nfunction wrapIntegersInBigIntValueObject(json: string): string {\n const out = [];\n let inQuote = false;\n for (let ii = 0; ii < json.length; ii++) {\n let isEscaped = false;\n if (json[ii] === '\\\\') {\n out.push(json[ii++]);\n isEscaped = !isEscaped;\n }\n if (json[ii] === '\"') {\n out.push(json[ii]);\n if (!isEscaped) {\n inQuote = !inQuote;\n }\n continue;\n }\n if (!inQuote) {\n const consumedNumber = consumeNumber(json, ii);\n if (consumedNumber?.length) {\n ii += consumedNumber.length - 1;\n // Don't wrap numbers that contain a decimal point or a negative exponent.\n if (consumedNumber.match(/\\.|[eE]-/)) {\n out.push(consumedNumber);\n } else {\n out.push(wrapBigIntValueObject(consumedNumber));\n }\n continue;\n }\n }\n out.push(json[ii]);\n }\n\n return out.join('');\n}\n\nfunction consumeNumber(json: string, ii: number): string | null {\n /** @see https://stackoverflow.com/a/13340826/11440277 */\n const JSON_NUMBER_REGEX = /^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/;\n\n // Stop early if the first character isn't a digit or a minus sign.\n if (!json[ii]?.match(/[-\\d]/)) {\n return null;\n }\n\n // Otherwise, check if the next characters form a valid JSON number.\n const numberMatch = json.slice(ii).match(JSON_NUMBER_REGEX);\n return numberMatch ? numberMatch[0] : null;\n}\n\ntype BigIntValueObject = {\n // `$` implies 'this is a value object'.\n // `n` implies 'interpret the value as a bigint'.\n $n: string;\n};\n\nfunction wrapBigIntValueObject(value: string): string {\n return `{\"$n\":\"${value}\"}`;\n}\n\nfunction unwrapBigIntValueObject({ $n }: BigIntValueObject): bigint {\n if ($n.match(/[eE]/)) {\n const [units, exponent] = $n.split(/[eE]/);\n return BigInt(units) * BigInt(10) ** BigInt(exponent);\n }\n return BigInt($n);\n}\n\nfunction isBigIntValueObject(value: unknown): value is BigIntValueObject {\n return !!value && typeof value === 'object' && '$n' in value && typeof value.$n === 'string';\n}\n","import { RpcRequest } from './rpc-request';\n\nlet _nextMessageId = 0n;\nfunction getNextMessageId(): string {\n const id = _nextMessageId;\n _nextMessageId++;\n return id.toString();\n}\n\n/**\n * Returns a spec-compliant JSON RPC 2.0 message, given a method name and some params.\n *\n * Generates a new `id` on each call by incrementing a `bigint` and casting it to a string.\n */\nexport function createRpcMessage<TParams>(request: RpcRequest<TParams>) {\n return {\n id: getNextMessageId(),\n jsonrpc: '2.0',\n method: request.methodName,\n params: request.params,\n };\n}\n","/**\n * Transforms a value into a JSON string, whilst rendering bigints as large unsafe integers.\n */\nexport function stringifyJsonWithBigInts(value: unknown, space?: number | string): string {\n return unwrapBigIntValueObject(\n JSON.stringify(value, (_, v) => (typeof v === 'bigint' ? wrapBigIntValueObject(v) : v), space),\n );\n}\n\ntype BigIntValueObject = {\n // `$` implies 'this is a value object'.\n // `n` implies 'interpret the value as a bigint'.\n $n: string;\n};\n\nfunction wrapBigIntValueObject(value: bigint): BigIntValueObject {\n return { $n: `${value}` };\n}\n\nfunction unwrapBigIntValueObject(value: string): string {\n return value.replace(/\\{\\s*\"\\$n\"\\s*:\\s*\"(-?\\d+)\"\\s*\\}/g, '$1');\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/parse-json-with-bigints.ts","../src/rpc-message.ts","../src/stringify-json-with-bigints.ts"],"names":["unwrapBigIntValueObject","wrapBigIntValueObject"],"mappings":";AAKO,SAAS,qBAAqB,
|
|
1
|
+
{"version":3,"sources":["../src/parse-json-with-bigints.ts","../src/rpc-message.ts","../src/stringify-json-with-bigints.ts"],"names":["unwrapBigIntValueObject","wrapBigIntValueObject"],"mappings":"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","file":"index.browser.mjs","sourcesContent":["/**\n * This function is a replacement for `JSON.parse` that can handle large\n * unsafe integers by parsing them as BigInts. It transforms every\n * numerical value into a BigInt without loss of precision.\n */\nexport function parseJsonWithBigInts(json: string): unknown {\n return JSON.parse(wrapIntegersInBigIntValueObject(json), (_, value) => {\n return isBigIntValueObject(value) ? unwrapBigIntValueObject(value) : value;\n });\n}\n\nfunction wrapIntegersInBigIntValueObject(json: string): string {\n const out = [];\n let inQuote = false;\n for (let ii = 0; ii < json.length; ii++) {\n let isEscaped = false;\n if (json[ii] === '\\\\') {\n out.push(json[ii++]);\n isEscaped = !isEscaped;\n }\n if (json[ii] === '\"') {\n out.push(json[ii]);\n if (!isEscaped) {\n inQuote = !inQuote;\n }\n continue;\n }\n if (!inQuote) {\n const consumedNumber = consumeNumber(json, ii);\n if (consumedNumber?.length) {\n ii += consumedNumber.length - 1;\n // Don't wrap numbers that contain a decimal point or a negative exponent.\n if (consumedNumber.match(/\\.|[eE]-/)) {\n out.push(consumedNumber);\n } else {\n out.push(wrapBigIntValueObject(consumedNumber));\n }\n continue;\n }\n }\n out.push(json[ii]);\n }\n\n return out.join('');\n}\n\nfunction consumeNumber(json: string, ii: number): string | null {\n /** @see https://stackoverflow.com/a/13340826/11440277 */\n const JSON_NUMBER_REGEX = /^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/;\n\n // Stop early if the first character isn't a digit or a minus sign.\n if (!json[ii]?.match(/[-\\d]/)) {\n return null;\n }\n\n // Otherwise, check if the next characters form a valid JSON number.\n const numberMatch = json.slice(ii).match(JSON_NUMBER_REGEX);\n return numberMatch ? numberMatch[0] : null;\n}\n\ntype BigIntValueObject = {\n // `$` implies 'this is a value object'.\n // `n` implies 'interpret the value as a bigint'.\n $n: string;\n};\n\nfunction wrapBigIntValueObject(value: string): string {\n return `{\"$n\":\"${value}\"}`;\n}\n\nfunction unwrapBigIntValueObject({ $n }: BigIntValueObject): bigint {\n if ($n.match(/[eE]/)) {\n const [units, exponent] = $n.split(/[eE]/);\n return BigInt(units) * BigInt(10) ** BigInt(exponent);\n }\n return BigInt($n);\n}\n\nfunction isBigIntValueObject(value: unknown): value is BigIntValueObject {\n return !!value && typeof value === 'object' && '$n' in value && typeof value.$n === 'string';\n}\n","import { RpcRequest } from './rpc-request';\n\nlet _nextMessageId = 0n;\nfunction getNextMessageId(): string {\n const id = _nextMessageId;\n _nextMessageId++;\n return id.toString();\n}\n\n/**\n * Returns a spec-compliant JSON RPC 2.0 message, given a method name and some params.\n *\n * Generates a new `id` on each call by incrementing a `bigint` and casting it to a string.\n */\nexport function createRpcMessage<TParams>(request: RpcRequest<TParams>) {\n return {\n id: getNextMessageId(),\n jsonrpc: '2.0',\n method: request.methodName,\n params: request.params,\n };\n}\n","/**\n * Transforms a value into a JSON string, whilst rendering bigints as large unsafe integers.\n */\nexport function stringifyJsonWithBigInts(value: unknown, space?: number | string): string {\n return unwrapBigIntValueObject(\n JSON.stringify(value, (_, v) => (typeof v === 'bigint' ? wrapBigIntValueObject(v) : v), space),\n );\n}\n\ntype BigIntValueObject = {\n // `$` implies 'this is a value object'.\n // `n` implies 'interpret the value as a bigint'.\n $n: string;\n};\n\nfunction wrapBigIntValueObject(value: bigint): BigIntValueObject {\n return { $n: `${value}` };\n}\n\nfunction unwrapBigIntValueObject(value: string): string {\n return value.replace(/\\{\\s*\"\\$n\"\\s*:\\s*\"(-?\\d+)\"\\s*\\}/g, '$1');\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/parse-json-with-bigints.ts","../src/rpc-message.ts","../src/stringify-json-with-bigints.ts"],"names":["unwrapBigIntValueObject","wrapBigIntValueObject"],"mappings":";AAKO,SAAS,qBAAqB,
|
|
1
|
+
{"version":3,"sources":["../src/parse-json-with-bigints.ts","../src/rpc-message.ts","../src/stringify-json-with-bigints.ts"],"names":["unwrapBigIntValueObject","wrapBigIntValueObject"],"mappings":"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","file":"index.native.mjs","sourcesContent":["/**\n * This function is a replacement for `JSON.parse` that can handle large\n * unsafe integers by parsing them as BigInts. It transforms every\n * numerical value into a BigInt without loss of precision.\n */\nexport function parseJsonWithBigInts(json: string): unknown {\n return JSON.parse(wrapIntegersInBigIntValueObject(json), (_, value) => {\n return isBigIntValueObject(value) ? unwrapBigIntValueObject(value) : value;\n });\n}\n\nfunction wrapIntegersInBigIntValueObject(json: string): string {\n const out = [];\n let inQuote = false;\n for (let ii = 0; ii < json.length; ii++) {\n let isEscaped = false;\n if (json[ii] === '\\\\') {\n out.push(json[ii++]);\n isEscaped = !isEscaped;\n }\n if (json[ii] === '\"') {\n out.push(json[ii]);\n if (!isEscaped) {\n inQuote = !inQuote;\n }\n continue;\n }\n if (!inQuote) {\n const consumedNumber = consumeNumber(json, ii);\n if (consumedNumber?.length) {\n ii += consumedNumber.length - 1;\n // Don't wrap numbers that contain a decimal point or a negative exponent.\n if (consumedNumber.match(/\\.|[eE]-/)) {\n out.push(consumedNumber);\n } else {\n out.push(wrapBigIntValueObject(consumedNumber));\n }\n continue;\n }\n }\n out.push(json[ii]);\n }\n\n return out.join('');\n}\n\nfunction consumeNumber(json: string, ii: number): string | null {\n /** @see https://stackoverflow.com/a/13340826/11440277 */\n const JSON_NUMBER_REGEX = /^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/;\n\n // Stop early if the first character isn't a digit or a minus sign.\n if (!json[ii]?.match(/[-\\d]/)) {\n return null;\n }\n\n // Otherwise, check if the next characters form a valid JSON number.\n const numberMatch = json.slice(ii).match(JSON_NUMBER_REGEX);\n return numberMatch ? numberMatch[0] : null;\n}\n\ntype BigIntValueObject = {\n // `$` implies 'this is a value object'.\n // `n` implies 'interpret the value as a bigint'.\n $n: string;\n};\n\nfunction wrapBigIntValueObject(value: string): string {\n return `{\"$n\":\"${value}\"}`;\n}\n\nfunction unwrapBigIntValueObject({ $n }: BigIntValueObject): bigint {\n if ($n.match(/[eE]/)) {\n const [units, exponent] = $n.split(/[eE]/);\n return BigInt(units) * BigInt(10) ** BigInt(exponent);\n }\n return BigInt($n);\n}\n\nfunction isBigIntValueObject(value: unknown): value is BigIntValueObject {\n return !!value && typeof value === 'object' && '$n' in value && typeof value.$n === 'string';\n}\n","import { RpcRequest } from './rpc-request';\n\nlet _nextMessageId = 0n;\nfunction getNextMessageId(): string {\n const id = _nextMessageId;\n _nextMessageId++;\n return id.toString();\n}\n\n/**\n * Returns a spec-compliant JSON RPC 2.0 message, given a method name and some params.\n *\n * Generates a new `id` on each call by incrementing a `bigint` and casting it to a string.\n */\nexport function createRpcMessage<TParams>(request: RpcRequest<TParams>) {\n return {\n id: getNextMessageId(),\n jsonrpc: '2.0',\n method: request.methodName,\n params: request.params,\n };\n}\n","/**\n * Transforms a value into a JSON string, whilst rendering bigints as large unsafe integers.\n */\nexport function stringifyJsonWithBigInts(value: unknown, space?: number | string): string {\n return unwrapBigIntValueObject(\n JSON.stringify(value, (_, v) => (typeof v === 'bigint' ? wrapBigIntValueObject(v) : v), space),\n );\n}\n\ntype BigIntValueObject = {\n // `$` implies 'this is a value object'.\n // `n` implies 'interpret the value as a bigint'.\n $n: string;\n};\n\nfunction wrapBigIntValueObject(value: bigint): BigIntValueObject {\n return { $n: `${value}` };\n}\n\nfunction unwrapBigIntValueObject(value: string): string {\n return value.replace(/\\{\\s*\"\\$n\"\\s*:\\s*\"(-?\\d+)\"\\s*\\}/g, '$1');\n}\n"]}
|
package/dist/index.node.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/parse-json-with-bigints.ts","../src/rpc-message.ts","../src/stringify-json-with-bigints.ts"],"names":["unwrapBigIntValueObject","wrapBigIntValueObject"],"mappings":";;;AAKO,SAAS,qBAAqB,
|
|
1
|
+
{"version":3,"sources":["../src/parse-json-with-bigints.ts","../src/rpc-message.ts","../src/stringify-json-with-bigints.ts"],"names":["unwrapBigIntValueObject","wrapBigIntValueObject"],"mappings":"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","file":"index.node.cjs","sourcesContent":["/**\n * This function is a replacement for `JSON.parse` that can handle large\n * unsafe integers by parsing them as BigInts. It transforms every\n * numerical value into a BigInt without loss of precision.\n */\nexport function parseJsonWithBigInts(json: string): unknown {\n return JSON.parse(wrapIntegersInBigIntValueObject(json), (_, value) => {\n return isBigIntValueObject(value) ? unwrapBigIntValueObject(value) : value;\n });\n}\n\nfunction wrapIntegersInBigIntValueObject(json: string): string {\n const out = [];\n let inQuote = false;\n for (let ii = 0; ii < json.length; ii++) {\n let isEscaped = false;\n if (json[ii] === '\\\\') {\n out.push(json[ii++]);\n isEscaped = !isEscaped;\n }\n if (json[ii] === '\"') {\n out.push(json[ii]);\n if (!isEscaped) {\n inQuote = !inQuote;\n }\n continue;\n }\n if (!inQuote) {\n const consumedNumber = consumeNumber(json, ii);\n if (consumedNumber?.length) {\n ii += consumedNumber.length - 1;\n // Don't wrap numbers that contain a decimal point or a negative exponent.\n if (consumedNumber.match(/\\.|[eE]-/)) {\n out.push(consumedNumber);\n } else {\n out.push(wrapBigIntValueObject(consumedNumber));\n }\n continue;\n }\n }\n out.push(json[ii]);\n }\n\n return out.join('');\n}\n\nfunction consumeNumber(json: string, ii: number): string | null {\n /** @see https://stackoverflow.com/a/13340826/11440277 */\n const JSON_NUMBER_REGEX = /^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/;\n\n // Stop early if the first character isn't a digit or a minus sign.\n if (!json[ii]?.match(/[-\\d]/)) {\n return null;\n }\n\n // Otherwise, check if the next characters form a valid JSON number.\n const numberMatch = json.slice(ii).match(JSON_NUMBER_REGEX);\n return numberMatch ? numberMatch[0] : null;\n}\n\ntype BigIntValueObject = {\n // `$` implies 'this is a value object'.\n // `n` implies 'interpret the value as a bigint'.\n $n: string;\n};\n\nfunction wrapBigIntValueObject(value: string): string {\n return `{\"$n\":\"${value}\"}`;\n}\n\nfunction unwrapBigIntValueObject({ $n }: BigIntValueObject): bigint {\n if ($n.match(/[eE]/)) {\n const [units, exponent] = $n.split(/[eE]/);\n return BigInt(units) * BigInt(10) ** BigInt(exponent);\n }\n return BigInt($n);\n}\n\nfunction isBigIntValueObject(value: unknown): value is BigIntValueObject {\n return !!value && typeof value === 'object' && '$n' in value && typeof value.$n === 'string';\n}\n","import { RpcRequest } from './rpc-request';\n\nlet _nextMessageId = 0n;\nfunction getNextMessageId(): string {\n const id = _nextMessageId;\n _nextMessageId++;\n return id.toString();\n}\n\n/**\n * Returns a spec-compliant JSON RPC 2.0 message, given a method name and some params.\n *\n * Generates a new `id` on each call by incrementing a `bigint` and casting it to a string.\n */\nexport function createRpcMessage<TParams>(request: RpcRequest<TParams>) {\n return {\n id: getNextMessageId(),\n jsonrpc: '2.0',\n method: request.methodName,\n params: request.params,\n };\n}\n","/**\n * Transforms a value into a JSON string, whilst rendering bigints as large unsafe integers.\n */\nexport function stringifyJsonWithBigInts(value: unknown, space?: number | string): string {\n return unwrapBigIntValueObject(\n JSON.stringify(value, (_, v) => (typeof v === 'bigint' ? wrapBigIntValueObject(v) : v), space),\n );\n}\n\ntype BigIntValueObject = {\n // `$` implies 'this is a value object'.\n // `n` implies 'interpret the value as a bigint'.\n $n: string;\n};\n\nfunction wrapBigIntValueObject(value: bigint): BigIntValueObject {\n return { $n: `${value}` };\n}\n\nfunction unwrapBigIntValueObject(value: string): string {\n return value.replace(/\\{\\s*\"\\$n\"\\s*:\\s*\"(-?\\d+)\"\\s*\\}/g, '$1');\n}\n"]}
|
package/dist/index.node.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/parse-json-with-bigints.ts","../src/rpc-message.ts","../src/stringify-json-with-bigints.ts"],"names":["unwrapBigIntValueObject","wrapBigIntValueObject"],"mappings":";AAKO,SAAS,qBAAqB,
|
|
1
|
+
{"version":3,"sources":["../src/parse-json-with-bigints.ts","../src/rpc-message.ts","../src/stringify-json-with-bigints.ts"],"names":["unwrapBigIntValueObject","wrapBigIntValueObject"],"mappings":"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","file":"index.node.mjs","sourcesContent":["/**\n * This function is a replacement for `JSON.parse` that can handle large\n * unsafe integers by parsing them as BigInts. It transforms every\n * numerical value into a BigInt without loss of precision.\n */\nexport function parseJsonWithBigInts(json: string): unknown {\n return JSON.parse(wrapIntegersInBigIntValueObject(json), (_, value) => {\n return isBigIntValueObject(value) ? unwrapBigIntValueObject(value) : value;\n });\n}\n\nfunction wrapIntegersInBigIntValueObject(json: string): string {\n const out = [];\n let inQuote = false;\n for (let ii = 0; ii < json.length; ii++) {\n let isEscaped = false;\n if (json[ii] === '\\\\') {\n out.push(json[ii++]);\n isEscaped = !isEscaped;\n }\n if (json[ii] === '\"') {\n out.push(json[ii]);\n if (!isEscaped) {\n inQuote = !inQuote;\n }\n continue;\n }\n if (!inQuote) {\n const consumedNumber = consumeNumber(json, ii);\n if (consumedNumber?.length) {\n ii += consumedNumber.length - 1;\n // Don't wrap numbers that contain a decimal point or a negative exponent.\n if (consumedNumber.match(/\\.|[eE]-/)) {\n out.push(consumedNumber);\n } else {\n out.push(wrapBigIntValueObject(consumedNumber));\n }\n continue;\n }\n }\n out.push(json[ii]);\n }\n\n return out.join('');\n}\n\nfunction consumeNumber(json: string, ii: number): string | null {\n /** @see https://stackoverflow.com/a/13340826/11440277 */\n const JSON_NUMBER_REGEX = /^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/;\n\n // Stop early if the first character isn't a digit or a minus sign.\n if (!json[ii]?.match(/[-\\d]/)) {\n return null;\n }\n\n // Otherwise, check if the next characters form a valid JSON number.\n const numberMatch = json.slice(ii).match(JSON_NUMBER_REGEX);\n return numberMatch ? numberMatch[0] : null;\n}\n\ntype BigIntValueObject = {\n // `$` implies 'this is a value object'.\n // `n` implies 'interpret the value as a bigint'.\n $n: string;\n};\n\nfunction wrapBigIntValueObject(value: string): string {\n return `{\"$n\":\"${value}\"}`;\n}\n\nfunction unwrapBigIntValueObject({ $n }: BigIntValueObject): bigint {\n if ($n.match(/[eE]/)) {\n const [units, exponent] = $n.split(/[eE]/);\n return BigInt(units) * BigInt(10) ** BigInt(exponent);\n }\n return BigInt($n);\n}\n\nfunction isBigIntValueObject(value: unknown): value is BigIntValueObject {\n return !!value && typeof value === 'object' && '$n' in value && typeof value.$n === 'string';\n}\n","import { RpcRequest } from './rpc-request';\n\nlet _nextMessageId = 0n;\nfunction getNextMessageId(): string {\n const id = _nextMessageId;\n _nextMessageId++;\n return id.toString();\n}\n\n/**\n * Returns a spec-compliant JSON RPC 2.0 message, given a method name and some params.\n *\n * Generates a new `id` on each call by incrementing a `bigint` and casting it to a string.\n */\nexport function createRpcMessage<TParams>(request: RpcRequest<TParams>) {\n return {\n id: getNextMessageId(),\n jsonrpc: '2.0',\n method: request.methodName,\n params: request.params,\n };\n}\n","/**\n * Transforms a value into a JSON string, whilst rendering bigints as large unsafe integers.\n */\nexport function stringifyJsonWithBigInts(value: unknown, space?: number | string): string {\n return unwrapBigIntValueObject(\n JSON.stringify(value, (_, v) => (typeof v === 'bigint' ? wrapBigIntValueObject(v) : v), space),\n );\n}\n\ntype BigIntValueObject = {\n // `$` implies 'this is a value object'.\n // `n` implies 'interpret the value as a bigint'.\n $n: string;\n};\n\nfunction wrapBigIntValueObject(value: bigint): BigIntValueObject {\n return { $n: `${value}` };\n}\n\nfunction unwrapBigIntValueObject(value: string): string {\n return value.replace(/\\{\\s*\"\\$n\"\\s*:\\s*\"(-?\\d+)\"\\s*\\}/g, '$1');\n}\n"]}
|
package/package.json
CHANGED