@relative-ci/core 5.4.0 → 6.0.0-beta.3
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/lib/cjs/__/@actions/http-client/lib/index.js +1 -1
- package/lib/cjs/__/@octokit/core/dist-src/version.js +1 -1
- package/lib/cjs/__/@octokit/core/dist-src/version.js.map +1 -1
- package/lib/cjs/__/@octokit/graphql/dist-bundle/index.js +4 -0
- package/lib/cjs/__/@octokit/graphql/dist-bundle/index.js.map +1 -1
- package/lib/cjs/__/@octokit/request/dist-bundle/index.js +10 -6
- package/lib/cjs/__/@octokit/request/dist-bundle/index.js.map +1 -1
- package/lib/cjs/__/content-type/dist/index.js +183 -0
- package/lib/cjs/__/content-type/dist/index.js.map +1 -0
- package/lib/cjs/__/cross-spawn/index.js +1 -1
- package/lib/cjs/__/{execa → env-ci/__/execa}/index.js +1 -1
- package/lib/cjs/__/env-ci/__/execa/index.js.map +1 -0
- package/lib/cjs/__/env-ci/__/execa/lib/command.js.map +1 -0
- package/lib/cjs/__/env-ci/__/execa/lib/error.js.map +1 -0
- package/lib/cjs/__/env-ci/__/execa/lib/promise.js.map +1 -0
- package/lib/cjs/__/env-ci/__/execa/lib/stdio.js.map +1 -0
- package/lib/cjs/__/{execa → env-ci/__/execa}/lib/stream.js +1 -1
- package/lib/cjs/__/env-ci/__/execa/lib/stream.js.map +1 -0
- package/lib/cjs/__/env-ci/__/execa/lib/verbose.js.map +1 -0
- package/lib/cjs/__/env-ci/__/get-stream/source/array-buffer.js.map +1 -0
- package/lib/cjs/__/env-ci/__/human-signals/build/src/core.js.map +1 -0
- package/lib/cjs/__/env-ci/__/human-signals/build/src/main.js.map +1 -0
- package/lib/cjs/__/env-ci/__/human-signals/build/src/realtime.js.map +1 -0
- package/lib/cjs/__/env-ci/__/human-signals/build/src/signals.js.map +1 -0
- package/lib/cjs/__/env-ci/__/is-stream/index.js.map +1 -0
- package/lib/cjs/__/{npm-run-path → env-ci/__/npm-run-path}/index.js +1 -1
- package/lib/cjs/__/env-ci/__/npm-run-path/index.js.map +1 -0
- package/lib/cjs/__/env-ci/__/path-key/index.js.map +1 -0
- package/lib/cjs/__/env-ci/__/signal-exit/dist/mjs/index.js.map +1 -0
- package/lib/cjs/__/env-ci/__/signal-exit/dist/mjs/signals.js.map +1 -0
- package/lib/cjs/__/env-ci/__/strip-final-newline/index.js.map +1 -0
- package/lib/cjs/__/env-ci/lib/git.js +1 -1
- package/lib/cjs/__/json-with-bigint/json-with-bigint.js +419 -60
- package/lib/cjs/__/json-with-bigint/json-with-bigint.js.map +1 -1
- package/lib/cjs/__/undici/lib/core/request.js +12 -1
- package/lib/cjs/__/undici/lib/core/request.js.map +1 -1
- package/lib/cjs/__/undici/lib/dispatcher/agent.js +0 -1
- package/lib/cjs/__/undici/lib/dispatcher/agent.js.map +1 -1
- package/lib/cjs/__/undici/lib/dispatcher/client-h1.js +151 -25
- package/lib/cjs/__/undici/lib/dispatcher/client-h1.js.map +1 -1
- package/lib/cjs/__/undici/lib/dispatcher/dispatcher-base.js +1 -0
- package/lib/cjs/__/undici/lib/dispatcher/dispatcher-base.js.map +1 -1
- package/lib/cjs/__/undici/lib/handler/retry-handler.js +34 -0
- package/lib/cjs/__/undici/lib/handler/retry-handler.js.map +1 -1
- package/lib/cjs/__/undici/lib/web/cookies/parse.js +16 -23
- package/lib/cjs/__/undici/lib/web/cookies/parse.js.map +1 -1
- package/lib/cjs/__/undici/lib/web/cookies/util.js +79 -9
- package/lib/cjs/__/undici/lib/web/cookies/util.js.map +1 -1
- package/lib/cjs/__/undici/lib/web/websocket/receiver.js +31 -8
- package/lib/cjs/__/undici/lib/web/websocket/receiver.js.map +1 -1
- package/lib/cjs/__/undici/lib/web/websocket/websocket.js +4 -1
- package/lib/cjs/__/undici/lib/web/websocket/websocket.js.map +1 -1
- package/lib/cjs/_virtual/_commonjsHelpers.js +1 -1
- package/lib/cjs/_virtual/index10.js +2 -2
- package/lib/cjs/_virtual/index11.js +2 -2
- package/lib/cjs/_virtual/index13.js +2 -2
- package/lib/cjs/_virtual/index9.js +3 -3
- package/lib/cjs/env/load.js +1 -1
- package/lib/cjs/env/load.js.map +1 -1
- package/lib/esm/__/@actions/http-client/lib/index.js +1 -1
- package/lib/esm/__/@octokit/core/dist-src/version.js +1 -1
- package/lib/esm/__/@octokit/core/dist-src/version.js.map +1 -1
- package/lib/esm/__/@octokit/graphql/dist-bundle/index.js +4 -0
- package/lib/esm/__/@octokit/graphql/dist-bundle/index.js.map +1 -1
- package/lib/esm/__/@octokit/request/dist-bundle/index.js +11 -7
- package/lib/esm/__/@octokit/request/dist-bundle/index.js.map +1 -1
- package/lib/esm/__/content-type/dist/index.js +181 -0
- package/lib/esm/__/content-type/dist/index.js.map +1 -0
- package/lib/esm/__/cross-spawn/index.js +1 -1
- package/lib/esm/__/{execa → env-ci/__/execa}/index.js +1 -1
- package/lib/esm/__/env-ci/__/execa/index.js.map +1 -0
- package/lib/esm/__/env-ci/__/execa/lib/command.js.map +1 -0
- package/lib/esm/__/env-ci/__/execa/lib/error.js.map +1 -0
- package/lib/esm/__/env-ci/__/execa/lib/promise.js.map +1 -0
- package/lib/esm/__/env-ci/__/execa/lib/stdio.js.map +1 -0
- package/lib/esm/__/{execa → env-ci/__/execa}/lib/stream.js +1 -1
- package/lib/esm/__/env-ci/__/execa/lib/stream.js.map +1 -0
- package/lib/esm/__/env-ci/__/execa/lib/verbose.js.map +1 -0
- package/lib/esm/__/env-ci/__/get-stream/source/array-buffer.js.map +1 -0
- package/lib/esm/__/env-ci/__/human-signals/build/src/core.js.map +1 -0
- package/lib/esm/__/env-ci/__/human-signals/build/src/main.js.map +1 -0
- package/lib/esm/__/env-ci/__/human-signals/build/src/realtime.js.map +1 -0
- package/lib/esm/__/env-ci/__/human-signals/build/src/signals.js.map +1 -0
- package/lib/esm/__/env-ci/__/is-stream/index.js.map +1 -0
- package/lib/esm/__/{npm-run-path → env-ci/__/npm-run-path}/index.js +1 -1
- package/lib/esm/__/env-ci/__/npm-run-path/index.js.map +1 -0
- package/lib/esm/__/env-ci/__/path-key/index.js.map +1 -0
- package/lib/esm/__/env-ci/__/signal-exit/dist/mjs/index.js.map +1 -0
- package/lib/esm/__/env-ci/__/signal-exit/dist/mjs/signals.js.map +1 -0
- package/lib/esm/__/env-ci/__/strip-final-newline/index.js.map +1 -0
- package/lib/esm/__/env-ci/lib/git.js +1 -1
- package/lib/esm/__/json-with-bigint/json-with-bigint.js +419 -60
- package/lib/esm/__/json-with-bigint/json-with-bigint.js.map +1 -1
- package/lib/esm/__/undici/lib/core/request.js +12 -1
- package/lib/esm/__/undici/lib/core/request.js.map +1 -1
- package/lib/esm/__/undici/lib/dispatcher/agent.js +0 -1
- package/lib/esm/__/undici/lib/dispatcher/agent.js.map +1 -1
- package/lib/esm/__/undici/lib/dispatcher/client-h1.js +151 -25
- package/lib/esm/__/undici/lib/dispatcher/client-h1.js.map +1 -1
- package/lib/esm/__/undici/lib/dispatcher/dispatcher-base.js +1 -0
- package/lib/esm/__/undici/lib/dispatcher/dispatcher-base.js.map +1 -1
- package/lib/esm/__/undici/lib/handler/retry-handler.js +34 -0
- package/lib/esm/__/undici/lib/handler/retry-handler.js.map +1 -1
- package/lib/esm/__/undici/lib/web/cookies/parse.js +16 -23
- package/lib/esm/__/undici/lib/web/cookies/parse.js.map +1 -1
- package/lib/esm/__/undici/lib/web/cookies/util.js +79 -9
- package/lib/esm/__/undici/lib/web/cookies/util.js.map +1 -1
- package/lib/esm/__/undici/lib/web/websocket/receiver.js +31 -8
- package/lib/esm/__/undici/lib/web/websocket/receiver.js.map +1 -1
- package/lib/esm/__/undici/lib/web/websocket/websocket.js +4 -1
- package/lib/esm/__/undici/lib/web/websocket/websocket.js.map +1 -1
- package/lib/esm/_virtual/_commonjsHelpers.js +1 -1
- package/lib/esm/_virtual/index10.js +2 -2
- package/lib/esm/_virtual/index11.js +2 -2
- package/lib/esm/_virtual/index13.js +2 -2
- package/lib/esm/_virtual/index9.js +3 -3
- package/lib/esm/env/load.js +1 -1
- package/lib/esm/env/load.js.map +1 -1
- package/package.json +12 -12
- package/lib/cjs/__/execa/index.js.map +0 -1
- package/lib/cjs/__/execa/lib/command.js.map +0 -1
- package/lib/cjs/__/execa/lib/error.js.map +0 -1
- package/lib/cjs/__/execa/lib/promise.js.map +0 -1
- package/lib/cjs/__/execa/lib/stdio.js.map +0 -1
- package/lib/cjs/__/execa/lib/stream.js.map +0 -1
- package/lib/cjs/__/execa/lib/verbose.js.map +0 -1
- package/lib/cjs/__/fast-content-type-parse/index.js +0 -182
- package/lib/cjs/__/fast-content-type-parse/index.js.map +0 -1
- package/lib/cjs/__/get-stream/source/array-buffer.js.map +0 -1
- package/lib/cjs/__/human-signals/build/src/core.js.map +0 -1
- package/lib/cjs/__/human-signals/build/src/main.js.map +0 -1
- package/lib/cjs/__/human-signals/build/src/realtime.js.map +0 -1
- package/lib/cjs/__/human-signals/build/src/signals.js.map +0 -1
- package/lib/cjs/__/is-stream/index.js.map +0 -1
- package/lib/cjs/__/npm-run-path/__/path-key/index.js.map +0 -1
- package/lib/cjs/__/npm-run-path/index.js.map +0 -1
- package/lib/cjs/__/signal-exit/dist/mjs/index.js.map +0 -1
- package/lib/cjs/__/signal-exit/dist/mjs/signals.js.map +0 -1
- package/lib/cjs/__/strip-final-newline/index.js.map +0 -1
- package/lib/esm/__/execa/index.js.map +0 -1
- package/lib/esm/__/execa/lib/command.js.map +0 -1
- package/lib/esm/__/execa/lib/error.js.map +0 -1
- package/lib/esm/__/execa/lib/promise.js.map +0 -1
- package/lib/esm/__/execa/lib/stdio.js.map +0 -1
- package/lib/esm/__/execa/lib/stream.js.map +0 -1
- package/lib/esm/__/execa/lib/verbose.js.map +0 -1
- package/lib/esm/__/fast-content-type-parse/index.js +0 -180
- package/lib/esm/__/fast-content-type-parse/index.js.map +0 -1
- package/lib/esm/__/get-stream/source/array-buffer.js.map +0 -1
- package/lib/esm/__/human-signals/build/src/core.js.map +0 -1
- package/lib/esm/__/human-signals/build/src/main.js.map +0 -1
- package/lib/esm/__/human-signals/build/src/realtime.js.map +0 -1
- package/lib/esm/__/human-signals/build/src/signals.js.map +0 -1
- package/lib/esm/__/is-stream/index.js.map +0 -1
- package/lib/esm/__/npm-run-path/__/path-key/index.js.map +0 -1
- package/lib/esm/__/npm-run-path/index.js.map +0 -1
- package/lib/esm/__/signal-exit/dist/mjs/index.js.map +0 -1
- package/lib/esm/__/signal-exit/dist/mjs/signals.js.map +0 -1
- package/lib/esm/__/strip-final-newline/index.js.map +0 -1
- /package/lib/cjs/__/{execa → env-ci/__/execa}/lib/command.js +0 -0
- /package/lib/cjs/__/{execa → env-ci/__/execa}/lib/error.js +0 -0
- /package/lib/cjs/__/{execa → env-ci/__/execa}/lib/promise.js +0 -0
- /package/lib/cjs/__/{execa → env-ci/__/execa}/lib/stdio.js +0 -0
- /package/lib/cjs/__/{execa → env-ci/__/execa}/lib/verbose.js +0 -0
- /package/lib/cjs/__/{get-stream → env-ci/__/get-stream}/source/array-buffer.js +0 -0
- /package/lib/cjs/__/{human-signals → env-ci/__/human-signals}/build/src/core.js +0 -0
- /package/lib/cjs/__/{human-signals → env-ci/__/human-signals}/build/src/main.js +0 -0
- /package/lib/cjs/__/{human-signals → env-ci/__/human-signals}/build/src/realtime.js +0 -0
- /package/lib/cjs/__/{human-signals → env-ci/__/human-signals}/build/src/signals.js +0 -0
- /package/lib/cjs/__/{is-stream → env-ci/__/is-stream}/index.js +0 -0
- /package/lib/cjs/__/{npm-run-path → env-ci}/__/path-key/index.js +0 -0
- /package/lib/cjs/__/{signal-exit → env-ci/__/signal-exit}/dist/mjs/index.js +0 -0
- /package/lib/cjs/__/{signal-exit → env-ci/__/signal-exit}/dist/mjs/signals.js +0 -0
- /package/lib/cjs/__/{strip-final-newline → env-ci/__/strip-final-newline}/index.js +0 -0
- /package/lib/esm/__/{execa → env-ci/__/execa}/lib/command.js +0 -0
- /package/lib/esm/__/{execa → env-ci/__/execa}/lib/error.js +0 -0
- /package/lib/esm/__/{execa → env-ci/__/execa}/lib/promise.js +0 -0
- /package/lib/esm/__/{execa → env-ci/__/execa}/lib/stdio.js +0 -0
- /package/lib/esm/__/{execa → env-ci/__/execa}/lib/verbose.js +0 -0
- /package/lib/esm/__/{get-stream → env-ci/__/get-stream}/source/array-buffer.js +0 -0
- /package/lib/esm/__/{human-signals → env-ci/__/human-signals}/build/src/core.js +0 -0
- /package/lib/esm/__/{human-signals → env-ci/__/human-signals}/build/src/main.js +0 -0
- /package/lib/esm/__/{human-signals → env-ci/__/human-signals}/build/src/realtime.js +0 -0
- /package/lib/esm/__/{human-signals → env-ci/__/human-signals}/build/src/signals.js +0 -0
- /package/lib/esm/__/{is-stream → env-ci/__/is-stream}/index.js +0 -0
- /package/lib/esm/__/{npm-run-path → env-ci}/__/path-key/index.js +0 -0
- /package/lib/esm/__/{signal-exit → env-ci/__/signal-exit}/dist/mjs/index.js +0 -0
- /package/lib/esm/__/{signal-exit → env-ci/__/signal-exit}/dist/mjs/signals.js +0 -0
- /package/lib/esm/__/{strip-final-newline → env-ci/__/strip-final-newline}/index.js +0 -0
|
@@ -4,15 +4,251 @@ const originalStringify = JSON.stringify;
|
|
|
4
4
|
const originalParse = JSON.parse;
|
|
5
5
|
const customFormat = /^-?\d+n$/;
|
|
6
6
|
|
|
7
|
-
const bigIntsStringify = /([\[:])?"(-?\d+)n"(
|
|
8
|
-
const noiseStringify =
|
|
9
|
-
/([\[:])?("-?\d+n+)n("$|"([\\n]|\s)*(\s|[\\n])*[,\}\]])/g;
|
|
7
|
+
const bigIntsStringify = /([\[:])?"(-?\d+)n"($|\s*[,\}\]])/g;
|
|
8
|
+
const noiseStringify = /([\[:])?("-?\d+n+)n("$|"\s*[,\}\]])/g;
|
|
10
9
|
|
|
11
10
|
/**
|
|
12
11
|
* @typedef {(this: any, key: string | number | undefined, value: any) => any} Replacer
|
|
13
12
|
* @typedef {(key: string | number | undefined, value: any, context?: { source: string }) => any} Reviver
|
|
14
13
|
*/
|
|
15
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Checks if a value is unstringifiable according to native JSON.stringify rules.
|
|
17
|
+
*
|
|
18
|
+
* @param {any} val The value to check.
|
|
19
|
+
* @returns {boolean} True if the value is undefined, a function, or a symbol.
|
|
20
|
+
*/
|
|
21
|
+
const isUnstringifiable = (val) =>
|
|
22
|
+
val === undefined || typeof val === "function" || typeof val === "symbol";
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Checks if a value is a native JSON.rawJSON object (Node.js 22+).
|
|
26
|
+
*
|
|
27
|
+
* @param {any} val The value to check.
|
|
28
|
+
* @returns {boolean} True if the value is a RawJSON instance.
|
|
29
|
+
*/
|
|
30
|
+
const isRawJSON = (val) =>
|
|
31
|
+
val !== null &&
|
|
32
|
+
typeof val === "object" &&
|
|
33
|
+
val.constructor &&
|
|
34
|
+
val.constructor.name === "RawJSON";
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Iteratively converts a JS value to a JSON string.
|
|
38
|
+
* Used as a fallback when the native JSON.stringify hits the Maximum Call Stack size.
|
|
39
|
+
* Fully compliant with JSON formatting (space), replacers, and toJSON behaviors.
|
|
40
|
+
*
|
|
41
|
+
* @param {any} rootValue The value to stringify.
|
|
42
|
+
* @param {Replacer | Array<string | number> | null} [replacer] User's custom replacer function.
|
|
43
|
+
* @param {string | number} [spaceParam] Indentation for pretty-printing.
|
|
44
|
+
* @returns {string | undefined} The generated JSON string.
|
|
45
|
+
*/
|
|
46
|
+
const stringifyIteratively = (rootValue, replacer, spaceParam) => {
|
|
47
|
+
let space = "";
|
|
48
|
+
const propertyList = Array.isArray(replacer)
|
|
49
|
+
? new Set(replacer.map(String))
|
|
50
|
+
: null;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Prepares a value for stringification by resolving toJSON, handling BigInts,
|
|
54
|
+
* applying custom replacers, and unwrapping primitive objects.
|
|
55
|
+
*
|
|
56
|
+
* @param {object|Array} parent The parent object or array holding the value.
|
|
57
|
+
* @param {string} key The key associated with the value.
|
|
58
|
+
* @param {any} val The raw value to process.
|
|
59
|
+
* @returns {any} The processed value ready for stringification.
|
|
60
|
+
*/
|
|
61
|
+
const prepareVal = (parent, key, val) => {
|
|
62
|
+
const isObject = val !== null && typeof val === "object";
|
|
63
|
+
const hasToJSON = isObject && typeof val.toJSON === "function";
|
|
64
|
+
|
|
65
|
+
if (hasToJSON) {
|
|
66
|
+
val = val.toJSON(key);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const isNoise = typeof val === "string" && noiseValue.test(val);
|
|
70
|
+
|
|
71
|
+
if (isNoise) return val + "n";
|
|
72
|
+
|
|
73
|
+
const isBigInt = typeof val === "bigint";
|
|
74
|
+
|
|
75
|
+
if (isBigInt) {
|
|
76
|
+
const supportsRawJSON = "rawJSON" in JSON;
|
|
77
|
+
|
|
78
|
+
if (supportsRawJSON) return JSON.rawJSON(val.toString());
|
|
79
|
+
|
|
80
|
+
return val.toString() + "n";
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const isPostReplacerObject = val !== null && typeof val === "object";
|
|
84
|
+
|
|
85
|
+
if (isPostReplacerObject) {
|
|
86
|
+
const isPrimitiveWrapper =
|
|
87
|
+
val instanceof Number ||
|
|
88
|
+
val instanceof String ||
|
|
89
|
+
val instanceof Boolean;
|
|
90
|
+
|
|
91
|
+
if (isPrimitiveWrapper) {
|
|
92
|
+
val = val.valueOf();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return val;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
const rootProcessed = prepareVal({ }, "", rootValue);
|
|
100
|
+
|
|
101
|
+
if (isUnstringifiable(rootProcessed)) {
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const isRootPrimitive =
|
|
106
|
+
rootProcessed === null || typeof rootProcessed !== "object";
|
|
107
|
+
const isRootNativeRawJSON = isRawJSON(rootProcessed);
|
|
108
|
+
|
|
109
|
+
if (isRootPrimitive || isRootNativeRawJSON) {
|
|
110
|
+
return originalStringify(rootProcessed);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const chunks = [];
|
|
114
|
+
|
|
115
|
+
const stack = [
|
|
116
|
+
{
|
|
117
|
+
parent: { "": rootProcessed },
|
|
118
|
+
key: "",
|
|
119
|
+
val: rootProcessed,
|
|
120
|
+
isArray: Array.isArray(rootProcessed),
|
|
121
|
+
keys: Array.isArray(rootProcessed) ? null : Object.keys(rootProcessed),
|
|
122
|
+
index: 0,
|
|
123
|
+
first: true,
|
|
124
|
+
},
|
|
125
|
+
];
|
|
126
|
+
|
|
127
|
+
const visited = new WeakSet([rootProcessed]);
|
|
128
|
+
|
|
129
|
+
while (stack.length > 0) {
|
|
130
|
+
const node = stack[stack.length - 1];
|
|
131
|
+
|
|
132
|
+
if (node.index === 0) {
|
|
133
|
+
chunks.push(node.isArray ? "[" : "{");
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
let isDone = false;
|
|
137
|
+
|
|
138
|
+
if (node.isArray) {
|
|
139
|
+
if (node.index < node.val.length) {
|
|
140
|
+
if (!node.first) chunks.push(",");
|
|
141
|
+
|
|
142
|
+
const childRaw = node.val[node.index];
|
|
143
|
+
const childVal = prepareVal(node.val, String(node.index), childRaw);
|
|
144
|
+
|
|
145
|
+
if (isUnstringifiable(childVal)) {
|
|
146
|
+
chunks.push("null");
|
|
147
|
+
node.first = false;
|
|
148
|
+
node.index++;
|
|
149
|
+
} else {
|
|
150
|
+
const isComplexObject =
|
|
151
|
+
childVal !== null && typeof childVal === "object";
|
|
152
|
+
const isNativeRaw = isRawJSON(childVal);
|
|
153
|
+
|
|
154
|
+
if (isComplexObject && !isNativeRaw) {
|
|
155
|
+
if (visited.has(childVal)) {
|
|
156
|
+
throw new TypeError("Converting circular structure to JSON");
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
visited.add(childVal);
|
|
160
|
+
|
|
161
|
+
stack.push({
|
|
162
|
+
parent: node.val,
|
|
163
|
+
key: String(node.index),
|
|
164
|
+
val: childVal,
|
|
165
|
+
isArray: Array.isArray(childVal),
|
|
166
|
+
keys: Array.isArray(childVal) ? null : Object.keys(childVal),
|
|
167
|
+
index: 0,
|
|
168
|
+
first: true,
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
node.first = false;
|
|
172
|
+
node.index++;
|
|
173
|
+
} else {
|
|
174
|
+
chunks.push(originalStringify(childVal));
|
|
175
|
+
node.first = false;
|
|
176
|
+
node.index++;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
} else {
|
|
180
|
+
isDone = true;
|
|
181
|
+
}
|
|
182
|
+
} else {
|
|
183
|
+
while (node.index < node.keys.length) {
|
|
184
|
+
const k = node.keys[node.index++];
|
|
185
|
+
|
|
186
|
+
const isFilteredOutByArray = propertyList && !propertyList.has(k);
|
|
187
|
+
|
|
188
|
+
if (isFilteredOutByArray) continue;
|
|
189
|
+
|
|
190
|
+
const childRaw = node.val[k];
|
|
191
|
+
const childVal = prepareVal(node.val, k, childRaw);
|
|
192
|
+
|
|
193
|
+
if (isUnstringifiable(childVal)) continue;
|
|
194
|
+
|
|
195
|
+
if (!node.first) chunks.push(",");
|
|
196
|
+
|
|
197
|
+
{
|
|
198
|
+
chunks.push(originalStringify(k) + ":");
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
const isComplexObject =
|
|
202
|
+
childVal !== null && typeof childVal === "object";
|
|
203
|
+
const isNativeRaw = isRawJSON(childVal);
|
|
204
|
+
|
|
205
|
+
if (isComplexObject && !isNativeRaw) {
|
|
206
|
+
if (visited.has(childVal)) {
|
|
207
|
+
throw new TypeError("Converting circular structure to JSON");
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
visited.add(childVal);
|
|
211
|
+
|
|
212
|
+
stack.push({
|
|
213
|
+
parent: node.val,
|
|
214
|
+
key: k,
|
|
215
|
+
val: childVal,
|
|
216
|
+
isArray: Array.isArray(childVal),
|
|
217
|
+
keys: Array.isArray(childVal) ? null : Object.keys(childVal),
|
|
218
|
+
index: 0,
|
|
219
|
+
first: true,
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
node.first = false;
|
|
223
|
+
|
|
224
|
+
break; // Stop current loop level to process the newly pushed stack node
|
|
225
|
+
} else {
|
|
226
|
+
chunks.push(originalStringify(childVal));
|
|
227
|
+
node.first = false;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
const isNodeFullyProcessed =
|
|
232
|
+
node.index >= node.keys.length && stack[stack.length - 1] === node;
|
|
233
|
+
|
|
234
|
+
if (isNodeFullyProcessed) {
|
|
235
|
+
isDone = true;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
if (isDone) {
|
|
240
|
+
|
|
241
|
+
if (!node.first && space) ;
|
|
242
|
+
|
|
243
|
+
chunks.push(node.isArray ? "]" : "}");
|
|
244
|
+
visited.delete(node.val);
|
|
245
|
+
stack.pop();
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
return chunks.join("");
|
|
250
|
+
};
|
|
251
|
+
|
|
16
252
|
/**
|
|
17
253
|
* Converts a JavaScript value to a JSON string.
|
|
18
254
|
*
|
|
@@ -24,51 +260,87 @@ const noiseStringify =
|
|
|
24
260
|
*
|
|
25
261
|
* @param {*} value The value to convert to a JSON string.
|
|
26
262
|
* @param {Replacer | Array<string | number> | null} [replacer]
|
|
27
|
-
*
|
|
28
|
-
*
|
|
263
|
+
* A function that alters the behavior of the stringification process,
|
|
264
|
+
* or an array of strings/numbers to indicate properties to exclude.
|
|
29
265
|
* @param {string | number} [space]
|
|
30
|
-
*
|
|
266
|
+
* A string or number to specify indentation or pretty-printing.
|
|
31
267
|
* @returns {string} The JSON string representation.
|
|
32
268
|
*/
|
|
33
269
|
const JSONStringify = (value, replacer, space) => {
|
|
34
|
-
|
|
35
|
-
|
|
270
|
+
try {
|
|
271
|
+
const supportsRawJSON = "rawJSON" in JSON;
|
|
272
|
+
|
|
273
|
+
if (supportsRawJSON) {
|
|
274
|
+
return originalStringify(
|
|
275
|
+
value,
|
|
276
|
+
(key, val) => {
|
|
277
|
+
if (typeof val === "bigint") return JSON.rawJSON(val.toString());
|
|
278
|
+
|
|
279
|
+
const hasFunctionReplacer = typeof replacer === "function";
|
|
280
|
+
|
|
281
|
+
if (hasFunctionReplacer) ;
|
|
282
|
+
|
|
283
|
+
const isKeyInArrayReplacer =
|
|
284
|
+
Array.isArray(replacer) && replacer.includes(key);
|
|
285
|
+
|
|
286
|
+
if (isKeyInArrayReplacer) return val;
|
|
287
|
+
|
|
288
|
+
return val;
|
|
289
|
+
},
|
|
290
|
+
space,
|
|
291
|
+
);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
if (!value) return originalStringify(value, replacer, space);
|
|
295
|
+
|
|
296
|
+
const convertedToCustomJSON = originalStringify(
|
|
36
297
|
value,
|
|
37
|
-
(key,
|
|
38
|
-
|
|
298
|
+
(key, val) => {
|
|
299
|
+
const isNoise = typeof val === "string" && noiseValue.test(val);
|
|
300
|
+
|
|
301
|
+
if (isNoise) return val.toString() + "n"; // Mark noise values with additional "n" to offset the deletion of one "n" during the processing
|
|
302
|
+
|
|
303
|
+
if (typeof val === "bigint") return val.toString() + "n";
|
|
39
304
|
|
|
40
|
-
|
|
305
|
+
const hasFunctionReplacer = typeof replacer === "function";
|
|
41
306
|
|
|
42
|
-
|
|
307
|
+
if (hasFunctionReplacer) ;
|
|
308
|
+
|
|
309
|
+
const isKeyInArrayReplacer =
|
|
310
|
+
Array.isArray(replacer) && replacer.includes(key);
|
|
311
|
+
|
|
312
|
+
if (isKeyInArrayReplacer) return val;
|
|
313
|
+
|
|
314
|
+
return val;
|
|
43
315
|
},
|
|
44
316
|
space,
|
|
45
317
|
);
|
|
46
|
-
}
|
|
47
318
|
|
|
48
|
-
|
|
319
|
+
const processedJSON = convertedToCustomJSON.replace(
|
|
320
|
+
bigIntsStringify,
|
|
321
|
+
"$1$2$3",
|
|
322
|
+
); // Delete one "n" off the end of every BigInt value
|
|
49
323
|
|
|
50
|
-
|
|
51
|
-
value,
|
|
52
|
-
(key, value) => {
|
|
53
|
-
const isNoise = typeof value === "string" && noiseValue.test(value);
|
|
324
|
+
const denoisedJSON = processedJSON.replace(noiseStringify, "$1$2$3"); // Remove one "n" off the end of every noisy string
|
|
54
325
|
|
|
55
|
-
|
|
326
|
+
return denoisedJSON;
|
|
327
|
+
} catch (error) {
|
|
328
|
+
if (error instanceof RangeError) {
|
|
329
|
+
const convertedJSON = stringifyIteratively(value, replacer);
|
|
56
330
|
|
|
57
|
-
if (
|
|
331
|
+
if (convertedJSON === undefined) return undefined;
|
|
58
332
|
|
|
59
|
-
|
|
333
|
+
const supportsRawJSON = "rawJSON" in JSON;
|
|
60
334
|
|
|
61
|
-
return
|
|
62
|
-
},
|
|
63
|
-
space,
|
|
64
|
-
);
|
|
65
|
-
const processedJSON = convertedToCustomJSON.replace(
|
|
66
|
-
bigIntsStringify,
|
|
67
|
-
"$1$2$3",
|
|
68
|
-
); // Delete one "n" off the end of every BigInt value
|
|
69
|
-
const denoisedJSON = processedJSON.replace(noiseStringify, "$1$2$3"); // Remove one "n" off the end of every noisy string
|
|
335
|
+
if (supportsRawJSON) return convertedJSON;
|
|
70
336
|
|
|
71
|
-
|
|
337
|
+
const processedJSON = convertedJSON.replace(bigIntsStringify, "$1$2$3");
|
|
338
|
+
|
|
339
|
+
return processedJSON.replace(noiseStringify, "$1$2$3");
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
throw error;
|
|
343
|
+
}
|
|
72
344
|
};
|
|
73
345
|
|
|
74
346
|
const featureCache = new Map();
|
|
@@ -116,6 +388,7 @@ const isContextSourceSupported = () => {
|
|
|
116
388
|
const convertMarkedBigIntsReviver = (key, value, context, userReviver) => {
|
|
117
389
|
const isCustomFormatBigInt =
|
|
118
390
|
typeof value === "string" && customFormat.test(value);
|
|
391
|
+
|
|
119
392
|
if (isCustomFormatBigInt) return BigInt(value.slice(0, -1));
|
|
120
393
|
|
|
121
394
|
const isNoiseValue = typeof value === "string" && noiseValue.test(value);
|
|
@@ -137,9 +410,10 @@ const convertMarkedBigIntsReviver = (key, value, context, userReviver) => {
|
|
|
137
410
|
*/
|
|
138
411
|
const JSONParseV2 = (text, reviver) => {
|
|
139
412
|
return JSON.parse(text, (key, value, context) => {
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
|
|
413
|
+
const isNumber = typeof value === "number";
|
|
414
|
+
const isOutOfBounds =
|
|
415
|
+
value > Number.MAX_SAFE_INTEGER || value < Number.MIN_SAFE_INTEGER;
|
|
416
|
+
const isBigNumber = isNumber && isOutOfBounds;
|
|
143
417
|
const isInt = context && intRegex.test(context.source);
|
|
144
418
|
const isBigInt = isBigNumber && isInt;
|
|
145
419
|
|
|
@@ -155,6 +429,99 @@ const stringsOrLargeNumbers =
|
|
|
155
429
|
/"(?:\\.|[^"])*"|-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?/g;
|
|
156
430
|
const noiseValueWithQuotes = /^"-?\d+n+"$/; // Noise - strings that match the custom format before being converted to it
|
|
157
431
|
|
|
432
|
+
/**
|
|
433
|
+
* Iteratively traverses the parsed object bottom-up (post-order),
|
|
434
|
+
* emulating the native JSON.parse reviver behavior.
|
|
435
|
+
* This avoids Call Stack overflows (RangeError) on deeply nested structures.
|
|
436
|
+
*
|
|
437
|
+
* @param {any} parsed The natively parsed JSON object.
|
|
438
|
+
* @param {Reviver} [userReviver] User's custom reviver function.
|
|
439
|
+
* @returns {any} The fully processed object.
|
|
440
|
+
*/
|
|
441
|
+
const applyReviverIteratively = (parsed, userReviver) => {
|
|
442
|
+
const rootHolder = { "": parsed };
|
|
443
|
+
const stack = [{ parent: rootHolder, key: "", visited: false }];
|
|
444
|
+
|
|
445
|
+
while (stack.length > 0) {
|
|
446
|
+
const node = stack[stack.length - 1];
|
|
447
|
+
|
|
448
|
+
if (!node.visited) {
|
|
449
|
+
node.visited = true;
|
|
450
|
+
|
|
451
|
+
const value = node.parent[node.key];
|
|
452
|
+
const isComplexObject = value !== null && typeof value === "object";
|
|
453
|
+
|
|
454
|
+
if (isComplexObject) {
|
|
455
|
+
const keys = Object.keys(value);
|
|
456
|
+
|
|
457
|
+
for (let i = keys.length - 1; i >= 0; i--) {
|
|
458
|
+
stack.push({ parent: value, key: keys[i], visited: false });
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
} else {
|
|
462
|
+
const { parent, key } = node;
|
|
463
|
+
let value = parent[key];
|
|
464
|
+
|
|
465
|
+
if (typeof value === "string") {
|
|
466
|
+
const isCustomFormatBigInt = customFormat.test(value);
|
|
467
|
+
|
|
468
|
+
if (isCustomFormatBigInt) {
|
|
469
|
+
value = BigInt(value.slice(0, -1));
|
|
470
|
+
} else {
|
|
471
|
+
const isNoise = noiseValue.test(value);
|
|
472
|
+
|
|
473
|
+
if (isNoise) value = value.slice(0, -1);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
const isDeleted = value === undefined;
|
|
478
|
+
|
|
479
|
+
if (isDeleted) {
|
|
480
|
+
delete parent[key];
|
|
481
|
+
} else {
|
|
482
|
+
parent[key] = value;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
stack.pop();
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
return rootHolder[""];
|
|
490
|
+
};
|
|
491
|
+
|
|
492
|
+
/**
|
|
493
|
+
* Pre-processes the JSON string to mark large numbers with an 'n' suffix.
|
|
494
|
+
*
|
|
495
|
+
* @param {string} text The raw JSON string.
|
|
496
|
+
* @returns {string} The serialized string with marked BigInts.
|
|
497
|
+
*/
|
|
498
|
+
const serializeBigInts = (text) => {
|
|
499
|
+
return text.replace(
|
|
500
|
+
stringsOrLargeNumbers,
|
|
501
|
+
(match, digits, fractional, exponential) => {
|
|
502
|
+
const isString = match[0] === '"';
|
|
503
|
+
const isNoise = isString && noiseValueWithQuotes.test(match);
|
|
504
|
+
|
|
505
|
+
if (isNoise) return match.substring(0, match.length - 1) + 'n"'; // Mark noise values with additional "n" to offset the deletion of one "n" during the processing
|
|
506
|
+
|
|
507
|
+
const hasFractionalOrExponential = fractional || exponential;
|
|
508
|
+
|
|
509
|
+
// With a fixed number of digits, we can correctly use lexicographical comparison to do a numeric comparison
|
|
510
|
+
const isLessThanMaxSafeInt =
|
|
511
|
+
digits &&
|
|
512
|
+
(digits.length < MAX_DIGITS ||
|
|
513
|
+
(digits.length === MAX_DIGITS && digits <= MAX_INT));
|
|
514
|
+
|
|
515
|
+
const isStandardValue =
|
|
516
|
+
isString || hasFractionalOrExponential || isLessThanMaxSafeInt;
|
|
517
|
+
|
|
518
|
+
if (isStandardValue) return match;
|
|
519
|
+
|
|
520
|
+
return '"' + match + 'n"';
|
|
521
|
+
},
|
|
522
|
+
);
|
|
523
|
+
};
|
|
524
|
+
|
|
158
525
|
/**
|
|
159
526
|
* Converts a JSON string into a JavaScript value.
|
|
160
527
|
*
|
|
@@ -166,42 +533,34 @@ const noiseValueWithQuotes = /^"-?\d+n+"$/; // Noise - strings that match the cu
|
|
|
166
533
|
*
|
|
167
534
|
* @param {string} text A valid JSON string.
|
|
168
535
|
* @param {Reviver} [reviver]
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
536
|
+
* A function that transforms the results. This function is called for each member
|
|
537
|
+
* of the object. If a member contains nested objects, the nested objects are
|
|
538
|
+
* transformed before the parent object is.
|
|
172
539
|
* @returns {any} The parsed JavaScript value.
|
|
173
540
|
* @throws {SyntaxError} If text is not valid JSON.
|
|
174
541
|
*/
|
|
175
542
|
const JSONParse = (text, reviver) => {
|
|
176
543
|
if (!text) return originalParse(text, reviver);
|
|
177
544
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
// Find and mark big numbers with "n"
|
|
181
|
-
const serializedData = text.replace(
|
|
182
|
-
stringsOrLargeNumbers,
|
|
183
|
-
(text, digits, fractional, exponential) => {
|
|
184
|
-
const isString = text[0] === '"';
|
|
185
|
-
const isNoise = isString && noiseValueWithQuotes.test(text);
|
|
545
|
+
try {
|
|
546
|
+
if (isContextSourceSupported()) return JSONParseV2(text, reviver); // Shortcut to a faster (2x) and simpler version
|
|
186
547
|
|
|
187
|
-
|
|
548
|
+
// Find and mark big numbers with "n"
|
|
549
|
+
const serializedData = serializeBigInts(text);
|
|
188
550
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
return text;
|
|
551
|
+
return originalParse(serializedData, (key, value, context) =>
|
|
552
|
+
convertMarkedBigIntsReviver(key, value, context, reviver),
|
|
553
|
+
);
|
|
554
|
+
} catch (error) {
|
|
555
|
+
if (error instanceof RangeError) {
|
|
556
|
+
const serializedData = serializeBigInts(text);
|
|
557
|
+
const parsed = originalParse(serializedData);
|
|
197
558
|
|
|
198
|
-
return
|
|
199
|
-
}
|
|
200
|
-
);
|
|
559
|
+
return applyReviverIteratively(parsed);
|
|
560
|
+
}
|
|
201
561
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
);
|
|
562
|
+
throw error;
|
|
563
|
+
}
|
|
205
564
|
};
|
|
206
565
|
|
|
207
566
|
export { JSONParse, JSONStringify };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-with-bigint.js","sources":["../../../../../../node_modules/json-with-bigint/json-with-bigint.js"],"sourcesContent":["const intRegex = /^-?\\d+$/;\nconst noiseValue = /^-?\\d+n+$/; // Noise - strings that match the custom format before being converted to it\nconst originalStringify = JSON.stringify;\nconst originalParse = JSON.parse;\nconst customFormat = /^-?\\d+n$/;\n\nconst bigIntsStringify = /([\\[:])?\"(-?\\d+)n\"($|([\\\\n]|\\s)*(\\s|[\\\\n])*[,\\}\\]])/g;\nconst noiseStringify =\n /([\\[:])?(\"-?\\d+n+)n(\"$|\"([\\\\n]|\\s)*(\\s|[\\\\n])*[,\\}\\]])/g;\n\n/**\n * @typedef {(this: any, key: string | number | undefined, value: any) => any} Replacer\n * @typedef {(key: string | number | undefined, value: any, context?: { source: string }) => any} Reviver\n */\n\n/**\n * Converts a JavaScript value to a JSON string.\n *\n * Supports serialization of BigInt values using two strategies:\n * 1. Custom format \"123n\" → \"123\" (universal fallback)\n * 2. Native JSON.rawJSON() (Node.js 22+, fastest) when available\n *\n * All other values are serialized exactly like native JSON.stringify().\n *\n * @param {*} value The value to convert to a JSON string.\n * @param {Replacer | Array<string | number> | null} [replacer]\n * A function that alters the behavior of the stringification process,\n * or an array of strings/numbers to indicate properties to exclude.\n * @param {string | number} [space]\n * A string or number to specify indentation or pretty-printing.\n * @returns {string} The JSON string representation.\n */\nconst JSONStringify = (value, replacer, space) => {\n if (\"rawJSON\" in JSON) {\n return originalStringify(\n value,\n (key, value) => {\n if (typeof value === \"bigint\") return JSON.rawJSON(value.toString());\n\n if (typeof replacer === \"function\") return replacer(key, value);\n\n if (Array.isArray(replacer) && replacer.includes(key)) return value;\n\n return value;\n },\n space,\n );\n }\n\n if (!value) return originalStringify(value, replacer, space);\n\n const convertedToCustomJSON = originalStringify(\n value,\n (key, value) => {\n const isNoise = typeof value === \"string\" && noiseValue.test(value);\n\n if (isNoise) return value.toString() + \"n\"; // Mark noise values with additional \"n\" to offset the deletion of one \"n\" during the processing\n\n if (typeof value === \"bigint\") return value.toString() + \"n\";\n\n if (typeof replacer === \"function\") return replacer(key, value);\n\n if (Array.isArray(replacer) && replacer.includes(key)) return value;\n\n return value;\n },\n space,\n );\n const processedJSON = convertedToCustomJSON.replace(\n bigIntsStringify,\n \"$1$2$3\",\n ); // Delete one \"n\" off the end of every BigInt value\n const denoisedJSON = processedJSON.replace(noiseStringify, \"$1$2$3\"); // Remove one \"n\" off the end of every noisy string\n\n return denoisedJSON;\n};\n\nconst featureCache = new Map();\n\n/**\n * Detects if the current JSON.parse implementation supports the context.source feature.\n *\n * Uses toString() fingerprinting to cache results and automatically detect runtime\n * replacements of JSON.parse (polyfills, mocks, etc.).\n *\n * @returns {boolean} true if context.source is supported, false otherwise.\n */\nconst isContextSourceSupported = () => {\n const parseFingerprint = JSON.parse.toString();\n\n if (featureCache.has(parseFingerprint)) {\n return featureCache.get(parseFingerprint);\n }\n\n try {\n const result = JSON.parse(\n \"1\",\n (_, __, context) => !!context?.source && context.source === \"1\",\n );\n featureCache.set(parseFingerprint, result);\n\n return result;\n } catch {\n featureCache.set(parseFingerprint, false);\n\n return false;\n }\n};\n\n/**\n * Reviver function that converts custom-format BigInt strings back to BigInt values.\n * Also handles \"noise\" strings that accidentally match the BigInt format.\n *\n * @param {string | number | undefined} key The object key.\n * @param {*} value The value being parsed.\n * @param {object} [context] Parse context (if supported by JSON.parse).\n * @param {Reviver} [userReviver] User's custom reviver function.\n * @returns {any} The transformed value.\n */\nconst convertMarkedBigIntsReviver = (key, value, context, userReviver) => {\n const isCustomFormatBigInt =\n typeof value === \"string\" && customFormat.test(value);\n if (isCustomFormatBigInt) return BigInt(value.slice(0, -1));\n\n const isNoiseValue = typeof value === \"string\" && noiseValue.test(value);\n if (isNoiseValue) return value.slice(0, -1);\n\n if (typeof userReviver !== \"function\") return value;\n\n return userReviver(key, value, context);\n};\n\n/**\n * Fast JSON.parse implementation (~2x faster than classic fallback).\n * Uses JSON.parse's context.source feature to detect integers and convert\n * large numbers directly to BigInt without string manipulation.\n *\n * Does not support legacy custom format from v1 of this library.\n *\n * @param {string} text JSON string to parse.\n * @param {Reviver} [reviver] Transform function to apply to each value.\n * @returns {any} Parsed JavaScript value.\n */\nconst JSONParseV2 = (text, reviver) => {\n return JSON.parse(text, (key, value, context) => {\n const isBigNumber =\n typeof value === \"number\" &&\n (value > Number.MAX_SAFE_INTEGER || value < Number.MIN_SAFE_INTEGER);\n const isInt = context && intRegex.test(context.source);\n const isBigInt = isBigNumber && isInt;\n\n if (isBigInt) return BigInt(context.source);\n\n if (typeof reviver !== \"function\") return value;\n\n return reviver(key, value, context);\n });\n};\n\nconst MAX_INT = Number.MAX_SAFE_INTEGER.toString();\nconst MAX_DIGITS = MAX_INT.length;\nconst stringsOrLargeNumbers =\n /\"(?:\\\\.|[^\"])*\"|-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?/g;\nconst noiseValueWithQuotes = /^\"-?\\d+n+\"$/; // Noise - strings that match the custom format before being converted to it\n\n/**\n * Converts a JSON string into a JavaScript value.\n *\n * Supports parsing of large integers using two strategies:\n * 1. Classic fallback: Marks large numbers with \"123n\" format, then converts to BigInt\n * 2. Fast path (JSONParseV2): Uses context.source feature (~2x faster) when available\n *\n * All other JSON values are parsed exactly like native JSON.parse().\n *\n * @param {string} text A valid JSON string.\n * @param {Reviver} [reviver]\n * A function that transforms the results. This function is called for each member\n * of the object. If a member contains nested objects, the nested objects are\n * transformed before the parent object is.\n * @returns {any} The parsed JavaScript value.\n * @throws {SyntaxError} If text is not valid JSON.\n */\nconst JSONParse = (text, reviver) => {\n if (!text) return originalParse(text, reviver);\n\n if (isContextSourceSupported()) return JSONParseV2(text, reviver); // Shortcut to a faster (2x) and simpler version\n\n // Find and mark big numbers with \"n\"\n const serializedData = text.replace(\n stringsOrLargeNumbers,\n (text, digits, fractional, exponential) => {\n const isString = text[0] === '\"';\n const isNoise = isString && noiseValueWithQuotes.test(text);\n\n if (isNoise) return text.substring(0, text.length - 1) + 'n\"'; // Mark noise values with additional \"n\" to offset the deletion of one \"n\" during the processing\n\n const isFractionalOrExponential = fractional || exponential;\n const isLessThanMaxSafeInt =\n digits &&\n (digits.length < MAX_DIGITS ||\n (digits.length === MAX_DIGITS && digits <= MAX_INT)); // With a fixed number of digits, we can correctly use lexicographical comparison to do a numeric comparison\n\n if (isString || isFractionalOrExponential || isLessThanMaxSafeInt)\n return text;\n\n return '\"' + text + 'n\"';\n },\n );\n\n return originalParse(serializedData, (key, value, context) =>\n convertMarkedBigIntsReviver(key, value, context, reviver),\n );\n};\n\nexport { JSONStringify, JSONParse };\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"json-with-bigint.js","sources":["../../../../../../node_modules/json-with-bigint/json-with-bigint.js"],"sourcesContent":["const intRegex = /^-?\\d+$/;\nconst noiseValue = /^-?\\d+n+$/; // Noise - strings that match the custom format before being converted to it\nconst originalStringify = JSON.stringify;\nconst originalParse = JSON.parse;\nconst customFormat = /^-?\\d+n$/;\n\nconst bigIntsStringify = /([\\[:])?\"(-?\\d+)n\"($|\\s*[,\\}\\]])/g;\nconst noiseStringify = /([\\[:])?(\"-?\\d+n+)n(\"$|\"\\s*[,\\}\\]])/g;\n\n/**\n * @typedef {(this: any, key: string | number | undefined, value: any) => any} Replacer\n * @typedef {(key: string | number | undefined, value: any, context?: { source: string }) => any} Reviver\n */\n\n/**\n * Checks if a value is unstringifiable according to native JSON.stringify rules.\n *\n * @param {any} val The value to check.\n * @returns {boolean} True if the value is undefined, a function, or a symbol.\n */\nconst isUnstringifiable = (val) =>\n val === undefined || typeof val === \"function\" || typeof val === \"symbol\";\n\n/**\n * Checks if a value is a native JSON.rawJSON object (Node.js 22+).\n *\n * @param {any} val The value to check.\n * @returns {boolean} True if the value is a RawJSON instance.\n */\nconst isRawJSON = (val) =>\n val !== null &&\n typeof val === \"object\" &&\n val.constructor &&\n val.constructor.name === \"RawJSON\";\n\n/**\n * Iteratively converts a JS value to a JSON string.\n * Used as a fallback when the native JSON.stringify hits the Maximum Call Stack size.\n * Fully compliant with JSON formatting (space), replacers, and toJSON behaviors.\n *\n * @param {any} rootValue The value to stringify.\n * @param {Replacer | Array<string | number> | null} [replacer] User's custom replacer function.\n * @param {string | number} [spaceParam] Indentation for pretty-printing.\n * @returns {string | undefined} The generated JSON string.\n */\nconst stringifyIteratively = (rootValue, replacer, spaceParam) => {\n let space = \"\";\n\n if (typeof spaceParam === \"number\") {\n space = \" \".repeat(Math.min(10, Math.max(0, Math.floor(spaceParam))));\n } else if (typeof spaceParam === \"string\") {\n space = spaceParam.slice(0, 10);\n }\n\n const isFunctionReplacer = typeof replacer === \"function\";\n const propertyList = Array.isArray(replacer)\n ? new Set(replacer.map(String))\n : null;\n\n /**\n * Prepares a value for stringification by resolving toJSON, handling BigInts,\n * applying custom replacers, and unwrapping primitive objects.\n *\n * @param {object|Array} parent The parent object or array holding the value.\n * @param {string} key The key associated with the value.\n * @param {any} val The raw value to process.\n * @returns {any} The processed value ready for stringification.\n */\n const prepareVal = (parent, key, val) => {\n const isObject = val !== null && typeof val === \"object\";\n const hasToJSON = isObject && typeof val.toJSON === \"function\";\n\n if (hasToJSON) {\n val = val.toJSON(key);\n }\n\n const isNoise = typeof val === \"string\" && noiseValue.test(val);\n\n if (isNoise) return val + \"n\";\n\n const isBigInt = typeof val === \"bigint\";\n\n if (isBigInt) {\n const supportsRawJSON = \"rawJSON\" in JSON;\n\n if (supportsRawJSON) return JSON.rawJSON(val.toString());\n\n return val.toString() + \"n\";\n }\n\n if (isFunctionReplacer) {\n val = replacer.call(parent, key, val);\n }\n\n const isPostReplacerObject = val !== null && typeof val === \"object\";\n\n if (isPostReplacerObject) {\n const isPrimitiveWrapper =\n val instanceof Number ||\n val instanceof String ||\n val instanceof Boolean;\n\n if (isPrimitiveWrapper) {\n val = val.valueOf();\n }\n }\n\n return val;\n };\n\n const rootProcessed = prepareVal({ \"\": rootValue }, \"\", rootValue);\n\n if (isUnstringifiable(rootProcessed)) {\n return undefined;\n }\n\n const isRootPrimitive =\n rootProcessed === null || typeof rootProcessed !== \"object\";\n const isRootNativeRawJSON = isRawJSON(rootProcessed);\n\n if (isRootPrimitive || isRootNativeRawJSON) {\n return originalStringify(rootProcessed);\n }\n\n const chunks = [];\n let level = 0;\n\n const stack = [\n {\n parent: { \"\": rootProcessed },\n key: \"\",\n val: rootProcessed,\n isArray: Array.isArray(rootProcessed),\n keys: Array.isArray(rootProcessed) ? null : Object.keys(rootProcessed),\n index: 0,\n first: true,\n },\n ];\n\n const visited = new WeakSet([rootProcessed]);\n\n while (stack.length > 0) {\n const node = stack[stack.length - 1];\n\n if (node.index === 0) {\n chunks.push(node.isArray ? \"[\" : \"{\");\n level++;\n }\n\n let isDone = false;\n\n if (node.isArray) {\n if (node.index < node.val.length) {\n if (!node.first) chunks.push(\",\");\n\n if (space) chunks.push(\"\\n\" + space.repeat(level));\n\n const childRaw = node.val[node.index];\n const childVal = prepareVal(node.val, String(node.index), childRaw);\n\n if (isUnstringifiable(childVal)) {\n chunks.push(\"null\");\n node.first = false;\n node.index++;\n } else {\n const isComplexObject =\n childVal !== null && typeof childVal === \"object\";\n const isNativeRaw = isRawJSON(childVal);\n\n if (isComplexObject && !isNativeRaw) {\n if (visited.has(childVal)) {\n throw new TypeError(\"Converting circular structure to JSON\");\n }\n\n visited.add(childVal);\n\n stack.push({\n parent: node.val,\n key: String(node.index),\n val: childVal,\n isArray: Array.isArray(childVal),\n keys: Array.isArray(childVal) ? null : Object.keys(childVal),\n index: 0,\n first: true,\n });\n\n node.first = false;\n node.index++;\n } else {\n chunks.push(originalStringify(childVal));\n node.first = false;\n node.index++;\n }\n }\n } else {\n isDone = true;\n }\n } else {\n while (node.index < node.keys.length) {\n const k = node.keys[node.index++];\n\n const isFilteredOutByArray = propertyList && !propertyList.has(k);\n\n if (isFilteredOutByArray) continue;\n\n const childRaw = node.val[k];\n const childVal = prepareVal(node.val, k, childRaw);\n\n if (isUnstringifiable(childVal)) continue;\n\n if (!node.first) chunks.push(\",\");\n\n if (space) {\n chunks.push(\"\\n\" + space.repeat(level) + originalStringify(k) + \": \");\n } else {\n chunks.push(originalStringify(k) + \":\");\n }\n\n const isComplexObject =\n childVal !== null && typeof childVal === \"object\";\n const isNativeRaw = isRawJSON(childVal);\n\n if (isComplexObject && !isNativeRaw) {\n if (visited.has(childVal)) {\n throw new TypeError(\"Converting circular structure to JSON\");\n }\n\n visited.add(childVal);\n\n stack.push({\n parent: node.val,\n key: k,\n val: childVal,\n isArray: Array.isArray(childVal),\n keys: Array.isArray(childVal) ? null : Object.keys(childVal),\n index: 0,\n first: true,\n });\n\n node.first = false;\n\n break; // Stop current loop level to process the newly pushed stack node\n } else {\n chunks.push(originalStringify(childVal));\n node.first = false;\n }\n }\n\n const isNodeFullyProcessed =\n node.index >= node.keys.length && stack[stack.length - 1] === node;\n\n if (isNodeFullyProcessed) {\n isDone = true;\n }\n }\n\n if (isDone) {\n level--;\n\n if (!node.first && space) chunks.push(\"\\n\" + space.repeat(level));\n\n chunks.push(node.isArray ? \"]\" : \"}\");\n visited.delete(node.val);\n stack.pop();\n }\n }\n\n return chunks.join(\"\");\n};\n\n/**\n * Converts a JavaScript value to a JSON string.\n *\n * Supports serialization of BigInt values using two strategies:\n * 1. Custom format \"123n\" → \"123\" (universal fallback)\n * 2. Native JSON.rawJSON() (Node.js 22+, fastest) when available\n *\n * All other values are serialized exactly like native JSON.stringify().\n *\n * @param {*} value The value to convert to a JSON string.\n * @param {Replacer | Array<string | number> | null} [replacer]\n * A function that alters the behavior of the stringification process,\n * or an array of strings/numbers to indicate properties to exclude.\n * @param {string | number} [space]\n * A string or number to specify indentation or pretty-printing.\n * @returns {string} The JSON string representation.\n */\nconst JSONStringify = (value, replacer, space) => {\n try {\n const supportsRawJSON = \"rawJSON\" in JSON;\n\n if (supportsRawJSON) {\n return originalStringify(\n value,\n (key, val) => {\n if (typeof val === \"bigint\") return JSON.rawJSON(val.toString());\n\n const hasFunctionReplacer = typeof replacer === \"function\";\n\n if (hasFunctionReplacer) return replacer(key, val);\n\n const isKeyInArrayReplacer =\n Array.isArray(replacer) && replacer.includes(key);\n\n if (isKeyInArrayReplacer) return val;\n\n return val;\n },\n space,\n );\n }\n\n if (!value) return originalStringify(value, replacer, space);\n\n const convertedToCustomJSON = originalStringify(\n value,\n (key, val) => {\n const isNoise = typeof val === \"string\" && noiseValue.test(val);\n\n if (isNoise) return val.toString() + \"n\"; // Mark noise values with additional \"n\" to offset the deletion of one \"n\" during the processing\n\n if (typeof val === \"bigint\") return val.toString() + \"n\";\n\n const hasFunctionReplacer = typeof replacer === \"function\";\n\n if (hasFunctionReplacer) return replacer(key, val);\n\n const isKeyInArrayReplacer =\n Array.isArray(replacer) && replacer.includes(key);\n\n if (isKeyInArrayReplacer) return val;\n\n return val;\n },\n space,\n );\n\n const processedJSON = convertedToCustomJSON.replace(\n bigIntsStringify,\n \"$1$2$3\",\n ); // Delete one \"n\" off the end of every BigInt value\n\n const denoisedJSON = processedJSON.replace(noiseStringify, \"$1$2$3\"); // Remove one \"n\" off the end of every noisy string\n\n return denoisedJSON;\n } catch (error) {\n if (error instanceof RangeError) {\n const convertedJSON = stringifyIteratively(value, replacer, space);\n\n if (convertedJSON === undefined) return undefined;\n\n const supportsRawJSON = \"rawJSON\" in JSON;\n\n if (supportsRawJSON) return convertedJSON;\n\n const processedJSON = convertedJSON.replace(bigIntsStringify, \"$1$2$3\");\n\n return processedJSON.replace(noiseStringify, \"$1$2$3\");\n }\n\n throw error;\n }\n};\n\nconst featureCache = new Map();\n\n/**\n * Detects if the current JSON.parse implementation supports the context.source feature.\n *\n * Uses toString() fingerprinting to cache results and automatically detect runtime\n * replacements of JSON.parse (polyfills, mocks, etc.).\n *\n * @returns {boolean} true if context.source is supported, false otherwise.\n */\nconst isContextSourceSupported = () => {\n const parseFingerprint = JSON.parse.toString();\n\n if (featureCache.has(parseFingerprint)) {\n return featureCache.get(parseFingerprint);\n }\n\n try {\n const result = JSON.parse(\n \"1\",\n (_, __, context) => !!context?.source && context.source === \"1\",\n );\n featureCache.set(parseFingerprint, result);\n\n return result;\n } catch {\n featureCache.set(parseFingerprint, false);\n\n return false;\n }\n};\n\n/**\n * Reviver function that converts custom-format BigInt strings back to BigInt values.\n * Also handles \"noise\" strings that accidentally match the BigInt format.\n *\n * @param {string | number | undefined} key The object key.\n * @param {*} value The value being parsed.\n * @param {object} [context] Parse context (if supported by JSON.parse).\n * @param {Reviver} [userReviver] User's custom reviver function.\n * @returns {any} The transformed value.\n */\nconst convertMarkedBigIntsReviver = (key, value, context, userReviver) => {\n const isCustomFormatBigInt =\n typeof value === \"string\" && customFormat.test(value);\n\n if (isCustomFormatBigInt) return BigInt(value.slice(0, -1));\n\n const isNoiseValue = typeof value === \"string\" && noiseValue.test(value);\n if (isNoiseValue) return value.slice(0, -1);\n\n const hasUserReviver = typeof userReviver === \"function\";\n\n if (!hasUserReviver) return value;\n\n return userReviver(key, value, context);\n};\n\n/**\n * Fast JSON.parse implementation (~2x faster than classic fallback).\n * Uses JSON.parse's context.source feature to detect integers and convert\n * large numbers directly to BigInt without string manipulation.\n *\n * Does not support legacy custom format from v1 of this library.\n *\n * @param {string} text JSON string to parse.\n * @param {Reviver} [reviver] Transform function to apply to each value.\n * @returns {any} Parsed JavaScript value.\n */\nconst JSONParseV2 = (text, reviver) => {\n return JSON.parse(text, (key, value, context) => {\n const isNumber = typeof value === \"number\";\n const isOutOfBounds =\n value > Number.MAX_SAFE_INTEGER || value < Number.MIN_SAFE_INTEGER;\n const isBigNumber = isNumber && isOutOfBounds;\n const isInt = context && intRegex.test(context.source);\n const isBigInt = isBigNumber && isInt;\n\n if (isBigInt) return BigInt(context.source);\n\n const hasCustomReviver = typeof reviver === \"function\";\n\n if (!hasCustomReviver) return value;\n\n return reviver(key, value, context);\n });\n};\n\nconst MAX_INT = Number.MAX_SAFE_INTEGER.toString();\nconst MAX_DIGITS = MAX_INT.length;\nconst stringsOrLargeNumbers =\n /\"(?:\\\\.|[^\"])*\"|-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?/g;\nconst noiseValueWithQuotes = /^\"-?\\d+n+\"$/; // Noise - strings that match the custom format before being converted to it\n\n/**\n * Iteratively traverses the parsed object bottom-up (post-order),\n * emulating the native JSON.parse reviver behavior.\n * This avoids Call Stack overflows (RangeError) on deeply nested structures.\n *\n * @param {any} parsed The natively parsed JSON object.\n * @param {Reviver} [userReviver] User's custom reviver function.\n * @returns {any} The fully processed object.\n */\nconst applyReviverIteratively = (parsed, userReviver) => {\n const rootHolder = { \"\": parsed };\n const stack = [{ parent: rootHolder, key: \"\", visited: false }];\n\n while (stack.length > 0) {\n const node = stack[stack.length - 1];\n\n if (!node.visited) {\n node.visited = true;\n\n const value = node.parent[node.key];\n const isComplexObject = value !== null && typeof value === \"object\";\n\n if (isComplexObject) {\n const keys = Object.keys(value);\n\n for (let i = keys.length - 1; i >= 0; i--) {\n stack.push({ parent: value, key: keys[i], visited: false });\n }\n }\n } else {\n const { parent, key } = node;\n let value = parent[key];\n\n if (typeof value === \"string\") {\n const isCustomFormatBigInt = customFormat.test(value);\n\n if (isCustomFormatBigInt) {\n value = BigInt(value.slice(0, -1));\n } else {\n const isNoise = noiseValue.test(value);\n\n if (isNoise) value = value.slice(0, -1);\n }\n }\n\n const hasUserReviver = typeof userReviver === \"function\";\n\n if (hasUserReviver) {\n value = userReviver.call(parent, key, value);\n }\n\n const isDeleted = value === undefined;\n\n if (isDeleted) {\n delete parent[key];\n } else {\n parent[key] = value;\n }\n\n stack.pop();\n }\n }\n\n return rootHolder[\"\"];\n};\n\n/**\n * Pre-processes the JSON string to mark large numbers with an 'n' suffix.\n *\n * @param {string} text The raw JSON string.\n * @returns {string} The serialized string with marked BigInts.\n */\nconst serializeBigInts = (text) => {\n return text.replace(\n stringsOrLargeNumbers,\n (match, digits, fractional, exponential) => {\n const isString = match[0] === '\"';\n const isNoise = isString && noiseValueWithQuotes.test(match);\n\n if (isNoise) return match.substring(0, match.length - 1) + 'n\"'; // Mark noise values with additional \"n\" to offset the deletion of one \"n\" during the processing\n\n const hasFractionalOrExponential = fractional || exponential;\n\n // With a fixed number of digits, we can correctly use lexicographical comparison to do a numeric comparison\n const isLessThanMaxSafeInt =\n digits &&\n (digits.length < MAX_DIGITS ||\n (digits.length === MAX_DIGITS && digits <= MAX_INT));\n\n const isStandardValue =\n isString || hasFractionalOrExponential || isLessThanMaxSafeInt;\n\n if (isStandardValue) return match;\n\n return '\"' + match + 'n\"';\n },\n );\n};\n\n/**\n * Converts a JSON string into a JavaScript value.\n *\n * Supports parsing of large integers using two strategies:\n * 1. Classic fallback: Marks large numbers with \"123n\" format, then converts to BigInt\n * 2. Fast path (JSONParseV2): Uses context.source feature (~2x faster) when available\n *\n * All other JSON values are parsed exactly like native JSON.parse().\n *\n * @param {string} text A valid JSON string.\n * @param {Reviver} [reviver]\n * A function that transforms the results. This function is called for each member\n * of the object. If a member contains nested objects, the nested objects are\n * transformed before the parent object is.\n * @returns {any} The parsed JavaScript value.\n * @throws {SyntaxError} If text is not valid JSON.\n */\nconst JSONParse = (text, reviver) => {\n if (!text) return originalParse(text, reviver);\n\n try {\n if (isContextSourceSupported()) return JSONParseV2(text, reviver); // Shortcut to a faster (2x) and simpler version\n\n // Find and mark big numbers with \"n\"\n const serializedData = serializeBigInts(text);\n\n return originalParse(serializedData, (key, value, context) =>\n convertMarkedBigIntsReviver(key, value, context, reviver),\n );\n } catch (error) {\n if (error instanceof RangeError) {\n const serializedData = serializeBigInts(text);\n const parsed = originalParse(serializedData);\n\n return applyReviverIteratively(parsed, reviver);\n }\n\n throw error;\n }\n};\n\nexport { JSONStringify, JSONParse };\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|