@intlayer/config 8.1.2 → 8.1.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/dist/cjs/_virtual/_rolldown/runtime.cjs +1 -43
- package/dist/cjs/built.cjs +1 -7
- package/dist/cjs/built.cjs.map +1 -1
- package/dist/cjs/client.cjs +1 -40
- package/dist/cjs/configFile/buildConfigurationFields.cjs +1 -188
- package/dist/cjs/configFile/buildConfigurationFields.cjs.map +1 -1
- package/dist/cjs/configFile/getConfiguration.cjs +1 -70
- package/dist/cjs/configFile/getConfiguration.cjs.map +1 -1
- package/dist/cjs/configFile/index.cjs +1 -10
- package/dist/cjs/configFile/loadConfigurationFile.cjs +1 -33
- package/dist/cjs/configFile/loadConfigurationFile.cjs.map +1 -1
- package/dist/cjs/configFile/searchConfigurationFile.cjs +1 -51
- package/dist/cjs/configFile/searchConfigurationFile.cjs.map +1 -1
- package/dist/cjs/defaultValues/build.cjs +1 -29
- package/dist/cjs/defaultValues/build.cjs.map +1 -1
- package/dist/cjs/defaultValues/compiler.cjs +1 -24
- package/dist/cjs/defaultValues/compiler.cjs.map +1 -1
- package/dist/cjs/defaultValues/content.cjs +1 -56
- package/dist/cjs/defaultValues/content.cjs.map +1 -1
- package/dist/cjs/defaultValues/dictionary.cjs +1 -26
- package/dist/cjs/defaultValues/dictionary.cjs.map +1 -1
- package/dist/cjs/defaultValues/editor.cjs +1 -41
- package/dist/cjs/defaultValues/editor.cjs.map +1 -1
- package/dist/cjs/defaultValues/index.cjs +1 -78
- package/dist/cjs/defaultValues/internationalization.cjs +1 -27
- package/dist/cjs/defaultValues/internationalization.cjs.map +1 -1
- package/dist/cjs/defaultValues/log.cjs +1 -21
- package/dist/cjs/defaultValues/log.cjs.map +1 -1
- package/dist/cjs/defaultValues/routing.cjs +1 -35
- package/dist/cjs/defaultValues/routing.cjs.map +1 -1
- package/dist/cjs/defaultValues/system.cjs +1 -47
- package/dist/cjs/defaultValues/system.cjs.map +1 -1
- package/dist/cjs/index.cjs +1 -81
- package/dist/cjs/loadEnvFile.cjs +1 -36
- package/dist/cjs/loadEnvFile.cjs.map +1 -1
- package/dist/cjs/loadExternalFile/bundleFile.cjs +1 -71
- package/dist/cjs/loadExternalFile/bundleFile.cjs.map +1 -1
- package/dist/cjs/loadExternalFile/bundleJSFile.cjs +2 -0
- package/dist/cjs/loadExternalFile/bundleJSFile.cjs.map +1 -0
- package/dist/cjs/loadExternalFile/index.cjs +1 -0
- package/dist/cjs/loadExternalFile/loadExternalFile.cjs +1 -79
- package/dist/cjs/loadExternalFile/loadExternalFile.cjs.map +1 -1
- package/dist/cjs/loadExternalFile/parseFileContent.cjs +1 -77
- package/dist/cjs/loadExternalFile/parseFileContent.cjs.map +1 -1
- package/dist/cjs/loadExternalFile/transpileTSToCJS.cjs +1 -63
- package/dist/cjs/loadExternalFile/transpileTSToCJS.cjs.map +1 -1
- package/dist/cjs/logger.cjs +1 -150
- package/dist/cjs/logger.cjs.map +1 -1
- package/dist/cjs/node.cjs +1 -0
- package/dist/cjs/utils/ESMxCJSHelpers.cjs +1 -27
- package/dist/cjs/utils/ESMxCJSHelpers.cjs.map +1 -1
- package/dist/cjs/utils/alias.cjs +2 -0
- package/dist/cjs/utils/alias.cjs.map +1 -0
- package/dist/cjs/utils/cacheDisk.cjs +1 -162
- package/dist/cjs/utils/cacheDisk.cjs.map +1 -1
- package/dist/cjs/utils/cacheMemory.cjs +1 -269
- package/dist/cjs/utils/cacheMemory.cjs.map +1 -1
- package/dist/cjs/utils/clearModuleCache.cjs +1 -26
- package/dist/cjs/utils/clearModuleCache.cjs.map +1 -1
- package/dist/cjs/utils/compareVersions.cjs +1 -38
- package/dist/cjs/utils/compareVersions.cjs.map +1 -1
- package/dist/cjs/utils/extractErrorMessage.cjs +1 -95
- package/dist/cjs/utils/extractErrorMessage.cjs.map +1 -1
- package/dist/cjs/utils/getExtension.cjs +1 -14
- package/dist/cjs/utils/getExtension.cjs.map +1 -1
- package/dist/cjs/utils/getPackageJsonPath.cjs +1 -35
- package/dist/cjs/utils/getPackageJsonPath.cjs.map +1 -1
- package/dist/cjs/utils/index.cjs +1 -0
- package/dist/cjs/utils/logStack.cjs +1 -16
- package/dist/cjs/utils/logStack.cjs.map +1 -1
- package/dist/cjs/utils/normalizePath.cjs +1 -17
- package/dist/cjs/utils/normalizePath.cjs.map +1 -1
- package/dist/cjs/utils/retryManager.cjs +2 -0
- package/dist/cjs/utils/retryManager.cjs.map +1 -0
- package/dist/cjs/utils/stringFormatter/camelCaseToKebabCase.cjs +1 -13
- package/dist/cjs/utils/stringFormatter/camelCaseToKebabCase.cjs.map +1 -1
- package/dist/cjs/utils/stringFormatter/camelCaseToSentence.cjs +1 -16
- package/dist/cjs/utils/stringFormatter/camelCaseToSentence.cjs.map +1 -1
- package/dist/cjs/utils/stringFormatter/index.cjs +1 -10
- package/dist/cjs/utils/stringFormatter/kebabCaseToCamelCase.cjs +1 -14
- package/dist/cjs/utils/stringFormatter/kebabCaseToCamelCase.cjs.map +1 -1
- package/dist/cjs/utils/stringFormatter/toLowerCamelCase.cjs +1 -19
- package/dist/cjs/utils/stringFormatter/toLowerCamelCase.cjs.map +1 -1
- package/dist/esm/_virtual/_rolldown/runtime.mjs +1 -22
- package/dist/esm/built.mjs +1 -7
- package/dist/esm/built.mjs.map +1 -1
- package/dist/esm/client.mjs +1 -11
- package/dist/esm/configFile/buildConfigurationFields.mjs +1 -186
- package/dist/esm/configFile/buildConfigurationFields.mjs.map +1 -1
- package/dist/esm/configFile/getConfiguration.mjs +1 -67
- package/dist/esm/configFile/getConfiguration.mjs.map +1 -1
- package/dist/esm/configFile/index.mjs +1 -5
- package/dist/esm/configFile/loadConfigurationFile.mjs +1 -32
- package/dist/esm/configFile/loadConfigurationFile.mjs.map +1 -1
- package/dist/esm/configFile/searchConfigurationFile.mjs +1 -48
- package/dist/esm/configFile/searchConfigurationFile.mjs.map +1 -1
- package/dist/esm/defaultValues/build.mjs +1 -18
- package/dist/esm/defaultValues/build.mjs.map +1 -1
- package/dist/esm/defaultValues/compiler.mjs +1 -19
- package/dist/esm/defaultValues/compiler.mjs.map +1 -1
- package/dist/esm/defaultValues/content.mjs +1 -43
- package/dist/esm/defaultValues/content.mjs.map +1 -1
- package/dist/esm/defaultValues/dictionary.mjs +1 -16
- package/dist/esm/defaultValues/dictionary.mjs.map +1 -1
- package/dist/esm/defaultValues/editor.mjs +1 -26
- package/dist/esm/defaultValues/editor.mjs.map +1 -1
- package/dist/esm/defaultValues/index.mjs +1 -24
- package/dist/esm/defaultValues/internationalization.mjs +1 -17
- package/dist/esm/defaultValues/internationalization.mjs.map +1 -1
- package/dist/esm/defaultValues/log.mjs +1 -13
- package/dist/esm/defaultValues/log.mjs.map +1 -1
- package/dist/esm/defaultValues/routing.mjs +1 -22
- package/dist/esm/defaultValues/routing.mjs.map +1 -1
- package/dist/esm/defaultValues/system.mjs +1 -30
- package/dist/esm/defaultValues/system.mjs.map +1 -1
- package/dist/esm/index.mjs +1 -28
- package/dist/esm/loadEnvFile.mjs +1 -32
- package/dist/esm/loadEnvFile.mjs.map +1 -1
- package/dist/esm/loadExternalFile/bundleFile.mjs +1 -67
- package/dist/esm/loadExternalFile/bundleFile.mjs.map +1 -1
- package/dist/esm/loadExternalFile/bundleJSFile.mjs +2 -0
- package/dist/esm/loadExternalFile/bundleJSFile.mjs.map +1 -0
- package/dist/esm/loadExternalFile/index.mjs +1 -0
- package/dist/esm/loadExternalFile/loadExternalFile.mjs +1 -75
- package/dist/esm/loadExternalFile/loadExternalFile.mjs.map +1 -1
- package/dist/esm/loadExternalFile/parseFileContent.mjs +1 -73
- package/dist/esm/loadExternalFile/parseFileContent.mjs.map +1 -1
- package/dist/esm/loadExternalFile/transpileTSToCJS.mjs +1 -60
- package/dist/esm/loadExternalFile/transpileTSToCJS.mjs.map +1 -1
- package/dist/esm/logger.mjs +1 -133
- package/dist/esm/logger.mjs.map +1 -1
- package/dist/esm/node.mjs +1 -0
- package/dist/esm/utils/ESMxCJSHelpers.mjs +1 -24
- package/dist/esm/utils/ESMxCJSHelpers.mjs.map +1 -1
- package/dist/esm/utils/alias.mjs +2 -0
- package/dist/esm/utils/alias.mjs.map +1 -0
- package/dist/esm/utils/cacheDisk.mjs +1 -159
- package/dist/esm/utils/cacheDisk.mjs.map +1 -1
- package/dist/esm/utils/cacheMemory.mjs +1 -261
- package/dist/esm/utils/cacheMemory.mjs.map +1 -1
- package/dist/esm/utils/clearModuleCache.mjs +1 -25
- package/dist/esm/utils/clearModuleCache.mjs.map +1 -1
- package/dist/esm/utils/compareVersions.mjs +1 -36
- package/dist/esm/utils/compareVersions.mjs.map +1 -1
- package/dist/esm/utils/extractErrorMessage.mjs +1 -93
- package/dist/esm/utils/extractErrorMessage.mjs.map +1 -1
- package/dist/esm/utils/getExtension.mjs +1 -12
- package/dist/esm/utils/getExtension.mjs.map +1 -1
- package/dist/esm/utils/getPackageJsonPath.mjs +1 -32
- package/dist/esm/utils/getPackageJsonPath.mjs.map +1 -1
- package/dist/esm/utils/index.mjs +1 -0
- package/dist/esm/utils/logStack.mjs +1 -15
- package/dist/esm/utils/logStack.mjs.map +1 -1
- package/dist/esm/utils/normalizePath.mjs +1 -15
- package/dist/esm/utils/normalizePath.mjs.map +1 -1
- package/dist/esm/utils/retryManager.mjs +2 -0
- package/dist/esm/utils/retryManager.mjs.map +1 -0
- package/dist/esm/utils/stringFormatter/camelCaseToKebabCase.mjs +1 -11
- package/dist/esm/utils/stringFormatter/camelCaseToKebabCase.mjs.map +1 -1
- package/dist/esm/utils/stringFormatter/camelCaseToSentence.mjs +1 -14
- package/dist/esm/utils/stringFormatter/camelCaseToSentence.mjs.map +1 -1
- package/dist/esm/utils/stringFormatter/index.mjs +1 -6
- package/dist/esm/utils/stringFormatter/kebabCaseToCamelCase.mjs +1 -12
- package/dist/esm/utils/stringFormatter/kebabCaseToCamelCase.mjs.map +1 -1
- package/dist/esm/utils/stringFormatter/toLowerCamelCase.mjs +1 -17
- package/dist/esm/utils/stringFormatter/toLowerCamelCase.mjs.map +1 -1
- package/dist/types/index.d.ts +15 -9
- package/dist/types/{bundleJSFile.d.ts → loadExternalFile/bundleJSFile.d.ts} +1 -1
- package/dist/types/loadExternalFile/bundleJSFile.d.ts.map +1 -0
- package/dist/types/loadExternalFile/index.d.ts +6 -0
- package/dist/types/loadExternalFile/loadExternalFile.d.ts +2 -3
- package/dist/types/loadExternalFile/loadExternalFile.d.ts.map +1 -1
- package/dist/types/loadExternalFile/transpileTSToCJS.d.ts +2 -3
- package/dist/types/loadExternalFile/transpileTSToCJS.d.ts.map +1 -1
- package/dist/types/node.d.ts +5 -0
- package/dist/types/{alias.d.ts → utils/alias.d.ts} +1 -1
- package/dist/types/utils/alias.d.ts.map +1 -0
- package/dist/types/utils/getPackageJsonPath.d.ts +1 -2
- package/dist/types/utils/getPackageJsonPath.d.ts.map +1 -1
- package/dist/types/utils/index.d.ts +17 -0
- package/dist/types/{retryManager.d.ts → utils/retryManager.d.ts} +1 -1
- package/dist/types/utils/retryManager.d.ts.map +1 -0
- package/package.json +42 -10
- package/dist/cjs/alias.cjs +0 -30
- package/dist/cjs/alias.cjs.map +0 -1
- package/dist/cjs/bundleJSFile.cjs +0 -34
- package/dist/cjs/bundleJSFile.cjs.map +0 -1
- package/dist/cjs/retryManager.cjs +0 -46
- package/dist/cjs/retryManager.cjs.map +0 -1
- package/dist/esm/alias.mjs +0 -28
- package/dist/esm/alias.mjs.map +0 -1
- package/dist/esm/bundleJSFile.mjs +0 -32
- package/dist/esm/bundleJSFile.mjs.map +0 -1
- package/dist/esm/retryManager.mjs +0 -45
- package/dist/esm/retryManager.mjs.map +0 -1
- package/dist/types/alias.d.ts.map +0 -1
- package/dist/types/bundleJSFile.d.ts.map +0 -1
- package/dist/types/retryManager.d.ts.map +0 -1
|
@@ -1,262 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
//#region src/utils/cacheMemory.ts
|
|
4
|
-
/** ------------------------- Utilities ------------------------- **/
|
|
5
|
-
/** Prefer a fast non-crypto hash if available, then fast crypto, then sha256. */
|
|
6
|
-
const pickHashAlgorithm = () => {
|
|
7
|
-
try {
|
|
8
|
-
createHash("xxhash64").update("test").digest();
|
|
9
|
-
return "xxhash64";
|
|
10
|
-
} catch {}
|
|
11
|
-
try {
|
|
12
|
-
createHash("sha1").update("test").digest();
|
|
13
|
-
return "sha1";
|
|
14
|
-
} catch {}
|
|
15
|
-
return "sha256";
|
|
16
|
-
};
|
|
17
|
-
const HASH_ALGORITHM = pickHashAlgorithm();
|
|
18
|
-
/** Base64url without padding for compact, file-system-safe ids. */
|
|
19
|
-
const toBase64Url = (buffer) => buffer.toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
|
|
20
|
-
/** Token helpers to minimize collisions while streaming to the hasher. */
|
|
21
|
-
const token = {
|
|
22
|
-
start: (hasher, tag) => hasher.update(`<${tag}>`),
|
|
23
|
-
sep: (hasher) => hasher.update("|"),
|
|
24
|
-
end: (hasher, tag) => hasher.update(`</${tag}>`),
|
|
25
|
-
str: (hasher, stringValue) => {
|
|
26
|
-
hasher.update(`${stringValue.length}#`);
|
|
27
|
-
hasher.update(stringValue);
|
|
28
|
-
},
|
|
29
|
-
num: (hasher, numberValue) => hasher.update(Number.isNaN(numberValue) ? "NaN" : numberValue === Infinity ? "Inf" : numberValue === -Infinity ? "-Inf" : String(numberValue)),
|
|
30
|
-
big: (hasher, bigintValue) => hasher.update(bigintValue.toString(10)),
|
|
31
|
-
bool: (hasher, booleanValue) => hasher.update(booleanValue ? "1" : "0")
|
|
32
|
-
};
|
|
33
|
-
/**
|
|
34
|
-
* Streams a canonical representation of `value` into `hasher` without
|
|
35
|
-
* constructing large intermediate strings. Objects/Maps/Sets are normalized.
|
|
36
|
-
*/
|
|
37
|
-
const stableHashValue = (hasher, value, seen) => {
|
|
38
|
-
const valueType = typeof value;
|
|
39
|
-
if (value === null) {
|
|
40
|
-
token.start(hasher, "null");
|
|
41
|
-
token.end(hasher, "null");
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
if (valueType === "undefined") {
|
|
45
|
-
token.start(hasher, "undef");
|
|
46
|
-
token.end(hasher, "undef");
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
if (valueType === "number") {
|
|
50
|
-
token.start(hasher, "num");
|
|
51
|
-
token.num(hasher, value);
|
|
52
|
-
token.end(hasher, "num");
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
if (valueType === "bigint") {
|
|
56
|
-
token.start(hasher, "big");
|
|
57
|
-
token.big(hasher, value);
|
|
58
|
-
token.end(hasher, "big");
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
if (valueType === "boolean") {
|
|
62
|
-
token.start(hasher, "bool");
|
|
63
|
-
token.bool(hasher, value);
|
|
64
|
-
token.end(hasher, "bool");
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
if (valueType === "string") {
|
|
68
|
-
token.start(hasher, "str");
|
|
69
|
-
token.str(hasher, value);
|
|
70
|
-
token.end(hasher, "str");
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
if (valueType === "symbol") {
|
|
74
|
-
token.start(hasher, "sym");
|
|
75
|
-
token.str(hasher, String(value));
|
|
76
|
-
token.end(hasher, "sym");
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
if (valueType === "function") {
|
|
80
|
-
const functionValue = value;
|
|
81
|
-
token.start(hasher, "fn");
|
|
82
|
-
token.str(hasher, functionValue.name ?? "");
|
|
83
|
-
token.sep(hasher);
|
|
84
|
-
token.num(hasher, functionValue.length);
|
|
85
|
-
token.end(hasher, "fn");
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
if (Array.isArray(value)) {
|
|
89
|
-
if (seen.has(value)) {
|
|
90
|
-
token.start(hasher, "arr");
|
|
91
|
-
token.str(hasher, "Circular");
|
|
92
|
-
token.end(hasher, "arr");
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
seen.add(value);
|
|
96
|
-
token.start(hasher, "arr");
|
|
97
|
-
for (let i = 0; i < value.length; i++) {
|
|
98
|
-
token.sep(hasher);
|
|
99
|
-
stableHashValue(hasher, value[i], seen);
|
|
100
|
-
}
|
|
101
|
-
token.end(hasher, "arr");
|
|
102
|
-
seen.delete(value);
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
if (value instanceof Date) {
|
|
106
|
-
token.start(hasher, "date");
|
|
107
|
-
token.str(hasher, value.toISOString());
|
|
108
|
-
token.end(hasher, "date");
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
if (value instanceof RegExp) {
|
|
112
|
-
const regex = value;
|
|
113
|
-
token.start(hasher, "re");
|
|
114
|
-
token.str(hasher, regex.source);
|
|
115
|
-
token.sep(hasher);
|
|
116
|
-
token.str(hasher, regex.flags);
|
|
117
|
-
token.end(hasher, "re");
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
if (value instanceof Set) {
|
|
121
|
-
const setValue = value;
|
|
122
|
-
if (seen.has(setValue)) {
|
|
123
|
-
token.start(hasher, "set");
|
|
124
|
-
token.str(hasher, "Circular");
|
|
125
|
-
token.end(hasher, "set");
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
seen.add(setValue);
|
|
129
|
-
const items = [];
|
|
130
|
-
for (const v of setValue) items.push(stableStringify(v));
|
|
131
|
-
items.sort();
|
|
132
|
-
token.start(hasher, "set");
|
|
133
|
-
for (const item of items) {
|
|
134
|
-
token.sep(hasher);
|
|
135
|
-
token.str(hasher, item);
|
|
136
|
-
}
|
|
137
|
-
token.end(hasher, "set");
|
|
138
|
-
seen.delete(setValue);
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
if (value instanceof Map) {
|
|
142
|
-
const mapObject = value;
|
|
143
|
-
if (seen.has(mapObject)) {
|
|
144
|
-
token.start(hasher, "map");
|
|
145
|
-
token.str(hasher, "Circular");
|
|
146
|
-
token.end(hasher, "map");
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
seen.add(mapObject);
|
|
150
|
-
const entries = [];
|
|
151
|
-
for (const [k, v] of mapObject.entries()) entries.push([stableStringify(k), v]);
|
|
152
|
-
entries.sort((a, b) => a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0);
|
|
153
|
-
token.start(hasher, "map");
|
|
154
|
-
for (const [keyFingerprint, entryValue] of entries) {
|
|
155
|
-
token.sep(hasher);
|
|
156
|
-
token.str(hasher, keyFingerprint);
|
|
157
|
-
token.sep(hasher);
|
|
158
|
-
stableHashValue(hasher, entryValue, seen);
|
|
159
|
-
}
|
|
160
|
-
token.end(hasher, "map");
|
|
161
|
-
seen.delete(mapObject);
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
if (ArrayBuffer.isView(value)) {
|
|
165
|
-
const view = value;
|
|
166
|
-
token.start(hasher, "typed");
|
|
167
|
-
token.str(hasher, Object.getPrototypeOf(view).constructor.name);
|
|
168
|
-
token.sep(hasher);
|
|
169
|
-
hasher.update(Buffer.from(view.buffer, view.byteOffset, view.byteLength));
|
|
170
|
-
token.end(hasher, "typed");
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
if (value instanceof ArrayBuffer) {
|
|
174
|
-
const buffer = Buffer.from(value);
|
|
175
|
-
token.start(hasher, "ab");
|
|
176
|
-
hasher.update(buffer);
|
|
177
|
-
token.end(hasher, "ab");
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
if (typeof URL !== "undefined" && value instanceof URL) {
|
|
181
|
-
token.start(hasher, "url");
|
|
182
|
-
token.str(hasher, value.toString());
|
|
183
|
-
token.end(hasher, "url");
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
if (value instanceof Error) {
|
|
187
|
-
const errorValue = value;
|
|
188
|
-
token.start(hasher, "err");
|
|
189
|
-
token.str(hasher, errorValue.name || "");
|
|
190
|
-
token.sep(hasher);
|
|
191
|
-
token.str(hasher, errorValue.message || "");
|
|
192
|
-
token.sep(hasher);
|
|
193
|
-
token.str(hasher, errorValue.stack || "");
|
|
194
|
-
token.end(hasher, "err");
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
if (valueType === "object") {
|
|
198
|
-
const objectValue = value;
|
|
199
|
-
if (seen.has(objectValue)) {
|
|
200
|
-
token.start(hasher, "obj");
|
|
201
|
-
token.str(hasher, "Circular");
|
|
202
|
-
token.end(hasher, "obj");
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
seen.add(objectValue);
|
|
206
|
-
const keys = Object.keys(objectValue).sort();
|
|
207
|
-
token.start(hasher, "obj");
|
|
208
|
-
for (const key of keys) {
|
|
209
|
-
token.sep(hasher);
|
|
210
|
-
token.str(hasher, key);
|
|
211
|
-
token.sep(hasher);
|
|
212
|
-
stableHashValue(hasher, objectValue[key], seen);
|
|
213
|
-
}
|
|
214
|
-
token.end(hasher, "obj");
|
|
215
|
-
seen.delete(objectValue);
|
|
216
|
-
return;
|
|
217
|
-
}
|
|
218
|
-
token.start(hasher, "other");
|
|
219
|
-
token.str(hasher, String(value));
|
|
220
|
-
token.end(hasher, "other");
|
|
221
|
-
};
|
|
222
|
-
/** Public stringify kept for convenience / debugging (now faster & broader). */
|
|
223
|
-
const stableStringify = (value, _stack = /* @__PURE__ */ new WeakSet()) => {
|
|
224
|
-
const hasher = createHash(HASH_ALGORITHM);
|
|
225
|
-
stableHashValue(hasher, value, _stack);
|
|
226
|
-
return toBase64Url(hasher.digest());
|
|
227
|
-
};
|
|
228
|
-
/** Compute a compact, stable id for arbitrary key tuples. */
|
|
229
|
-
const computeKeyId = (keyParts) => {
|
|
230
|
-
const h = createHash(HASH_ALGORITHM);
|
|
231
|
-
token.start(h, "keys");
|
|
232
|
-
for (let i = 0; i < keyParts.length; i++) {
|
|
233
|
-
token.sep(h);
|
|
234
|
-
stableHashValue(h, keyParts[i], /* @__PURE__ */ new WeakSet());
|
|
235
|
-
}
|
|
236
|
-
token.end(h, "keys");
|
|
237
|
-
return toBase64Url(h.digest());
|
|
238
|
-
};
|
|
239
|
-
const cacheMap = /* @__PURE__ */ new Map();
|
|
240
|
-
const getCache = (...key) => {
|
|
241
|
-
return cacheMap.get(computeKeyId(key));
|
|
242
|
-
};
|
|
243
|
-
const setCache = (...args) => {
|
|
244
|
-
const value = args[args.length - 1];
|
|
245
|
-
const key = args.slice(0, -1);
|
|
246
|
-
cacheMap.set(computeKeyId(key), value);
|
|
247
|
-
};
|
|
248
|
-
const clearCache = (idOrKey) => {
|
|
249
|
-
cacheMap.delete(idOrKey);
|
|
250
|
-
};
|
|
251
|
-
const clearAllCache = () => {
|
|
252
|
-
cacheMap.clear();
|
|
253
|
-
};
|
|
254
|
-
const cacheMemory = {
|
|
255
|
-
get: getCache,
|
|
256
|
-
set: setCache,
|
|
257
|
-
clear: clearCache
|
|
258
|
-
};
|
|
259
|
-
|
|
260
|
-
//#endregion
|
|
261
|
-
export { cacheMemory, clearAllCache, clearCache, computeKeyId, getCache, setCache, stableStringify };
|
|
1
|
+
import{createHash as e}from"node:crypto";const t=(()=>{try{return e(`xxhash64`).update(`test`).digest(),`xxhash64`}catch{}try{return e(`sha1`).update(`test`).digest(),`sha1`}catch{}return`sha256`})(),n=e=>e.toString(`base64`).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/g,``),r={start:(e,t)=>e.update(`<${t}>`),sep:e=>e.update(`|`),end:(e,t)=>e.update(`</${t}>`),str:(e,t)=>{e.update(`${t.length}#`),e.update(t)},num:(e,t)=>e.update(Number.isNaN(t)?`NaN`:t===1/0?`Inf`:t===-1/0?`-Inf`:String(t)),big:(e,t)=>e.update(t.toString(10)),bool:(e,t)=>e.update(t?`1`:`0`)},i=(e,t,n)=>{let o=typeof t;if(t===null){r.start(e,`null`),r.end(e,`null`);return}if(o===`undefined`){r.start(e,`undef`),r.end(e,`undef`);return}if(o===`number`){r.start(e,`num`),r.num(e,t),r.end(e,`num`);return}if(o===`bigint`){r.start(e,`big`),r.big(e,t),r.end(e,`big`);return}if(o===`boolean`){r.start(e,`bool`),r.bool(e,t),r.end(e,`bool`);return}if(o===`string`){r.start(e,`str`),r.str(e,t),r.end(e,`str`);return}if(o===`symbol`){r.start(e,`sym`),r.str(e,String(t)),r.end(e,`sym`);return}if(o===`function`){let n=t;r.start(e,`fn`),r.str(e,n.name??``),r.sep(e),r.num(e,n.length),r.end(e,`fn`);return}if(Array.isArray(t)){if(n.has(t)){r.start(e,`arr`),r.str(e,`Circular`),r.end(e,`arr`);return}n.add(t),r.start(e,`arr`);for(let a=0;a<t.length;a++)r.sep(e),i(e,t[a],n);r.end(e,`arr`),n.delete(t);return}if(t instanceof Date){r.start(e,`date`),r.str(e,t.toISOString()),r.end(e,`date`);return}if(t instanceof RegExp){let n=t;r.start(e,`re`),r.str(e,n.source),r.sep(e),r.str(e,n.flags),r.end(e,`re`);return}if(t instanceof Set){let i=t;if(n.has(i)){r.start(e,`set`),r.str(e,`Circular`),r.end(e,`set`);return}n.add(i);let o=[];for(let e of i)o.push(a(e));o.sort(),r.start(e,`set`);for(let t of o)r.sep(e),r.str(e,t);r.end(e,`set`),n.delete(i);return}if(t instanceof Map){let o=t;if(n.has(o)){r.start(e,`map`),r.str(e,`Circular`),r.end(e,`map`);return}n.add(o);let s=[];for(let[e,t]of o.entries())s.push([a(e),t]);s.sort((e,t)=>e[0]<t[0]?-1:e[0]>t[0]?1:0),r.start(e,`map`);for(let[t,a]of s)r.sep(e),r.str(e,t),r.sep(e),i(e,a,n);r.end(e,`map`),n.delete(o);return}if(ArrayBuffer.isView(t)){let n=t;r.start(e,`typed`),r.str(e,Object.getPrototypeOf(n).constructor.name),r.sep(e),e.update(Buffer.from(n.buffer,n.byteOffset,n.byteLength)),r.end(e,`typed`);return}if(t instanceof ArrayBuffer){let n=Buffer.from(t);r.start(e,`ab`),e.update(n),r.end(e,`ab`);return}if(typeof URL<`u`&&t instanceof URL){r.start(e,`url`),r.str(e,t.toString()),r.end(e,`url`);return}if(t instanceof Error){let n=t;r.start(e,`err`),r.str(e,n.name||``),r.sep(e),r.str(e,n.message||``),r.sep(e),r.str(e,n.stack||``),r.end(e,`err`);return}if(o===`object`){let a=t;if(n.has(a)){r.start(e,`obj`),r.str(e,`Circular`),r.end(e,`obj`);return}n.add(a);let o=Object.keys(a).sort();r.start(e,`obj`);for(let t of o)r.sep(e),r.str(e,t),r.sep(e),i(e,a[t],n);r.end(e,`obj`),n.delete(a);return}r.start(e,`other`),r.str(e,String(t)),r.end(e,`other`)},a=(r,a=new WeakSet)=>{let o=e(t);return i(o,r,a),n(o.digest())},o=a=>{let o=e(t);r.start(o,`keys`);for(let e=0;e<a.length;e++)r.sep(o),i(o,a[e],new WeakSet);return r.end(o,`keys`),n(o.digest())},s=new Map,c=(...e)=>s.get(o(e)),l=(...e)=>{let t=e[e.length-1],n=e.slice(0,-1);s.set(o(n),t)},u=e=>{s.delete(e)},d=()=>{s.clear()},f={get:c,set:l,clear:u};export{f as cacheMemory,d as clearAllCache,u as clearCache,o as computeKeyId,c as getCache,l as setCache,a as stableStringify};
|
|
262
2
|
//# sourceMappingURL=cacheMemory.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cacheMemory.mjs","names":[],"sources":["../../../src/utils/cacheMemory.ts"],"sourcesContent":["import { createHash, type Hash } from 'node:crypto';\n\n/** ------------------------- Utilities ------------------------- **/\n\n/** Prefer a fast non-crypto hash if available, then fast crypto, then sha256. */\nconst pickHashAlgorithm = (): string => {\n try {\n // Node 20+ supports xxhash64 (very fast). We feature-detect at module load.\n createHash('xxhash64').update('test').digest();\n return 'xxhash64';\n } catch {}\n try {\n // sha1 is faster than sha256 and sufficient for cache keys.\n createHash('sha1').update('test').digest();\n return 'sha1';\n } catch {}\n\n return 'sha256';\n};\nconst HASH_ALGORITHM = pickHashAlgorithm();\n\n/** Base64url without padding for compact, file-system-safe ids. */\nconst toBase64Url = (buffer: Buffer): string =>\n buffer\n .toString('base64')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/g, '');\n\n/** Token helpers to minimize collisions while streaming to the hasher. */\nconst token = {\n start: (hasher: Hash, tag: string) => hasher.update(`<${tag}>`),\n sep: (hasher: Hash) => hasher.update('|'),\n end: (hasher: Hash, tag: string) => hasher.update(`</${tag}>`),\n str: (hasher: Hash, stringValue: string) => {\n // length prefix to avoid ambiguity: len#value\n hasher.update(`${stringValue.length}#`);\n hasher.update(stringValue);\n },\n num: (hasher: Hash, numberValue: number) =>\n hasher.update(\n Number.isNaN(numberValue)\n ? 'NaN'\n : numberValue === Infinity\n ? 'Inf'\n : numberValue === -Infinity\n ? '-Inf'\n : String(numberValue)\n ),\n big: (hasher: Hash, bigintValue: bigint) =>\n hasher.update(bigintValue.toString(10)),\n bool: (hasher: Hash, booleanValue: boolean) =>\n hasher.update(booleanValue ? '1' : '0'),\n};\n\n/** ------------------- Canonical, streaming hasher ------------------- **/\n\ntype Seen = WeakSet<object>;\n\n/**\n * Streams a canonical representation of `value` into `hasher` without\n * constructing large intermediate strings. Objects/Maps/Sets are normalized.\n */\nconst stableHashValue = (hasher: Hash, value: unknown, seen: Seen): void => {\n const valueType = typeof value;\n\n if (value === null) {\n token.start(hasher, 'null');\n token.end(hasher, 'null');\n return;\n }\n\n if (valueType === 'undefined') {\n token.start(hasher, 'undef');\n token.end(hasher, 'undef');\n return;\n }\n\n if (valueType === 'number') {\n token.start(hasher, 'num');\n token.num(hasher, value as number);\n token.end(hasher, 'num');\n return;\n }\n\n if (valueType === 'bigint') {\n token.start(hasher, 'big');\n token.big(hasher, value as bigint);\n token.end(hasher, 'big');\n return;\n }\n\n if (valueType === 'boolean') {\n token.start(hasher, 'bool');\n token.bool(hasher, value as boolean);\n token.end(hasher, 'bool');\n return;\n }\n\n if (valueType === 'string') {\n token.start(hasher, 'str');\n token.str(hasher, value as string);\n token.end(hasher, 'str');\n return;\n }\n\n if (valueType === 'symbol') {\n token.start(hasher, 'sym');\n token.str(hasher, String(value));\n token.end(hasher, 'sym');\n return;\n }\n\n if (valueType === 'function') {\n // Stable-ish fingerprint: name and arity (avoid source text).\n const functionValue = value as Function;\n token.start(hasher, 'fn');\n token.str(hasher, functionValue.name ?? '');\n token.sep(hasher);\n token.num(hasher, functionValue.length);\n token.end(hasher, 'fn');\n return;\n }\n\n // Arrays and typed arrays\n if (Array.isArray(value)) {\n if (seen.has(value)) {\n token.start(hasher, 'arr');\n token.str(hasher, 'Circular');\n token.end(hasher, 'arr');\n return;\n }\n seen.add(value);\n token.start(hasher, 'arr');\n for (let i = 0; i < value.length; i++) {\n token.sep(hasher);\n stableHashValue(hasher, value[i], seen);\n }\n token.end(hasher, 'arr');\n seen.delete(value);\n return;\n }\n\n // Node/Builtins\n if (value instanceof Date) {\n token.start(hasher, 'date');\n token.str(hasher, (value as Date).toISOString());\n token.end(hasher, 'date');\n return;\n }\n\n if (value instanceof RegExp) {\n const regex = value as RegExp;\n token.start(hasher, 're');\n token.str(hasher, regex.source);\n token.sep(hasher);\n token.str(hasher, regex.flags);\n token.end(hasher, 're');\n return;\n }\n\n if (value instanceof Set) {\n const setValue = value as Set<unknown>;\n if (seen.has(setValue)) {\n token.start(hasher, 'set');\n token.str(hasher, 'Circular');\n token.end(hasher, 'set');\n return;\n }\n seen.add(setValue);\n // Normalize by item fingerprints (strings) to sort deterministically.\n const items: string[] = [];\n for (const v of setValue) items.push(stableStringify(v)); // small, bounded use of stringify\n items.sort();\n token.start(hasher, 'set');\n for (const item of items) {\n token.sep(hasher);\n token.str(hasher, item);\n }\n token.end(hasher, 'set');\n seen.delete(setValue);\n return;\n }\n\n if (value instanceof Map) {\n const mapObject = value as Map<unknown, unknown>;\n if (seen.has(mapObject)) {\n token.start(hasher, 'map');\n token.str(hasher, 'Circular');\n token.end(hasher, 'map');\n return;\n }\n seen.add(mapObject);\n // Normalize by sorted key fingerprints.\n const entries: Array<[string, unknown]> = [];\n for (const [k, v] of mapObject.entries())\n entries.push([stableStringify(k), v]);\n entries.sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0));\n token.start(hasher, 'map');\n for (const [keyFingerprint, entryValue] of entries) {\n token.sep(hasher);\n token.str(hasher, keyFingerprint);\n token.sep(hasher);\n stableHashValue(hasher, entryValue, seen);\n }\n token.end(hasher, 'map');\n seen.delete(mapObject);\n return;\n }\n\n // ArrayBuffer & typed arrays\n if (ArrayBuffer.isView(value)) {\n const view = value as ArrayBufferView;\n token.start(hasher, 'typed');\n token.str(hasher, Object.getPrototypeOf(view).constructor.name);\n token.sep(hasher);\n hasher.update(Buffer.from(view.buffer, view.byteOffset, view.byteLength));\n token.end(hasher, 'typed');\n return;\n }\n if (value instanceof ArrayBuffer) {\n const buffer = Buffer.from(value as ArrayBuffer);\n token.start(hasher, 'ab');\n hasher.update(buffer);\n token.end(hasher, 'ab');\n return;\n }\n\n // URL\n if (typeof URL !== 'undefined' && value instanceof URL) {\n token.start(hasher, 'url');\n token.str(hasher, (value as URL).toString());\n token.end(hasher, 'url');\n return;\n }\n\n // Errors\n if (value instanceof Error) {\n const errorValue = value as Error;\n token.start(hasher, 'err');\n token.str(hasher, errorValue.name || '');\n token.sep(hasher);\n token.str(hasher, errorValue.message || '');\n token.sep(hasher);\n token.str(hasher, errorValue.stack || '');\n token.end(hasher, 'err');\n return;\n }\n\n // Generic objects\n if (valueType === 'object') {\n const objectValue = value as Record<string, unknown>;\n if (seen.has(objectValue)) {\n token.start(hasher, 'obj');\n token.str(hasher, 'Circular');\n token.end(hasher, 'obj');\n return;\n }\n seen.add(objectValue);\n\n const keys = Object.keys(objectValue).sort();\n token.start(hasher, 'obj');\n for (const key of keys) {\n token.sep(hasher);\n token.str(hasher, key);\n token.sep(hasher);\n stableHashValue(hasher, (objectValue as any)[key], seen);\n }\n token.end(hasher, 'obj');\n\n seen.delete(objectValue);\n return;\n }\n\n // Fallback\n token.start(hasher, 'other');\n token.str(hasher, String(value));\n token.end(hasher, 'other');\n};\n\n/** Public stringify kept for convenience / debugging (now faster & broader). */\nexport const stableStringify = (\n value: unknown,\n _stack = new WeakSet<object>()\n): string => {\n const hasher = createHash(HASH_ALGORITHM);\n stableHashValue(hasher, value, _stack);\n return toBase64Url(hasher.digest());\n};\n\n/** Compute a compact, stable id for arbitrary key tuples. */\nexport const computeKeyId = (keyParts: unknown[]): string => {\n const h = createHash(HASH_ALGORITHM);\n token.start(h, 'keys');\n for (let i = 0; i < keyParts.length; i++) {\n token.sep(h);\n stableHashValue(h, keyParts[i], new WeakSet());\n }\n token.end(h, 'keys');\n return toBase64Url(h.digest());\n};\n\n/** ------------------------- In-memory cache ------------------------- **/\n\nexport type CacheKey = unknown;\nconst cacheMap = new Map<string, any>();\n\nexport const getCache = <T>(...key: CacheKey[]): T | undefined => {\n return cacheMap.get(computeKeyId(key));\n};\n\ntype CacheSetArgs<T> = [...keys: CacheKey[], value: T];\n\nexport const setCache = <T>(...args: CacheSetArgs<T>): void => {\n const value = args[args.length - 1] as T;\n const key = args.slice(0, -1) as CacheKey[];\n cacheMap.set(computeKeyId(key), value);\n};\n\nexport const clearCache = (idOrKey: string): void => {\n // Accept either our computed id or a legacy string id the caller already computed.\n cacheMap.delete(idOrKey);\n};\n\nexport const clearAllCache = (): void => {\n cacheMap.clear();\n};\n\nexport const cacheMemory = {\n get: getCache,\n set: setCache,\n clear: clearCache,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cacheMemory.mjs","names":[],"sources":["../../../src/utils/cacheMemory.ts"],"sourcesContent":["import { createHash, type Hash } from 'node:crypto';\n\n/** ------------------------- Utilities ------------------------- **/\n\n/** Prefer a fast non-crypto hash if available, then fast crypto, then sha256. */\nconst pickHashAlgorithm = (): string => {\n try {\n // Node 20+ supports xxhash64 (very fast). We feature-detect at module load.\n createHash('xxhash64').update('test').digest();\n return 'xxhash64';\n } catch {}\n try {\n // sha1 is faster than sha256 and sufficient for cache keys.\n createHash('sha1').update('test').digest();\n return 'sha1';\n } catch {}\n\n return 'sha256';\n};\nconst HASH_ALGORITHM = pickHashAlgorithm();\n\n/** Base64url without padding for compact, file-system-safe ids. */\nconst toBase64Url = (buffer: Buffer): string =>\n buffer\n .toString('base64')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/g, '');\n\n/** Token helpers to minimize collisions while streaming to the hasher. */\nconst token = {\n start: (hasher: Hash, tag: string) => hasher.update(`<${tag}>`),\n sep: (hasher: Hash) => hasher.update('|'),\n end: (hasher: Hash, tag: string) => hasher.update(`</${tag}>`),\n str: (hasher: Hash, stringValue: string) => {\n // length prefix to avoid ambiguity: len#value\n hasher.update(`${stringValue.length}#`);\n hasher.update(stringValue);\n },\n num: (hasher: Hash, numberValue: number) =>\n hasher.update(\n Number.isNaN(numberValue)\n ? 'NaN'\n : numberValue === Infinity\n ? 'Inf'\n : numberValue === -Infinity\n ? '-Inf'\n : String(numberValue)\n ),\n big: (hasher: Hash, bigintValue: bigint) =>\n hasher.update(bigintValue.toString(10)),\n bool: (hasher: Hash, booleanValue: boolean) =>\n hasher.update(booleanValue ? '1' : '0'),\n};\n\n/** ------------------- Canonical, streaming hasher ------------------- **/\n\ntype Seen = WeakSet<object>;\n\n/**\n * Streams a canonical representation of `value` into `hasher` without\n * constructing large intermediate strings. Objects/Maps/Sets are normalized.\n */\nconst stableHashValue = (hasher: Hash, value: unknown, seen: Seen): void => {\n const valueType = typeof value;\n\n if (value === null) {\n token.start(hasher, 'null');\n token.end(hasher, 'null');\n return;\n }\n\n if (valueType === 'undefined') {\n token.start(hasher, 'undef');\n token.end(hasher, 'undef');\n return;\n }\n\n if (valueType === 'number') {\n token.start(hasher, 'num');\n token.num(hasher, value as number);\n token.end(hasher, 'num');\n return;\n }\n\n if (valueType === 'bigint') {\n token.start(hasher, 'big');\n token.big(hasher, value as bigint);\n token.end(hasher, 'big');\n return;\n }\n\n if (valueType === 'boolean') {\n token.start(hasher, 'bool');\n token.bool(hasher, value as boolean);\n token.end(hasher, 'bool');\n return;\n }\n\n if (valueType === 'string') {\n token.start(hasher, 'str');\n token.str(hasher, value as string);\n token.end(hasher, 'str');\n return;\n }\n\n if (valueType === 'symbol') {\n token.start(hasher, 'sym');\n token.str(hasher, String(value));\n token.end(hasher, 'sym');\n return;\n }\n\n if (valueType === 'function') {\n // Stable-ish fingerprint: name and arity (avoid source text).\n const functionValue = value as Function;\n token.start(hasher, 'fn');\n token.str(hasher, functionValue.name ?? '');\n token.sep(hasher);\n token.num(hasher, functionValue.length);\n token.end(hasher, 'fn');\n return;\n }\n\n // Arrays and typed arrays\n if (Array.isArray(value)) {\n if (seen.has(value)) {\n token.start(hasher, 'arr');\n token.str(hasher, 'Circular');\n token.end(hasher, 'arr');\n return;\n }\n seen.add(value);\n token.start(hasher, 'arr');\n for (let i = 0; i < value.length; i++) {\n token.sep(hasher);\n stableHashValue(hasher, value[i], seen);\n }\n token.end(hasher, 'arr');\n seen.delete(value);\n return;\n }\n\n // Node/Builtins\n if (value instanceof Date) {\n token.start(hasher, 'date');\n token.str(hasher, (value as Date).toISOString());\n token.end(hasher, 'date');\n return;\n }\n\n if (value instanceof RegExp) {\n const regex = value as RegExp;\n token.start(hasher, 're');\n token.str(hasher, regex.source);\n token.sep(hasher);\n token.str(hasher, regex.flags);\n token.end(hasher, 're');\n return;\n }\n\n if (value instanceof Set) {\n const setValue = value as Set<unknown>;\n if (seen.has(setValue)) {\n token.start(hasher, 'set');\n token.str(hasher, 'Circular');\n token.end(hasher, 'set');\n return;\n }\n seen.add(setValue);\n // Normalize by item fingerprints (strings) to sort deterministically.\n const items: string[] = [];\n for (const v of setValue) items.push(stableStringify(v)); // small, bounded use of stringify\n items.sort();\n token.start(hasher, 'set');\n for (const item of items) {\n token.sep(hasher);\n token.str(hasher, item);\n }\n token.end(hasher, 'set');\n seen.delete(setValue);\n return;\n }\n\n if (value instanceof Map) {\n const mapObject = value as Map<unknown, unknown>;\n if (seen.has(mapObject)) {\n token.start(hasher, 'map');\n token.str(hasher, 'Circular');\n token.end(hasher, 'map');\n return;\n }\n seen.add(mapObject);\n // Normalize by sorted key fingerprints.\n const entries: Array<[string, unknown]> = [];\n for (const [k, v] of mapObject.entries())\n entries.push([stableStringify(k), v]);\n entries.sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0));\n token.start(hasher, 'map');\n for (const [keyFingerprint, entryValue] of entries) {\n token.sep(hasher);\n token.str(hasher, keyFingerprint);\n token.sep(hasher);\n stableHashValue(hasher, entryValue, seen);\n }\n token.end(hasher, 'map');\n seen.delete(mapObject);\n return;\n }\n\n // ArrayBuffer & typed arrays\n if (ArrayBuffer.isView(value)) {\n const view = value as ArrayBufferView;\n token.start(hasher, 'typed');\n token.str(hasher, Object.getPrototypeOf(view).constructor.name);\n token.sep(hasher);\n hasher.update(Buffer.from(view.buffer, view.byteOffset, view.byteLength));\n token.end(hasher, 'typed');\n return;\n }\n if (value instanceof ArrayBuffer) {\n const buffer = Buffer.from(value as ArrayBuffer);\n token.start(hasher, 'ab');\n hasher.update(buffer);\n token.end(hasher, 'ab');\n return;\n }\n\n // URL\n if (typeof URL !== 'undefined' && value instanceof URL) {\n token.start(hasher, 'url');\n token.str(hasher, (value as URL).toString());\n token.end(hasher, 'url');\n return;\n }\n\n // Errors\n if (value instanceof Error) {\n const errorValue = value as Error;\n token.start(hasher, 'err');\n token.str(hasher, errorValue.name || '');\n token.sep(hasher);\n token.str(hasher, errorValue.message || '');\n token.sep(hasher);\n token.str(hasher, errorValue.stack || '');\n token.end(hasher, 'err');\n return;\n }\n\n // Generic objects\n if (valueType === 'object') {\n const objectValue = value as Record<string, unknown>;\n if (seen.has(objectValue)) {\n token.start(hasher, 'obj');\n token.str(hasher, 'Circular');\n token.end(hasher, 'obj');\n return;\n }\n seen.add(objectValue);\n\n const keys = Object.keys(objectValue).sort();\n token.start(hasher, 'obj');\n for (const key of keys) {\n token.sep(hasher);\n token.str(hasher, key);\n token.sep(hasher);\n stableHashValue(hasher, (objectValue as any)[key], seen);\n }\n token.end(hasher, 'obj');\n\n seen.delete(objectValue);\n return;\n }\n\n // Fallback\n token.start(hasher, 'other');\n token.str(hasher, String(value));\n token.end(hasher, 'other');\n};\n\n/** Public stringify kept for convenience / debugging (now faster & broader). */\nexport const stableStringify = (\n value: unknown,\n _stack = new WeakSet<object>()\n): string => {\n const hasher = createHash(HASH_ALGORITHM);\n stableHashValue(hasher, value, _stack);\n return toBase64Url(hasher.digest());\n};\n\n/** Compute a compact, stable id for arbitrary key tuples. */\nexport const computeKeyId = (keyParts: unknown[]): string => {\n const h = createHash(HASH_ALGORITHM);\n token.start(h, 'keys');\n for (let i = 0; i < keyParts.length; i++) {\n token.sep(h);\n stableHashValue(h, keyParts[i], new WeakSet());\n }\n token.end(h, 'keys');\n return toBase64Url(h.digest());\n};\n\n/** ------------------------- In-memory cache ------------------------- **/\n\nexport type CacheKey = unknown;\nconst cacheMap = new Map<string, any>();\n\nexport const getCache = <T>(...key: CacheKey[]): T | undefined => {\n return cacheMap.get(computeKeyId(key));\n};\n\ntype CacheSetArgs<T> = [...keys: CacheKey[], value: T];\n\nexport const setCache = <T>(...args: CacheSetArgs<T>): void => {\n const value = args[args.length - 1] as T;\n const key = args.slice(0, -1) as CacheKey[];\n cacheMap.set(computeKeyId(key), value);\n};\n\nexport const clearCache = (idOrKey: string): void => {\n // Accept either our computed id or a legacy string id the caller already computed.\n cacheMap.delete(idOrKey);\n};\n\nexport const clearAllCache = (): void => {\n cacheMap.clear();\n};\n\nexport const cacheMemory = {\n get: getCache,\n set: setCache,\n clear: clearCache,\n};\n"],"mappings":"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"}
|
|
@@ -1,26 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
//#region src/utils/clearModuleCache.ts
|
|
4
|
-
/**
|
|
5
|
-
* Recursively clears the require cache for a module and all its dependencies
|
|
6
|
-
*/
|
|
7
|
-
const clearModuleCache = (modulePath, visited = /* @__PURE__ */ new Set()) => {
|
|
8
|
-
if (visited.has(modulePath)) return;
|
|
9
|
-
visited.add(modulePath);
|
|
10
|
-
try {
|
|
11
|
-
const resolvedPath = configESMxCJSRequire.resolve(modulePath);
|
|
12
|
-
const cachedModule = configESMxCJSRequire.cache[resolvedPath];
|
|
13
|
-
if (cachedModule) {
|
|
14
|
-
if (cachedModule.children) cachedModule.children.forEach((child) => {
|
|
15
|
-
clearModuleCache(child.filename, visited);
|
|
16
|
-
});
|
|
17
|
-
delete configESMxCJSRequire.cache[resolvedPath];
|
|
18
|
-
}
|
|
19
|
-
} catch (error) {
|
|
20
|
-
console.warn(`Could not clear cache for module: ${modulePath}`, error);
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
//#endregion
|
|
25
|
-
export { clearModuleCache };
|
|
1
|
+
import{configESMxCJSRequire as e}from"./ESMxCJSHelpers.mjs";const t=(n,r=new Set)=>{if(!r.has(n)){r.add(n);try{let i=e.resolve(n),a=e.cache[i];a&&(a.children&&a.children.forEach(e=>{t(e.filename,r)}),delete e.cache[i])}catch(e){console.warn(`Could not clear cache for module: ${n}`,e)}}};export{t as clearModuleCache};
|
|
26
2
|
//# sourceMappingURL=clearModuleCache.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clearModuleCache.mjs","names":[],"sources":["../../../src/utils/clearModuleCache.ts"],"sourcesContent":["import { configESMxCJSRequire } from './ESMxCJSHelpers';\n\n/**\n * Recursively clears the require cache for a module and all its dependencies\n */\nexport const clearModuleCache = (\n modulePath: string,\n visited = new Set<string>()\n) => {\n // Avoid infinite loops\n if (visited.has(modulePath)) {\n return;\n }\n visited.add(modulePath);\n\n try {\n const resolvedPath = configESMxCJSRequire.resolve(modulePath);\n\n // Get the cached module\n const cachedModule = configESMxCJSRequire.cache[resolvedPath];\n\n if (cachedModule) {\n // Clear cache for all children (dependencies) first\n if (cachedModule.children) {\n cachedModule.children.forEach((child) => {\n clearModuleCache(child.filename, visited);\n });\n }\n\n // Clear the cache for this module\n delete configESMxCJSRequire.cache[resolvedPath];\n }\n } catch (error) {\n // Module might not exist or be resolvable, skip it\n console.warn(`Could not clear cache for module: ${modulePath}`, error);\n }\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"clearModuleCache.mjs","names":[],"sources":["../../../src/utils/clearModuleCache.ts"],"sourcesContent":["import { configESMxCJSRequire } from './ESMxCJSHelpers';\n\n/**\n * Recursively clears the require cache for a module and all its dependencies\n */\nexport const clearModuleCache = (\n modulePath: string,\n visited = new Set<string>()\n) => {\n // Avoid infinite loops\n if (visited.has(modulePath)) {\n return;\n }\n visited.add(modulePath);\n\n try {\n const resolvedPath = configESMxCJSRequire.resolve(modulePath);\n\n // Get the cached module\n const cachedModule = configESMxCJSRequire.cache[resolvedPath];\n\n if (cachedModule) {\n // Clear cache for all children (dependencies) first\n if (cachedModule.children) {\n cachedModule.children.forEach((child) => {\n clearModuleCache(child.filename, visited);\n });\n }\n\n // Clear the cache for this module\n delete configESMxCJSRequire.cache[resolvedPath];\n }\n } catch (error) {\n // Module might not exist or be resolvable, skip it\n console.warn(`Could not clear cache for module: ${modulePath}`, error);\n }\n};\n"],"mappings":"4DAKA,MAAa,GACX,EACA,EAAU,IAAI,MACX,CAEC,MAAQ,IAAI,EAAW,CAG3B,GAAQ,IAAI,EAAW,CAEvB,GAAI,CACF,IAAM,EAAe,EAAqB,QAAQ,EAAW,CAGvD,EAAe,EAAqB,MAAM,GAE5C,IAEE,EAAa,UACf,EAAa,SAAS,QAAS,GAAU,CACvC,EAAiB,EAAM,SAAU,EAAQ,EACzC,CAIJ,OAAO,EAAqB,MAAM,UAE7B,EAAO,CAEd,QAAQ,KAAK,qCAAqC,IAAc,EAAM"}
|
|
@@ -1,37 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* Compare two semver-like version strings (e.g. "15.10.4" vs "15.3.5").
|
|
4
|
-
*
|
|
5
|
-
* @param version1 - first version string
|
|
6
|
-
* @param version2 - second version string
|
|
7
|
-
* @param comparison - type of comparison: 'gt', 'lt', 'eq', 'gte', 'lte'
|
|
8
|
-
* @returns boolean indicating if version1 meets the specified comparison condition vs version2
|
|
9
|
-
*/
|
|
10
|
-
const compareVersions = (version1, comparison, version2) => {
|
|
11
|
-
const v1Parts = version1.split(".").map(Number);
|
|
12
|
-
const v2Parts = version2.split(".").map(Number);
|
|
13
|
-
const maxLen = Math.max(v1Parts.length, v2Parts.length);
|
|
14
|
-
let result = 0;
|
|
15
|
-
for (let i = 0; i < maxLen; i++) {
|
|
16
|
-
const part1 = v1Parts[i] || 0;
|
|
17
|
-
const part2 = v2Parts[i] || 0;
|
|
18
|
-
if (part1 > part2) {
|
|
19
|
-
result = 1;
|
|
20
|
-
break;
|
|
21
|
-
} else if (part1 < part2) {
|
|
22
|
-
result = -1;
|
|
23
|
-
break;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
switch (comparison) {
|
|
27
|
-
case ">": return result === 1;
|
|
28
|
-
case "<": return result === -1;
|
|
29
|
-
case "=": return result === 0;
|
|
30
|
-
case "≥": return result === 0 || result === 1;
|
|
31
|
-
case "≤": return result === 0 || result === -1;
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
//#endregion
|
|
36
|
-
export { compareVersions };
|
|
1
|
+
const e=(e,t,n)=>{let r=e.split(`.`).map(Number),i=n.split(`.`).map(Number),a=Math.max(r.length,i.length),o=0;for(let e=0;e<a;e++){let t=r[e]||0,n=i[e]||0;if(t>n){o=1;break}else if(t<n){o=-1;break}}switch(t){case`>`:return o===1;case`<`:return o===-1;case`=`:return o===0;case`≥`:return o===0||o===1;case`≤`:return o===0||o===-1}};export{e as compareVersions};
|
|
37
2
|
//# sourceMappingURL=compareVersions.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compareVersions.mjs","names":[],"sources":["../../../src/utils/compareVersions.ts"],"sourcesContent":["/**\n * Compare two semver-like version strings (e.g. \"15.10.4\" vs \"15.3.5\").\n *\n * @param version1 - first version string\n * @param version2 - second version string\n * @param comparison - type of comparison: 'gt', 'lt', 'eq', 'gte', 'lte'\n * @returns boolean indicating if version1 meets the specified comparison condition vs version2\n */\nexport const compareVersions = (\n version1: string,\n comparison: '>' | '<' | '=' | '≥' | '≤',\n version2: string\n): boolean => {\n const v1Parts = version1.split('.').map(Number);\n const v2Parts = version2.split('.').map(Number);\n const maxLen = Math.max(v1Parts.length, v2Parts.length);\n\n // Compute a basic -1, 0, or 1 comparison\n let result = 0;\n for (let i = 0; i < maxLen; i++) {\n const part1 = v1Parts[i] || 0;\n const part2 = v2Parts[i] || 0;\n if (part1 > part2) {\n result = 1;\n break;\n } else if (part1 < part2) {\n result = -1;\n break;\n }\n }\n\n switch (comparison) {\n case '>':\n return result === 1;\n case '<':\n return result === -1;\n case '=':\n return result === 0;\n case '≥':\n return result === 0 || result === 1;\n case '≤':\n return result === 0 || result === -1;\n }\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"compareVersions.mjs","names":[],"sources":["../../../src/utils/compareVersions.ts"],"sourcesContent":["/**\n * Compare two semver-like version strings (e.g. \"15.10.4\" vs \"15.3.5\").\n *\n * @param version1 - first version string\n * @param version2 - second version string\n * @param comparison - type of comparison: 'gt', 'lt', 'eq', 'gte', 'lte'\n * @returns boolean indicating if version1 meets the specified comparison condition vs version2\n */\nexport const compareVersions = (\n version1: string,\n comparison: '>' | '<' | '=' | '≥' | '≤',\n version2: string\n): boolean => {\n const v1Parts = version1.split('.').map(Number);\n const v2Parts = version2.split('.').map(Number);\n const maxLen = Math.max(v1Parts.length, v2Parts.length);\n\n // Compute a basic -1, 0, or 1 comparison\n let result = 0;\n for (let i = 0; i < maxLen; i++) {\n const part1 = v1Parts[i] || 0;\n const part2 = v2Parts[i] || 0;\n if (part1 > part2) {\n result = 1;\n break;\n } else if (part1 < part2) {\n result = -1;\n break;\n }\n }\n\n switch (comparison) {\n case '>':\n return result === 1;\n case '<':\n return result === -1;\n case '=':\n return result === 0;\n case '≥':\n return result === 0 || result === 1;\n case '≤':\n return result === 0 || result === -1;\n }\n};\n"],"mappings":"AAQA,MAAa,GACX,EACA,EACA,IACY,CACZ,IAAM,EAAU,EAAS,MAAM,IAAI,CAAC,IAAI,OAAO,CACzC,EAAU,EAAS,MAAM,IAAI,CAAC,IAAI,OAAO,CACzC,EAAS,KAAK,IAAI,EAAQ,OAAQ,EAAQ,OAAO,CAGnD,EAAS,EACb,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,IAAK,CAC/B,IAAM,EAAQ,EAAQ,IAAM,EACtB,EAAQ,EAAQ,IAAM,EAC5B,GAAI,EAAQ,EAAO,CACjB,EAAS,EACT,cACS,EAAQ,EAAO,CACxB,EAAS,GACT,OAIJ,OAAQ,EAAR,CACE,IAAK,IACH,OAAO,IAAW,EACpB,IAAK,IACH,OAAO,IAAW,GACpB,IAAK,IACH,OAAO,IAAW,EACpB,IAAK,IACH,OAAO,IAAW,GAAK,IAAW,EACpC,IAAK,IACH,OAAO,IAAW,GAAK,IAAW"}
|
|
@@ -1,94 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
const extractErrorMessage = (error) => {
|
|
3
|
-
const trimToSingleLine = (text) => text.split(/\r?\n/).map((s) => s.trim()).filter(Boolean)[0] ?? text.trim();
|
|
4
|
-
const looksLikeJson = (value) => {
|
|
5
|
-
const s = value.trim();
|
|
6
|
-
if (!s) return false;
|
|
7
|
-
const first = s[0];
|
|
8
|
-
return first === "{" || first === "[" || first === "\"";
|
|
9
|
-
};
|
|
10
|
-
const sanitizeUnexpectedTokenMessage = (text) => {
|
|
11
|
-
const t = text.trim();
|
|
12
|
-
if (/Unexpected token/i.test(t) && /not valid JSON/i.test(t)) {
|
|
13
|
-
const quoted = t.match(/"([^"]+)"/);
|
|
14
|
-
if (quoted?.[1]) return quoted[1];
|
|
15
|
-
const afterColon = t.split(":").slice(1).join(":").trim();
|
|
16
|
-
if (afterColon) return afterColon;
|
|
17
|
-
}
|
|
18
|
-
return t;
|
|
19
|
-
};
|
|
20
|
-
const pickFieldsFromObject = (value, seen) => {
|
|
21
|
-
if (!value || typeof value !== "object") return void 0;
|
|
22
|
-
if (seen.has(value)) return void 0;
|
|
23
|
-
seen.add(value);
|
|
24
|
-
const obj = value;
|
|
25
|
-
if (typeof obj.message === "string" && obj.message.trim()) return obj.message;
|
|
26
|
-
if (typeof obj.error_description === "string" && obj.error_description.trim()) return obj.error_description;
|
|
27
|
-
if (typeof obj.error === "string" && obj.error.trim()) return obj.error;
|
|
28
|
-
const title = typeof obj.title === "string" ? obj.title.trim() : "";
|
|
29
|
-
const code = typeof obj.code === "string" ? obj.code.trim() : "";
|
|
30
|
-
if (title && code) return `${title} (${code})`;
|
|
31
|
-
if (title) return title;
|
|
32
|
-
if (code) return code;
|
|
33
|
-
if (typeof obj.statusText === "string" && obj.statusText.trim()) return obj.statusText;
|
|
34
|
-
const response = obj.response;
|
|
35
|
-
if (response && typeof response === "object") {
|
|
36
|
-
const data = response.data;
|
|
37
|
-
const fromData = pickFieldsFromObject(data, seen);
|
|
38
|
-
if (fromData) return fromData;
|
|
39
|
-
}
|
|
40
|
-
const data = obj.data;
|
|
41
|
-
const fromData = pickFieldsFromObject(data, seen);
|
|
42
|
-
if (fromData) return fromData;
|
|
43
|
-
const cause = obj.cause;
|
|
44
|
-
const fromCause = pickFieldsFromObject(cause, seen) ?? (typeof cause?.message === "string" ? cause.message : void 0);
|
|
45
|
-
if (fromCause) return fromCause;
|
|
46
|
-
const errors = obj.errors;
|
|
47
|
-
if (Array.isArray(errors)) for (const item of errors) {
|
|
48
|
-
const fromItem = pickFieldsFromObject(item, seen);
|
|
49
|
-
if (fromItem) return fromItem;
|
|
50
|
-
if (typeof item?.message === "string") return item.message;
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
const tryParseJsonString = (maybeJson) => {
|
|
54
|
-
if (!looksLikeJson(maybeJson)) return void 0;
|
|
55
|
-
try {
|
|
56
|
-
const parsed = JSON.parse(maybeJson);
|
|
57
|
-
const picked = pickFieldsFromObject(parsed, /* @__PURE__ */ new Set());
|
|
58
|
-
if (picked) return picked;
|
|
59
|
-
if (typeof parsed === "string") return parsed;
|
|
60
|
-
return;
|
|
61
|
-
} catch {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
if (typeof error === "string") {
|
|
66
|
-
const cleaned = sanitizeUnexpectedTokenMessage(error);
|
|
67
|
-
return tryParseJsonString(cleaned) ?? trimToSingleLine(cleaned);
|
|
68
|
-
}
|
|
69
|
-
if (error && typeof error === "object") {
|
|
70
|
-
if (error instanceof Error) {
|
|
71
|
-
const cleaned = sanitizeUnexpectedTokenMessage(error.message);
|
|
72
|
-
const fromMessage = tryParseJsonString(cleaned);
|
|
73
|
-
if (fromMessage) return trimToSingleLine(fromMessage);
|
|
74
|
-
const fromCause = extractErrorMessage(error.cause);
|
|
75
|
-
if (fromCause && fromCause !== "An unknown error occurred") return trimToSingleLine(fromCause);
|
|
76
|
-
return trimToSingleLine(cleaned);
|
|
77
|
-
}
|
|
78
|
-
const fromObject = pickFieldsFromObject(error, /* @__PURE__ */ new Set());
|
|
79
|
-
if (fromObject) {
|
|
80
|
-
const cleaned = sanitizeUnexpectedTokenMessage(fromObject);
|
|
81
|
-
return tryParseJsonString(cleaned) ?? trimToSingleLine(cleaned);
|
|
82
|
-
}
|
|
83
|
-
try {
|
|
84
|
-
return trimToSingleLine(JSON.stringify(error));
|
|
85
|
-
} catch {
|
|
86
|
-
return trimToSingleLine(String(error));
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return "An unknown error occurred";
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
//#endregion
|
|
93
|
-
export { extractErrorMessage };
|
|
1
|
+
const e=t=>{let n=e=>e.split(/\r?\n/).map(e=>e.trim()).filter(Boolean)[0]??e.trim(),r=e=>{let t=e.trim();if(!t)return!1;let n=t[0];return n===`{`||n===`[`||n===`"`},i=e=>{let t=e.trim();if(/Unexpected token/i.test(t)&&/not valid JSON/i.test(t)){let e=t.match(/"([^"]+)"/);if(e?.[1])return e[1];let n=t.split(`:`).slice(1).join(`:`).trim();if(n)return n}return t},a=(e,t)=>{if(!e||typeof e!=`object`||t.has(e))return;t.add(e);let n=e;if(typeof n.message==`string`&&n.message.trim())return n.message;if(typeof n.error_description==`string`&&n.error_description.trim())return n.error_description;if(typeof n.error==`string`&&n.error.trim())return n.error;let r=typeof n.title==`string`?n.title.trim():``,i=typeof n.code==`string`?n.code.trim():``;if(r&&i)return`${r} (${i})`;if(r)return r;if(i)return i;if(typeof n.statusText==`string`&&n.statusText.trim())return n.statusText;let o=n.response;if(o&&typeof o==`object`){let e=o.data,n=a(e,t);if(n)return n}let s=n.data,c=a(s,t);if(c)return c;let l=n.cause,u=a(l,t)??(typeof l?.message==`string`?l.message:void 0);if(u)return u;let d=n.errors;if(Array.isArray(d))for(let e of d){let n=a(e,t);if(n)return n;if(typeof e?.message==`string`)return e.message}},o=e=>{if(r(e))try{let t=JSON.parse(e);return a(t,new Set)||(typeof t==`string`?t:void 0)}catch{return}};if(typeof t==`string`){let e=i(t);return o(e)??n(e)}if(t&&typeof t==`object`){if(t instanceof Error){let r=i(t.message),a=o(r);if(a)return n(a);let s=e(t.cause);return n(s&&s!==`An unknown error occurred`?s:r)}let r=a(t,new Set);if(r){let e=i(r);return o(e)??n(e)}try{return n(JSON.stringify(t))}catch{return n(String(t))}}return`An unknown error occurred`};export{e as extractErrorMessage};
|
|
94
2
|
//# sourceMappingURL=extractErrorMessage.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractErrorMessage.mjs","names":[],"sources":["../../../src/utils/extractErrorMessage.ts"],"sourcesContent":["export const extractErrorMessage = (error: unknown): string => {\n const trimToSingleLine = (text: string): string =>\n text\n .split(/\\r?\\n/)\n .map((s) => s.trim())\n .filter(Boolean)[0] ?? text.trim();\n\n const looksLikeJson = (value: string): boolean => {\n const s = value.trim();\n if (!s) return false;\n const first = s[0];\n return first === '{' || first === '[' || first === '\"';\n };\n\n const sanitizeUnexpectedTokenMessage = (text: string): string => {\n // If the text mentions an invalid JSON parse, try to extract the meaningful part\n const t = text.trim();\n if (/Unexpected token/i.test(t) && /not valid JSON/i.test(t)) {\n const quoted = t.match(/\"([^\"]+)\"/);\n if (quoted?.[1]) return quoted[1];\n // Fallback: drop the leading parser error description\n const afterColon = t.split(':').slice(1).join(':').trim();\n if (afterColon) return afterColon;\n }\n return t;\n };\n\n const pickFieldsFromObject = (\n value: unknown,\n seen: Set<unknown>\n ): string | undefined => {\n if (!value || typeof value !== 'object') return undefined;\n if (seen.has(value)) return undefined;\n seen.add(value);\n\n const obj = value as Record<string, unknown>;\n\n // Check for message first (highest priority)\n if (typeof obj.message === 'string' && obj.message.trim()) {\n return obj.message;\n }\n\n // Check for error_description\n if (\n typeof obj.error_description === 'string' &&\n obj.error_description.trim()\n ) {\n return obj.error_description;\n }\n\n // Check for error\n if (typeof obj.error === 'string' && obj.error.trim()) {\n return obj.error;\n }\n\n // Handle title and code combination\n const title = typeof obj.title === 'string' ? obj.title.trim() : '';\n const code = typeof obj.code === 'string' ? obj.code.trim() : '';\n\n if (title && code) {\n return `${title} (${code})`;\n }\n\n if (title) {\n return title;\n }\n\n if (code) {\n return code;\n }\n\n // Check for statusText\n if (typeof obj.statusText === 'string' && obj.statusText.trim()) {\n return obj.statusText;\n }\n\n // Common nested structures (Axios/Fetch-like)\n const response = obj.response as Record<string, unknown> | undefined;\n if (response && typeof response === 'object') {\n const data = response.data as unknown;\n const fromData = pickFieldsFromObject(data, seen);\n if (fromData) return fromData;\n }\n\n const data = obj.data as unknown;\n const fromData = pickFieldsFromObject(data, seen);\n if (fromData) return fromData;\n\n // Nested cause chain\n const cause = (obj as { cause?: unknown }).cause;\n const fromCause =\n pickFieldsFromObject(cause, seen) ??\n (typeof (cause as any)?.message === 'string'\n ? (cause as any).message\n : undefined);\n if (fromCause) return fromCause;\n\n // Arrays of errors\n const errors = obj.errors as unknown;\n if (Array.isArray(errors)) {\n for (const item of errors) {\n const fromItem = pickFieldsFromObject(item, seen);\n if (fromItem) return fromItem;\n if (typeof (item as any)?.message === 'string')\n return (item as any).message;\n }\n }\n\n return undefined;\n };\n\n const tryParseJsonString = (maybeJson: string): string | undefined => {\n if (!looksLikeJson(maybeJson)) return undefined;\n try {\n const parsed = JSON.parse(maybeJson);\n const picked = pickFieldsFromObject(parsed, new Set());\n if (picked) return picked;\n if (typeof parsed === 'string') return parsed;\n return undefined;\n } catch {\n return undefined;\n }\n };\n\n if (typeof error === 'string') {\n const cleaned = sanitizeUnexpectedTokenMessage(error);\n return tryParseJsonString(cleaned) ?? trimToSingleLine(cleaned);\n }\n\n if (error && typeof error === 'object') {\n // Native Error instance\n if (error instanceof Error) {\n const cleaned = sanitizeUnexpectedTokenMessage(error.message);\n const fromMessage = tryParseJsonString(cleaned);\n if (fromMessage) return trimToSingleLine(fromMessage);\n // Dive into cause when present\n const fromCause = extractErrorMessage(error.cause as unknown);\n if (fromCause && fromCause !== 'An unknown error occurred')\n return trimToSingleLine(fromCause);\n return trimToSingleLine(cleaned);\n }\n\n // Generic object\n const seen = new Set<unknown>();\n const fromObject = pickFieldsFromObject(error, seen);\n if (fromObject) {\n const cleaned = sanitizeUnexpectedTokenMessage(fromObject);\n return tryParseJsonString(cleaned) ?? trimToSingleLine(cleaned);\n }\n\n try {\n const serialized = JSON.stringify(error);\n return trimToSingleLine(serialized);\n } catch {\n return trimToSingleLine(String(error));\n }\n }\n\n return 'An unknown error occurred';\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"extractErrorMessage.mjs","names":[],"sources":["../../../src/utils/extractErrorMessage.ts"],"sourcesContent":["export const extractErrorMessage = (error: unknown): string => {\n const trimToSingleLine = (text: string): string =>\n text\n .split(/\\r?\\n/)\n .map((s) => s.trim())\n .filter(Boolean)[0] ?? text.trim();\n\n const looksLikeJson = (value: string): boolean => {\n const s = value.trim();\n if (!s) return false;\n const first = s[0];\n return first === '{' || first === '[' || first === '\"';\n };\n\n const sanitizeUnexpectedTokenMessage = (text: string): string => {\n // If the text mentions an invalid JSON parse, try to extract the meaningful part\n const t = text.trim();\n if (/Unexpected token/i.test(t) && /not valid JSON/i.test(t)) {\n const quoted = t.match(/\"([^\"]+)\"/);\n if (quoted?.[1]) return quoted[1];\n // Fallback: drop the leading parser error description\n const afterColon = t.split(':').slice(1).join(':').trim();\n if (afterColon) return afterColon;\n }\n return t;\n };\n\n const pickFieldsFromObject = (\n value: unknown,\n seen: Set<unknown>\n ): string | undefined => {\n if (!value || typeof value !== 'object') return undefined;\n if (seen.has(value)) return undefined;\n seen.add(value);\n\n const obj = value as Record<string, unknown>;\n\n // Check for message first (highest priority)\n if (typeof obj.message === 'string' && obj.message.trim()) {\n return obj.message;\n }\n\n // Check for error_description\n if (\n typeof obj.error_description === 'string' &&\n obj.error_description.trim()\n ) {\n return obj.error_description;\n }\n\n // Check for error\n if (typeof obj.error === 'string' && obj.error.trim()) {\n return obj.error;\n }\n\n // Handle title and code combination\n const title = typeof obj.title === 'string' ? obj.title.trim() : '';\n const code = typeof obj.code === 'string' ? obj.code.trim() : '';\n\n if (title && code) {\n return `${title} (${code})`;\n }\n\n if (title) {\n return title;\n }\n\n if (code) {\n return code;\n }\n\n // Check for statusText\n if (typeof obj.statusText === 'string' && obj.statusText.trim()) {\n return obj.statusText;\n }\n\n // Common nested structures (Axios/Fetch-like)\n const response = obj.response as Record<string, unknown> | undefined;\n if (response && typeof response === 'object') {\n const data = response.data as unknown;\n const fromData = pickFieldsFromObject(data, seen);\n if (fromData) return fromData;\n }\n\n const data = obj.data as unknown;\n const fromData = pickFieldsFromObject(data, seen);\n if (fromData) return fromData;\n\n // Nested cause chain\n const cause = (obj as { cause?: unknown }).cause;\n const fromCause =\n pickFieldsFromObject(cause, seen) ??\n (typeof (cause as any)?.message === 'string'\n ? (cause as any).message\n : undefined);\n if (fromCause) return fromCause;\n\n // Arrays of errors\n const errors = obj.errors as unknown;\n if (Array.isArray(errors)) {\n for (const item of errors) {\n const fromItem = pickFieldsFromObject(item, seen);\n if (fromItem) return fromItem;\n if (typeof (item as any)?.message === 'string')\n return (item as any).message;\n }\n }\n\n return undefined;\n };\n\n const tryParseJsonString = (maybeJson: string): string | undefined => {\n if (!looksLikeJson(maybeJson)) return undefined;\n try {\n const parsed = JSON.parse(maybeJson);\n const picked = pickFieldsFromObject(parsed, new Set());\n if (picked) return picked;\n if (typeof parsed === 'string') return parsed;\n return undefined;\n } catch {\n return undefined;\n }\n };\n\n if (typeof error === 'string') {\n const cleaned = sanitizeUnexpectedTokenMessage(error);\n return tryParseJsonString(cleaned) ?? trimToSingleLine(cleaned);\n }\n\n if (error && typeof error === 'object') {\n // Native Error instance\n if (error instanceof Error) {\n const cleaned = sanitizeUnexpectedTokenMessage(error.message);\n const fromMessage = tryParseJsonString(cleaned);\n if (fromMessage) return trimToSingleLine(fromMessage);\n // Dive into cause when present\n const fromCause = extractErrorMessage(error.cause as unknown);\n if (fromCause && fromCause !== 'An unknown error occurred')\n return trimToSingleLine(fromCause);\n return trimToSingleLine(cleaned);\n }\n\n // Generic object\n const seen = new Set<unknown>();\n const fromObject = pickFieldsFromObject(error, seen);\n if (fromObject) {\n const cleaned = sanitizeUnexpectedTokenMessage(fromObject);\n return tryParseJsonString(cleaned) ?? trimToSingleLine(cleaned);\n }\n\n try {\n const serialized = JSON.stringify(error);\n return trimToSingleLine(serialized);\n } catch {\n return trimToSingleLine(String(error));\n }\n }\n\n return 'An unknown error occurred';\n};\n"],"mappings":"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"}
|
|
@@ -1,13 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
const getExtension = (configuration, format) => {
|
|
3
|
-
const outputFormats = configuration.build.outputFormat;
|
|
4
|
-
if (format === "cjs") return "cjs";
|
|
5
|
-
if (format === "esm") return "mjs";
|
|
6
|
-
if (outputFormats.includes("cjs")) return "cjs";
|
|
7
|
-
if (outputFormats.includes("esm")) return "mjs";
|
|
8
|
-
return "cjs";
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
//#endregion
|
|
12
|
-
export { getExtension };
|
|
1
|
+
const e=(e,t)=>{let n=e.build.outputFormat;return t===`cjs`?`cjs`:t===`esm`?`mjs`:n.includes(`cjs`)?`cjs`:n.includes(`esm`)?`mjs`:`cjs`};export{e as getExtension};
|
|
13
2
|
//# sourceMappingURL=getExtension.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getExtension.mjs","names":[],"sources":["../../../src/utils/getExtension.ts"],"sourcesContent":["import type { IntlayerConfig } from '@intlayer/types';\n\nexport const getExtension = (\n configuration: IntlayerConfig,\n format?: 'esm' | 'cjs' | undefined\n) => {\n const outputFormats = configuration.build.outputFormat;\n\n if (format === 'cjs') return 'cjs';\n if (format === 'esm') return 'mjs';\n\n if (outputFormats.includes('cjs')) return 'cjs';\n if (outputFormats.includes('esm')) return 'mjs';\n\n return 'cjs';\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"getExtension.mjs","names":[],"sources":["../../../src/utils/getExtension.ts"],"sourcesContent":["import type { IntlayerConfig } from '@intlayer/types';\n\nexport const getExtension = (\n configuration: IntlayerConfig,\n format?: 'esm' | 'cjs' | undefined\n) => {\n const outputFormats = configuration.build.outputFormat;\n\n if (format === 'cjs') return 'cjs';\n if (format === 'esm') return 'mjs';\n\n if (outputFormats.includes('cjs')) return 'cjs';\n if (outputFormats.includes('esm')) return 'mjs';\n\n return 'cjs';\n};\n"],"mappings":"AAEA,MAAa,GACX,EACA,IACG,CACH,IAAM,EAAgB,EAAc,MAAM,aAQ1C,OANI,IAAW,MAAc,MACzB,IAAW,MAAc,MAEzB,EAAc,SAAS,MAAM,CAAS,MACtC,EAAc,SAAS,MAAM,CAAS,MAEnC"}
|