@solana/fast-stable-stringify
Version:
Deterministic stringification for when performance and bundle size matters
1 lines • 6.79 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.native.mjs","sourcesContent":["/**\n * This project is a fork of [nickyout/fast-stable-stringify](https://github.com/nickyout/fast-stable-stringify)\n *\n * The most popular repository providing this feature is [substack's json-stable-stringify](https://www.npmjs.com/package/json-stable-stringify). The intent of this library is to provide a faster alternative for when performance is more important than features. It assumes you provide basic javascript values without circular references, and returns a non-indented string.\n *\n * Just like substack's, it:\n *\n * - handles all variations of all basic javascript values (number, string, boolean, array, object, null, Date, BigInt)\n * - handles undefined _and_ function in the same way as `JSON.stringify`\n * - **does not support ie8 (and below) with complete certainty**.\n *\n * Unlike substack's, it:\n *\n * - does not implement the 'replacer' or 'space' arguments of the JSON.stringify method\n * - does not check for circular references\n *\n * @example\n * ```js\n * import stringify from '@solana/fast-stable-stringify';\n * stringify({ d: 0, c: 1, a: 2, b: 3, e: 4 }); // '{\"a\":2,\"b\":3,\"c\":1,\"d\":0,\"e\":4}'\n * ```\n *\n * @packageDocumentation\n */\nconst objToString = Object.prototype.toString;\nconst objKeys =\n Object.keys ||\n function (obj) {\n const keys = [];\n for (const name in obj) {\n keys.push(name);\n }\n return keys;\n };\n\nfunction stringify(val: unknown, isArrayProp: boolean) {\n let i, max, str, keys, key, propVal, toStr;\n if (val === true) {\n return 'true';\n }\n if (val === false) {\n return 'false';\n }\n switch (typeof val) {\n case 'object':\n if (val === null) {\n return null;\n } else if ('toJSON' in val && typeof val.toJSON === 'function') {\n return stringify(val.toJSON(), isArrayProp);\n } else {\n toStr = objToString.call(val);\n if (toStr === '[object Array]') {\n str = '[';\n max = (val as unknown[]).length - 1;\n for (i = 0; i < max; i++) {\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n str += stringify((val as unknown[])[i], true) + ',';\n }\n if (max > -1) {\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n str += stringify((val as unknown[])[i], true);\n }\n return str + ']';\n } else if (toStr === '[object Object]') {\n // only object is left\n keys = objKeys(val).sort();\n max = keys.length;\n str = '';\n i = 0;\n while (i < max) {\n key = keys[i];\n propVal = stringify((val as Record<typeof key, unknown>)[key], false);\n if (propVal !== undefined) {\n if (str) {\n str += ',';\n }\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n str += JSON.stringify(key) + ':' + propVal;\n }\n i++;\n }\n return '{' + str + '}';\n } else {\n return JSON.stringify(val);\n }\n }\n case 'function':\n case 'undefined':\n return isArrayProp ? null : undefined;\n case 'bigint':\n return `${val.toString()}n`;\n case 'string':\n return JSON.stringify(val);\n default:\n return isFinite(val as number) ? val : null;\n }\n}\n\nexport default function (\n val:\n | Function // eslint-disable-line @typescript-eslint/no-unsafe-function-type\n | undefined,\n): undefined;\nexport default function (val: unknown): string;\nexport default function (val: unknown): string | undefined {\n const returnVal = stringify(val, false);\n if (returnVal !== undefined) {\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n return '' + returnVal;\n }\n}\n"]}