@hackylabs/deep-redact 3.0.1 → 3.0.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/index.js +4 -1
- package/dist/cjs/utils/TransformerRegistry.js +100 -0
- package/dist/cjs/utils/index.js +75 -11
- package/dist/cjs/utils/standardTransformers/index.js +22 -3
- package/dist/esm/index.mjs +2 -1
- package/dist/esm/utils/TransformerRegistry.mjs +94 -0
- package/dist/esm/utils/index.mjs +75 -11
- package/dist/esm/utils/standardTransformers/index.js +28 -9
- package/dist/types/index.d.ts +3 -2
- package/dist/types/types.d.ts +66 -19
- package/dist/types/utils/TransformerRegistry.d.ts +52 -0
- package/dist/types/utils/index.d.ts +18 -0
- package/dist/types/utils/standardTransformers/index.d.ts +8 -1
- package/dist/types/utils/standardTransformers/url.d.ts +1 -1
- package/package.json +35 -28
package/dist/cjs/index.js
CHANGED
|
@@ -14,7 +14,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
14
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.default = exports.DeepRedact = void 0;
|
|
17
|
+
exports.organisedStandardTransformers = exports.standardTransformers = exports.default = exports.DeepRedact = void 0;
|
|
18
|
+
const standardTransformers_1 = require("./utils/standardTransformers");
|
|
19
|
+
Object.defineProperty(exports, "organisedStandardTransformers", { enumerable: true, get: function () { return standardTransformers_1.organisedStandardTransformers; } });
|
|
20
|
+
Object.defineProperty(exports, "standardTransformers", { enumerable: true, get: function () { return standardTransformers_1.standardTransformers; } });
|
|
18
21
|
const utils_1 = __importDefault(require("./utils"));
|
|
19
22
|
class DeepRedact {
|
|
20
23
|
/**
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TransformerRegistry = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Registry for organizing transformers by type and constructor for efficient lookup
|
|
6
|
+
*/
|
|
7
|
+
class TransformerRegistry {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.typeTransformers = new Map();
|
|
10
|
+
this.constructorTransformers = new Map();
|
|
11
|
+
this.fallbackTransformers = [];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Add a transformer for a specific typeof result
|
|
15
|
+
* @param type - The typeof result (e.g., 'bigint', 'string', etc.)
|
|
16
|
+
* @param transformer - The transformer function
|
|
17
|
+
*/
|
|
18
|
+
addTypeTransformer(type, transformer) {
|
|
19
|
+
if (!this.typeTransformers.has(type)) {
|
|
20
|
+
this.typeTransformers.set(type, []);
|
|
21
|
+
}
|
|
22
|
+
this.typeTransformers.get(type).push(transformer);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Add a transformer for a specific constructor
|
|
26
|
+
* @param constructor - The constructor function (e.g., Date, Error, etc.)
|
|
27
|
+
* @param transformer - The transformer function
|
|
28
|
+
*/
|
|
29
|
+
addConstructorTransformer(constructor, transformer) {
|
|
30
|
+
if (!this.constructorTransformers.has(constructor)) {
|
|
31
|
+
this.constructorTransformers.set(constructor, []);
|
|
32
|
+
}
|
|
33
|
+
this.constructorTransformers.get(constructor).push(transformer);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Add a fallback transformer that runs on all values
|
|
37
|
+
* @param transformer - The transformer function
|
|
38
|
+
*/
|
|
39
|
+
addFallbackTransformer(transformer) {
|
|
40
|
+
this.fallbackTransformers.push(transformer);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get relevant transformers for a value
|
|
44
|
+
* @param value - The value to get transformers for
|
|
45
|
+
* @returns Array of relevant transformers
|
|
46
|
+
*/
|
|
47
|
+
getTransformersForValue(value) {
|
|
48
|
+
const transformers = [];
|
|
49
|
+
const type = typeof value;
|
|
50
|
+
if (this.typeTransformers.has(type)) {
|
|
51
|
+
transformers.push(...this.typeTransformers.get(type));
|
|
52
|
+
}
|
|
53
|
+
if (typeof value === 'object' && value !== null) {
|
|
54
|
+
const constructor = value.constructor;
|
|
55
|
+
if (this.constructorTransformers.has(constructor)) {
|
|
56
|
+
transformers.push(...this.constructorTransformers.get(constructor));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
transformers.push(...this.fallbackTransformers);
|
|
60
|
+
return transformers;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Apply transformers to a value
|
|
64
|
+
* @param value - The value to transform
|
|
65
|
+
* @param key - The key (optional)
|
|
66
|
+
* @param referenceMap - Reference map for circular references (optional)
|
|
67
|
+
* @returns The transformed value
|
|
68
|
+
*/
|
|
69
|
+
applyTransformers(value, key, referenceMap) {
|
|
70
|
+
if (typeof value === 'string')
|
|
71
|
+
return value;
|
|
72
|
+
const transformers = this.getTransformersForValue(value);
|
|
73
|
+
for (const transformer of transformers) {
|
|
74
|
+
const transformed = transformer(value, key, referenceMap);
|
|
75
|
+
if (transformed !== value) {
|
|
76
|
+
return transformed;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return value;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Clear all transformers
|
|
83
|
+
*/
|
|
84
|
+
clear() {
|
|
85
|
+
this.typeTransformers.clear();
|
|
86
|
+
this.constructorTransformers.clear();
|
|
87
|
+
this.fallbackTransformers = [];
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get all registered transformers for debugging
|
|
91
|
+
*/
|
|
92
|
+
getRegisteredTransformers() {
|
|
93
|
+
return {
|
|
94
|
+
types: new Map(this.typeTransformers),
|
|
95
|
+
constructors: new Map(this.constructorTransformers),
|
|
96
|
+
fallback: [...this.fallbackTransformers]
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.TransformerRegistry = TransformerRegistry;
|
package/dist/cjs/utils/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const standardTransformers_1 = require("./standardTransformers");
|
|
4
|
+
const TransformerRegistry_1 = require("./TransformerRegistry");
|
|
4
5
|
const defaultConfig = {
|
|
5
6
|
stringTests: [],
|
|
6
7
|
blacklistedKeys: [],
|
|
@@ -36,6 +37,11 @@ class RedactorUtils {
|
|
|
36
37
|
* @private
|
|
37
38
|
*/
|
|
38
39
|
this.blacklistedKeysTransformed = [];
|
|
40
|
+
/**
|
|
41
|
+
* The transformer registry for efficient transformer lookup
|
|
42
|
+
* @private
|
|
43
|
+
*/
|
|
44
|
+
this.transformerRegistry = new TransformerRegistry_1.TransformerRegistry();
|
|
39
45
|
this.createTransformedBlacklistedKey = (key, customConfig) => {
|
|
40
46
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
|
41
47
|
if (key instanceof RegExp) {
|
|
@@ -67,15 +73,7 @@ class RedactorUtils {
|
|
|
67
73
|
* @private
|
|
68
74
|
*/
|
|
69
75
|
this.applyTransformers = (value, key, referenceMap) => {
|
|
70
|
-
|
|
71
|
-
return value;
|
|
72
|
-
let transformed = value;
|
|
73
|
-
for (const transformer of this.config.transformers) {
|
|
74
|
-
transformed = transformer(transformed, key, referenceMap);
|
|
75
|
-
if (transformed !== value)
|
|
76
|
-
return transformed;
|
|
77
|
-
}
|
|
78
|
-
return value;
|
|
76
|
+
return this.transformerRegistry.applyTransformers(value, key, referenceMap);
|
|
79
77
|
};
|
|
80
78
|
/**
|
|
81
79
|
* Sanitises a string for the computed regex
|
|
@@ -159,8 +157,8 @@ class RedactorUtils {
|
|
|
159
157
|
const { transformed } = this.applyStringTransformations(raw, false);
|
|
160
158
|
return transformed;
|
|
161
159
|
}
|
|
162
|
-
if (typeof raw !== 'object' || raw === null)
|
|
163
|
-
return raw;
|
|
160
|
+
if (typeof raw !== 'object' || raw === null || this.requiresTransformers(raw))
|
|
161
|
+
return this.applyTransformers(raw);
|
|
164
162
|
const referenceMap = new WeakMap();
|
|
165
163
|
const cleanedInput = this.replaceCircularReferences(raw);
|
|
166
164
|
const { output, stack } = this.initialiseTraversal(cleanedInput);
|
|
@@ -192,6 +190,49 @@ class RedactorUtils {
|
|
|
192
190
|
const stringKeys = ((_b = customConfig.blacklistedKeys) !== null && _b !== void 0 ? _b : []).filter(key => typeof key === 'string');
|
|
193
191
|
if (stringKeys.length > 0)
|
|
194
192
|
this.computedRegex = new RegExp(stringKeys.map(this.sanitiseStringForRegex).filter(Boolean).join('|'));
|
|
193
|
+
this.setupTransformerRegistry(this.config.transformers);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Sets up the transformer registry based on the configuration
|
|
197
|
+
* @param transformers - The transformer configuration
|
|
198
|
+
* @private
|
|
199
|
+
*/
|
|
200
|
+
setupTransformerRegistry(transformers) {
|
|
201
|
+
if (Array.isArray(transformers)) {
|
|
202
|
+
transformers.forEach(transformer => { this.transformerRegistry.addFallbackTransformer(transformer); });
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
const organised = transformers;
|
|
206
|
+
if (organised.byType) {
|
|
207
|
+
Object.entries(organised.byType).forEach(([type, typeTransformers]) => {
|
|
208
|
+
if (typeTransformers) {
|
|
209
|
+
typeTransformers.forEach(transformer => {
|
|
210
|
+
this.transformerRegistry.addTypeTransformer(type, transformer);
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
if (organised.byConstructor) {
|
|
216
|
+
Object.entries(organised.byConstructor).forEach(([constructorName, constructorTransformers]) => {
|
|
217
|
+
if (constructorTransformers) {
|
|
218
|
+
const constructorMap = {
|
|
219
|
+
Date,
|
|
220
|
+
Error,
|
|
221
|
+
Map,
|
|
222
|
+
Set,
|
|
223
|
+
RegExp,
|
|
224
|
+
URL,
|
|
225
|
+
};
|
|
226
|
+
const constructor = constructorMap[constructorName];
|
|
227
|
+
if (constructor) {
|
|
228
|
+
constructorTransformers.forEach(transformer => {
|
|
229
|
+
this.transformerRegistry.addConstructorTransformer(constructor, transformer);
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
195
236
|
}
|
|
196
237
|
/**
|
|
197
238
|
* Applies string transformations
|
|
@@ -425,5 +466,28 @@ class RedactorUtils {
|
|
|
425
466
|
};
|
|
426
467
|
return processValue(raw, '');
|
|
427
468
|
}
|
|
469
|
+
/**
|
|
470
|
+
* Checks if a non-traversable value requires transformers
|
|
471
|
+
* @param value - The value to check
|
|
472
|
+
* @returns Whether the value requires transformers
|
|
473
|
+
* @private
|
|
474
|
+
*/
|
|
475
|
+
requiresTransformers(value) {
|
|
476
|
+
if (typeof value === 'bigint')
|
|
477
|
+
return true;
|
|
478
|
+
if (value instanceof Date)
|
|
479
|
+
return true;
|
|
480
|
+
if (value instanceof Error)
|
|
481
|
+
return true;
|
|
482
|
+
if (value instanceof Map)
|
|
483
|
+
return true;
|
|
484
|
+
if (value instanceof RegExp)
|
|
485
|
+
return true;
|
|
486
|
+
if (value instanceof Set)
|
|
487
|
+
return true;
|
|
488
|
+
if (value instanceof URL)
|
|
489
|
+
return true;
|
|
490
|
+
return false;
|
|
491
|
+
}
|
|
428
492
|
}
|
|
429
493
|
exports.default = RedactorUtils;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.standardTransformers = void 0;
|
|
3
|
+
exports.organisedStandardTransformers = exports.standardTransformers = void 0;
|
|
4
4
|
const bigint_1 = require("./bigint");
|
|
5
5
|
const date_1 = require("./date");
|
|
6
6
|
const error_1 = require("./error");
|
|
@@ -8,12 +8,31 @@ const map_1 = require("./map");
|
|
|
8
8
|
const regex_1 = require("./regex");
|
|
9
9
|
const set_1 = require("./set");
|
|
10
10
|
const url_1 = require("./url");
|
|
11
|
+
/**
|
|
12
|
+
* Standard transformers in array for legacy support
|
|
13
|
+
*/
|
|
11
14
|
exports.standardTransformers = [
|
|
12
15
|
bigint_1._bigint,
|
|
13
|
-
url_1._url,
|
|
14
16
|
date_1._date,
|
|
15
17
|
error_1._error,
|
|
16
18
|
map_1._map,
|
|
17
|
-
set_1._set,
|
|
18
19
|
regex_1._regex,
|
|
20
|
+
set_1._set,
|
|
21
|
+
url_1._url,
|
|
19
22
|
];
|
|
23
|
+
/**
|
|
24
|
+
* Standard transformers organised by type and constructor for performance reasons
|
|
25
|
+
*/
|
|
26
|
+
exports.organisedStandardTransformers = {
|
|
27
|
+
byType: {
|
|
28
|
+
bigint: [bigint_1._bigint],
|
|
29
|
+
},
|
|
30
|
+
byConstructor: {
|
|
31
|
+
URL: [url_1._url],
|
|
32
|
+
Date: [date_1._date],
|
|
33
|
+
Error: [error_1._error],
|
|
34
|
+
Map: [map_1._map],
|
|
35
|
+
Set: [set_1._set],
|
|
36
|
+
RegExp: [regex_1._regex],
|
|
37
|
+
},
|
|
38
|
+
};
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { organisedStandardTransformers, standardTransformers } from './utils/standardTransformers';
|
|
1
2
|
import RedactorUtils from './utils';
|
|
2
3
|
class DeepRedact {
|
|
3
4
|
/**
|
|
@@ -36,4 +37,4 @@ class DeepRedact {
|
|
|
36
37
|
return this.config.serialise ? JSON.stringify(redacted) : redacted;
|
|
37
38
|
};
|
|
38
39
|
}
|
|
39
|
-
export { DeepRedact, DeepRedact as default, };
|
|
40
|
+
export { DeepRedact, DeepRedact as default, standardTransformers, organisedStandardTransformers, };
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry for organizing transformers by type and constructor for efficient lookup
|
|
3
|
+
*/
|
|
4
|
+
export class TransformerRegistry {
|
|
5
|
+
typeTransformers = new Map();
|
|
6
|
+
constructorTransformers = new Map();
|
|
7
|
+
fallbackTransformers = [];
|
|
8
|
+
/**
|
|
9
|
+
* Add a transformer for a specific typeof result
|
|
10
|
+
* @param type - The typeof result (e.g., 'bigint', 'string', etc.)
|
|
11
|
+
* @param transformer - The transformer function
|
|
12
|
+
*/
|
|
13
|
+
addTypeTransformer(type, transformer) {
|
|
14
|
+
if (!this.typeTransformers.has(type)) {
|
|
15
|
+
this.typeTransformers.set(type, []);
|
|
16
|
+
}
|
|
17
|
+
this.typeTransformers.get(type).push(transformer);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Add a transformer for a specific constructor
|
|
21
|
+
* @param constructor - The constructor function (e.g., Date, Error, etc.)
|
|
22
|
+
* @param transformer - The transformer function
|
|
23
|
+
*/
|
|
24
|
+
addConstructorTransformer(constructor, transformer) {
|
|
25
|
+
if (!this.constructorTransformers.has(constructor)) {
|
|
26
|
+
this.constructorTransformers.set(constructor, []);
|
|
27
|
+
}
|
|
28
|
+
this.constructorTransformers.get(constructor).push(transformer);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Add a fallback transformer that runs on all values
|
|
32
|
+
* @param transformer - The transformer function
|
|
33
|
+
*/
|
|
34
|
+
addFallbackTransformer(transformer) {
|
|
35
|
+
this.fallbackTransformers.push(transformer);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get relevant transformers for a value
|
|
39
|
+
* @param value - The value to get transformers for
|
|
40
|
+
* @returns Array of relevant transformers
|
|
41
|
+
*/
|
|
42
|
+
getTransformersForValue(value) {
|
|
43
|
+
const transformers = [];
|
|
44
|
+
const type = typeof value;
|
|
45
|
+
if (this.typeTransformers.has(type)) {
|
|
46
|
+
transformers.push(...this.typeTransformers.get(type));
|
|
47
|
+
}
|
|
48
|
+
if (typeof value === 'object' && value !== null) {
|
|
49
|
+
const constructor = value.constructor;
|
|
50
|
+
if (this.constructorTransformers.has(constructor)) {
|
|
51
|
+
transformers.push(...this.constructorTransformers.get(constructor));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
transformers.push(...this.fallbackTransformers);
|
|
55
|
+
return transformers;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Apply transformers to a value
|
|
59
|
+
* @param value - The value to transform
|
|
60
|
+
* @param key - The key (optional)
|
|
61
|
+
* @param referenceMap - Reference map for circular references (optional)
|
|
62
|
+
* @returns The transformed value
|
|
63
|
+
*/
|
|
64
|
+
applyTransformers(value, key, referenceMap) {
|
|
65
|
+
if (typeof value === 'string')
|
|
66
|
+
return value;
|
|
67
|
+
const transformers = this.getTransformersForValue(value);
|
|
68
|
+
for (const transformer of transformers) {
|
|
69
|
+
const transformed = transformer(value, key, referenceMap);
|
|
70
|
+
if (transformed !== value) {
|
|
71
|
+
return transformed;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return value;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Clear all transformers
|
|
78
|
+
*/
|
|
79
|
+
clear() {
|
|
80
|
+
this.typeTransformers.clear();
|
|
81
|
+
this.constructorTransformers.clear();
|
|
82
|
+
this.fallbackTransformers = [];
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get all registered transformers for debugging
|
|
86
|
+
*/
|
|
87
|
+
getRegisteredTransformers() {
|
|
88
|
+
return {
|
|
89
|
+
types: new Map(this.typeTransformers),
|
|
90
|
+
constructors: new Map(this.constructorTransformers),
|
|
91
|
+
fallback: [...this.fallbackTransformers]
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
package/dist/esm/utils/index.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { standardTransformers } from './standardTransformers';
|
|
2
|
+
import { TransformerRegistry } from './TransformerRegistry';
|
|
2
3
|
const defaultConfig = {
|
|
3
4
|
stringTests: [],
|
|
4
5
|
blacklistedKeys: [],
|
|
@@ -32,6 +33,11 @@ class RedactorUtils {
|
|
|
32
33
|
* @private
|
|
33
34
|
*/
|
|
34
35
|
blacklistedKeysTransformed = [];
|
|
36
|
+
/**
|
|
37
|
+
* The transformer registry for efficient transformer lookup
|
|
38
|
+
* @private
|
|
39
|
+
*/
|
|
40
|
+
transformerRegistry = new TransformerRegistry();
|
|
35
41
|
constructor(customConfig) {
|
|
36
42
|
this.config = {
|
|
37
43
|
...defaultConfig,
|
|
@@ -41,6 +47,49 @@ class RedactorUtils {
|
|
|
41
47
|
const stringKeys = (customConfig.blacklistedKeys ?? []).filter(key => typeof key === 'string');
|
|
42
48
|
if (stringKeys.length > 0)
|
|
43
49
|
this.computedRegex = new RegExp(stringKeys.map(this.sanitiseStringForRegex).filter(Boolean).join('|'));
|
|
50
|
+
this.setupTransformerRegistry(this.config.transformers);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Sets up the transformer registry based on the configuration
|
|
54
|
+
* @param transformers - The transformer configuration
|
|
55
|
+
* @private
|
|
56
|
+
*/
|
|
57
|
+
setupTransformerRegistry(transformers) {
|
|
58
|
+
if (Array.isArray(transformers)) {
|
|
59
|
+
transformers.forEach(transformer => { this.transformerRegistry.addFallbackTransformer(transformer); });
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const organised = transformers;
|
|
63
|
+
if (organised.byType) {
|
|
64
|
+
Object.entries(organised.byType).forEach(([type, typeTransformers]) => {
|
|
65
|
+
if (typeTransformers) {
|
|
66
|
+
typeTransformers.forEach(transformer => {
|
|
67
|
+
this.transformerRegistry.addTypeTransformer(type, transformer);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
if (organised.byConstructor) {
|
|
73
|
+
Object.entries(organised.byConstructor).forEach(([constructorName, constructorTransformers]) => {
|
|
74
|
+
if (constructorTransformers) {
|
|
75
|
+
const constructorMap = {
|
|
76
|
+
Date,
|
|
77
|
+
Error,
|
|
78
|
+
Map,
|
|
79
|
+
Set,
|
|
80
|
+
RegExp,
|
|
81
|
+
URL,
|
|
82
|
+
};
|
|
83
|
+
const constructor = constructorMap[constructorName];
|
|
84
|
+
if (constructor) {
|
|
85
|
+
constructorTransformers.forEach(transformer => {
|
|
86
|
+
this.transformerRegistry.addConstructorTransformer(constructor, transformer);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
44
93
|
}
|
|
45
94
|
createTransformedBlacklistedKey = (key, customConfig) => {
|
|
46
95
|
if (key instanceof RegExp) {
|
|
@@ -72,15 +121,7 @@ class RedactorUtils {
|
|
|
72
121
|
* @private
|
|
73
122
|
*/
|
|
74
123
|
applyTransformers = (value, key, referenceMap) => {
|
|
75
|
-
|
|
76
|
-
return value;
|
|
77
|
-
let transformed = value;
|
|
78
|
-
for (const transformer of this.config.transformers) {
|
|
79
|
-
transformed = transformer(transformed, key, referenceMap);
|
|
80
|
-
if (transformed !== value)
|
|
81
|
-
return transformed;
|
|
82
|
-
}
|
|
83
|
-
return value;
|
|
124
|
+
return this.transformerRegistry.applyTransformers(value, key, referenceMap);
|
|
84
125
|
};
|
|
85
126
|
/**
|
|
86
127
|
* Sanitises a string for the computed regex
|
|
@@ -381,6 +422,29 @@ class RedactorUtils {
|
|
|
381
422
|
};
|
|
382
423
|
return processValue(raw, '');
|
|
383
424
|
}
|
|
425
|
+
/**
|
|
426
|
+
* Checks if a non-traversable value requires transformers
|
|
427
|
+
* @param value - The value to check
|
|
428
|
+
* @returns Whether the value requires transformers
|
|
429
|
+
* @private
|
|
430
|
+
*/
|
|
431
|
+
requiresTransformers(value) {
|
|
432
|
+
if (typeof value === 'bigint')
|
|
433
|
+
return true;
|
|
434
|
+
if (value instanceof Date)
|
|
435
|
+
return true;
|
|
436
|
+
if (value instanceof Error)
|
|
437
|
+
return true;
|
|
438
|
+
if (value instanceof Map)
|
|
439
|
+
return true;
|
|
440
|
+
if (value instanceof RegExp)
|
|
441
|
+
return true;
|
|
442
|
+
if (value instanceof Set)
|
|
443
|
+
return true;
|
|
444
|
+
if (value instanceof URL)
|
|
445
|
+
return true;
|
|
446
|
+
return false;
|
|
447
|
+
}
|
|
384
448
|
/**
|
|
385
449
|
* Traverses the raw value
|
|
386
450
|
* @param raw - The raw value to traverse
|
|
@@ -391,8 +455,8 @@ class RedactorUtils {
|
|
|
391
455
|
const { transformed } = this.applyStringTransformations(raw, false);
|
|
392
456
|
return transformed;
|
|
393
457
|
}
|
|
394
|
-
if (typeof raw !== 'object' || raw === null)
|
|
395
|
-
return raw;
|
|
458
|
+
if (typeof raw !== 'object' || raw === null || this.requiresTransformers(raw))
|
|
459
|
+
return this.applyTransformers(raw);
|
|
396
460
|
const referenceMap = new WeakMap();
|
|
397
461
|
const cleanedInput = this.replaceCircularReferences(raw);
|
|
398
462
|
const { output, stack } = this.initialiseTraversal(cleanedInput);
|
|
@@ -1,16 +1,35 @@
|
|
|
1
|
-
import { _bigint } from
|
|
2
|
-
import { _date } from
|
|
3
|
-
import { _error } from
|
|
4
|
-
import { _map } from
|
|
5
|
-
import { _regex } from
|
|
6
|
-
import { _set } from
|
|
7
|
-
import { _url } from
|
|
1
|
+
import { _bigint } from './bigint';
|
|
2
|
+
import { _date } from './date';
|
|
3
|
+
import { _error } from './error';
|
|
4
|
+
import { _map } from './map';
|
|
5
|
+
import { _regex } from './regex';
|
|
6
|
+
import { _set } from './set';
|
|
7
|
+
import { _url } from './url';
|
|
8
|
+
/**
|
|
9
|
+
* Standard transformers in array for legacy support
|
|
10
|
+
*/
|
|
8
11
|
export const standardTransformers = [
|
|
9
12
|
_bigint,
|
|
10
|
-
_url,
|
|
11
13
|
_date,
|
|
12
14
|
_error,
|
|
13
15
|
_map,
|
|
14
|
-
_set,
|
|
15
16
|
_regex,
|
|
17
|
+
_set,
|
|
18
|
+
_url,
|
|
16
19
|
];
|
|
20
|
+
/**
|
|
21
|
+
* Standard transformers organised by type and constructor for performance reasons
|
|
22
|
+
*/
|
|
23
|
+
export const organisedStandardTransformers = {
|
|
24
|
+
byType: {
|
|
25
|
+
bigint: [_bigint],
|
|
26
|
+
},
|
|
27
|
+
byConstructor: {
|
|
28
|
+
URL: [_url],
|
|
29
|
+
Date: [_date],
|
|
30
|
+
Error: [_error],
|
|
31
|
+
Map: [_map],
|
|
32
|
+
Set: [_set],
|
|
33
|
+
RegExp: [_regex],
|
|
34
|
+
},
|
|
35
|
+
};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { DeepRedactConfig, RedactorUtilsConfig, BlacklistKeyConfig, Types, Transformer, ComplexStringTest, BaseDeepRedactConfig } from './types';
|
|
1
|
+
import type { DeepRedactConfig, RedactorUtilsConfig, BlacklistKeyConfig, Types, Transformer, ComplexStringTest, BaseDeepRedactConfig, OrganisedTransformers, TransformerConfig } from './types';
|
|
2
|
+
import { organisedStandardTransformers, standardTransformers } from './utils/standardTransformers';
|
|
2
3
|
declare class DeepRedact {
|
|
3
4
|
/**
|
|
4
5
|
* The redactorUtils instance to handle the redaction.
|
|
@@ -25,4 +26,4 @@ declare class DeepRedact {
|
|
|
25
26
|
*/
|
|
26
27
|
redact: (value: unknown) => unknown;
|
|
27
28
|
}
|
|
28
|
-
export { DeepRedact, DeepRedact as default, type BaseDeepRedactConfig, type RedactorUtilsConfig, type BlacklistKeyConfig, type ComplexStringTest, type Transformer, type Types, };
|
|
29
|
+
export { DeepRedact, DeepRedact as default, type BaseDeepRedactConfig, type RedactorUtilsConfig, type BlacklistKeyConfig, type ComplexStringTest, type Transformer, type Types, type OrganisedTransformers, type TransformerConfig, standardTransformers, organisedStandardTransformers, };
|
package/dist/types/types.d.ts
CHANGED
|
@@ -1,5 +1,43 @@
|
|
|
1
1
|
export type Types = 'string' | 'number' | 'bigint' | 'boolean' | 'object' | 'function' | 'symbol' | 'undefined';
|
|
2
2
|
export type Transformer = (value: unknown, key?: string, reference?: WeakMap<object, unknown>) => unknown;
|
|
3
|
+
/**
|
|
4
|
+
* Configuration for organised transformers by type and constructor
|
|
5
|
+
*/
|
|
6
|
+
export interface OrganisedTransformers {
|
|
7
|
+
/**
|
|
8
|
+
* Transformers for primitive types (based on typeof result)
|
|
9
|
+
*/
|
|
10
|
+
byType?: {
|
|
11
|
+
bigint?: Transformer[];
|
|
12
|
+
string?: Transformer[];
|
|
13
|
+
number?: Transformer[];
|
|
14
|
+
boolean?: Transformer[];
|
|
15
|
+
symbol?: Transformer[];
|
|
16
|
+
function?: Transformer[];
|
|
17
|
+
object?: Transformer[];
|
|
18
|
+
undefined?: Transformer[];
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Transformers for specific constructors (based on instanceof checks)
|
|
22
|
+
*/
|
|
23
|
+
byConstructor?: {
|
|
24
|
+
Date?: Transformer[];
|
|
25
|
+
Error?: Transformer[];
|
|
26
|
+
Map?: Transformer[];
|
|
27
|
+
Set?: Transformer[];
|
|
28
|
+
RegExp?: Transformer[];
|
|
29
|
+
URL?: Transformer[];
|
|
30
|
+
[key: string]: Transformer[] | undefined;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Transformers that run on all values (like the current system)
|
|
34
|
+
*/
|
|
35
|
+
fallback?: Transformer[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Transformer configuration - supports both old array format and new organised format
|
|
39
|
+
*/
|
|
40
|
+
export type TransformerConfig = Transformer[] | OrganisedTransformers;
|
|
3
41
|
export interface BlacklistKeyConfig {
|
|
4
42
|
/**
|
|
5
43
|
* Perform a fuzzy match on the key. This will match any key that contains the string, rather than a case-sensitive match.
|
|
@@ -131,25 +169,40 @@ export interface BaseDeepRedactConfig {
|
|
|
131
169
|
*/
|
|
132
170
|
serialize?: boolean;
|
|
133
171
|
/**
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
172
|
+
* Configuration for transformers to apply when transforming unsupported values.
|
|
173
|
+
* Supports both legacy array format and new organised format for better performance.
|
|
174
|
+
*
|
|
175
|
+
* Legacy format: Array of transformers that run on all values in order
|
|
176
|
+
* New format: Object with transformers organised by type and constructor
|
|
177
|
+
*
|
|
137
178
|
* @default []
|
|
138
|
-
* @example
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
* // convert a Date to an ISO string.
|
|
142
|
-
* (value: unknown) => {
|
|
143
|
-
* if (!(value instanceof Date)) return value
|
|
144
|
-
* return value.toISOString()
|
|
145
|
-
* },
|
|
146
|
-
* // convert a BigInt to a string.
|
|
179
|
+
* @example
|
|
180
|
+
* // Legacy format (still supported)
|
|
181
|
+
* [
|
|
147
182
|
* (value: unknown) => {
|
|
148
183
|
* if (typeof value !== 'bigint') return value
|
|
149
184
|
* return value.toString(10)
|
|
185
|
+
* },
|
|
186
|
+
* (value: unknown) => {
|
|
187
|
+
* if (!(value instanceof Date)) return value
|
|
188
|
+
* return value.toISOString()
|
|
150
189
|
* }
|
|
190
|
+
* ]
|
|
191
|
+
*
|
|
192
|
+
* @example
|
|
193
|
+
* {
|
|
194
|
+
* byType: {
|
|
195
|
+
* bigint: [(value: unknown) => (value as bigint).toString(10)]
|
|
196
|
+
* },
|
|
197
|
+
* byConstructor: {
|
|
198
|
+
* Date: [(value: unknown) => (value as Date).toISOString()]
|
|
199
|
+
* },
|
|
200
|
+
* fallback: [
|
|
201
|
+
* // transformers that run on all values
|
|
202
|
+
* ]
|
|
203
|
+
* }
|
|
151
204
|
*/
|
|
152
|
-
transformers?:
|
|
205
|
+
transformers?: TransformerConfig;
|
|
153
206
|
}
|
|
154
207
|
export type DeepRedactConfig = Partial<Omit<BaseDeepRedactConfig, '_blacklistedKeysTransformed' | 'blacklistedKeys' | 'stringTests'>> & ({
|
|
155
208
|
blacklistedKeys: BaseDeepRedactConfig['blacklistedKeys'];
|
|
@@ -169,9 +222,3 @@ export type Stack = Array<{
|
|
|
169
222
|
redactingParent: boolean;
|
|
170
223
|
keyConfig: BlacklistKeyConfig | undefined;
|
|
171
224
|
}>;
|
|
172
|
-
export type Logs = Array<{
|
|
173
|
-
path: string;
|
|
174
|
-
message: string;
|
|
175
|
-
raw: unknown;
|
|
176
|
-
transformed: unknown;
|
|
177
|
-
}> | null;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Transformer } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Registry for organizing transformers by type and constructor for efficient lookup
|
|
4
|
+
*/
|
|
5
|
+
export declare class TransformerRegistry {
|
|
6
|
+
private typeTransformers;
|
|
7
|
+
private constructorTransformers;
|
|
8
|
+
private fallbackTransformers;
|
|
9
|
+
/**
|
|
10
|
+
* Add a transformer for a specific typeof result
|
|
11
|
+
* @param type - The typeof result (e.g., 'bigint', 'string', etc.)
|
|
12
|
+
* @param transformer - The transformer function
|
|
13
|
+
*/
|
|
14
|
+
addTypeTransformer(type: string, transformer: Transformer): void;
|
|
15
|
+
/**
|
|
16
|
+
* Add a transformer for a specific constructor
|
|
17
|
+
* @param constructor - The constructor function (e.g., Date, Error, etc.)
|
|
18
|
+
* @param transformer - The transformer function
|
|
19
|
+
*/
|
|
20
|
+
addConstructorTransformer(constructor: Function, transformer: Transformer): void;
|
|
21
|
+
/**
|
|
22
|
+
* Add a fallback transformer that runs on all values
|
|
23
|
+
* @param transformer - The transformer function
|
|
24
|
+
*/
|
|
25
|
+
addFallbackTransformer(transformer: Transformer): void;
|
|
26
|
+
/**
|
|
27
|
+
* Get relevant transformers for a value
|
|
28
|
+
* @param value - The value to get transformers for
|
|
29
|
+
* @returns Array of relevant transformers
|
|
30
|
+
*/
|
|
31
|
+
getTransformersForValue(value: unknown): Transformer[];
|
|
32
|
+
/**
|
|
33
|
+
* Apply transformers to a value
|
|
34
|
+
* @param value - The value to transform
|
|
35
|
+
* @param key - The key (optional)
|
|
36
|
+
* @param referenceMap - Reference map for circular references (optional)
|
|
37
|
+
* @returns The transformed value
|
|
38
|
+
*/
|
|
39
|
+
applyTransformers(value: unknown, key?: string, referenceMap?: WeakMap<object, string>): unknown;
|
|
40
|
+
/**
|
|
41
|
+
* Clear all transformers
|
|
42
|
+
*/
|
|
43
|
+
clear(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Get all registered transformers for debugging
|
|
46
|
+
*/
|
|
47
|
+
getRegisteredTransformers(): {
|
|
48
|
+
types: Map<string, Transformer[]>;
|
|
49
|
+
constructors: Map<Function, Transformer[]>;
|
|
50
|
+
fallback: Transformer[];
|
|
51
|
+
};
|
|
52
|
+
}
|
|
@@ -20,7 +20,18 @@ declare class RedactorUtils {
|
|
|
20
20
|
* @private
|
|
21
21
|
*/
|
|
22
22
|
private readonly blacklistedKeysTransformed;
|
|
23
|
+
/**
|
|
24
|
+
* The transformer registry for efficient transformer lookup
|
|
25
|
+
* @private
|
|
26
|
+
*/
|
|
27
|
+
private readonly transformerRegistry;
|
|
23
28
|
constructor(customConfig: RedactorUtilsConfig);
|
|
29
|
+
/**
|
|
30
|
+
* Sets up the transformer registry based on the configuration
|
|
31
|
+
* @param transformers - The transformer configuration
|
|
32
|
+
* @private
|
|
33
|
+
*/
|
|
34
|
+
private setupTransformerRegistry;
|
|
24
35
|
private createTransformedBlacklistedKey;
|
|
25
36
|
/**
|
|
26
37
|
* Applies transformers to a value
|
|
@@ -120,6 +131,13 @@ declare class RedactorUtils {
|
|
|
120
131
|
* @private
|
|
121
132
|
*/
|
|
122
133
|
private replaceCircularReferences;
|
|
134
|
+
/**
|
|
135
|
+
* Checks if a non-traversable value requires transformers
|
|
136
|
+
* @param value - The value to check
|
|
137
|
+
* @returns Whether the value requires transformers
|
|
138
|
+
* @private
|
|
139
|
+
*/
|
|
140
|
+
private requiresTransformers;
|
|
123
141
|
/**
|
|
124
142
|
* Traverses the raw value
|
|
125
143
|
* @param raw - The raw value to traverse
|
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
import type { Transformer } from
|
|
1
|
+
import type { Transformer, OrganisedTransformers } from 'src/types';
|
|
2
|
+
/**
|
|
3
|
+
* Standard transformers in array for legacy support
|
|
4
|
+
*/
|
|
2
5
|
export declare const standardTransformers: Transformer[];
|
|
6
|
+
/**
|
|
7
|
+
* Standard transformers organised by type and constructor for performance reasons
|
|
8
|
+
*/
|
|
9
|
+
export declare const organisedStandardTransformers: OrganisedTransformers;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { Transformer } from
|
|
1
|
+
import type { Transformer } from '../../types';
|
|
2
2
|
export declare const _url: Transformer;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hackylabs/deep-redact",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.3",
|
|
4
4
|
"description": "A fast, safe and configurable zero-dependency library for redacting strings or deeply redacting arrays and objects.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
@@ -11,58 +11,63 @@
|
|
|
11
11
|
"module": "./dist/esm/index.mjs",
|
|
12
12
|
"exports": {
|
|
13
13
|
".": {
|
|
14
|
-
"import": "./dist/index",
|
|
15
|
-
"require": "./dist/index",
|
|
14
|
+
"import": "./dist/esm/index.mjs",
|
|
15
|
+
"require": "./dist/cjs/index.js",
|
|
16
16
|
"types": "./dist/types/index.d.ts"
|
|
17
17
|
},
|
|
18
18
|
"./types": {
|
|
19
|
-
"import": "./dist/types",
|
|
20
|
-
"require": "./dist/types",
|
|
19
|
+
"import": "./dist/esm/types.mjs",
|
|
20
|
+
"require": "./dist/cjs/types.js",
|
|
21
21
|
"types": "./dist/types/types.d.ts"
|
|
22
22
|
},
|
|
23
|
+
"./utils/TransformerRegistry": {
|
|
24
|
+
"import": "./dist/esm/utils/TransformerRegistry.mjs",
|
|
25
|
+
"require": "./dist/cjs/utils/TransformerRegistry.js",
|
|
26
|
+
"types": "./dist/types/utils/TransformerRegistry.d.ts"
|
|
27
|
+
},
|
|
23
28
|
"./utils": {
|
|
24
|
-
"import": "./dist/utils",
|
|
25
|
-
"require": "./dist/utils",
|
|
29
|
+
"import": "./dist/esm/utils.mjs",
|
|
30
|
+
"require": "./dist/cjs/utils.js",
|
|
26
31
|
"types": "./dist/types/utils.d.ts"
|
|
27
32
|
},
|
|
28
33
|
"./utils/standardTransformers/bigint": {
|
|
29
|
-
"import": "./dist/utils/standardTransformers/bigint",
|
|
30
|
-
"require": "./dist/utils/standardTransformers/bigint",
|
|
34
|
+
"import": "./dist/esm/utils/standardTransformers/bigint.mjs",
|
|
35
|
+
"require": "./dist/cjs/utils/standardTransformers/bigint.js",
|
|
31
36
|
"types": "./dist/types/utils/standardTransformers/bigint.d.ts"
|
|
32
37
|
},
|
|
33
38
|
"./utils/standardTransformers/date": {
|
|
34
|
-
"import": "./dist/utils/standardTransformers/date",
|
|
35
|
-
"require": "./dist/utils/standardTransformers/date",
|
|
39
|
+
"import": "./dist/esm/utils/standardTransformers/date.mjs",
|
|
40
|
+
"require": "./dist/cjs/utils/standardTransformers/date.js",
|
|
36
41
|
"types": "./dist/types/utils/standardTransformers/date.d.ts"
|
|
37
42
|
},
|
|
38
43
|
"./utils/standardTransformers/error": {
|
|
39
|
-
"import": "./dist/utils/standardTransformers/error",
|
|
40
|
-
"require": "./dist/utils/standardTransformers/error",
|
|
44
|
+
"import": "./dist/esm/utils/standardTransformers/error.mjs",
|
|
45
|
+
"require": "./dist/cjs/utils/standardTransformers/error.js",
|
|
41
46
|
"types": "./dist/types/utils/standardTransformers/error.d.ts"
|
|
42
47
|
},
|
|
43
48
|
"./utils/standardTransformers": {
|
|
44
|
-
"import": "./dist/utils/standardTransformers",
|
|
45
|
-
"require": "./dist/utils/standardTransformers",
|
|
49
|
+
"import": "./dist/esm/utils/standardTransformers.mjs",
|
|
50
|
+
"require": "./dist/cjs/utils/standardTransformers.js",
|
|
46
51
|
"types": "./dist/types/utils/standardTransformers.d.ts"
|
|
47
52
|
},
|
|
48
53
|
"./utils/standardTransformers/map": {
|
|
49
|
-
"import": "./dist/utils/standardTransformers/map",
|
|
50
|
-
"require": "./dist/utils/standardTransformers/map",
|
|
54
|
+
"import": "./dist/esm/utils/standardTransformers/map.mjs",
|
|
55
|
+
"require": "./dist/cjs/utils/standardTransformers/map.js",
|
|
51
56
|
"types": "./dist/types/utils/standardTransformers/map.d.ts"
|
|
52
57
|
},
|
|
53
58
|
"./utils/standardTransformers/regex": {
|
|
54
|
-
"import": "./dist/utils/standardTransformers/regex",
|
|
55
|
-
"require": "./dist/utils/standardTransformers/regex",
|
|
59
|
+
"import": "./dist/esm/utils/standardTransformers/regex.mjs",
|
|
60
|
+
"require": "./dist/cjs/utils/standardTransformers/regex.js",
|
|
56
61
|
"types": "./dist/types/utils/standardTransformers/regex.d.ts"
|
|
57
62
|
},
|
|
58
63
|
"./utils/standardTransformers/set": {
|
|
59
|
-
"import": "./dist/utils/standardTransformers/set",
|
|
60
|
-
"require": "./dist/utils/standardTransformers/set",
|
|
64
|
+
"import": "./dist/esm/utils/standardTransformers/set.mjs",
|
|
65
|
+
"require": "./dist/cjs/utils/standardTransformers/set.js",
|
|
61
66
|
"types": "./dist/types/utils/standardTransformers/set.d.ts"
|
|
62
67
|
},
|
|
63
68
|
"./utils/standardTransformers/url": {
|
|
64
|
-
"import": "./dist/utils/standardTransformers/url",
|
|
65
|
-
"require": "./dist/utils/standardTransformers/url",
|
|
69
|
+
"import": "./dist/esm/utils/standardTransformers/url.mjs",
|
|
70
|
+
"require": "./dist/cjs/utils/standardTransformers/url.js",
|
|
66
71
|
"types": "./dist/types/utils/standardTransformers/url.d.ts"
|
|
67
72
|
}
|
|
68
73
|
},
|
|
@@ -96,17 +101,19 @@
|
|
|
96
101
|
},
|
|
97
102
|
"scripts": {
|
|
98
103
|
"lint": "eslint",
|
|
99
|
-
"build": "npm run lint && npm run test && npm run bench && npm run build:esm && npm run build:cjs && npm run update-exports && npm run update-readme && npm run update-license",
|
|
104
|
+
"build": "npm run lint && npm run test && npm run bench && npm run build:esm && npm run build:cjs && npm run update-exports && npm run test:build && npm run update-readme && npm run update-license",
|
|
100
105
|
"build:esm": "tsc --project tsconfig.esm.json && ./scripts/js-to-mjs.sh",
|
|
101
106
|
"build:cjs": "tsc --project tsconfig.cjs.json",
|
|
102
107
|
"bench": "npx vitest bench --watch=false",
|
|
103
108
|
"bench:dev": "npx vitest bench",
|
|
104
109
|
"test:dev": "npx vitest",
|
|
105
110
|
"test": "npx vitest run",
|
|
106
|
-
"
|
|
107
|
-
"
|
|
108
|
-
"
|
|
109
|
-
"
|
|
111
|
+
"test:build": "npx vitest run test/build.test.ts --reporter=basic --coverage=false",
|
|
112
|
+
"test:build:dev": "npm run build:cjs && npm run build:esm && npm run update-exports && npx vitest test/build.test.ts --coverage=false --reporter=basic",
|
|
113
|
+
"test:load": "npx vitest run test/load/redact.test.ts --reporter=basic --coverage=false",
|
|
114
|
+
"test:load:dev": "npx vitest test/load/redact.test.ts --coverage=false --reporter=basic",
|
|
115
|
+
"test:unit": "npx vitest run test/unit --reporter=verbose",
|
|
116
|
+
"test:unit:dev": "npx vitest test/unit --coverage=false --reporter=verbose",
|
|
110
117
|
"update-readme": "npx ts-node ./scripts/update-readme.ts",
|
|
111
118
|
"update-license": "npx ts-node ./scripts/update-license.ts",
|
|
112
119
|
"update-exports": "npx ts-node ./scripts/update-exports.ts"
|