field-redactor 1.2.0 → 1.6.0

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.
Files changed (279) hide show
  1. package/.github/workflows/ci.yml +38 -0
  2. package/CHANGELOG.md +179 -0
  3. package/CONTRIBUTING.md +64 -0
  4. package/README.md +67 -670
  5. package/dist/api/fieldRedactor.d.ts +53 -0
  6. package/dist/api/fieldRedactor.d.ts.map +1 -0
  7. package/dist/api/fieldRedactor.js +169 -0
  8. package/dist/api/fieldRedactor.js.map +1 -0
  9. package/dist/api/fieldRedactorConfigBuilder.d.ts +57 -0
  10. package/dist/api/fieldRedactorConfigBuilder.d.ts.map +1 -0
  11. package/dist/api/fieldRedactorConfigBuilder.js +115 -0
  12. package/dist/api/fieldRedactorConfigBuilder.js.map +1 -0
  13. package/dist/api/fieldRedactorDeps.d.ts +19 -0
  14. package/dist/api/fieldRedactorDeps.d.ts.map +1 -0
  15. package/dist/api/fieldRedactorDeps.js +45 -0
  16. package/dist/api/fieldRedactorDeps.js.map +1 -0
  17. package/dist/arrayRedaction.d.ts +12 -0
  18. package/dist/arrayRedaction.d.ts.map +1 -0
  19. package/dist/arrayRedaction.js +70 -0
  20. package/dist/arrayRedaction.js.map +1 -0
  21. package/dist/config/configValidator.d.ts +9 -0
  22. package/dist/config/configValidator.d.ts.map +1 -0
  23. package/dist/config/configValidator.js +77 -0
  24. package/dist/config/configValidator.js.map +1 -0
  25. package/dist/config/customObjectSchemas.d.ts +7 -0
  26. package/dist/config/customObjectSchemas.d.ts.map +1 -0
  27. package/dist/config/customObjectSchemas.js +35 -0
  28. package/dist/config/customObjectSchemas.js.map +1 -0
  29. package/dist/config/presets.d.ts +22 -0
  30. package/dist/config/presets.d.ts.map +1 -0
  31. package/dist/config/presets.js +50 -0
  32. package/dist/config/presets.js.map +1 -0
  33. package/dist/config/redactionRules.d.ts +25 -0
  34. package/dist/config/redactionRules.d.ts.map +1 -0
  35. package/dist/config/redactionRules.js +108 -0
  36. package/dist/config/redactionRules.js.map +1 -0
  37. package/dist/configValidator.d.ts +9 -0
  38. package/dist/configValidator.d.ts.map +1 -0
  39. package/dist/configValidator.js +77 -0
  40. package/dist/configValidator.js.map +1 -0
  41. package/dist/copyOnWriteHelpers.d.ts +20 -0
  42. package/dist/copyOnWriteHelpers.d.ts.map +1 -0
  43. package/dist/copyOnWriteHelpers.js +58 -0
  44. package/dist/copyOnWriteHelpers.js.map +1 -0
  45. package/dist/customObjectFieldHandler.d.ts +21 -0
  46. package/dist/customObjectFieldHandler.d.ts.map +1 -0
  47. package/dist/customObjectFieldHandler.js +159 -0
  48. package/dist/customObjectFieldHandler.js.map +1 -0
  49. package/dist/customObjectManager.d.ts +14 -8
  50. package/dist/customObjectManager.d.ts.map +1 -1
  51. package/dist/customObjectManager.js +31 -30
  52. package/dist/customObjectManager.js.map +1 -1
  53. package/dist/customObjectSchemas.d.ts +7 -0
  54. package/dist/customObjectSchemas.d.ts.map +1 -0
  55. package/dist/customObjectSchemas.js +35 -0
  56. package/dist/customObjectSchemas.js.map +1 -0
  57. package/dist/dryRun.d.ts +9 -0
  58. package/dist/dryRun.d.ts.map +1 -0
  59. package/dist/dryRun.js +75 -0
  60. package/dist/dryRun.js.map +1 -0
  61. package/dist/dryRunAttribution.d.ts +10 -0
  62. package/dist/dryRunAttribution.d.ts.map +1 -0
  63. package/dist/dryRunAttribution.js +14 -0
  64. package/dist/dryRunAttribution.js.map +1 -0
  65. package/dist/dryrun/dryRun.d.ts +9 -0
  66. package/dist/dryrun/dryRun.d.ts.map +1 -0
  67. package/dist/dryrun/dryRun.js +75 -0
  68. package/dist/dryrun/dryRun.js.map +1 -0
  69. package/dist/dryrun/dryRunAttribution.d.ts +10 -0
  70. package/dist/dryrun/dryRunAttribution.d.ts.map +1 -0
  71. package/dist/dryrun/dryRunAttribution.js +14 -0
  72. package/dist/dryrun/dryRunAttribution.js.map +1 -0
  73. package/dist/engine/arrayRedaction.d.ts +12 -0
  74. package/dist/engine/arrayRedaction.d.ts.map +1 -0
  75. package/dist/engine/arrayRedaction.js +70 -0
  76. package/dist/engine/arrayRedaction.js.map +1 -0
  77. package/dist/engine/customObjectFieldHandler.d.ts +35 -0
  78. package/dist/engine/customObjectFieldHandler.d.ts.map +1 -0
  79. package/dist/engine/customObjectFieldHandler.js +167 -0
  80. package/dist/engine/customObjectFieldHandler.js.map +1 -0
  81. package/dist/engine/objectRedactor.d.ts +18 -0
  82. package/dist/engine/objectRedactor.d.ts.map +1 -0
  83. package/dist/engine/objectRedactor.js +38 -0
  84. package/dist/engine/objectRedactor.js.map +1 -0
  85. package/dist/engine/objectRedactorCustomObject.d.ts +27 -0
  86. package/dist/engine/objectRedactorCustomObject.d.ts.map +1 -0
  87. package/dist/engine/objectRedactorCustomObject.js +54 -0
  88. package/dist/engine/objectRedactorCustomObject.js.map +1 -0
  89. package/dist/engine/objectRedactorHelpers.d.ts +9 -0
  90. package/dist/engine/objectRedactorHelpers.d.ts.map +1 -0
  91. package/dist/engine/objectRedactorHelpers.js +61 -0
  92. package/dist/engine/objectRedactorHelpers.js.map +1 -0
  93. package/dist/engine/objectRedactorMutation.d.ts +10 -0
  94. package/dist/engine/objectRedactorMutation.d.ts.map +1 -0
  95. package/dist/engine/objectRedactorMutation.js +89 -0
  96. package/dist/engine/objectRedactorMutation.js.map +1 -0
  97. package/dist/engine/objectRedactorSync.d.ts +2 -0
  98. package/dist/engine/objectRedactorSync.d.ts.map +1 -0
  99. package/dist/engine/objectRedactorSync.js +7 -0
  100. package/dist/engine/objectRedactorSync.js.map +1 -0
  101. package/dist/engine/objectRedactorTraversal.d.ts +41 -0
  102. package/dist/engine/objectRedactorTraversal.d.ts.map +1 -0
  103. package/dist/engine/objectRedactorTraversal.js +201 -0
  104. package/dist/engine/objectRedactorTraversal.js.map +1 -0
  105. package/dist/engine/primitiveRedactor.d.ts +33 -0
  106. package/dist/engine/primitiveRedactor.d.ts.map +1 -0
  107. package/dist/engine/primitiveRedactor.js +75 -0
  108. package/dist/engine/primitiveRedactor.js.map +1 -0
  109. package/dist/engine/traversalServices.d.ts +21 -0
  110. package/dist/engine/traversalServices.d.ts.map +1 -0
  111. package/dist/engine/traversalServices.js +3 -0
  112. package/dist/engine/traversalServices.js.map +1 -0
  113. package/dist/fieldDisposition.d.ts +3 -0
  114. package/dist/fieldDisposition.d.ts.map +1 -0
  115. package/dist/fieldDisposition.js +6 -0
  116. package/dist/fieldDisposition.js.map +1 -0
  117. package/dist/fieldRedactor.d.ts +34 -11
  118. package/dist/fieldRedactor.d.ts.map +1 -1
  119. package/dist/fieldRedactor.js +116 -35
  120. package/dist/fieldRedactor.js.map +1 -1
  121. package/dist/fieldRedactorConfigBuilder.d.ts +55 -0
  122. package/dist/fieldRedactorConfigBuilder.d.ts.map +1 -0
  123. package/dist/fieldRedactorConfigBuilder.js +111 -0
  124. package/dist/fieldRedactorConfigBuilder.js.map +1 -0
  125. package/dist/fieldRedactorDeps.d.ts +19 -0
  126. package/dist/fieldRedactorDeps.d.ts.map +1 -0
  127. package/dist/fieldRedactorDeps.js +43 -0
  128. package/dist/fieldRedactorDeps.js.map +1 -0
  129. package/dist/index.d.ts +8 -2
  130. package/dist/index.d.ts.map +1 -1
  131. package/dist/index.js +15 -2
  132. package/dist/index.js.map +1 -1
  133. package/dist/jsonWalk.d.ts +11 -0
  134. package/dist/jsonWalk.d.ts.map +1 -0
  135. package/dist/jsonWalk.js +55 -0
  136. package/dist/jsonWalk.js.map +1 -0
  137. package/dist/maybeAsync.d.ts +7 -0
  138. package/dist/maybeAsync.d.ts.map +1 -0
  139. package/dist/maybeAsync.js +56 -0
  140. package/dist/maybeAsync.js.map +1 -0
  141. package/dist/objectRedactor.d.ts +10 -34
  142. package/dist/objectRedactor.d.ts.map +1 -1
  143. package/dist/objectRedactor.js +11 -298
  144. package/dist/objectRedactor.js.map +1 -1
  145. package/dist/objectRedactorCow.d.ts +35 -0
  146. package/dist/objectRedactorCow.d.ts.map +1 -0
  147. package/dist/objectRedactorCow.js +300 -0
  148. package/dist/objectRedactorCow.js.map +1 -0
  149. package/dist/objectRedactorCustomObject.d.ts +28 -0
  150. package/dist/objectRedactorCustomObject.d.ts.map +1 -0
  151. package/dist/objectRedactorCustomObject.js +57 -0
  152. package/dist/objectRedactorCustomObject.js.map +1 -0
  153. package/dist/objectRedactorHelpers.d.ts +9 -0
  154. package/dist/objectRedactorHelpers.d.ts.map +1 -0
  155. package/dist/objectRedactorHelpers.js +61 -0
  156. package/dist/objectRedactorHelpers.js.map +1 -0
  157. package/dist/objectRedactorMutation.d.ts +10 -0
  158. package/dist/objectRedactorMutation.d.ts.map +1 -0
  159. package/dist/objectRedactorMutation.js +89 -0
  160. package/dist/objectRedactorMutation.js.map +1 -0
  161. package/dist/objectRedactorSync.d.ts +2 -0
  162. package/dist/objectRedactorSync.d.ts.map +1 -0
  163. package/dist/objectRedactorSync.js +7 -0
  164. package/dist/objectRedactorSync.js.map +1 -0
  165. package/dist/objectRedactorTraversal.d.ts +41 -0
  166. package/dist/objectRedactorTraversal.d.ts.map +1 -0
  167. package/dist/objectRedactorTraversal.js +201 -0
  168. package/dist/objectRedactorTraversal.js.map +1 -0
  169. package/dist/pathParsing.d.ts +11 -0
  170. package/dist/pathParsing.d.ts.map +1 -0
  171. package/dist/pathParsing.js +53 -0
  172. package/dist/pathParsing.js.map +1 -0
  173. package/dist/pathRuleMatcher.d.ts +19 -0
  174. package/dist/pathRuleMatcher.d.ts.map +1 -0
  175. package/dist/pathRuleMatcher.js +42 -0
  176. package/dist/pathRuleMatcher.js.map +1 -0
  177. package/dist/presets.d.ts +22 -0
  178. package/dist/presets.d.ts.map +1 -0
  179. package/dist/presets.js +50 -0
  180. package/dist/presets.js.map +1 -0
  181. package/dist/primitiveRedactor.d.ts +13 -8
  182. package/dist/primitiveRedactor.d.ts.map +1 -1
  183. package/dist/primitiveRedactor.js +32 -27
  184. package/dist/primitiveRedactor.js.map +1 -1
  185. package/dist/redactionRules.d.ts +22 -0
  186. package/dist/redactionRules.d.ts.map +1 -0
  187. package/dist/redactionRules.js +74 -0
  188. package/dist/redactionRules.js.map +1 -0
  189. package/dist/regexUtils.d.ts +3 -0
  190. package/dist/regexUtils.d.ts.map +1 -0
  191. package/dist/regexUtils.js +8 -0
  192. package/dist/regexUtils.js.map +1 -0
  193. package/dist/ruleResolver.d.ts +65 -0
  194. package/dist/ruleResolver.d.ts.map +1 -0
  195. package/dist/ruleResolver.js +193 -0
  196. package/dist/ruleResolver.js.map +1 -0
  197. package/dist/rules/customObjectManager.d.ts +28 -0
  198. package/dist/rules/customObjectManager.d.ts.map +1 -0
  199. package/dist/rules/customObjectManager.js +60 -0
  200. package/dist/rules/customObjectManager.js.map +1 -0
  201. package/dist/rules/fieldDisposition.d.ts +3 -0
  202. package/dist/rules/fieldDisposition.d.ts.map +1 -0
  203. package/dist/rules/fieldDisposition.js +6 -0
  204. package/dist/rules/fieldDisposition.js.map +1 -0
  205. package/dist/rules/pathRuleMatcher.d.ts +19 -0
  206. package/dist/rules/pathRuleMatcher.d.ts.map +1 -0
  207. package/dist/rules/pathRuleMatcher.js +40 -0
  208. package/dist/rules/pathRuleMatcher.js.map +1 -0
  209. package/dist/rules/ruleResolver.d.ts +65 -0
  210. package/dist/rules/ruleResolver.d.ts.map +1 -0
  211. package/dist/rules/ruleResolver.js +194 -0
  212. package/dist/rules/ruleResolver.js.map +1 -0
  213. package/dist/rules/secretManager.d.ts +32 -0
  214. package/dist/rules/secretManager.d.ts.map +1 -0
  215. package/dist/rules/secretManager.js +85 -0
  216. package/dist/rules/secretManager.js.map +1 -0
  217. package/dist/rules/valuePatternMatcher.d.ts +15 -0
  218. package/dist/rules/valuePatternMatcher.d.ts.map +1 -0
  219. package/dist/rules/valuePatternMatcher.js +30 -0
  220. package/dist/rules/valuePatternMatcher.js.map +1 -0
  221. package/dist/secretManager.d.ts +17 -24
  222. package/dist/secretManager.d.ts.map +1 -1
  223. package/dist/secretManager.js +47 -32
  224. package/dist/secretManager.js.map +1 -1
  225. package/dist/traversalServices.d.ts +21 -0
  226. package/dist/traversalServices.d.ts.map +1 -0
  227. package/dist/traversalServices.js +3 -0
  228. package/dist/traversalServices.js.map +1 -0
  229. package/dist/types.d.ts +139 -2
  230. package/dist/types.d.ts.map +1 -1
  231. package/dist/types.js +14 -1
  232. package/dist/types.js.map +1 -1
  233. package/dist/util/jsonWalk.d.ts +10 -0
  234. package/dist/util/jsonWalk.d.ts.map +1 -0
  235. package/dist/util/jsonWalk.js +53 -0
  236. package/dist/util/jsonWalk.js.map +1 -0
  237. package/dist/util/maybeAsync.d.ts +7 -0
  238. package/dist/util/maybeAsync.d.ts.map +1 -0
  239. package/dist/util/maybeAsync.js +56 -0
  240. package/dist/util/maybeAsync.js.map +1 -0
  241. package/dist/util/pathParsing.d.ts +11 -0
  242. package/dist/util/pathParsing.d.ts.map +1 -0
  243. package/dist/util/pathParsing.js +53 -0
  244. package/dist/util/pathParsing.js.map +1 -0
  245. package/dist/util/regexUtils.d.ts +3 -0
  246. package/dist/util/regexUtils.d.ts.map +1 -0
  247. package/dist/util/regexUtils.js +8 -0
  248. package/dist/util/regexUtils.js.map +1 -0
  249. package/dist/valuePatternMatcher.d.ts +15 -0
  250. package/dist/valuePatternMatcher.d.ts.map +1 -0
  251. package/dist/valuePatternMatcher.js +30 -0
  252. package/dist/valuePatternMatcher.js.map +1 -0
  253. package/docs/guides/anti-patterns.md +107 -0
  254. package/docs/guides/metadata-redaction.md +112 -0
  255. package/docs/guides/migration-1.2-to-1.5.md +106 -0
  256. package/docs/guides/migration-1.5-to-1.6.md +56 -0
  257. package/docs/guides/path-rules.md +47 -0
  258. package/docs/guides/secret-key-modes.md +108 -0
  259. package/docs/guides/value-pattern-redaction.md +58 -0
  260. package/docs/reference/config.md +139 -0
  261. package/docs/release-notes/2.0.0.md +19 -0
  262. package/docs/release-notes/2.1.0.md +17 -0
  263. package/docs/release-notes/2.2.0.md +16 -0
  264. package/docs/release-notes/2.3.0.md +17 -0
  265. package/docs/release-notes/2.3.1.md +17 -0
  266. package/docs/release-notes/2.4.0.md +30 -0
  267. package/docs/release-notes/2.5.0.md +33 -0
  268. package/docs/release-notes/2.5.1.md +17 -0
  269. package/docs/release-notes/README.md +32 -0
  270. package/docs/release-notes/v1.0.0.md +17 -0
  271. package/docs/release-notes/v1.1.0.md +18 -0
  272. package/docs/release-notes/v1.2.0.md +18 -0
  273. package/docs/release-notes/v1.2.1.md +16 -0
  274. package/docs/release-notes/v1.2.2.md +19 -0
  275. package/docs/release-notes/v1.3.0.md +112 -0
  276. package/docs/release-notes/v1.5.0.md +88 -0
  277. package/docs/release-notes/v1.6.0.md +59 -0
  278. package/jest.config.js +6 -1
  279. package/package.json +8 -2
@@ -13,69 +13,150 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.FieldRedactor = void 0;
16
- const rfdc_1 = __importDefault(require("rfdc"));
17
- const objectRedactor_1 = require("./objectRedactor");
18
- const primitiveRedactor_1 = require("./primitiveRedactor");
19
- const secretManager_1 = require("./secretManager");
20
- const customObjectManager_1 = require("./customObjectManager");
21
16
  const errors_1 = require("./errors");
17
+ const fieldRedactorDeps_1 = require("./fieldRedactorDeps");
18
+ const dryRun_1 = require("./dryRun");
19
+ const rfdc_1 = __importDefault(require("rfdc"));
20
+ const configValidator_1 = require("./configValidator");
22
21
  /**
23
22
  * FieldRedactor is a highly customizable JSON object field redactor. It conditionally redacts fields based on
24
23
  * the secrets, deepSecrets, fullSecrets, and custom objects provided in the configuration. Refer to the README.md
25
24
  * for more details.
25
+ *
26
+ * Defaults: `ignoreNullOrUndefined` is `true`, `ignoreBooleans` is `false`, `cloneInput` is `true`.
26
27
  */
27
28
  class FieldRedactor {
28
29
  constructor(config) {
30
+ var _a;
29
31
  this.deepCopy = (0, rfdc_1.default)({ proto: true, circles: true });
30
- const { redactor, secretKeys, deepSecretKeys, fullSecretKeys, deleteSecretKeys, customObjects } = config || {};
31
- const ignoreNullOrUndefined = typeof (config === null || config === void 0 ? void 0 : config.ignoreNullOrUndefined) === 'boolean' ? config.ignoreNullOrUndefined : true;
32
- const ignoreBooleans = typeof (config === null || config === void 0 ? void 0 : config.ignoreBooleans) === 'boolean' ? config.ignoreBooleans : true;
33
- const primitiveRedactor = new primitiveRedactor_1.PrimitiveRedactor({
34
- ignoreBooleans,
35
- ignoreNullOrUndefined,
36
- redactor
37
- });
38
- const secretManager = new secretManager_1.SecretManager({
39
- secretKeys,
40
- deepSecretKeys,
41
- fullSecretKeys,
42
- deleteSecretKeys
32
+ this.configWarnings = (0, configValidator_1.validateFieldRedactorConfig)(config);
33
+ for (const warning of this.configWarnings) {
34
+ (_a = config === null || config === void 0 ? void 0 : config.onConfigWarning) === null || _a === void 0 ? void 0 : _a.call(config, warning);
35
+ }
36
+ this.deps = (0, fieldRedactorDeps_1.buildFieldRedactorDeps)(config);
37
+ }
38
+ /**
39
+ * Creates a FieldRedactor that requires at least one explicit redaction rule: Shallow (`secretKeys`),
40
+ * Deep (`deepSecretKeys`), Opaque (`fullSecretKeys`), Remove (`deleteSecretKeys`), Schema (`customObjects`),
41
+ * or Value-pattern (`valuePatterns`).
42
+ * Unlike `new FieldRedactor()`, omitting all rules does not default to redacting every value.
43
+ */
44
+ static createSafe(config) {
45
+ if (!(0, configValidator_1.hasExplicitRedactionRules)(config)) {
46
+ throw new errors_1.FieldRedactorConfigurationError('FieldRedactor.createSafe() requires at least one non-empty secretKeys, deepSecretKeys, fullSecretKeys, deleteSecretKeys, customObjects, or valuePatterns entry. Without explicit rules, new FieldRedactor() redacts all values by default.');
47
+ }
48
+ return new FieldRedactor(config);
49
+ }
50
+ /** Redacts a copy of the input and returns an audit report of affected paths without mutating the original. */
51
+ dryRun(value) {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ return this.runDryRun(value, (input) => this.redact(input));
43
54
  });
44
- const customObjectChecker = new customObjectManager_1.CustomObjectManager(customObjects);
45
- this.objectRedactor = new objectRedactor_1.ObjectRedactor(primitiveRedactor, secretManager, customObjectChecker);
55
+ }
56
+ /** Synchronous {@link FieldRedactor.dryRun} without per-field Promise overhead. */
57
+ dryRunSync(value) {
58
+ if (this.isPrimitiveOrUndefined(value)) {
59
+ return this.emptyDryRunResult(value);
60
+ }
61
+ const snapshot = this.deepCopy(value);
62
+ return this.toDryRunResult(snapshot, this.redactSync(value));
63
+ }
64
+ runDryRun(value, redact) {
65
+ if (this.isPrimitiveOrUndefined(value)) {
66
+ return this.emptyDryRunResult(value);
67
+ }
68
+ const snapshot = this.deepCopy(value);
69
+ const result = redact(value);
70
+ if (result instanceof Promise) {
71
+ return result.then((redacted) => this.toDryRunResult(snapshot, redacted));
72
+ }
73
+ return this.toDryRunResult(snapshot, result);
74
+ }
75
+ emptyDryRunResult(value) {
76
+ return { result: value, report: dryRun_1.EMPTY_DRY_RUN_REPORT };
77
+ }
78
+ toDryRunResult(snapshot, result) {
79
+ return {
80
+ result,
81
+ report: (0, dryRun_1.buildDryRunReport)(snapshot, result, this.deps.customObjectManager, this.deps.secretManager, this.deps.valuePatternMatcher, this.deps.pathRuleMatcher)
82
+ };
46
83
  }
47
84
  /**
48
85
  * Conditionally redacts fields in the JSON object based on the configuration provided in the constructor and returns the
49
86
  * redacted result.
50
87
  * If the value is a primitive, undefined, or date, returns the value as-is.
51
- * @param value The JSON value to redact. If primitive it will be resolved as-is.
52
- * @returns The redacted JSON object.
53
88
  */
54
89
  redact(value) {
55
90
  return __awaiter(this, void 0, void 0, function* () {
91
+ if (this.isPrimitiveOrUndefined(value)) {
92
+ return value;
93
+ }
94
+ if (!this.deps.cloneInput) {
95
+ yield this.redactInPlace(value);
96
+ return value;
97
+ }
98
+ if (!this.deps.usesAsyncRedactor) {
99
+ return Promise.resolve(this.redactSync(value));
100
+ }
56
101
  const copy = this.deepCopy(value);
57
- return this.redactInPlace(copy);
102
+ yield this.redactInPlace(copy);
103
+ return copy;
58
104
  });
59
105
  }
60
106
  /**
61
- * Conditionally redacts fields in the JSON object in place based on the configuration provided in the constructor.
62
- * If the value is a primitive, undefined, or date, returns the value as-is.
63
- * @param value The JSON value to redact in place. If primitive it will be resolved as-is.
64
- * @returns The redacted JSON object.
107
+ * Synchronously redacts fields and returns a copy without per-field Promise overhead.
108
+ * Uses copy-on-write structural sharing by default so only mutated branches are cloned.
65
109
  */
110
+ redactSync(value) {
111
+ if (this.isPrimitiveOrUndefined(value)) {
112
+ return value;
113
+ }
114
+ if (!this.deps.cloneInput) {
115
+ this.redactInPlaceSync(value);
116
+ return value;
117
+ }
118
+ return this.deps.objectRedactor.redactCopyOnWrite(value);
119
+ }
120
+ /** Conditionally redacts fields in the JSON object in place based on the configuration provided in the constructor. */
66
121
  redactInPlace(value) {
67
122
  return __awaiter(this, void 0, void 0, function* () {
68
- if (this.isPrimitiveOrUndefined(value)) {
69
- return value;
70
- }
71
- try {
72
- return this.objectRedactor.redactInPlace(value);
73
- }
74
- catch (e) {
75
- throw new errors_1.FieldRedactorError(e.message);
123
+ if (!this.deps.usesAsyncRedactor) {
124
+ this.redactInPlaceSync(value);
125
+ return;
76
126
  }
127
+ yield this.runTraversableRedaction(value, () => this.deps.objectRedactor.redactInPlace(value));
77
128
  });
78
129
  }
130
+ /**
131
+ * Synchronously redacts fields in the JSON object in place without per-field Promise overhead.
132
+ * Requires a `syncRedactor` or the default redactor; throws when only an async `redactor` is configured.
133
+ */
134
+ redactInPlaceSync(value) {
135
+ if (this.deps.usesAsyncRedactor) {
136
+ throw new errors_1.FieldRedactorError('redactInPlaceSync requires syncRedactor configuration or the default redactor');
137
+ }
138
+ this.runTraversableRedaction(value, () => this.deps.objectRedactor.redactInPlaceSync(value));
139
+ }
140
+ runTraversableRedaction(value, redact) {
141
+ if (this.isPrimitiveOrUndefined(value)) {
142
+ return;
143
+ }
144
+ try {
145
+ const result = redact();
146
+ if (result instanceof Promise) {
147
+ return result.catch((error) => {
148
+ throw this.toFieldRedactorError(error);
149
+ });
150
+ }
151
+ }
152
+ catch (error) {
153
+ throw this.toFieldRedactorError(error);
154
+ }
155
+ }
156
+ toFieldRedactorError(error) {
157
+ const message = error instanceof Error ? error.message : String(error);
158
+ return new errors_1.FieldRedactorError(message);
159
+ }
79
160
  isPrimitiveOrUndefined(value) {
80
161
  return !value || typeof value !== 'object' || value instanceof Date;
81
162
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fieldRedactor.js","sourceRoot":"","sources":["../src/fieldRedactor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAwB;AAExB,qDAAkD;AAClD,2DAAwD;AACxD,mDAAgD;AAChD,+DAA4D;AAC5D,qCAA8C;AAE9C;;;;GAIG;AACH,MAAa,aAAa;IAGxB,YAAY,MAA4B;QAFhC,aAAQ,GAAG,IAAA,cAAI,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAGtD,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QAE/G,MAAM,qBAAqB,GACzB,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,qBAAqB,CAAA,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3F,MAAM,cAAc,GAAG,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,CAAA,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;QAElG,MAAM,iBAAiB,GAAG,IAAI,qCAAiB,CAAC;YAC9C,cAAc;YACd,qBAAqB;YACrB,QAAQ;SACT,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,IAAI,6BAAa,CAAC;YACtC,UAAU;YACV,cAAc;YACd,cAAc;YACd,gBAAgB;SACjB,CAAC,CAAC;QAEH,MAAM,mBAAmB,GAAG,IAAI,yCAAmB,CAAC,aAAa,CAAC,CAAC;QAEnE,IAAI,CAAC,cAAc,GAAG,IAAI,+BAAc,CAAC,iBAAiB,EAAE,aAAa,EAAE,mBAAmB,CAAC,CAAC;IAClG,CAAC;IAED;;;;;;OAMG;IACU,MAAM,CAAC,KAAU;;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;KAAA;IAED;;;;;OAKG;IACU,aAAa,CAAC,KAAU;;YACnC,IAAI,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAClD,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAChB,MAAM,IAAI,2BAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;KAAA;IAEO,sBAAsB,CAAC,KAAU;QACvC,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,IAAI,CAAC;IACtE,CAAC;CACF;AA7DD,sCA6DC"}
1
+ {"version":3,"file":"fieldRedactor.js","sourceRoot":"","sources":["../src/fieldRedactor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { FieldRedactor } from './fieldRedactor';
2
+ import { CustomObject, FieldRedactorConfig, PathRuleMode, Redactor, SyncRedactor } from './types';
3
+ export type SchemaOptions = {
4
+ /** Optional label surfaced in {@link FieldRedactor.dryRun} `matchedSchemas` reports. */
5
+ name?: string;
6
+ };
7
+ /**
8
+ * Fluent builder for {@link FieldRedactorConfig} using doc labels (Shallow, Deep, Opaque, Remove, Schema).
9
+ */
10
+ export declare class FieldRedactorConfigBuilder {
11
+ private config;
12
+ private schemas;
13
+ static create(): FieldRedactorConfigBuilder;
14
+ /** Shallow — redact matching keys' scalar values (`secretKeys`). */
15
+ shallow(...patterns: RegExp[]): this;
16
+ /** Deep — redact matching keys and descendants (`deepSecretKeys`). */
17
+ deep(...patterns: RegExp[]): this;
18
+ /** Opaque — stringify entire values at matching keys (`fullSecretKeys`). */
19
+ opaque(...patterns: RegExp[]): this;
20
+ /** Remove — delete matching keys from output (`deleteSecretKeys`). */
21
+ remove(...patterns: RegExp[]): this;
22
+ /** Alias for {@link FieldRedactorConfigBuilder.remove}. */
23
+ delete(...patterns: RegExp[]): this;
24
+ /** Register an object schema (`customObjects`). */
25
+ schema(customObject: CustomObject, options?: SchemaOptions): this;
26
+ /**
27
+ * Value-pattern — redact scalar fields whose string form matches a pattern, regardless of key name (`valuePatterns`).
28
+ * Lowest precedence; opt-in defense in depth beyond key-name rules.
29
+ */
30
+ valuePattern(...patterns: RegExp[]): this;
31
+ /**
32
+ * Path rule — apply a redaction mode at a JSON path (`metadata.*.value`, `accountInfo.id`).
33
+ */
34
+ pathRule(path: string, mode: PathRuleMode): this;
35
+ /** Allowlist — matching key names are never redacted under deep parents (`passKeys`). */
36
+ passKey(...patterns: RegExp[]): this;
37
+ /**
38
+ * Merge a {@link presets} return value (or any partial config) into the builder.
39
+ * Regex arrays and schemas accumulate; scalar options apply only when not already set.
40
+ */
41
+ usePreset(preset: Partial<FieldRedactorConfig>): this;
42
+ redactor(fn: Redactor): this;
43
+ syncRedactor(fn: SyncRedactor): this;
44
+ ignoreBooleans(value: boolean): this;
45
+ ignoreNullOrUndefined(value: boolean): this;
46
+ cloneInput(value: boolean): this;
47
+ strict(value?: boolean): this;
48
+ onConfigWarning(handler: (message: string) => void): this;
49
+ build(): FieldRedactorConfig;
50
+ buildRedactor(): FieldRedactor;
51
+ buildSafeRedactor(): FieldRedactor;
52
+ private appendRegex;
53
+ private set;
54
+ }
55
+ //# sourceMappingURL=fieldRedactorConfigBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldRedactorConfigBuilder.d.ts","sourceRoot":"","sources":["../src/fieldRedactorConfigBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQhD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAElG,MAAM,MAAM,aAAa,GAAG;IAC1B,wFAAwF;IACxF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,OAAO,CAA0B;IAEzC,MAAM,CAAC,MAAM,IAAI,0BAA0B;IAI3C,oEAAoE;IACpE,OAAO,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAIpC,sEAAsE;IACtE,IAAI,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAIjC,4EAA4E;IAC5E,MAAM,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAInC,sEAAsE;IACtE,MAAM,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAInC,2DAA2D;IAC3D,MAAM,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAInC,mDAAmD;IACnD,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAKjE;;;OAGG;IACH,YAAY,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAKzC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI;IAKhD,yFAAyF;IACzF,OAAO,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAKpC;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI;IAKrD,QAAQ,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI;IAI5B,YAAY,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI;IAIpC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAIpC,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI3C,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAIhC,MAAM,CAAC,KAAK,UAAO,GAAG,IAAI;IAI1B,eAAe,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIzD,KAAK,IAAI,mBAAmB;IAI5B,aAAa,IAAI,aAAa;IAI9B,iBAAiB,IAAI,aAAa;IAIlC,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,GAAG;CAIZ"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FieldRedactorConfigBuilder = void 0;
4
+ const fieldRedactor_1 = require("./fieldRedactor");
5
+ const redactionRules_1 = require("./redactionRules");
6
+ /**
7
+ * Fluent builder for {@link FieldRedactorConfig} using doc labels (Shallow, Deep, Opaque, Remove, Schema).
8
+ */
9
+ class FieldRedactorConfigBuilder {
10
+ constructor() {
11
+ this.config = {};
12
+ this.schemas = [];
13
+ }
14
+ static create() {
15
+ return new FieldRedactorConfigBuilder();
16
+ }
17
+ /** Shallow — redact matching keys' scalar values (`secretKeys`). */
18
+ shallow(...patterns) {
19
+ return this.appendRegex('secretKeys', patterns);
20
+ }
21
+ /** Deep — redact matching keys and descendants (`deepSecretKeys`). */
22
+ deep(...patterns) {
23
+ return this.appendRegex('deepSecretKeys', patterns);
24
+ }
25
+ /** Opaque — stringify entire values at matching keys (`fullSecretKeys`). */
26
+ opaque(...patterns) {
27
+ return this.appendRegex('fullSecretKeys', patterns);
28
+ }
29
+ /** Remove — delete matching keys from output (`deleteSecretKeys`). */
30
+ remove(...patterns) {
31
+ return this.appendRegex('deleteSecretKeys', patterns);
32
+ }
33
+ /** Alias for {@link FieldRedactorConfigBuilder.remove}. */
34
+ delete(...patterns) {
35
+ return this.remove(...patterns);
36
+ }
37
+ /** Register an object schema (`customObjects`). */
38
+ schema(customObject, options) {
39
+ this.schemas.push({ object: customObject, name: options === null || options === void 0 ? void 0 : options.name });
40
+ return this;
41
+ }
42
+ /**
43
+ * Value-pattern — redact scalar fields whose string form matches a pattern, regardless of key name (`valuePatterns`).
44
+ * Lowest precedence; opt-in defense in depth beyond key-name rules.
45
+ */
46
+ valuePattern(...patterns) {
47
+ (0, redactionRules_1.appendRegExpArray)(this.config, 'valuePatterns', patterns);
48
+ return this;
49
+ }
50
+ /**
51
+ * Path rule — apply a redaction mode at a JSON path (`metadata.*.value`, `accountInfo.id`).
52
+ */
53
+ pathRule(path, mode) {
54
+ var _a;
55
+ this.config.pathRules = [...((_a = this.config.pathRules) !== null && _a !== void 0 ? _a : []), { path, mode }];
56
+ return this;
57
+ }
58
+ /** Allowlist — matching key names are never redacted under deep parents (`passKeys`). */
59
+ passKey(...patterns) {
60
+ (0, redactionRules_1.appendRegExpArray)(this.config, 'passKeys', patterns);
61
+ return this;
62
+ }
63
+ /**
64
+ * Merge a {@link presets} return value (or any partial config) into the builder.
65
+ * Regex arrays and schemas accumulate; scalar options apply only when not already set.
66
+ */
67
+ usePreset(preset) {
68
+ (0, redactionRules_1.mergePartialConfig)(this.config, this.schemas, preset);
69
+ return this;
70
+ }
71
+ redactor(fn) {
72
+ return this.set('redactor', fn);
73
+ }
74
+ syncRedactor(fn) {
75
+ return this.set('syncRedactor', fn);
76
+ }
77
+ ignoreBooleans(value) {
78
+ return this.set('ignoreBooleans', value);
79
+ }
80
+ ignoreNullOrUndefined(value) {
81
+ return this.set('ignoreNullOrUndefined', value);
82
+ }
83
+ cloneInput(value) {
84
+ return this.set('cloneInput', value);
85
+ }
86
+ strict(value = true) {
87
+ return this.set('strict', value);
88
+ }
89
+ onConfigWarning(handler) {
90
+ return this.set('onConfigWarning', handler);
91
+ }
92
+ build() {
93
+ return Object.assign(Object.assign({}, this.config), (0, redactionRules_1.finalizeRegisteredSchemas)(this.schemas));
94
+ }
95
+ buildRedactor() {
96
+ return new fieldRedactor_1.FieldRedactor(this.build());
97
+ }
98
+ buildSafeRedactor() {
99
+ return fieldRedactor_1.FieldRedactor.createSafe(this.build());
100
+ }
101
+ appendRegex(field, patterns) {
102
+ (0, redactionRules_1.appendRegExpArray)(this.config, field, patterns);
103
+ return this;
104
+ }
105
+ set(key, value) {
106
+ this.config[key] = value;
107
+ return this;
108
+ }
109
+ }
110
+ exports.FieldRedactorConfigBuilder = FieldRedactorConfigBuilder;
111
+ //# sourceMappingURL=fieldRedactorConfigBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldRedactorConfigBuilder.js","sourceRoot":"","sources":["../src/fieldRedactorConfigBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { CustomObjectManager } from './customObjectManager';
2
+ import { ObjectRedactor } from './objectRedactor';
3
+ import { PrimitiveRedactor } from './primitiveRedactor';
4
+ import { SecretManager } from './secretManager';
5
+ import { FieldRedactorConfig } from './types';
6
+ import { PathRuleMatcher } from './pathRuleMatcher';
7
+ import { ValuePatternMatcher } from './valuePatternMatcher';
8
+ export type FieldRedactorDeps = {
9
+ primitiveRedactor: PrimitiveRedactor;
10
+ secretManager: SecretManager;
11
+ valuePatternMatcher: ValuePatternMatcher;
12
+ pathRuleMatcher: PathRuleMatcher;
13
+ customObjectManager: CustomObjectManager;
14
+ objectRedactor: ObjectRedactor;
15
+ usesAsyncRedactor: boolean;
16
+ cloneInput: boolean;
17
+ };
18
+ export declare const buildFieldRedactorDeps: (config?: FieldRedactorConfig) => FieldRedactorDeps;
19
+ //# sourceMappingURL=fieldRedactorDeps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldRedactorDeps.d.ts","sourceRoot":"","sources":["../src/fieldRedactorDeps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAA2B,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAA+B,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEzF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,aAAa,EAAE,aAAa,CAAC;IAC7B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,eAAe,EAAE,eAAe,CAAC;IACjC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,cAAc,EAAE,cAAc,CAAC;IAC/B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAKF,eAAO,MAAM,sBAAsB,YAAa,mBAAmB,KAAG,iBAgDrE,CAAC"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildFieldRedactorDeps = void 0;
4
+ const customObjectManager_1 = require("./customObjectManager");
5
+ const objectRedactor_1 = require("./objectRedactor");
6
+ const primitiveRedactor_1 = require("./primitiveRedactor");
7
+ const redactionRules_1 = require("./redactionRules");
8
+ const secretManager_1 = require("./secretManager");
9
+ const pathRuleMatcher_1 = require("./pathRuleMatcher");
10
+ const valuePatternMatcher_1 = require("./valuePatternMatcher");
11
+ const resolveBoolean = (value, defaultValue) => typeof value === 'boolean' ? value : defaultValue;
12
+ const buildFieldRedactorDeps = (config) => {
13
+ const { redactor, syncRedactor, deepSecretKeys, fullSecretKeys, deleteSecretKeys, customObjects, valuePatterns, pathRules, passKeys } = config !== null && config !== void 0 ? config : {};
14
+ const primitiveRedactor = new primitiveRedactor_1.PrimitiveRedactor({
15
+ ignoreBooleans: resolveBoolean(config === null || config === void 0 ? void 0 : config.ignoreBooleans, false),
16
+ ignoreNullOrUndefined: resolveBoolean(config === null || config === void 0 ? void 0 : config.ignoreNullOrUndefined, true),
17
+ redactor,
18
+ syncRedactor
19
+ });
20
+ const secretManager = new secretManager_1.SecretManager({
21
+ secretKeys: (0, redactionRules_1.resolveSecretKeys)(config),
22
+ deepSecretKeys,
23
+ fullSecretKeys,
24
+ deleteSecretKeys,
25
+ passKeys
26
+ });
27
+ const valuePatternMatcher = (valuePatterns === null || valuePatterns === void 0 ? void 0 : valuePatterns.length) ? new valuePatternMatcher_1.ValuePatternMatcher(valuePatterns) : valuePatternMatcher_1.EMPTY_VALUE_PATTERN_MATCHER;
28
+ const pathRuleMatcher = (pathRules === null || pathRules === void 0 ? void 0 : pathRules.length) ? new pathRuleMatcher_1.PathRuleMatcher(pathRules) : pathRuleMatcher_1.EMPTY_PATH_RULE_MATCHER;
29
+ const customObjectManager = new customObjectManager_1.CustomObjectManager(customObjects, config === null || config === void 0 ? void 0 : config.schemaNames);
30
+ const objectRedactor = new objectRedactor_1.ObjectRedactor(primitiveRedactor, secretManager, customObjectManager, valuePatternMatcher, pathRuleMatcher);
31
+ return {
32
+ primitiveRedactor,
33
+ secretManager,
34
+ valuePatternMatcher,
35
+ pathRuleMatcher,
36
+ customObjectManager,
37
+ objectRedactor,
38
+ usesAsyncRedactor: primitiveRedactor.usesAsyncRedactor(),
39
+ cloneInput: (config === null || config === void 0 ? void 0 : config.cloneInput) !== false
40
+ };
41
+ };
42
+ exports.buildFieldRedactorDeps = buildFieldRedactorDeps;
43
+ //# sourceMappingURL=fieldRedactorDeps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fieldRedactorDeps.js","sourceRoot":"","sources":["../src/fieldRedactorDeps.ts"],"names":[],"mappings":";;;AAAA,+DAA4D;AAC5D,qDAAkD;AAClD,2DAAwD;AACxD,qDAAqD;AACrD,mDAAgD;AAEhD,uDAA6E;AAC7E,+DAAyF;AAazF,MAAM,cAAc,GAAG,CAAC,KAA0B,EAAE,YAAqB,EAAW,EAAE,CACpF,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;AAE7C,MAAM,sBAAsB,GAAG,CAAC,MAA4B,EAAqB,EAAE;IACxF,MAAM,EACJ,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,SAAS,EACT,QAAQ,EACT,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAC;IAEjB,MAAM,iBAAiB,GAAG,IAAI,qCAAiB,CAAC;QAC9C,cAAc,EAAE,cAAc,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,EAAE,KAAK,CAAC;QAC7D,qBAAqB,EAAE,cAAc,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,qBAAqB,EAAE,IAAI,CAAC;QAC1E,QAAQ;QACR,YAAY;KACb,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,IAAI,6BAAa,CAAC;QACtC,UAAU,EAAE,IAAA,kCAAiB,EAAC,MAAM,CAAC;QACrC,cAAc;QACd,cAAc;QACd,gBAAgB;QAChB,QAAQ;KACT,CAAC,CAAC;IACH,MAAM,mBAAmB,GAAG,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM,EAAC,CAAC,CAAC,IAAI,yCAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,iDAA2B,CAAC;IACzH,MAAM,eAAe,GAAG,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,EAAC,CAAC,CAAC,IAAI,iCAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,yCAAuB,CAAC;IACrG,MAAM,mBAAmB,GAAG,IAAI,yCAAmB,CAAC,aAAa,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAC,CAAC;IACxF,MAAM,cAAc,GAAG,IAAI,+BAAc,CACvC,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,CAChB,CAAC;IAEF,OAAO;QACL,iBAAiB;QACjB,aAAa;QACb,mBAAmB;QACnB,eAAe;QACf,mBAAmB;QACnB,cAAc;QACd,iBAAiB,EAAE,iBAAiB,CAAC,iBAAiB,EAAE;QACxD,UAAU,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,MAAK,KAAK;KACzC,CAAC;AACJ,CAAC,CAAC;AAhDW,QAAA,sBAAsB,0BAgDjC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,10 @@
1
- import { FieldRedactor } from './fieldRedactor';
2
- export { CustomObjectMatchType, Redactor, FieldRedactorConfig, CustomObject } from './types';
1
+ import { FieldRedactor } from './api/fieldRedactor';
2
+ export { CustomObjectMatchType, Redactor, FieldRedactorConfig, CustomObject, DryRunReport, DryRunResult, DryRunPathRule, MatchedSchemaReport, PathRule, PathRuleMode, RedactionMode, RedactionRuleLabel, JsonArray, JsonFunction, JsonLeafValue, JsonObject, JsonPrimitive, JsonValue, RedactableInput, RedactablePrimitive, RedactedPrimitive, RedactorInput, SecretSpecifierValue, SyncRedactor, TraversableJson, isJsonObject } from './types';
3
+ export { FieldRedactorError, FieldRedactorConfigurationError } from './errors';
4
+ export { validateFieldRedactorConfig, hasExplicitRedactionRules } from './config/configValidator';
5
+ export { EMPTY_DRY_RUN_REPORT } from './dryrun/dryRun';
6
+ export { presets } from './config/presets';
7
+ export { FieldRedactorConfigBuilder } from './api/fieldRedactorConfigBuilder';
8
+ export type { SchemaOptions } from './api/fieldRedactorConfigBuilder';
3
9
  export { FieldRedactor };
4
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,qBAAqB,EACrB,QAAQ,EACR,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,aAAa,EACb,UAAU,EACV,aAAa,EACb,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,YAAY,EACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,kBAAkB,EAAE,+BAA+B,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAClG,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,YAAY,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -1,8 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FieldRedactor = exports.CustomObjectMatchType = void 0;
4
- const fieldRedactor_1 = require("./fieldRedactor");
3
+ exports.FieldRedactor = exports.FieldRedactorConfigBuilder = exports.presets = exports.EMPTY_DRY_RUN_REPORT = exports.hasExplicitRedactionRules = exports.validateFieldRedactorConfig = exports.FieldRedactorConfigurationError = exports.FieldRedactorError = exports.isJsonObject = exports.CustomObjectMatchType = void 0;
4
+ const fieldRedactor_1 = require("./api/fieldRedactor");
5
5
  Object.defineProperty(exports, "FieldRedactor", { enumerable: true, get: function () { return fieldRedactor_1.FieldRedactor; } });
6
6
  var types_1 = require("./types");
7
7
  Object.defineProperty(exports, "CustomObjectMatchType", { enumerable: true, get: function () { return types_1.CustomObjectMatchType; } });
8
+ Object.defineProperty(exports, "isJsonObject", { enumerable: true, get: function () { return types_1.isJsonObject; } });
9
+ var errors_1 = require("./errors");
10
+ Object.defineProperty(exports, "FieldRedactorError", { enumerable: true, get: function () { return errors_1.FieldRedactorError; } });
11
+ Object.defineProperty(exports, "FieldRedactorConfigurationError", { enumerable: true, get: function () { return errors_1.FieldRedactorConfigurationError; } });
12
+ var configValidator_1 = require("./config/configValidator");
13
+ Object.defineProperty(exports, "validateFieldRedactorConfig", { enumerable: true, get: function () { return configValidator_1.validateFieldRedactorConfig; } });
14
+ Object.defineProperty(exports, "hasExplicitRedactionRules", { enumerable: true, get: function () { return configValidator_1.hasExplicitRedactionRules; } });
15
+ var dryRun_1 = require("./dryrun/dryRun");
16
+ Object.defineProperty(exports, "EMPTY_DRY_RUN_REPORT", { enumerable: true, get: function () { return dryRun_1.EMPTY_DRY_RUN_REPORT; } });
17
+ var presets_1 = require("./config/presets");
18
+ Object.defineProperty(exports, "presets", { enumerable: true, get: function () { return presets_1.presets; } });
19
+ var fieldRedactorConfigBuilder_1 = require("./api/fieldRedactorConfigBuilder");
20
+ Object.defineProperty(exports, "FieldRedactorConfigBuilder", { enumerable: true, get: function () { return fieldRedactorConfigBuilder_1.FieldRedactorConfigBuilder; } });
8
21
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mDAAgD;AAEvC,8FAFA,6BAAa,OAEA;AADtB,iCAA6F;AAApF,8GAAA,qBAAqB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uDAAoD;AAmC3C,8FAnCA,6BAAa,OAmCA;AAlCtB,iCA2BiB;AA1Bf,8GAAA,qBAAqB,OAAA;AAyBrB,qGAAA,YAAY,OAAA;AAEd,mCAA+E;AAAtE,4GAAA,kBAAkB,OAAA;AAAE,yHAAA,+BAA+B,OAAA;AAC5D,4DAAkG;AAAzF,8HAAA,2BAA2B,OAAA;AAAE,4HAAA,yBAAyB,OAAA;AAC/D,0CAAuD;AAA9C,8GAAA,oBAAoB,OAAA;AAC7B,4CAA2C;AAAlC,kGAAA,OAAO,OAAA;AAChB,+EAA8E;AAArE,wIAAA,0BAA0B,OAAA"}
@@ -0,0 +1,11 @@
1
+ import { JsonArray, JsonObject, JsonValue } from './types';
2
+ export { parseJsonPath } from './pathParsing';
3
+ export declare const getJsonValueAtPath: (value: JsonValue | undefined, segments: Array<string | number>) => JsonValue | undefined;
4
+ export declare const getParentContext: (value: JsonValue | undefined, segments: Array<string | number>) => {
5
+ parent: JsonObject | JsonArray | undefined;
6
+ leaf: string | number | undefined;
7
+ };
8
+ export declare const joinPath: (base: string, segment: string | number) => string;
9
+ export declare const isTraversableJson: (value: JsonValue | undefined) => value is JsonObject | JsonValue[];
10
+ export declare const walkTraversableJson: (value: JsonValue | undefined, path: string, visit: (value: JsonValue, path: string) => void) => void;
11
+ //# sourceMappingURL=jsonWalk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonWalk.d.ts","sourceRoot":"","sources":["../src/jsonWalk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,eAAO,MAAM,kBAAkB,UAAW,SAAS,GAAG,SAAS,YAAY,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAG,SAAS,GAAG,SAsB/G,CAAC;AAEF,eAAO,MAAM,gBAAgB,UACpB,SAAS,GAAG,SAAS,YAClB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAC/B;IAAE,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CASjF,CAAC;AAEF,eAAO,MAAM,QAAQ,SAAU,MAAM,WAAW,MAAM,GAAG,MAAM,KAAG,MACqD,CAAC;AAExH,eAAO,MAAM,iBAAiB,UAAW,SAAS,GAAG,SAAS,KAAG,KAAK,IAAI,UAAU,GAAG,SAAS,EAC9B,CAAC;AAEnE,eAAO,MAAM,mBAAmB,UACvB,SAAS,GAAG,SAAS,QACtB,MAAM,SACL,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,KAC9C,IAgBF,CAAC"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.walkTraversableJson = exports.isTraversableJson = exports.joinPath = exports.getParentContext = exports.getJsonValueAtPath = exports.parseJsonPath = void 0;
4
+ const types_1 = require("./types");
5
+ var pathParsing_1 = require("./pathParsing");
6
+ Object.defineProperty(exports, "parseJsonPath", { enumerable: true, get: function () { return pathParsing_1.parseJsonPath; } });
7
+ const getJsonValueAtPath = (value, segments) => {
8
+ let current = value;
9
+ for (const segment of segments) {
10
+ if (current === undefined || current === null || typeof current !== 'object') {
11
+ return undefined;
12
+ }
13
+ if (Array.isArray(current) && typeof segment === 'number') {
14
+ current = current[segment];
15
+ continue;
16
+ }
17
+ if ((0, types_1.isJsonObject)(current) && typeof segment === 'string') {
18
+ current = current[segment];
19
+ continue;
20
+ }
21
+ return undefined;
22
+ }
23
+ return current;
24
+ };
25
+ exports.getJsonValueAtPath = getJsonValueAtPath;
26
+ const getParentContext = (value, segments) => {
27
+ if (segments.length === 0) {
28
+ return { parent: undefined, leaf: undefined };
29
+ }
30
+ const leaf = segments.at(-1);
31
+ const parent = segments.length === 1 ? value : (0, exports.getJsonValueAtPath)(value, segments.slice(0, -1));
32
+ return (0, exports.isTraversableJson)(parent) ? { parent, leaf } : { parent: undefined, leaf };
33
+ };
34
+ exports.getParentContext = getParentContext;
35
+ const joinPath = (base, segment) => typeof segment === 'number' ? (base ? `${base}[${segment}]` : `[${segment}]`) : base ? `${base}.${segment}` : segment;
36
+ exports.joinPath = joinPath;
37
+ const isTraversableJson = (value) => !!value && typeof value === 'object' && !(value instanceof Date);
38
+ exports.isTraversableJson = isTraversableJson;
39
+ const walkTraversableJson = (value, path, visit) => {
40
+ if (!(0, exports.isTraversableJson)(value)) {
41
+ return;
42
+ }
43
+ if (Array.isArray(value)) {
44
+ value.forEach((item, index) => (0, exports.walkTraversableJson)(item, (0, exports.joinPath)(path, index), visit));
45
+ return;
46
+ }
47
+ if ((0, types_1.isJsonObject)(value)) {
48
+ visit(value, path);
49
+ for (const key of Object.keys(value)) {
50
+ (0, exports.walkTraversableJson)(value[key], (0, exports.joinPath)(path, key), visit);
51
+ }
52
+ }
53
+ };
54
+ exports.walkTraversableJson = walkTraversableJson;
55
+ //# sourceMappingURL=jsonWalk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonWalk.js","sourceRoot":"","sources":["../src/jsonWalk.ts"],"names":[],"mappings":";;;AAAA,mCAAyE;AAEzE,6CAA8C;AAArC,4GAAA,aAAa,OAAA;AAEf,MAAM,kBAAkB,GAAG,CAAC,KAA4B,EAAE,QAAgC,EAAyB,EAAE;IAC1H,IAAI,OAAO,GAA0B,KAAK,CAAC;IAE3C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC7E,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC1D,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3B,SAAS;QACX,CAAC;QAED,IAAI,IAAA,oBAAY,EAAC,OAAO,CAAC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3B,SAAS;QACX,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAtBW,QAAA,kBAAkB,sBAsB7B;AAEK,MAAM,gBAAgB,GAAG,CAC9B,KAA4B,EAC5B,QAAgC,EACmD,EAAE;IACrF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAChD,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,0BAAkB,EAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhG,OAAO,IAAA,yBAAiB,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACpF,CAAC,CAAC;AAZW,QAAA,gBAAgB,oBAY3B;AAEK,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,OAAwB,EAAU,EAAE,CACzE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AAD3G,QAAA,QAAQ,YACmG;AAEjH,MAAM,iBAAiB,GAAG,CAAC,KAA4B,EAAqC,EAAE,CACnG,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,CAAC;AADtD,QAAA,iBAAiB,qBACqC;AAE5D,MAAM,mBAAmB,GAAG,CACjC,KAA4B,EAC5B,IAAY,EACZ,KAA+C,EACzC,EAAE;IACR,IAAI,CAAC,IAAA,yBAAiB,EAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAA,2BAAmB,EAAC,IAAI,EAAE,IAAA,gBAAQ,EAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACxF,OAAO;IACT,CAAC;IAED,IAAI,IAAA,oBAAY,EAAC,KAAK,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACnB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,IAAA,2BAAmB,EAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAA,gBAAQ,EAAC,IAAI,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AApBW,QAAA,mBAAmB,uBAoB9B"}
@@ -0,0 +1,7 @@
1
+ export type MaybeAsync<T> = T | Promise<T>;
2
+ export declare const awaitMaybe: <T>(value: MaybeAsync<T>) => Promise<T>;
3
+ /** Normalizes sync results for async traversal without forcing Promises on the sync path. */
4
+ export declare const resolveMaybeAsync: <T>(value: MaybeAsync<T>, asyncMode: boolean) => MaybeAsync<T>;
5
+ export declare const runSequential: <T>(items: readonly T[], process: (item: T, index: number) => MaybeAsync<void>, asyncMode: boolean) => MaybeAsync<void>;
6
+ export declare const finalizeMaybeAsync: <T>(work: MaybeAsync<void>, result: () => T, asyncMode: boolean) => MaybeAsync<T>;
7
+ //# sourceMappingURL=maybeAsync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maybeAsync.d.ts","sourceRoot":"","sources":["../src/maybeAsync.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAE3C,eAAO,MAAM,UAAU,GAAU,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAAU,CAAC;AAE/E,6FAA6F;AAC7F,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,aAAa,OAAO,KAAG,UAAU,CAAC,CAAC,CAU3F,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,CAAC,SACtB,SAAS,CAAC,EAAE,WACV,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,UAAU,CAAC,IAAI,CAAC,aAC1C,OAAO,KACjB,UAAU,CAAC,IAAI,CAgBjB,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,CAAC,QAAQ,UAAU,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,aAAa,OAAO,KAAG,UAAU,CAAC,CAAC,CAa/G,CAAC"}