@cqrs-ddd/safe-stringify 0.5.0 → 0.5.1
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/COMMERCIAL_LICENSE.txt +14 -10
- package/dist/safeStringify.d.ts.map +1 -1
- package/dist/safeStringify.js +147 -128
- package/dist/safeStringify.js.map +1 -1
- package/dist/stableStringify.d.ts.map +1 -1
- package/dist/stableStringify.js +27 -19
- package/dist/stableStringify.js.map +1 -1
- package/package.json +3 -3
package/COMMERCIAL_LICENSE.txt
CHANGED
|
@@ -9,21 +9,25 @@ This Commercial License Agreement ("Agreement") is a legal agreement between You
|
|
|
9
9
|
Upon acceptance of this Agreement and compliance with the Payment Terms in Section 2, the Licensor grants You a non-exclusive, worldwide, non-transferable license to use, modify, integrate, and distribute the Software in commercial applications WITHOUT the copyleft obligations of the GNU Affero General Public License v3 (AGPLv3). Under this Agreement, You are NOT required to open-source Your proprietary code that integrates with the Software.
|
|
10
10
|
|
|
11
11
|
2. PAYMENT TERMS AND REVENUE TIERS
|
|
12
|
-
This license requires an annual fee based on Your (or Your organization's) total gross global revenue for the most recently completed fiscal year.
|
|
12
|
+
This license requires an annual fee based on Your (or Your organization's) total gross global revenue for the most recently completed fiscal year.
|
|
13
13
|
|
|
14
|
-
The annual fee is calculated using the following
|
|
14
|
+
The annual fee is calculated using the following marginal brackets. Each rate applies only to the portion of gross revenue that falls within its bracket, and the annual fee is the sum of the amounts for all brackets:
|
|
15
15
|
|
|
16
|
-
a) Tier 1:
|
|
17
|
-
|
|
16
|
+
a) Tier 1: The portion of gross revenue up to $500,000 USD
|
|
17
|
+
Rate: 0% (Free Commercial Use). If gross revenue does not exceed $500,000 USD, the fee is $0.
|
|
18
18
|
|
|
19
|
-
b) Tier 2:
|
|
20
|
-
|
|
19
|
+
b) Tier 2: The portion of gross revenue above $500,000 USD and up to $10,000,000 USD
|
|
20
|
+
Rate: 0.1% of that portion.
|
|
21
21
|
|
|
22
|
-
c) Tier 3:
|
|
23
|
-
|
|
22
|
+
c) Tier 3: The portion of gross revenue above $10,000,000 USD and up to $50,000,000 USD
|
|
23
|
+
Rate: 0.05% of that portion.
|
|
24
24
|
|
|
25
|
-
d) Tier 4:
|
|
26
|
-
|
|
25
|
+
d) Tier 4: The portion of gross revenue above $50,000,000 USD
|
|
26
|
+
Rate: 0.01% of that portion.
|
|
27
|
+
|
|
28
|
+
The total annual fee never exceeds a maximum hard cap of $50,000 USD per year.
|
|
29
|
+
|
|
30
|
+
Example: for gross revenue of $20,000,000 USD, the annual fee is 0.1% of $9,500,000 USD ($9,500) plus 0.05% of $10,000,000 USD ($5,000), a total of $14,500 USD.
|
|
27
31
|
|
|
28
32
|
3. REPORTING AND REMITTANCE
|
|
29
33
|
- Fees are calculated annually and must be remitted to the Licensor within ninety (90) days following the close of Your fiscal year.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safeStringify.d.ts","sourceRoot":"","sources":["../src/safeStringify.ts"],"names":[],"mappings":"AAEA,iEAAiE;AACjE,eAAO,MAAM,QAAQ,eAAe,CAAC;AAErC;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAuBhD,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,6FAA6F;IAC7F,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,MAAM,EAAE,CAAC;IAC9C,2FAA2F;IAC3F,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,MAAM,EAAE,CAAC;IAC7C,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"safeStringify.d.ts","sourceRoot":"","sources":["../src/safeStringify.ts"],"names":[],"mappings":"AAEA,iEAAiE;AACjE,eAAO,MAAM,QAAQ,eAAe,CAAC;AAErC;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAuBhD,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,6FAA6F;IAC7F,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,MAAM,EAAE,CAAC;IAC9C,2FAA2F;IAC3F,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,MAAM,EAAE,CAAC;IAC7C,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAqQD;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,GACtC,OAAO,CAGT;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,EACvC,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAGR;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,OAAO,EACd,IAAI,GAAE,SAAS,MAAM,EAAwB,GAC5C,OAAO,CAKT"}
|
package/dist/safeStringify.js
CHANGED
|
@@ -33,46 +33,36 @@ export const DEFAULT_REDACT_KEYS = [
|
|
|
33
33
|
];
|
|
34
34
|
const SAFE_PRIMITIVES = new Set(['string', 'number', 'boolean']);
|
|
35
35
|
function buildMatchers(options) {
|
|
36
|
-
const flatExclude = new Set();
|
|
37
|
-
const pathExclude = new Set();
|
|
38
|
-
const flatRedact = new Set();
|
|
39
|
-
const pathRedact = new Set();
|
|
40
|
-
let redactReplacement = REDACTED;
|
|
41
|
-
let mode = 'json';
|
|
42
36
|
if (options instanceof Set)
|
|
43
37
|
options = { excludeKeys: options };
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
redactReplacement = options.redactReplacement;
|
|
49
|
-
if (options.excludeKeys) {
|
|
50
|
-
for (const key of options.excludeKeys) {
|
|
51
|
-
if (key.includes('.'))
|
|
52
|
-
pathExclude.add(key);
|
|
53
|
-
else
|
|
54
|
-
flatExclude.add(key);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
if (options.redactKeys) {
|
|
58
|
-
for (const key of options.redactKeys) {
|
|
59
|
-
const normalized = normalizeRedactKey(key);
|
|
60
|
-
if (normalized.includes('.'))
|
|
61
|
-
pathRedact.add(normalized);
|
|
62
|
-
else
|
|
63
|
-
flatRedact.add(normalized);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
38
|
+
const mode = options?.mode || 'json';
|
|
39
|
+
const redactReplacement = options?.redactReplacement || REDACTED;
|
|
40
|
+
const exclude = partitionKeys(options?.excludeKeys);
|
|
41
|
+
const redact = partitionKeys(options?.redactKeys, normalizeRedactKey);
|
|
67
42
|
return {
|
|
68
|
-
flatExclude,
|
|
69
|
-
pathExclude,
|
|
70
|
-
flatRedact,
|
|
71
|
-
pathRedact,
|
|
43
|
+
flatExclude: exclude.flat,
|
|
44
|
+
pathExclude: exclude.path,
|
|
45
|
+
flatRedact: redact.flat,
|
|
46
|
+
pathRedact: redact.path,
|
|
72
47
|
redactReplacement,
|
|
73
48
|
mode,
|
|
74
49
|
};
|
|
75
50
|
}
|
|
51
|
+
/** Splits keys into flat names and dot-paths, after `normalize` maps each one. */
|
|
52
|
+
function partitionKeys(keys, normalize = (key) => key) {
|
|
53
|
+
const flat = new Set();
|
|
54
|
+
const path = new Set();
|
|
55
|
+
if (!keys)
|
|
56
|
+
return { flat, path };
|
|
57
|
+
for (const key of keys) {
|
|
58
|
+
const normalized = normalize(key);
|
|
59
|
+
if (normalized.includes('.'))
|
|
60
|
+
path.add(normalized);
|
|
61
|
+
else
|
|
62
|
+
flat.add(normalized);
|
|
63
|
+
}
|
|
64
|
+
return { flat, path };
|
|
65
|
+
}
|
|
76
66
|
function normalizeRedactKey(key) {
|
|
77
67
|
return key.toLowerCase().replace(/[_-]/g, '');
|
|
78
68
|
}
|
|
@@ -83,148 +73,177 @@ function isRedacted(key, path, matchers) {
|
|
|
83
73
|
function isExcluded(key, path, matchers) {
|
|
84
74
|
return matchers.flatExclude.has(key) || matchers.pathExclude.has(path);
|
|
85
75
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
if (typeof val !== 'object' && typeof val !== 'function') {
|
|
93
|
-
if (matchers.mode === 'clone')
|
|
94
|
-
return val;
|
|
95
|
-
const type = typeof val;
|
|
96
|
-
return SAFE_PRIMITIVES.has(type) ? val : `[${type}]`;
|
|
76
|
+
/** One sanitization pass: its matchers and the objects above the current value. */
|
|
77
|
+
class Sanitizer {
|
|
78
|
+
matchers;
|
|
79
|
+
ancestors = new WeakSet();
|
|
80
|
+
constructor(matchers) {
|
|
81
|
+
this.matchers = matchers;
|
|
97
82
|
}
|
|
98
|
-
|
|
99
|
-
|
|
83
|
+
sanitize(val, path) {
|
|
84
|
+
if (val === null)
|
|
85
|
+
return null;
|
|
86
|
+
if (val === undefined)
|
|
87
|
+
return undefined;
|
|
88
|
+
// Primitives
|
|
89
|
+
if (typeof val !== 'object' && typeof val !== 'function') {
|
|
90
|
+
if (this.matchers.mode === 'clone')
|
|
91
|
+
return val;
|
|
92
|
+
const type = typeof val;
|
|
93
|
+
return SAFE_PRIMITIVES.has(type) ? val : `[${type}]`;
|
|
94
|
+
}
|
|
95
|
+
if (typeof val === 'function') {
|
|
96
|
+
return this.matchers.mode === 'clone' ? val : '[Function]';
|
|
97
|
+
}
|
|
98
|
+
// Circular reference guard
|
|
99
|
+
if (this.ancestors.has(val))
|
|
100
|
+
return '[Circular]';
|
|
101
|
+
this.ancestors.add(val);
|
|
102
|
+
try {
|
|
103
|
+
return this.sanitizeObject(val, path);
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
this.ancestors.delete(val);
|
|
107
|
+
}
|
|
100
108
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
return '[Circular]';
|
|
104
|
-
ancestors.add(val);
|
|
105
|
-
try {
|
|
109
|
+
sanitizeObject(val, path) {
|
|
110
|
+
const isClone = this.matchers.mode === 'clone';
|
|
106
111
|
// 1. Date
|
|
107
112
|
if (val instanceof Date) {
|
|
108
|
-
if (
|
|
113
|
+
if (isClone)
|
|
109
114
|
return new Date(val);
|
|
110
115
|
return Number.isNaN(val.getTime()) ? '[Invalid Date]' : val.toISOString();
|
|
111
116
|
}
|
|
112
117
|
// 2. RegExp
|
|
113
118
|
if (val instanceof RegExp) {
|
|
114
|
-
if (
|
|
115
|
-
|
|
116
|
-
clone.lastIndex = val.lastIndex;
|
|
117
|
-
return clone;
|
|
118
|
-
}
|
|
119
|
+
if (isClone)
|
|
120
|
+
return cloneRegExp(val);
|
|
119
121
|
return val.toString();
|
|
120
122
|
}
|
|
121
123
|
// 3. Error
|
|
122
124
|
if (val instanceof Error) {
|
|
123
|
-
if (
|
|
124
|
-
|
|
125
|
-
clone.name = val.name;
|
|
126
|
-
clone.stack = val.stack;
|
|
127
|
-
copyProperties(val, clone, path, matchers, ancestors);
|
|
128
|
-
return clone;
|
|
129
|
-
}
|
|
125
|
+
if (isClone)
|
|
126
|
+
return this.cloneError(val, path);
|
|
130
127
|
return { name: val.name, message: val.message, stack: val.stack };
|
|
131
128
|
}
|
|
132
129
|
// 4. Binary data
|
|
133
|
-
if ((
|
|
134
|
-
|
|
135
|
-
ArrayBuffer.isView(val)) {
|
|
136
|
-
if (matchers.mode === 'clone')
|
|
130
|
+
if (isBinary(val)) {
|
|
131
|
+
if (isClone)
|
|
137
132
|
return structuredClone(val);
|
|
138
133
|
return '[Binary Data]';
|
|
139
134
|
}
|
|
140
135
|
// 5. Streams
|
|
141
|
-
if (
|
|
142
|
-
typeof val.on === 'function') {
|
|
136
|
+
if (isStream(val))
|
|
143
137
|
return '[Stream]';
|
|
144
|
-
}
|
|
145
138
|
// 6. Multer File
|
|
146
|
-
if (
|
|
147
|
-
'buffer' in val &&
|
|
148
|
-
Buffer.isBuffer(val.buffer)) {
|
|
139
|
+
if (isMulterFile(val))
|
|
149
140
|
return `[File: ${val.originalname}]`;
|
|
150
|
-
|
|
141
|
+
return this.sanitizeCollection(val, path);
|
|
142
|
+
}
|
|
143
|
+
sanitizeCollection(val, path) {
|
|
144
|
+
const isClone = this.matchers.mode === 'clone';
|
|
151
145
|
// 7. Map
|
|
152
146
|
if (val instanceof Map) {
|
|
153
|
-
if (
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
const keyStr = typeof k === 'string' ? k : '';
|
|
157
|
-
const currentPath = path && keyStr ? `${path}.${keyStr}` : keyStr;
|
|
158
|
-
if (keyStr && isExcluded(keyStr, currentPath, matchers))
|
|
159
|
-
continue;
|
|
160
|
-
const isRedact = keyStr
|
|
161
|
-
? isRedacted(keyStr, currentPath, matchers)
|
|
162
|
-
: false;
|
|
163
|
-
clone.set(sanitizeValue(k, path, matchers, ancestors), isRedact
|
|
164
|
-
? matchers.redactReplacement
|
|
165
|
-
: sanitizeValue(v, currentPath, matchers, ancestors));
|
|
166
|
-
}
|
|
167
|
-
return clone;
|
|
168
|
-
}
|
|
169
|
-
return sanitizeValue(Object.fromEntries(val), path, matchers, ancestors);
|
|
147
|
+
if (isClone)
|
|
148
|
+
return this.cloneMap(val, path);
|
|
149
|
+
return this.sanitize(Object.fromEntries(val), path);
|
|
170
150
|
}
|
|
171
151
|
// 8. Set
|
|
172
152
|
if (val instanceof Set) {
|
|
173
|
-
if (
|
|
174
|
-
return new Set(Array.from(val, (item) =>
|
|
153
|
+
if (isClone) {
|
|
154
|
+
return new Set(Array.from(val, (item) => this.sanitize(item, path)));
|
|
175
155
|
}
|
|
176
|
-
return
|
|
156
|
+
return this.sanitize([...val], path);
|
|
177
157
|
}
|
|
178
158
|
// 9. Array
|
|
179
159
|
if (Array.isArray(val)) {
|
|
180
|
-
return val.map((item) =>
|
|
160
|
+
return val.map((item) => this.sanitize(item, path));
|
|
181
161
|
}
|
|
182
162
|
// 10. Generic Object
|
|
183
|
-
const out = matchers.mode === 'json' ? Object.create(null) : {};
|
|
184
|
-
copyProperties(val, out, path
|
|
163
|
+
const out = this.matchers.mode === 'json' ? Object.create(null) : {};
|
|
164
|
+
this.copyProperties(val, out, path);
|
|
185
165
|
return out;
|
|
186
166
|
}
|
|
187
|
-
|
|
188
|
-
|
|
167
|
+
cloneError(val, path) {
|
|
168
|
+
const clone = new Error(val.message);
|
|
169
|
+
clone.name = val.name;
|
|
170
|
+
clone.stack = val.stack;
|
|
171
|
+
this.copyProperties(val, clone, path);
|
|
172
|
+
return clone;
|
|
189
173
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
174
|
+
cloneMap(val, path) {
|
|
175
|
+
const clone = new Map();
|
|
176
|
+
for (const [k, v] of val) {
|
|
177
|
+
const keyStr = typeof k === 'string' ? k : '';
|
|
178
|
+
const currentPath = path && keyStr ? `${path}.${keyStr}` : keyStr;
|
|
179
|
+
if (keyStr && isExcluded(keyStr, currentPath, this.matchers))
|
|
180
|
+
continue;
|
|
181
|
+
const isRedact = keyStr
|
|
182
|
+
? isRedacted(keyStr, currentPath, this.matchers)
|
|
183
|
+
: false;
|
|
184
|
+
clone.set(this.sanitize(k, path), isRedact
|
|
185
|
+
? this.matchers.redactReplacement
|
|
186
|
+
: this.sanitize(v, currentPath));
|
|
196
187
|
}
|
|
197
|
-
|
|
198
|
-
? matchers.redactReplacement
|
|
199
|
-
: sanitizeValue(v, currentPath, matchers, ancestors);
|
|
200
|
-
Object.defineProperty(target, k, {
|
|
201
|
-
value: valOut,
|
|
202
|
-
writable: true,
|
|
203
|
-
enumerable: true,
|
|
204
|
-
configurable: true,
|
|
205
|
-
});
|
|
188
|
+
return clone;
|
|
206
189
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
190
|
+
copyProperties(source, target, path) {
|
|
191
|
+
for (const [k, v] of Object.entries(source)) {
|
|
192
|
+
const currentPath = path ? `${path}.${k}` : k;
|
|
193
|
+
if (isExcluded(k, currentPath, this.matchers)) {
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
const valOut = isRedacted(k, currentPath, this.matchers)
|
|
197
|
+
? this.matchers.redactReplacement
|
|
198
|
+
: this.sanitize(v, currentPath);
|
|
199
|
+
Object.defineProperty(target, k, {
|
|
200
|
+
value: valOut,
|
|
201
|
+
writable: true,
|
|
202
|
+
enumerable: true,
|
|
203
|
+
configurable: true,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
if (this.matchers.mode !== 'clone')
|
|
207
|
+
return;
|
|
208
|
+
for (const sym of Object.getOwnPropertySymbols(source)) {
|
|
209
|
+
const descriptor = Object.getOwnPropertyDescriptor(source, sym);
|
|
210
|
+
if (!descriptor?.enumerable)
|
|
211
|
+
continue;
|
|
212
|
+
Object.defineProperty(target, sym, {
|
|
213
|
+
value: this.sanitize(Reflect.get(source, sym), path),
|
|
214
|
+
writable: true,
|
|
215
|
+
enumerable: true,
|
|
216
|
+
configurable: true,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
219
|
}
|
|
220
220
|
}
|
|
221
|
+
function cloneRegExp(val) {
|
|
222
|
+
const clone = new RegExp(val.source, val.flags);
|
|
223
|
+
clone.lastIndex = val.lastIndex;
|
|
224
|
+
return clone;
|
|
225
|
+
}
|
|
226
|
+
function isBinary(val) {
|
|
227
|
+
const isBuffer = typeof Buffer !== 'undefined' && Buffer.isBuffer(val);
|
|
228
|
+
return isBuffer || val instanceof ArrayBuffer || ArrayBuffer.isView(val);
|
|
229
|
+
}
|
|
230
|
+
function isStream(val) {
|
|
231
|
+
const candidate = val;
|
|
232
|
+
return (typeof candidate.pipe === 'function' && typeof candidate.on === 'function');
|
|
233
|
+
}
|
|
234
|
+
/** A Multer upload: an `originalname` beside a `buffer` that is a Buffer. */
|
|
235
|
+
function isMulterFile(val) {
|
|
236
|
+
return ('originalname' in val &&
|
|
237
|
+
'buffer' in val &&
|
|
238
|
+
Buffer.isBuffer(val.buffer));
|
|
239
|
+
}
|
|
221
240
|
/**
|
|
222
241
|
* Sanitizes a value for structured logging or general processing: handles
|
|
223
242
|
* circular references, non-serializable types, exclusion, and redaction.
|
|
224
243
|
*/
|
|
225
244
|
export function safeSanitize(value, options) {
|
|
226
245
|
const matchers = buildMatchers(options);
|
|
227
|
-
return
|
|
246
|
+
return new Sanitizer(matchers).sanitize(value, '');
|
|
228
247
|
}
|
|
229
248
|
/**
|
|
230
249
|
* Safely converts a value to a JSON string, handling circular references,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safeStringify.js","sourceRoot":"","sources":["../src/safeStringify.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,iEAAiE;AACjE,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAC;AAErC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,UAAU;IACV,cAAc;IACd,MAAM;IACN,KAAK;IACL,OAAO;IACP,aAAa;IACb,cAAc;IACd,SAAS;IACT,cAAc;IACd,QAAQ;IACR,cAAc;IACd,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,eAAe;IACf,oBAAoB;IACpB,QAAQ;IACR,WAAW;IACX,KAAK;IACL,YAAY;IACZ,YAAY;IACZ,KAAK;CACN,CAAC;AAmBF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAWjE,SAAS,aAAa,CACpB,OAAuC;IAEvC,
|
|
1
|
+
{"version":3,"file":"safeStringify.js","sourceRoot":"","sources":["../src/safeStringify.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stableStringify.d.ts","sourceRoot":"","sources":["../src/stableStringify.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,IAAI,GACJ,OAAO,GACP,MAAM,GACN,MAAM,GACN,eAAe,EAAE,GACjB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,EACd,QAAQ,UAAQ,GACf,eAAe,CAEjB;
|
|
1
|
+
{"version":3,"file":"stableStringify.d.ts","sourceRoot":"","sources":["../src/stableStringify.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,IAAI,GACJ,OAAO,GACP,MAAM,GACN,MAAM,GACN,eAAe,EAAE,GACjB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,EACd,QAAQ,UAAQ,GACf,eAAe,CAEjB;AA2HD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAStD"}
|
package/dist/stableStringify.js
CHANGED
|
@@ -51,6 +51,9 @@ function normalize(value, ancestors, sortKeys) {
|
|
|
51
51
|
}
|
|
52
52
|
return value.toISOString();
|
|
53
53
|
}
|
|
54
|
+
return normalizeObject(value, ancestors, sortKeys);
|
|
55
|
+
}
|
|
56
|
+
function normalizeObject(value, ancestors, sortKeys) {
|
|
54
57
|
if (isUnsupportedObject(value)) {
|
|
55
58
|
throw new TypeError(`${value.constructor?.name || 'Object'} is outside the supported JSON domain.`);
|
|
56
59
|
}
|
|
@@ -69,30 +72,35 @@ function normalize(value, ancestors, sortKeys) {
|
|
|
69
72
|
}
|
|
70
73
|
ancestors.add(value);
|
|
71
74
|
try {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
if (!(index in value)) {
|
|
76
|
-
throw new TypeError('Sparse arrays are not JSON-serializable.');
|
|
77
|
-
}
|
|
78
|
-
result.push(normalize(value[index], ancestors, sortKeys));
|
|
79
|
-
}
|
|
80
|
-
return result;
|
|
81
|
-
}
|
|
82
|
-
const source = value;
|
|
83
|
-
const keys = Object.keys(source);
|
|
84
|
-
if (sortKeys)
|
|
85
|
-
keys.sort();
|
|
86
|
-
const result = Object.create(null);
|
|
87
|
-
for (const key of keys) {
|
|
88
|
-
result[key] = normalize(source[key], ancestors, sortKeys);
|
|
89
|
-
}
|
|
90
|
-
return result;
|
|
75
|
+
return Array.isArray(value)
|
|
76
|
+
? normalizeArray(value, ancestors, sortKeys)
|
|
77
|
+
: normalizeRecord(value, ancestors, sortKeys);
|
|
91
78
|
}
|
|
92
79
|
finally {
|
|
93
80
|
ancestors.delete(value);
|
|
94
81
|
}
|
|
95
82
|
}
|
|
83
|
+
function normalizeArray(value, ancestors, sortKeys) {
|
|
84
|
+
const result = [];
|
|
85
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
86
|
+
if (!(index in value)) {
|
|
87
|
+
throw new TypeError('Sparse arrays are not JSON-serializable.');
|
|
88
|
+
}
|
|
89
|
+
result.push(normalize(value[index], ancestors, sortKeys));
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
function normalizeRecord(value, ancestors, sortKeys) {
|
|
94
|
+
const source = value;
|
|
95
|
+
const keys = Object.keys(source);
|
|
96
|
+
if (sortKeys)
|
|
97
|
+
keys.sort();
|
|
98
|
+
const result = Object.create(null);
|
|
99
|
+
for (const key of keys) {
|
|
100
|
+
result[key] = normalize(source[key], ancestors, sortKeys);
|
|
101
|
+
}
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
96
104
|
function isUnsupportedObject(value) {
|
|
97
105
|
return (value instanceof RegExp ||
|
|
98
106
|
value instanceof Error ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stableStringify.js","sourceRoot":"","sources":["../src/stableStringify.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAatE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAc,EACd,QAAQ,GAAG,KAAK;IAEhB,OAAO,SAAS,CAAC,KAAK,EAAE,IAAI,OAAO,EAAU,EAAE,QAAQ,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,SAAS,CAChB,KAAc,EACd,SAA0B,EAC1B,QAAiB;IAEjB,IACE,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS,EAC1B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,SAAS,CAAC,gCAAgC,OAAO,KAAK,GAAG,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,SAAS,CAAC,0CAA0C,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC1B,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,SAAS,CAAC,0CAA0C,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,SAAS,CACjB,GAAG,KAAK,CAAC,WAAW,EAAE,IAAI,IAAI,QAAQ,wCAAwC,CAC/E,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAI,KAA8B,CAAC,MAAM,CAAC;IACtD,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,IAAI,CAAC;YACH,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC5D,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,SAAS,CACjB,gEAAgE,CACjE,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrB,IAAI,CAAC;QACH,
|
|
1
|
+
{"version":3,"file":"stableStringify.js","sourceRoot":"","sources":["../src/stableStringify.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cqrs-ddd/safe-stringify",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "Deterministic JSON for identity (cache keys, fingerprints) and safe, redacting JSON for logs, with no dependencies and no framework.",
|
|
5
5
|
"author": "Aristotelis",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
"access": "public"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@vitest/coverage-v8": "^5.0.
|
|
46
|
-
"vitest": "^5.0.
|
|
45
|
+
"@vitest/coverage-v8": "^5.0.5",
|
|
46
|
+
"vitest": "^5.0.5"
|
|
47
47
|
},
|
|
48
48
|
"scripts": {
|
|
49
49
|
"build": "tsc -p tsconfig.build.json",
|