json-web3 1.0.1 → 1.0.2
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.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -30,7 +30,7 @@ module.exports = __toCommonJS(index_exports);
|
|
|
30
30
|
var BIGINT_TAG = "__@json.bigint__";
|
|
31
31
|
var TYPEDARRAY_TAG = "__@json.typedarray__";
|
|
32
32
|
var undefined = void 0;
|
|
33
|
-
var isUndefined = (value) => value === undefined;
|
|
33
|
+
var isUndefined = (value) => typeof value === "undefined";
|
|
34
34
|
var isString = (value) => typeof value === "string";
|
|
35
35
|
var hasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);
|
|
36
36
|
var isArray = (value) => Array.isArray(value);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils.ts"],"sourcesContent":["import {\n BIGINT_TAG,\n fromSerializable,\n isArray,\n isFunction,\n isTypedArrayPayload,\n toSerializable,\n TYPEDARRAY_TAG,\n undefined,\n} from './utils'\n\nconst RAW_JSON = JSON\ntype Replacer = ((this: any, key: string, value: any) => any) | Array<string | number> | null\ntype Reviver = ((this: any, key: string, value: any) => any) | null\n\nconst applyReplacer = (holder: any, key: string, value: any, replacer: Replacer): any => {\n if (isFunction(replacer)) {\n return replacer(key, value)\n }\n if (isArray(replacer)) {\n if (key === '') return value\n if (key === BIGINT_TAG) return value\n if (key === TYPEDARRAY_TAG) return value\n if (isTypedArrayPayload(holder)) return value\n if (isArray(holder)) return value\n return replacer.includes(key) ? value : undefined\n }\n return value\n}\n\nexport const stringify = (value: any, replacer: Replacer = null, space?: string | number): string =>\n RAW_JSON.stringify(\n value,\n function replacerFn(key, v) {\n const replaced = applyReplacer(this, key, v, replacer)\n return toSerializable(replaced)\n },\n space,\n )\n\nexport const parse = (text: string, reviver: Reviver = null): any =>\n RAW_JSON.parse(text, (key, v) => {\n const decoded = fromSerializable(v)\n return isFunction(reviver) ? reviver(key, decoded) : decoded\n })\n\nexport default {\n stringify,\n parse,\n}\n","export const BIGINT_TAG = '__@json.bigint__'\nexport const TYPEDARRAY_TAG = '__@json.typedarray__'\n\nexport const undefined = void 0\nexport const isUndefined = (value: any): value is undefined => value === undefined\nexport const isString = (value: any): value is string => typeof value === 'string'\nexport const hasOwnProperty = (obj: any, prop: string): boolean =>\n Object.prototype.hasOwnProperty.call(obj, prop)\nexport const isArray = (value: any): value is Array<any> => Array.isArray(value)\nexport const isObject = (value: any): value is Record<string, any> =>\n value !== null && typeof value === 'object' && !isArray(value)\nexport const isFunction = (value: any): value is Function => typeof value === 'function'\nexport const isBigInt = (value: any): value is bigint => typeof value === 'bigint'\nconst hasBuffer = (): boolean => typeof Buffer !== 'undefined'\n\nexport const isBuffer = (value: any): value is Buffer =>\n hasBuffer() && isFunction(Buffer.isBuffer) && Buffer.isBuffer(value)\nexport const isArrayBuffer = (value: any): value is ArrayBuffer =>\n !isUndefined(ArrayBuffer) && value instanceof ArrayBuffer\n\nexport const isTypedArray = (value: any): value is ArrayBufferView => {\n if (isUndefined(value)) return false\n if (!isUndefined(ArrayBuffer) && isFunction(ArrayBuffer.isView) && ArrayBuffer.isView(value)) {\n return Object.prototype.toString.call(value) !== '[object DataView]'\n }\n const tag = Object.prototype.toString.call(value)\n return tag.endsWith('Array]') && tag !== '[object Array]'\n}\n\nexport const getTypedArrayName = (value: any): string | null => {\n if (isUndefined(value)) return null\n const ctor = (value as any).constructor\n if (ctor && isString(ctor.name)) return ctor.name\n const tag = Object.prototype.toString.call(value)\n const match = /^\\[object (.+)\\]$/.exec(tag)\n return match ? match[1] : null\n}\n\nconst TYPEDARRAY_CTORS: Record<string, any> = {\n Uint8Array: !isUndefined(Uint8Array) ? Uint8Array : undefined,\n Uint8ClampedArray: !isUndefined(Uint8ClampedArray) ? Uint8ClampedArray : undefined,\n Uint16Array: !isUndefined(Uint16Array) ? Uint16Array : undefined,\n Uint32Array: !isUndefined(Uint32Array) ? Uint32Array : undefined,\n Int8Array: !isUndefined(Int8Array) ? Int8Array : undefined,\n Int16Array: !isUndefined(Int16Array) ? Int16Array : undefined,\n Int32Array: !isUndefined(Int32Array) ? Int32Array : undefined,\n Float32Array: !isUndefined(Float32Array) ? Float32Array : undefined,\n Float64Array: !isUndefined(Float64Array) ? Float64Array : undefined,\n BigInt64Array: !isUndefined(BigInt64Array) ? BigInt64Array : undefined,\n BigUint64Array: !isUndefined(BigUint64Array) ? BigUint64Array : undefined,\n}\n\nexport const toHex = (value: Uint8Array): string => {\n let out = '0x'\n for (const byte of value) {\n out += byte.toString(16).padStart(2, '0')\n }\n return out\n}\n\nexport const fromHex = (hex: string): Uint8Array => {\n const normalized = hex.startsWith('0x') ? hex.slice(2) : hex\n if (normalized.length % 2 !== 0) {\n throw new Error('Invalid hex string for bytes')\n }\n\n if (hasBuffer()) {\n return Uint8Array.from(Buffer.from(normalized, 'hex'))\n }\n\n const out = new Uint8Array(normalized.length / 2)\n for (let i = 0; i < normalized.length; i += 2) {\n out[i / 2] = Number.parseInt(normalized.slice(i, i + 2), 16)\n }\n return out\n}\n\nexport const toSerializable = (value: any): any => {\n if (isBigInt(value)) {\n return { [BIGINT_TAG]: value.toString() }\n }\n\n if (isTypedArray(value)) {\n const type = getTypedArrayName(value)\n if (type && TYPEDARRAY_CTORS[type]) {\n const bytes = new Uint8Array(value.buffer, value.byteOffset, value.byteLength)\n return { [TYPEDARRAY_TAG]: { type, bytes: toHex(bytes) } }\n }\n }\n\n if (isArrayBuffer(value)) {\n return { [TYPEDARRAY_TAG]: { type: 'Uint8Array', bytes: toHex(new Uint8Array(value)) } }\n }\n\n if (\n value &&\n isObject(value) &&\n value.type === 'Buffer' &&\n isArray(value.data) &&\n Object.keys(value).length === 2 &&\n value.data.every((entry: any) => Number.isInteger(entry) && entry >= 0 && entry <= 255)\n ) {\n return { [TYPEDARRAY_TAG]: { type: 'Uint8Array', bytes: toHex(Uint8Array.from(value.data)) } }\n }\n\n return value\n}\n\nexport const fromSerializable = (value: any): any => {\n if (value && isObject(value)) {\n if (hasOwnProperty(value, BIGINT_TAG)) {\n return BigInt(value[BIGINT_TAG])\n }\n if (hasOwnProperty(value, TYPEDARRAY_TAG)) {\n const payload = value[TYPEDARRAY_TAG]\n if (!payload || !isObject(payload) || !isString(payload.type) || !isString(payload.bytes)) {\n throw new Error('Invalid typed array payload')\n }\n const bytes = fromHex(payload.bytes)\n const ctor = TYPEDARRAY_CTORS[payload.type]\n if (!ctor) return bytes\n const buffer = new ArrayBuffer(bytes.byteLength)\n new Uint8Array(buffer).set(bytes)\n return new ctor(buffer)\n }\n if (\n value.type === 'Buffer' &&\n isArray(value.data) &&\n Object.keys(value).length === 2 &&\n value.data.every((entry: any) => Number.isInteger(entry) && entry >= 0 && entry <= 255)\n ) {\n return Uint8Array.from(value.data)\n }\n }\n return value\n}\n\nexport const isTypedArrayPayload = (value: any): boolean =>\n isObject(value) &&\n isString(value.type) &&\n isString(value.bytes) &&\n Object.keys(value).length === 2\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils.ts"],"sourcesContent":["import {\n BIGINT_TAG,\n fromSerializable,\n isArray,\n isFunction,\n isTypedArrayPayload,\n toSerializable,\n TYPEDARRAY_TAG,\n undefined,\n} from './utils'\n\nconst RAW_JSON = JSON\ntype Replacer = ((this: any, key: string, value: any) => any) | Array<string | number> | null\ntype Reviver = ((this: any, key: string, value: any) => any) | null\n\nconst applyReplacer = (holder: any, key: string, value: any, replacer: Replacer): any => {\n if (isFunction(replacer)) {\n return replacer(key, value)\n }\n if (isArray(replacer)) {\n if (key === '') return value\n if (key === BIGINT_TAG) return value\n if (key === TYPEDARRAY_TAG) return value\n if (isTypedArrayPayload(holder)) return value\n if (isArray(holder)) return value\n return replacer.includes(key) ? value : undefined\n }\n return value\n}\n\nexport const stringify = (value: any, replacer: Replacer = null, space?: string | number): string =>\n RAW_JSON.stringify(\n value,\n function replacerFn(key, v) {\n const replaced = applyReplacer(this, key, v, replacer)\n return toSerializable(replaced)\n },\n space,\n )\n\nexport const parse = (text: string, reviver: Reviver = null): any =>\n RAW_JSON.parse(text, (key, v) => {\n const decoded = fromSerializable(v)\n return isFunction(reviver) ? reviver(key, decoded) : decoded\n })\n\nexport default {\n stringify,\n parse,\n}\n","export const BIGINT_TAG = '__@json.bigint__'\nexport const TYPEDARRAY_TAG = '__@json.typedarray__'\n\nexport const undefined = void 0\nexport const isUndefined = (value: any): value is undefined => typeof value === 'undefined'\nexport const isString = (value: any): value is string => typeof value === 'string'\nexport const hasOwnProperty = (obj: any, prop: string): boolean =>\n Object.prototype.hasOwnProperty.call(obj, prop)\nexport const isArray = (value: any): value is Array<any> => Array.isArray(value)\nexport const isObject = (value: any): value is Record<string, any> =>\n value !== null && typeof value === 'object' && !isArray(value)\nexport const isFunction = (value: any): value is Function => typeof value === 'function'\nexport const isBigInt = (value: any): value is bigint => typeof value === 'bigint'\nconst hasBuffer = (): boolean => typeof Buffer !== 'undefined'\n\nexport const isBuffer = (value: any): value is Buffer =>\n hasBuffer() && isFunction(Buffer.isBuffer) && Buffer.isBuffer(value)\nexport const isArrayBuffer = (value: any): value is ArrayBuffer =>\n !isUndefined(ArrayBuffer) && value instanceof ArrayBuffer\n\nexport const isTypedArray = (value: any): value is ArrayBufferView => {\n if (isUndefined(value)) return false\n if (!isUndefined(ArrayBuffer) && isFunction(ArrayBuffer.isView) && ArrayBuffer.isView(value)) {\n return Object.prototype.toString.call(value) !== '[object DataView]'\n }\n const tag = Object.prototype.toString.call(value)\n return tag.endsWith('Array]') && tag !== '[object Array]'\n}\n\nexport const getTypedArrayName = (value: any): string | null => {\n if (isUndefined(value)) return null\n const ctor = (value as any).constructor\n if (ctor && isString(ctor.name)) return ctor.name\n const tag = Object.prototype.toString.call(value)\n const match = /^\\[object (.+)\\]$/.exec(tag)\n return match ? match[1] : null\n}\n\nconst TYPEDARRAY_CTORS: Record<string, any> = {\n Uint8Array: !isUndefined(Uint8Array) ? Uint8Array : undefined,\n Uint8ClampedArray: !isUndefined(Uint8ClampedArray) ? Uint8ClampedArray : undefined,\n Uint16Array: !isUndefined(Uint16Array) ? Uint16Array : undefined,\n Uint32Array: !isUndefined(Uint32Array) ? Uint32Array : undefined,\n Int8Array: !isUndefined(Int8Array) ? Int8Array : undefined,\n Int16Array: !isUndefined(Int16Array) ? Int16Array : undefined,\n Int32Array: !isUndefined(Int32Array) ? Int32Array : undefined,\n Float32Array: !isUndefined(Float32Array) ? Float32Array : undefined,\n Float64Array: !isUndefined(Float64Array) ? Float64Array : undefined,\n BigInt64Array: !isUndefined(BigInt64Array) ? BigInt64Array : undefined,\n BigUint64Array: !isUndefined(BigUint64Array) ? BigUint64Array : undefined,\n}\n\nexport const toHex = (value: Uint8Array): string => {\n let out = '0x'\n for (const byte of value) {\n out += byte.toString(16).padStart(2, '0')\n }\n return out\n}\n\nexport const fromHex = (hex: string): Uint8Array => {\n const normalized = hex.startsWith('0x') ? hex.slice(2) : hex\n if (normalized.length % 2 !== 0) {\n throw new Error('Invalid hex string for bytes')\n }\n\n if (hasBuffer()) {\n return Uint8Array.from(Buffer.from(normalized, 'hex'))\n }\n\n const out = new Uint8Array(normalized.length / 2)\n for (let i = 0; i < normalized.length; i += 2) {\n out[i / 2] = Number.parseInt(normalized.slice(i, i + 2), 16)\n }\n return out\n}\n\nexport const toSerializable = (value: any): any => {\n if (isBigInt(value)) {\n return { [BIGINT_TAG]: value.toString() }\n }\n\n if (isTypedArray(value)) {\n const type = getTypedArrayName(value)\n if (type && TYPEDARRAY_CTORS[type]) {\n const bytes = new Uint8Array(value.buffer, value.byteOffset, value.byteLength)\n return { [TYPEDARRAY_TAG]: { type, bytes: toHex(bytes) } }\n }\n }\n\n if (isArrayBuffer(value)) {\n return { [TYPEDARRAY_TAG]: { type: 'Uint8Array', bytes: toHex(new Uint8Array(value)) } }\n }\n\n if (\n value &&\n isObject(value) &&\n value.type === 'Buffer' &&\n isArray(value.data) &&\n Object.keys(value).length === 2 &&\n value.data.every((entry: any) => Number.isInteger(entry) && entry >= 0 && entry <= 255)\n ) {\n return { [TYPEDARRAY_TAG]: { type: 'Uint8Array', bytes: toHex(Uint8Array.from(value.data)) } }\n }\n\n return value\n}\n\nexport const fromSerializable = (value: any): any => {\n if (value && isObject(value)) {\n if (hasOwnProperty(value, BIGINT_TAG)) {\n return BigInt(value[BIGINT_TAG])\n }\n if (hasOwnProperty(value, TYPEDARRAY_TAG)) {\n const payload = value[TYPEDARRAY_TAG]\n if (!payload || !isObject(payload) || !isString(payload.type) || !isString(payload.bytes)) {\n throw new Error('Invalid typed array payload')\n }\n const bytes = fromHex(payload.bytes)\n const ctor = TYPEDARRAY_CTORS[payload.type]\n if (!ctor) return bytes\n const buffer = new ArrayBuffer(bytes.byteLength)\n new Uint8Array(buffer).set(bytes)\n return new ctor(buffer)\n }\n if (\n value.type === 'Buffer' &&\n isArray(value.data) &&\n Object.keys(value).length === 2 &&\n value.data.every((entry: any) => Number.isInteger(entry) && entry >= 0 && entry <= 255)\n ) {\n return Uint8Array.from(value.data)\n }\n }\n return value\n}\n\nexport const isTypedArrayPayload = (value: any): boolean =>\n isObject(value) &&\n isString(value.type) &&\n isString(value.bytes) &&\n Object.keys(value).length === 2\n"],"mappings":"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","names":[]}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
var BIGINT_TAG = "__@json.bigint__";
|
|
3
3
|
var TYPEDARRAY_TAG = "__@json.typedarray__";
|
|
4
4
|
var undefined = void 0;
|
|
5
|
-
var isUndefined = (value) => value === undefined;
|
|
5
|
+
var isUndefined = (value) => typeof value === "undefined";
|
|
6
6
|
var isString = (value) => typeof value === "string";
|
|
7
7
|
var hasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);
|
|
8
8
|
var isArray = (value) => Array.isArray(value);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.ts","../src/index.ts"],"sourcesContent":["export const BIGINT_TAG = '__@json.bigint__'\nexport const TYPEDARRAY_TAG = '__@json.typedarray__'\n\nexport const undefined = void 0\nexport const isUndefined = (value: any): value is undefined => value === undefined\nexport const isString = (value: any): value is string => typeof value === 'string'\nexport const hasOwnProperty = (obj: any, prop: string): boolean =>\n Object.prototype.hasOwnProperty.call(obj, prop)\nexport const isArray = (value: any): value is Array<any> => Array.isArray(value)\nexport const isObject = (value: any): value is Record<string, any> =>\n value !== null && typeof value === 'object' && !isArray(value)\nexport const isFunction = (value: any): value is Function => typeof value === 'function'\nexport const isBigInt = (value: any): value is bigint => typeof value === 'bigint'\nconst hasBuffer = (): boolean => typeof Buffer !== 'undefined'\n\nexport const isBuffer = (value: any): value is Buffer =>\n hasBuffer() && isFunction(Buffer.isBuffer) && Buffer.isBuffer(value)\nexport const isArrayBuffer = (value: any): value is ArrayBuffer =>\n !isUndefined(ArrayBuffer) && value instanceof ArrayBuffer\n\nexport const isTypedArray = (value: any): value is ArrayBufferView => {\n if (isUndefined(value)) return false\n if (!isUndefined(ArrayBuffer) && isFunction(ArrayBuffer.isView) && ArrayBuffer.isView(value)) {\n return Object.prototype.toString.call(value) !== '[object DataView]'\n }\n const tag = Object.prototype.toString.call(value)\n return tag.endsWith('Array]') && tag !== '[object Array]'\n}\n\nexport const getTypedArrayName = (value: any): string | null => {\n if (isUndefined(value)) return null\n const ctor = (value as any).constructor\n if (ctor && isString(ctor.name)) return ctor.name\n const tag = Object.prototype.toString.call(value)\n const match = /^\\[object (.+)\\]$/.exec(tag)\n return match ? match[1] : null\n}\n\nconst TYPEDARRAY_CTORS: Record<string, any> = {\n Uint8Array: !isUndefined(Uint8Array) ? Uint8Array : undefined,\n Uint8ClampedArray: !isUndefined(Uint8ClampedArray) ? Uint8ClampedArray : undefined,\n Uint16Array: !isUndefined(Uint16Array) ? Uint16Array : undefined,\n Uint32Array: !isUndefined(Uint32Array) ? Uint32Array : undefined,\n Int8Array: !isUndefined(Int8Array) ? Int8Array : undefined,\n Int16Array: !isUndefined(Int16Array) ? Int16Array : undefined,\n Int32Array: !isUndefined(Int32Array) ? Int32Array : undefined,\n Float32Array: !isUndefined(Float32Array) ? Float32Array : undefined,\n Float64Array: !isUndefined(Float64Array) ? Float64Array : undefined,\n BigInt64Array: !isUndefined(BigInt64Array) ? BigInt64Array : undefined,\n BigUint64Array: !isUndefined(BigUint64Array) ? BigUint64Array : undefined,\n}\n\nexport const toHex = (value: Uint8Array): string => {\n let out = '0x'\n for (const byte of value) {\n out += byte.toString(16).padStart(2, '0')\n }\n return out\n}\n\nexport const fromHex = (hex: string): Uint8Array => {\n const normalized = hex.startsWith('0x') ? hex.slice(2) : hex\n if (normalized.length % 2 !== 0) {\n throw new Error('Invalid hex string for bytes')\n }\n\n if (hasBuffer()) {\n return Uint8Array.from(Buffer.from(normalized, 'hex'))\n }\n\n const out = new Uint8Array(normalized.length / 2)\n for (let i = 0; i < normalized.length; i += 2) {\n out[i / 2] = Number.parseInt(normalized.slice(i, i + 2), 16)\n }\n return out\n}\n\nexport const toSerializable = (value: any): any => {\n if (isBigInt(value)) {\n return { [BIGINT_TAG]: value.toString() }\n }\n\n if (isTypedArray(value)) {\n const type = getTypedArrayName(value)\n if (type && TYPEDARRAY_CTORS[type]) {\n const bytes = new Uint8Array(value.buffer, value.byteOffset, value.byteLength)\n return { [TYPEDARRAY_TAG]: { type, bytes: toHex(bytes) } }\n }\n }\n\n if (isArrayBuffer(value)) {\n return { [TYPEDARRAY_TAG]: { type: 'Uint8Array', bytes: toHex(new Uint8Array(value)) } }\n }\n\n if (\n value &&\n isObject(value) &&\n value.type === 'Buffer' &&\n isArray(value.data) &&\n Object.keys(value).length === 2 &&\n value.data.every((entry: any) => Number.isInteger(entry) && entry >= 0 && entry <= 255)\n ) {\n return { [TYPEDARRAY_TAG]: { type: 'Uint8Array', bytes: toHex(Uint8Array.from(value.data)) } }\n }\n\n return value\n}\n\nexport const fromSerializable = (value: any): any => {\n if (value && isObject(value)) {\n if (hasOwnProperty(value, BIGINT_TAG)) {\n return BigInt(value[BIGINT_TAG])\n }\n if (hasOwnProperty(value, TYPEDARRAY_TAG)) {\n const payload = value[TYPEDARRAY_TAG]\n if (!payload || !isObject(payload) || !isString(payload.type) || !isString(payload.bytes)) {\n throw new Error('Invalid typed array payload')\n }\n const bytes = fromHex(payload.bytes)\n const ctor = TYPEDARRAY_CTORS[payload.type]\n if (!ctor) return bytes\n const buffer = new ArrayBuffer(bytes.byteLength)\n new Uint8Array(buffer).set(bytes)\n return new ctor(buffer)\n }\n if (\n value.type === 'Buffer' &&\n isArray(value.data) &&\n Object.keys(value).length === 2 &&\n value.data.every((entry: any) => Number.isInteger(entry) && entry >= 0 && entry <= 255)\n ) {\n return Uint8Array.from(value.data)\n }\n }\n return value\n}\n\nexport const isTypedArrayPayload = (value: any): boolean =>\n isObject(value) &&\n isString(value.type) &&\n isString(value.bytes) &&\n Object.keys(value).length === 2\n","import {\n BIGINT_TAG,\n fromSerializable,\n isArray,\n isFunction,\n isTypedArrayPayload,\n toSerializable,\n TYPEDARRAY_TAG,\n undefined,\n} from './utils'\n\nconst RAW_JSON = JSON\ntype Replacer = ((this: any, key: string, value: any) => any) | Array<string | number> | null\ntype Reviver = ((this: any, key: string, value: any) => any) | null\n\nconst applyReplacer = (holder: any, key: string, value: any, replacer: Replacer): any => {\n if (isFunction(replacer)) {\n return replacer(key, value)\n }\n if (isArray(replacer)) {\n if (key === '') return value\n if (key === BIGINT_TAG) return value\n if (key === TYPEDARRAY_TAG) return value\n if (isTypedArrayPayload(holder)) return value\n if (isArray(holder)) return value\n return replacer.includes(key) ? value : undefined\n }\n return value\n}\n\nexport const stringify = (value: any, replacer: Replacer = null, space?: string | number): string =>\n RAW_JSON.stringify(\n value,\n function replacerFn(key, v) {\n const replaced = applyReplacer(this, key, v, replacer)\n return toSerializable(replaced)\n },\n space,\n )\n\nexport const parse = (text: string, reviver: Reviver = null): any =>\n RAW_JSON.parse(text, (key, v) => {\n const decoded = fromSerializable(v)\n return isFunction(reviver) ? reviver(key, decoded) : decoded\n })\n\nexport default {\n stringify,\n parse,\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/index.ts"],"sourcesContent":["export const BIGINT_TAG = '__@json.bigint__'\nexport const TYPEDARRAY_TAG = '__@json.typedarray__'\n\nexport const undefined = void 0\nexport const isUndefined = (value: any): value is undefined => typeof value === 'undefined'\nexport const isString = (value: any): value is string => typeof value === 'string'\nexport const hasOwnProperty = (obj: any, prop: string): boolean =>\n Object.prototype.hasOwnProperty.call(obj, prop)\nexport const isArray = (value: any): value is Array<any> => Array.isArray(value)\nexport const isObject = (value: any): value is Record<string, any> =>\n value !== null && typeof value === 'object' && !isArray(value)\nexport const isFunction = (value: any): value is Function => typeof value === 'function'\nexport const isBigInt = (value: any): value is bigint => typeof value === 'bigint'\nconst hasBuffer = (): boolean => typeof Buffer !== 'undefined'\n\nexport const isBuffer = (value: any): value is Buffer =>\n hasBuffer() && isFunction(Buffer.isBuffer) && Buffer.isBuffer(value)\nexport const isArrayBuffer = (value: any): value is ArrayBuffer =>\n !isUndefined(ArrayBuffer) && value instanceof ArrayBuffer\n\nexport const isTypedArray = (value: any): value is ArrayBufferView => {\n if (isUndefined(value)) return false\n if (!isUndefined(ArrayBuffer) && isFunction(ArrayBuffer.isView) && ArrayBuffer.isView(value)) {\n return Object.prototype.toString.call(value) !== '[object DataView]'\n }\n const tag = Object.prototype.toString.call(value)\n return tag.endsWith('Array]') && tag !== '[object Array]'\n}\n\nexport const getTypedArrayName = (value: any): string | null => {\n if (isUndefined(value)) return null\n const ctor = (value as any).constructor\n if (ctor && isString(ctor.name)) return ctor.name\n const tag = Object.prototype.toString.call(value)\n const match = /^\\[object (.+)\\]$/.exec(tag)\n return match ? match[1] : null\n}\n\nconst TYPEDARRAY_CTORS: Record<string, any> = {\n Uint8Array: !isUndefined(Uint8Array) ? Uint8Array : undefined,\n Uint8ClampedArray: !isUndefined(Uint8ClampedArray) ? Uint8ClampedArray : undefined,\n Uint16Array: !isUndefined(Uint16Array) ? Uint16Array : undefined,\n Uint32Array: !isUndefined(Uint32Array) ? Uint32Array : undefined,\n Int8Array: !isUndefined(Int8Array) ? Int8Array : undefined,\n Int16Array: !isUndefined(Int16Array) ? Int16Array : undefined,\n Int32Array: !isUndefined(Int32Array) ? Int32Array : undefined,\n Float32Array: !isUndefined(Float32Array) ? Float32Array : undefined,\n Float64Array: !isUndefined(Float64Array) ? Float64Array : undefined,\n BigInt64Array: !isUndefined(BigInt64Array) ? BigInt64Array : undefined,\n BigUint64Array: !isUndefined(BigUint64Array) ? BigUint64Array : undefined,\n}\n\nexport const toHex = (value: Uint8Array): string => {\n let out = '0x'\n for (const byte of value) {\n out += byte.toString(16).padStart(2, '0')\n }\n return out\n}\n\nexport const fromHex = (hex: string): Uint8Array => {\n const normalized = hex.startsWith('0x') ? hex.slice(2) : hex\n if (normalized.length % 2 !== 0) {\n throw new Error('Invalid hex string for bytes')\n }\n\n if (hasBuffer()) {\n return Uint8Array.from(Buffer.from(normalized, 'hex'))\n }\n\n const out = new Uint8Array(normalized.length / 2)\n for (let i = 0; i < normalized.length; i += 2) {\n out[i / 2] = Number.parseInt(normalized.slice(i, i + 2), 16)\n }\n return out\n}\n\nexport const toSerializable = (value: any): any => {\n if (isBigInt(value)) {\n return { [BIGINT_TAG]: value.toString() }\n }\n\n if (isTypedArray(value)) {\n const type = getTypedArrayName(value)\n if (type && TYPEDARRAY_CTORS[type]) {\n const bytes = new Uint8Array(value.buffer, value.byteOffset, value.byteLength)\n return { [TYPEDARRAY_TAG]: { type, bytes: toHex(bytes) } }\n }\n }\n\n if (isArrayBuffer(value)) {\n return { [TYPEDARRAY_TAG]: { type: 'Uint8Array', bytes: toHex(new Uint8Array(value)) } }\n }\n\n if (\n value &&\n isObject(value) &&\n value.type === 'Buffer' &&\n isArray(value.data) &&\n Object.keys(value).length === 2 &&\n value.data.every((entry: any) => Number.isInteger(entry) && entry >= 0 && entry <= 255)\n ) {\n return { [TYPEDARRAY_TAG]: { type: 'Uint8Array', bytes: toHex(Uint8Array.from(value.data)) } }\n }\n\n return value\n}\n\nexport const fromSerializable = (value: any): any => {\n if (value && isObject(value)) {\n if (hasOwnProperty(value, BIGINT_TAG)) {\n return BigInt(value[BIGINT_TAG])\n }\n if (hasOwnProperty(value, TYPEDARRAY_TAG)) {\n const payload = value[TYPEDARRAY_TAG]\n if (!payload || !isObject(payload) || !isString(payload.type) || !isString(payload.bytes)) {\n throw new Error('Invalid typed array payload')\n }\n const bytes = fromHex(payload.bytes)\n const ctor = TYPEDARRAY_CTORS[payload.type]\n if (!ctor) return bytes\n const buffer = new ArrayBuffer(bytes.byteLength)\n new Uint8Array(buffer).set(bytes)\n return new ctor(buffer)\n }\n if (\n value.type === 'Buffer' &&\n isArray(value.data) &&\n Object.keys(value).length === 2 &&\n value.data.every((entry: any) => Number.isInteger(entry) && entry >= 0 && entry <= 255)\n ) {\n return Uint8Array.from(value.data)\n }\n }\n return value\n}\n\nexport const isTypedArrayPayload = (value: any): boolean =>\n isObject(value) &&\n isString(value.type) &&\n isString(value.bytes) &&\n Object.keys(value).length === 2\n","import {\n BIGINT_TAG,\n fromSerializable,\n isArray,\n isFunction,\n isTypedArrayPayload,\n toSerializable,\n TYPEDARRAY_TAG,\n undefined,\n} from './utils'\n\nconst RAW_JSON = JSON\ntype Replacer = ((this: any, key: string, value: any) => any) | Array<string | number> | null\ntype Reviver = ((this: any, key: string, value: any) => any) | null\n\nconst applyReplacer = (holder: any, key: string, value: any, replacer: Replacer): any => {\n if (isFunction(replacer)) {\n return replacer(key, value)\n }\n if (isArray(replacer)) {\n if (key === '') return value\n if (key === BIGINT_TAG) return value\n if (key === TYPEDARRAY_TAG) return value\n if (isTypedArrayPayload(holder)) return value\n if (isArray(holder)) return value\n return replacer.includes(key) ? value : undefined\n }\n return value\n}\n\nexport const stringify = (value: any, replacer: Replacer = null, space?: string | number): string =>\n RAW_JSON.stringify(\n value,\n function replacerFn(key, v) {\n const replaced = applyReplacer(this, key, v, replacer)\n return toSerializable(replaced)\n },\n space,\n )\n\nexport const parse = (text: string, reviver: Reviver = null): any =>\n RAW_JSON.parse(text, (key, v) => {\n const decoded = fromSerializable(v)\n return isFunction(reviver) ? reviver(key, decoded) : decoded\n })\n\nexport default {\n stringify,\n parse,\n}\n"],"mappings":"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","names":[]}
|