field-redactor 1.5.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 (224) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/CONTRIBUTING.md +64 -0
  3. package/README.md +3 -0
  4. package/dist/api/fieldRedactor.d.ts +53 -0
  5. package/dist/api/fieldRedactor.d.ts.map +1 -0
  6. package/dist/api/fieldRedactor.js +169 -0
  7. package/dist/api/fieldRedactor.js.map +1 -0
  8. package/dist/api/fieldRedactorConfigBuilder.d.ts +57 -0
  9. package/dist/api/fieldRedactorConfigBuilder.d.ts.map +1 -0
  10. package/dist/api/fieldRedactorConfigBuilder.js +115 -0
  11. package/dist/api/fieldRedactorConfigBuilder.js.map +1 -0
  12. package/dist/api/fieldRedactorDeps.d.ts +19 -0
  13. package/dist/api/fieldRedactorDeps.d.ts.map +1 -0
  14. package/dist/api/fieldRedactorDeps.js +45 -0
  15. package/dist/api/fieldRedactorDeps.js.map +1 -0
  16. package/dist/arrayRedaction.d.ts +12 -0
  17. package/dist/arrayRedaction.d.ts.map +1 -0
  18. package/dist/arrayRedaction.js +70 -0
  19. package/dist/arrayRedaction.js.map +1 -0
  20. package/dist/config/configValidator.d.ts +9 -0
  21. package/dist/config/configValidator.d.ts.map +1 -0
  22. package/dist/config/configValidator.js +77 -0
  23. package/dist/config/configValidator.js.map +1 -0
  24. package/dist/config/customObjectSchemas.d.ts +7 -0
  25. package/dist/config/customObjectSchemas.d.ts.map +1 -0
  26. package/dist/config/customObjectSchemas.js +35 -0
  27. package/dist/config/customObjectSchemas.js.map +1 -0
  28. package/dist/config/presets.d.ts +22 -0
  29. package/dist/config/presets.d.ts.map +1 -0
  30. package/dist/config/presets.js +50 -0
  31. package/dist/config/presets.js.map +1 -0
  32. package/dist/config/redactionRules.d.ts +25 -0
  33. package/dist/config/redactionRules.d.ts.map +1 -0
  34. package/dist/config/redactionRules.js +108 -0
  35. package/dist/config/redactionRules.js.map +1 -0
  36. package/dist/configValidator.d.ts +3 -4
  37. package/dist/configValidator.d.ts.map +1 -1
  38. package/dist/configValidator.js +9 -26
  39. package/dist/configValidator.js.map +1 -1
  40. package/dist/customObjectFieldHandler.d.ts +21 -0
  41. package/dist/customObjectFieldHandler.d.ts.map +1 -0
  42. package/dist/customObjectFieldHandler.js +159 -0
  43. package/dist/customObjectFieldHandler.js.map +1 -0
  44. package/dist/customObjectManager.d.ts +1 -1
  45. package/dist/customObjectManager.js +3 -3
  46. package/dist/customObjectManager.js.map +1 -1
  47. package/dist/customObjectSchemas.d.ts +7 -0
  48. package/dist/customObjectSchemas.d.ts.map +1 -0
  49. package/dist/customObjectSchemas.js +35 -0
  50. package/dist/customObjectSchemas.js.map +1 -0
  51. package/dist/dryRun.d.ts +2 -1
  52. package/dist/dryRun.d.ts.map +1 -1
  53. package/dist/dryRun.js +2 -2
  54. package/dist/dryRun.js.map +1 -1
  55. package/dist/dryRunAttribution.d.ts +5 -3
  56. package/dist/dryRunAttribution.d.ts.map +1 -1
  57. package/dist/dryRunAttribution.js +9 -101
  58. package/dist/dryRunAttribution.js.map +1 -1
  59. package/dist/dryrun/dryRun.d.ts +9 -0
  60. package/dist/dryrun/dryRun.d.ts.map +1 -0
  61. package/dist/dryrun/dryRun.js +75 -0
  62. package/dist/dryrun/dryRun.js.map +1 -0
  63. package/dist/dryrun/dryRunAttribution.d.ts +10 -0
  64. package/dist/dryrun/dryRunAttribution.d.ts.map +1 -0
  65. package/dist/dryrun/dryRunAttribution.js +14 -0
  66. package/dist/dryrun/dryRunAttribution.js.map +1 -0
  67. package/dist/engine/arrayRedaction.d.ts +12 -0
  68. package/dist/engine/arrayRedaction.d.ts.map +1 -0
  69. package/dist/engine/arrayRedaction.js +70 -0
  70. package/dist/engine/arrayRedaction.js.map +1 -0
  71. package/dist/engine/customObjectFieldHandler.d.ts +35 -0
  72. package/dist/engine/customObjectFieldHandler.d.ts.map +1 -0
  73. package/dist/engine/customObjectFieldHandler.js +167 -0
  74. package/dist/engine/customObjectFieldHandler.js.map +1 -0
  75. package/dist/engine/objectRedactor.d.ts +18 -0
  76. package/dist/engine/objectRedactor.d.ts.map +1 -0
  77. package/dist/engine/objectRedactor.js +38 -0
  78. package/dist/engine/objectRedactor.js.map +1 -0
  79. package/dist/engine/objectRedactorCustomObject.d.ts +27 -0
  80. package/dist/engine/objectRedactorCustomObject.d.ts.map +1 -0
  81. package/dist/engine/objectRedactorCustomObject.js +54 -0
  82. package/dist/engine/objectRedactorCustomObject.js.map +1 -0
  83. package/dist/engine/objectRedactorHelpers.d.ts +9 -0
  84. package/dist/engine/objectRedactorHelpers.d.ts.map +1 -0
  85. package/dist/engine/objectRedactorHelpers.js +61 -0
  86. package/dist/engine/objectRedactorHelpers.js.map +1 -0
  87. package/dist/engine/objectRedactorMutation.d.ts +10 -0
  88. package/dist/engine/objectRedactorMutation.d.ts.map +1 -0
  89. package/dist/engine/objectRedactorMutation.js +89 -0
  90. package/dist/engine/objectRedactorMutation.js.map +1 -0
  91. package/dist/engine/objectRedactorSync.d.ts +2 -0
  92. package/dist/engine/objectRedactorSync.d.ts.map +1 -0
  93. package/dist/engine/objectRedactorSync.js +7 -0
  94. package/dist/engine/objectRedactorSync.js.map +1 -0
  95. package/dist/engine/objectRedactorTraversal.d.ts +41 -0
  96. package/dist/engine/objectRedactorTraversal.d.ts.map +1 -0
  97. package/dist/engine/objectRedactorTraversal.js +201 -0
  98. package/dist/engine/objectRedactorTraversal.js.map +1 -0
  99. package/dist/engine/primitiveRedactor.d.ts +33 -0
  100. package/dist/engine/primitiveRedactor.d.ts.map +1 -0
  101. package/dist/engine/primitiveRedactor.js +75 -0
  102. package/dist/engine/primitiveRedactor.js.map +1 -0
  103. package/dist/engine/traversalServices.d.ts +21 -0
  104. package/dist/engine/traversalServices.d.ts.map +1 -0
  105. package/dist/engine/traversalServices.js +3 -0
  106. package/dist/engine/traversalServices.js.map +1 -0
  107. package/dist/fieldDisposition.d.ts +3 -0
  108. package/dist/fieldDisposition.d.ts.map +1 -0
  109. package/dist/fieldDisposition.js +6 -0
  110. package/dist/fieldDisposition.js.map +1 -0
  111. package/dist/fieldRedactor.d.ts +6 -21
  112. package/dist/fieldRedactor.d.ts.map +1 -1
  113. package/dist/fieldRedactor.js +37 -56
  114. package/dist/fieldRedactor.js.map +1 -1
  115. package/dist/fieldRedactorConfigBuilder.d.ts +7 -1
  116. package/dist/fieldRedactorConfigBuilder.d.ts.map +1 -1
  117. package/dist/fieldRedactorConfigBuilder.js +14 -1
  118. package/dist/fieldRedactorConfigBuilder.js.map +1 -1
  119. package/dist/fieldRedactorDeps.d.ts +2 -0
  120. package/dist/fieldRedactorDeps.d.ts.map +1 -1
  121. package/dist/fieldRedactorDeps.js +11 -9
  122. package/dist/fieldRedactorDeps.js.map +1 -1
  123. package/dist/index.d.ts +7 -7
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js +5 -5
  126. package/dist/index.js.map +1 -1
  127. package/dist/jsonWalk.d.ts +1 -1
  128. package/dist/jsonWalk.d.ts.map +1 -1
  129. package/dist/jsonWalk.js +2 -33
  130. package/dist/jsonWalk.js.map +1 -1
  131. package/dist/maybeAsync.d.ts +7 -0
  132. package/dist/maybeAsync.d.ts.map +1 -0
  133. package/dist/maybeAsync.js +56 -0
  134. package/dist/maybeAsync.js.map +1 -0
  135. package/dist/objectRedactor.d.ts +2 -1
  136. package/dist/objectRedactor.d.ts.map +1 -1
  137. package/dist/objectRedactor.js +2 -2
  138. package/dist/objectRedactor.js.map +1 -1
  139. package/dist/objectRedactorCustomObject.d.ts +19 -40
  140. package/dist/objectRedactorCustomObject.d.ts.map +1 -1
  141. package/dist/objectRedactorCustomObject.js +20 -101
  142. package/dist/objectRedactorCustomObject.js.map +1 -1
  143. package/dist/objectRedactorHelpers.d.ts.map +1 -1
  144. package/dist/objectRedactorHelpers.js +3 -0
  145. package/dist/objectRedactorHelpers.js.map +1 -1
  146. package/dist/objectRedactorTraversal.d.ts +20 -36
  147. package/dist/objectRedactorTraversal.d.ts.map +1 -1
  148. package/dist/objectRedactorTraversal.js +141 -516
  149. package/dist/objectRedactorTraversal.js.map +1 -1
  150. package/dist/pathParsing.d.ts +11 -0
  151. package/dist/pathParsing.d.ts.map +1 -0
  152. package/dist/pathParsing.js +53 -0
  153. package/dist/pathParsing.js.map +1 -0
  154. package/dist/pathRuleMatcher.d.ts +19 -0
  155. package/dist/pathRuleMatcher.d.ts.map +1 -0
  156. package/dist/pathRuleMatcher.js +42 -0
  157. package/dist/pathRuleMatcher.js.map +1 -0
  158. package/dist/redactionRules.d.ts +3 -4
  159. package/dist/redactionRules.d.ts.map +1 -1
  160. package/dist/redactionRules.js +7 -9
  161. package/dist/redactionRules.js.map +1 -1
  162. package/dist/ruleResolver.d.ts +65 -0
  163. package/dist/ruleResolver.d.ts.map +1 -0
  164. package/dist/ruleResolver.js +193 -0
  165. package/dist/ruleResolver.js.map +1 -0
  166. package/dist/rules/customObjectManager.d.ts +28 -0
  167. package/dist/rules/customObjectManager.d.ts.map +1 -0
  168. package/dist/rules/customObjectManager.js +60 -0
  169. package/dist/rules/customObjectManager.js.map +1 -0
  170. package/dist/rules/fieldDisposition.d.ts +3 -0
  171. package/dist/rules/fieldDisposition.d.ts.map +1 -0
  172. package/dist/rules/fieldDisposition.js +6 -0
  173. package/dist/rules/fieldDisposition.js.map +1 -0
  174. package/dist/rules/pathRuleMatcher.d.ts +19 -0
  175. package/dist/rules/pathRuleMatcher.d.ts.map +1 -0
  176. package/dist/rules/pathRuleMatcher.js +40 -0
  177. package/dist/rules/pathRuleMatcher.js.map +1 -0
  178. package/dist/rules/ruleResolver.d.ts +65 -0
  179. package/dist/rules/ruleResolver.d.ts.map +1 -0
  180. package/dist/rules/ruleResolver.js +194 -0
  181. package/dist/rules/ruleResolver.js.map +1 -0
  182. package/dist/rules/secretManager.d.ts +32 -0
  183. package/dist/rules/secretManager.d.ts.map +1 -0
  184. package/dist/rules/secretManager.js +85 -0
  185. package/dist/rules/secretManager.js.map +1 -0
  186. package/dist/rules/valuePatternMatcher.d.ts +15 -0
  187. package/dist/rules/valuePatternMatcher.d.ts.map +1 -0
  188. package/dist/rules/valuePatternMatcher.js +30 -0
  189. package/dist/rules/valuePatternMatcher.js.map +1 -0
  190. package/dist/secretManager.d.ts +6 -19
  191. package/dist/secretManager.d.ts.map +1 -1
  192. package/dist/secretManager.js +19 -30
  193. package/dist/secretManager.js.map +1 -1
  194. package/dist/traversalServices.d.ts +21 -0
  195. package/dist/traversalServices.d.ts.map +1 -0
  196. package/dist/traversalServices.js +3 -0
  197. package/dist/traversalServices.js.map +1 -0
  198. package/dist/types.d.ts +41 -5
  199. package/dist/types.d.ts.map +1 -1
  200. package/dist/types.js +8 -1
  201. package/dist/types.js.map +1 -1
  202. package/dist/util/jsonWalk.d.ts +10 -0
  203. package/dist/util/jsonWalk.d.ts.map +1 -0
  204. package/dist/util/jsonWalk.js +53 -0
  205. package/dist/util/jsonWalk.js.map +1 -0
  206. package/dist/util/maybeAsync.d.ts +7 -0
  207. package/dist/util/maybeAsync.d.ts.map +1 -0
  208. package/dist/util/maybeAsync.js +56 -0
  209. package/dist/util/maybeAsync.js.map +1 -0
  210. package/dist/util/pathParsing.d.ts +11 -0
  211. package/dist/util/pathParsing.d.ts.map +1 -0
  212. package/dist/util/pathParsing.js +53 -0
  213. package/dist/util/pathParsing.js.map +1 -0
  214. package/dist/util/regexUtils.d.ts +3 -0
  215. package/dist/util/regexUtils.d.ts.map +1 -0
  216. package/dist/util/regexUtils.js +8 -0
  217. package/dist/util/regexUtils.js.map +1 -0
  218. package/docs/guides/migration-1.5-to-1.6.md +56 -0
  219. package/docs/guides/path-rules.md +47 -0
  220. package/docs/reference/config.md +5 -1
  221. package/docs/release-notes/README.md +3 -1
  222. package/docs/release-notes/v1.6.0.md +59 -0
  223. package/jest.config.js +3 -1
  224. package/package.json +8 -2
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EMPTY_VALUE_PATTERN_MATCHER = exports.ValuePatternMatcher = void 0;
4
+ const regexUtils_1 = require("../util/regexUtils");
5
+ /**
6
+ * Opt-in regex matching against scalar **values** (not key names).
7
+ * Applied only when key-based rules do not already redact the field.
8
+ */
9
+ class ValuePatternMatcher {
10
+ constructor(patterns) {
11
+ this.patterns = patterns !== null && patterns !== void 0 ? patterns : [];
12
+ }
13
+ hasPatterns() {
14
+ return this.patterns.length > 0;
15
+ }
16
+ findMatching(value) {
17
+ if (value === undefined || value === null || typeof value === 'boolean') {
18
+ return undefined;
19
+ }
20
+ const text = String(value);
21
+ return this.patterns.find((pattern) => pattern.test(text));
22
+ }
23
+ formatPattern(regex) {
24
+ return (0, regexUtils_1.formatRegExp)(regex);
25
+ }
26
+ }
27
+ exports.ValuePatternMatcher = ValuePatternMatcher;
28
+ /** Shared empty matcher for tests and configs without value patterns. */
29
+ exports.EMPTY_VALUE_PATTERN_MATCHER = new ValuePatternMatcher();
30
+ //# sourceMappingURL=valuePatternMatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valuePatternMatcher.js","sourceRoot":"","sources":["../../src/rules/valuePatternMatcher.ts"],"names":[],"mappings":";;;AAAA,mDAAkD;AAGlD;;;GAGG;AACH,MAAa,mBAAmB;IAG9B,YAAY,QAAmB;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,EAAE,CAAC;IACjC,CAAC;IAEM,WAAW;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,CAAC;IAEM,YAAY,CAAC,KAAsC;QACxD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YACxE,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC;IAEM,aAAa,CAAC,KAAa;QAChC,OAAO,IAAA,yBAAY,EAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF;AAvBD,kDAuBC;AAED,yEAAyE;AAC5D,QAAA,2BAA2B,GAAG,IAAI,mBAAmB,EAAE,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { SecretManagerConfig, SecretSpecifierValue } from './types';
2
2
  type KeyRule = 'remove' | 'opaque' | 'deep' | 'shallow';
3
3
  /**
4
- * Utility class for managing secrets and determining if a given value is a secret of any type. If no secrets of
4
+ * Utility class for managing secrets and determining if a given value is a secret of any type. If no secrets of
5
5
  * any type are provided in the configuration then all values are considered secrets (but not deep or full secrets).
6
6
  */
7
7
  export declare class SecretManager {
@@ -9,34 +9,21 @@ export declare class SecretManager {
9
9
  private deepSecretKeys?;
10
10
  private fullSecretKeys?;
11
11
  private deleteSecretKeys?;
12
+ private passKeys?;
12
13
  constructor(config: SecretManagerConfig);
13
14
  /**
14
15
  * Determines if the given key is a secret. If no secrets of any type are provided then this function
15
16
  * always returns true.
16
- * @param key The key to check.
17
- * @returns True if the key is a secret key or no secret keys exist, otherwise false.
18
17
  */
19
18
  isSecretKey(key: SecretSpecifierValue): boolean;
20
- /**
21
- * Determines if a key is a deep secret based on the deepSecretKeys configuration provided in the constructor.
22
- * @param key The key to check.
23
- * @returns True if the key is a deep secret key, otherwise false.
24
- */
25
19
  isDeepSecretKey(key: SecretSpecifierValue): boolean;
26
- /**
27
- * Determines if a key is a full secret based on the fullSecretKeys configuration provided in the constructor.
28
- * @param key The key to check.
29
- * @returns True if the key is a full secret key, otherwise false.
30
- */
31
20
  isFullSecretKey(key: SecretSpecifierValue): boolean;
32
- /**
33
- * Determines if a key is a delete secret based on the deleteSecretKeys configuration provided in the constructor.
34
- * @param key The key to check.
35
- * @returns True if the key is a delete secret key, otherwise false.
36
- */
37
21
  isDeleteSecretKey(key: SecretSpecifierValue): boolean;
22
+ /** Determines if a key is allowlisted and should not be redacted under deep parents. */
23
+ isPassKey(key: SecretSpecifierValue): boolean;
38
24
  getKeyRulePattern(key: SecretSpecifierValue, rule: KeyRule): string | undefined;
39
- classifyKeyRule(key: SecretSpecifierValue): 'remove' | 'opaque' | 'deep' | 'shallow' | 'default' | null;
25
+ classifyKeyRule(key: SecretSpecifierValue): KeyRule | 'default' | null;
26
+ private matchesRule;
40
27
  private regexListFor;
41
28
  private static findMatchingRegex;
42
29
  private static matchesAnyRegex;
@@ -1 +1 @@
1
- {"version":3,"file":"secretManager.d.ts","sourceRoot":"","sources":["../src/secretManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEpE,KAAK,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAExD;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAC,CAAW;IAC9B,OAAO,CAAC,cAAc,CAAC,CAAW;IAClC,OAAO,CAAC,cAAc,CAAC,CAAW;IAClC,OAAO,CAAC,gBAAgB,CAAC,CAAW;gBAExB,MAAM,EAAE,mBAAmB;IAYvC;;;;;OAKG;IACI,WAAW,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO;IAQtD;;;;OAIG;IACI,eAAe,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO;IAI1D;;;;OAIG;IACI,eAAe,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO;IAI1D;;;;OAIG;IACI,iBAAiB,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO;IAIrD,iBAAiB,CAAC,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAK/E,eAAe,CAAC,GAAG,EAAE,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI;IAoB9G,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAIhC,OAAO,CAAC,MAAM,CAAC,eAAe;CAG/B"}
1
+ {"version":3,"file":"secretManager.d.ts","sourceRoot":"","sources":["../src/secretManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEpE,KAAK,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAIxD;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAC,CAAW;IAC9B,OAAO,CAAC,cAAc,CAAC,CAAW;IAClC,OAAO,CAAC,cAAc,CAAC,CAAW;IAClC,OAAO,CAAC,gBAAgB,CAAC,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,CAAW;gBAEhB,MAAM,EAAE,mBAAmB;IAavC;;;OAGG;IACI,WAAW,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO;IAQ/C,eAAe,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO;IAInD,eAAe,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO;IAInD,iBAAiB,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO;IAI5D,wFAAwF;IACjF,SAAS,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO;IAI7C,iBAAiB,CAAC,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAK/E,eAAe,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI;IAc7E,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAIhC,OAAO,CAAC,MAAM,CAAC,eAAe;CAG/B"}
@@ -2,8 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SecretManager = void 0;
4
4
  const regexUtils_1 = require("./regexUtils");
5
+ const KEY_RULE_PRECEDENCE = ['remove', 'opaque', 'deep', 'shallow'];
5
6
  /**
6
- * Utility class for managing secrets and determining if a given value is a secret of any type. If no secrets of
7
+ * Utility class for managing secrets and determining if a given value is a secret of any type. If no secrets of
7
8
  * any type are provided in the configuration then all values are considered secrets (but not deep or full secrets).
8
9
  */
9
10
  class SecretManager {
@@ -11,6 +12,7 @@ class SecretManager {
11
12
  this.deepSecretKeys = config.deepSecretKeys;
12
13
  this.fullSecretKeys = config.fullSecretKeys;
13
14
  this.deleteSecretKeys = config.deleteSecretKeys;
15
+ this.passKeys = config.passKeys;
14
16
  if (!config.secretKeys && (config.deepSecretKeys || config.fullSecretKeys || config.deleteSecretKeys)) {
15
17
  this.secretKeys = [];
16
18
  }
@@ -21,58 +23,45 @@ class SecretManager {
21
23
  /**
22
24
  * Determines if the given key is a secret. If no secrets of any type are provided then this function
23
25
  * always returns true.
24
- * @param key The key to check.
25
- * @returns True if the key is a secret key or no secret keys exist, otherwise false.
26
26
  */
27
27
  isSecretKey(key) {
28
28
  if (!this.secretKeys) {
29
29
  return true;
30
30
  }
31
- return SecretManager.matchesAnyRegex(key, this.secretKeys);
31
+ return this.matchesRule(key, 'shallow');
32
32
  }
33
- /**
34
- * Determines if a key is a deep secret based on the deepSecretKeys configuration provided in the constructor.
35
- * @param key The key to check.
36
- * @returns True if the key is a deep secret key, otherwise false.
37
- */
38
33
  isDeepSecretKey(key) {
39
- return !!this.deepSecretKeys && SecretManager.matchesAnyRegex(key, this.deepSecretKeys);
34
+ return this.matchesRule(key, 'deep');
40
35
  }
41
- /**
42
- * Determines if a key is a full secret based on the fullSecretKeys configuration provided in the constructor.
43
- * @param key The key to check.
44
- * @returns True if the key is a full secret key, otherwise false.
45
- */
46
36
  isFullSecretKey(key) {
47
- return !!this.fullSecretKeys && SecretManager.matchesAnyRegex(key, this.fullSecretKeys);
37
+ return this.matchesRule(key, 'opaque');
48
38
  }
49
- /**
50
- * Determines if a key is a delete secret based on the deleteSecretKeys configuration provided in the constructor.
51
- * @param key The key to check.
52
- * @returns True if the key is a delete secret key, otherwise false.
53
- */
54
39
  isDeleteSecretKey(key) {
55
- return !!this.deleteSecretKeys && SecretManager.matchesAnyRegex(key, this.deleteSecretKeys);
40
+ return this.matchesRule(key, 'remove');
41
+ }
42
+ /** Determines if a key is allowlisted and should not be redacted under deep parents. */
43
+ isPassKey(key) {
44
+ return !!this.passKeys && SecretManager.matchesAnyRegex(key, this.passKeys);
56
45
  }
57
46
  getKeyRulePattern(key, rule) {
58
47
  const match = SecretManager.findMatchingRegex(key, this.regexListFor(rule));
59
48
  return match ? (0, regexUtils_1.formatRegExp)(match) : undefined;
60
49
  }
61
50
  classifyKeyRule(key) {
62
- if (this.isDeleteSecretKey(key)) {
63
- return 'remove';
64
- }
65
- if (this.isFullSecretKey(key)) {
66
- return 'opaque';
67
- }
68
- if (this.isDeepSecretKey(key)) {
69
- return 'deep';
51
+ for (const rule of KEY_RULE_PRECEDENCE) {
52
+ if (this.matchesRule(key, rule)) {
53
+ return rule;
54
+ }
70
55
  }
71
56
  if (this.isSecretKey(key)) {
72
57
  return this.secretKeys ? 'shallow' : 'default';
73
58
  }
74
59
  return null;
75
60
  }
61
+ matchesRule(key, rule) {
62
+ const regexes = this.regexListFor(rule);
63
+ return !!regexes && SecretManager.matchesAnyRegex(key, regexes);
64
+ }
76
65
  regexListFor(rule) {
77
66
  switch (rule) {
78
67
  case 'remove':
@@ -1 +1 @@
1
- {"version":3,"file":"secretManager.js","sourceRoot":"","sources":["../src/secretManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"secretManager.js","sourceRoot":"","sources":["../src/secretManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { CustomObject, JsonArray, JsonLeafValue, JsonObject, JsonValue, RedactablePrimitive, SecretSpecifierValue } from './types';
2
+ import { ContainerMutation } from './objectRedactorMutation';
3
+ import { RuleResolver } from './ruleResolver';
4
+ import { SecretManager } from './secretManager';
5
+ import { ValuePatternMatcher } from './valuePatternMatcher';
6
+ import { MaybeAsync } from './maybeAsync';
7
+ /** Shared capabilities used by array and custom-object redaction modules. */
8
+ export type TraversalServices = {
9
+ readonly asyncMode: boolean;
10
+ readonly ruleResolver: RuleResolver;
11
+ readonly secretManager: SecretManager;
12
+ readonly valuePatternMatcher: ValuePatternMatcher;
13
+ setPrimitive(container: ContainerMutation<JsonObject | JsonArray>, key: string, primitive: RedactablePrimitive): MaybeAsync<void>;
14
+ setPrimitiveFromValue(container: ContainerMutation<JsonObject | JsonArray>, key: string, value: JsonValue | undefined): MaybeAsync<void>;
15
+ setPrimitiveValueIfSecret(container: ContainerMutation<JsonObject | JsonArray>, key: string, secretKey: SecretSpecifierValue, value: JsonLeafValue | undefined, forceDeepRedaction: boolean): MaybeAsync<void>;
16
+ redactSecretFields(container: ContainerMutation<JsonObject | JsonArray>, forceDeepRedaction: boolean, pathSegments: Array<string | number>): MaybeAsync<void>;
17
+ handleCustomObject(container: ContainerMutation<JsonObject>, customObject: CustomObject): MaybeAsync<void>;
18
+ redactArrayInObject(array: JsonArray, key: string, forceDeepRedaction: boolean, parent: ContainerMutation<JsonObject | JsonArray>, pathSegments: Array<string | number>): MaybeAsync<void>;
19
+ redactAllArrayValues(array: JsonArray, forceDeepRedaction: boolean, copyOnWrite: boolean, pathSegments: Array<string | number>): MaybeAsync<JsonArray>;
20
+ };
21
+ //# sourceMappingURL=traversalServices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traversalServices.d.ts","sourceRoot":"","sources":["../src/traversalServices.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,EACV,SAAS,EACT,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,6EAA6E;AAC7E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAClD,YAAY,CACV,SAAS,EAAE,iBAAiB,CAAC,UAAU,GAAG,SAAS,CAAC,EACpD,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,mBAAmB,GAC7B,UAAU,CAAC,IAAI,CAAC,CAAC;IACpB,qBAAqB,CACnB,SAAS,EAAE,iBAAiB,CAAC,UAAU,GAAG,SAAS,CAAC,EACpD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,SAAS,GAAG,SAAS,GAC3B,UAAU,CAAC,IAAI,CAAC,CAAC;IACpB,yBAAyB,CACvB,SAAS,EAAE,iBAAiB,CAAC,UAAU,GAAG,SAAS,CAAC,EACpD,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,oBAAoB,EAC/B,KAAK,EAAE,aAAa,GAAG,SAAS,EAChC,kBAAkB,EAAE,OAAO,GAC1B,UAAU,CAAC,IAAI,CAAC,CAAC;IACpB,kBAAkB,CAChB,SAAS,EAAE,iBAAiB,CAAC,UAAU,GAAG,SAAS,CAAC,EACpD,kBAAkB,EAAE,OAAO,EAC3B,YAAY,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GACnC,UAAU,CAAC,IAAI,CAAC,CAAC;IACpB,kBAAkB,CAAC,SAAS,EAAE,iBAAiB,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3G,mBAAmB,CACjB,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,MAAM,EACX,kBAAkB,EAAE,OAAO,EAC3B,MAAM,EAAE,iBAAiB,CAAC,UAAU,GAAG,SAAS,CAAC,EACjD,YAAY,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GACnC,UAAU,CAAC,IAAI,CAAC,CAAC;IACpB,oBAAoB,CAClB,KAAK,EAAE,SAAS,EAChB,kBAAkB,EAAE,OAAO,EAC3B,WAAW,EAAE,OAAO,EACpB,YAAY,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GACnC,UAAU,CAAC,SAAS,CAAC,CAAC;CAC1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=traversalServices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traversalServices.js","sourceRoot":"","sources":["../src/traversalServices.ts"],"names":[],"mappings":""}
package/dist/types.d.ts CHANGED
@@ -33,11 +33,18 @@ export type Redactor = (value: RedactorInput) => Promise<string>;
33
33
  export type SyncRedactor = (value: RedactorInput) => string;
34
34
  /**
35
35
  * Per-field redaction mode inside a {@link CustomObject} schema.
36
- * Values align with the top-level doc labels: Shallow, Deep, Opaque (Full), Remove (Delete).
36
+ * Prefer {@link CustomObjectMatchType.Opaque} / {@link CustomObjectMatchType.Remove}
37
+ * over the legacy Full / Delete names (same numeric values).
37
38
  */
38
39
  export declare enum CustomObjectMatchType {
40
+ /** @deprecated Prefer {@link CustomObjectMatchType.Remove}. */
39
41
  Delete = 0,
42
+ /** Remove — delete the field from output. */
43
+ Remove = 0,
44
+ /** @deprecated Prefer {@link CustomObjectMatchType.Opaque}. */
40
45
  Full = 1,
46
+ /** Opaque — stringify the entire value, then redact. */
47
+ Opaque = 1,
41
48
  Deep = 2,
42
49
  Shallow = 3,
43
50
  Pass = 4,
@@ -61,10 +68,39 @@ export type SecretManagerConfig = {
61
68
  secretKeys?: RegExp[];
62
69
  /** Deep — redact matching keys and all descendant primitives (`deepSecretKeys`). */
63
70
  deepSecretKeys?: RegExp[];
64
- /** Opaque — stringify entire value at matching keys, then redact (`fullSecretKeys`). */
71
+ /**
72
+ * Opaque — stringify entire value at matching keys, then redact.
73
+ * Preferred alias: {@link SecretManagerConfig.opaqueSecretKeys}.
74
+ */
65
75
  fullSecretKeys?: RegExp[];
66
- /** Removedelete matching keys from output (`deleteSecretKeys`). */
76
+ /** Opaquepreferred name for {@link SecretManagerConfig.fullSecretKeys}. */
77
+ opaqueSecretKeys?: RegExp[];
78
+ /**
79
+ * Remove — delete matching keys from output.
80
+ * Preferred alias: {@link SecretManagerConfig.removeSecretKeys}.
81
+ */
67
82
  deleteSecretKeys?: RegExp[];
83
+ /** Remove — preferred name for {@link SecretManagerConfig.deleteSecretKeys}. */
84
+ removeSecretKeys?: RegExp[];
85
+ /**
86
+ * Allowlist — matching key names are never redacted, even under deep or opaque parents (`passKeys`).
87
+ */
88
+ passKeys?: RegExp[];
89
+ };
90
+ /** Canonical redaction modes shared by path rules, disposition, and dry-run labels. */
91
+ export type RedactionMode = 'shallow' | 'deep' | 'opaque' | 'remove';
92
+ export type PathRuleMode = RedactionMode | 'pass';
93
+ export type PathRule = {
94
+ /** JSON path pattern with `.` segments, `[index]` arrays, and `*` single-segment wildcards. */
95
+ path: string;
96
+ mode: PathRuleMode;
97
+ };
98
+ export type PathRuleConfig = {
99
+ /**
100
+ * Path-based rules apply a redaction mode at an exact JSON path (for example `metadata.*.value`).
101
+ * Precedence: schema → path rule → key-regex rules → value patterns.
102
+ */
103
+ pathRules?: PathRule[];
68
104
  };
69
105
  export type ValuePatternConfig = {
70
106
  /**
@@ -73,7 +109,7 @@ export type ValuePatternConfig = {
73
109
  */
74
110
  valuePatterns?: RegExp[];
75
111
  };
76
- export type FieldRedactorConfig = Partial<PrimitiveRedactorConfig> & SecretManagerConfig & ValuePatternConfig & {
112
+ export type FieldRedactorConfig = Partial<PrimitiveRedactorConfig> & SecretManagerConfig & ValuePatternConfig & PathRuleConfig & {
77
113
  redactor?: Redactor;
78
114
  syncRedactor?: SyncRedactor;
79
115
  /** Schema rules for shaped objects (`customObjects`). */
@@ -101,7 +137,7 @@ export type MatchedSchemaReport = {
101
137
  schemaIndex: number;
102
138
  schemaName?: string;
103
139
  };
104
- export type RedactionRuleLabel = 'schema' | 'opaque' | 'deep' | 'remove' | 'shallow' | 'value' | 'default';
140
+ export type RedactionRuleLabel = 'schema' | RedactionMode | 'value' | 'default';
105
141
  export type DryRunPathRule = {
106
142
  path: string;
107
143
  action: 'redact' | 'delete';
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -3,12 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isJsonObject = exports.CustomObjectMatchType = void 0;
4
4
  /**
5
5
  * Per-field redaction mode inside a {@link CustomObject} schema.
6
- * Values align with the top-level doc labels: Shallow, Deep, Opaque (Full), Remove (Delete).
6
+ * Prefer {@link CustomObjectMatchType.Opaque} / {@link CustomObjectMatchType.Remove}
7
+ * over the legacy Full / Delete names (same numeric values).
7
8
  */
8
9
  var CustomObjectMatchType;
9
10
  (function (CustomObjectMatchType) {
11
+ /** @deprecated Prefer {@link CustomObjectMatchType.Remove}. */
10
12
  CustomObjectMatchType[CustomObjectMatchType["Delete"] = 0] = "Delete";
13
+ /** Remove — delete the field from output. */
14
+ CustomObjectMatchType[CustomObjectMatchType["Remove"] = 0] = "Remove";
15
+ /** @deprecated Prefer {@link CustomObjectMatchType.Opaque}. */
11
16
  CustomObjectMatchType[CustomObjectMatchType["Full"] = 1] = "Full";
17
+ /** Opaque — stringify the entire value, then redact. */
18
+ CustomObjectMatchType[CustomObjectMatchType["Opaque"] = 1] = "Opaque";
12
19
  CustomObjectMatchType[CustomObjectMatchType["Deep"] = 2] = "Deep";
13
20
  CustomObjectMatchType[CustomObjectMatchType["Shallow"] = 3] = "Shallow";
14
21
  CustomObjectMatchType[CustomObjectMatchType["Pass"] = 4] = "Pass";
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AA4CA;;;GAGG;AACH,IAAY,qBAOX;AAPD,WAAY,qBAAqB;IAC/B,qEAAM,CAAA;IACN,iEAAI,CAAA;IACJ,iEAAI,CAAA;IACJ,uEAAO,CAAA;IACP,iEAAI,CAAA;IACJ,qEAAM,CAAA;AACR,CAAC,EAPW,qBAAqB,qCAArB,qBAAqB,QAOhC;AAkGM,MAAM,YAAY,GAAG,CAAC,KAA4B,EAAuB,EAAE,CAChF,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAD/E,QAAA,YAAY,gBACmE"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AA4CA;;;;GAIG;AACH,IAAY,qBAaX;AAbD,WAAY,qBAAqB;IAC/B,+DAA+D;IAC/D,qEAAU,CAAA;IACV,6CAA6C;IAC7C,qEAAU,CAAA;IACV,+DAA+D;IAC/D,iEAAQ,CAAA;IACR,wDAAwD;IACxD,qEAAU,CAAA;IACV,iEAAQ,CAAA;IACR,uEAAW,CAAA;IACX,iEAAQ,CAAA;IACR,qEAAU,CAAA;AACZ,CAAC,EAbW,qBAAqB,qCAArB,qBAAqB,QAahC;AAoIM,MAAM,YAAY,GAAG,CAAC,KAA4B,EAAuB,EAAE,CAChF,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAD/E,QAAA,YAAY,gBACmE"}
@@ -0,0 +1,10 @@
1
+ import { JsonArray, JsonObject, JsonValue } from '../types';
2
+ export declare const getJsonValueAtPath: (value: JsonValue | undefined, segments: Array<string | number>) => JsonValue | undefined;
3
+ export declare const getParentContext: (value: JsonValue | undefined, segments: Array<string | number>) => {
4
+ parent: JsonObject | JsonArray | undefined;
5
+ leaf: string | number | undefined;
6
+ };
7
+ export declare const joinPath: (base: string, segment: string | number) => string;
8
+ export declare const isTraversableJson: (value: JsonValue | undefined) => value is JsonObject | JsonValue[];
9
+ export declare const walkTraversableJson: (value: JsonValue | undefined, path: string, visit: (value: JsonValue, path: string) => void) => void;
10
+ //# sourceMappingURL=jsonWalk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonWalk.d.ts","sourceRoot":"","sources":["../../src/util/jsonWalk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1E,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,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.walkTraversableJson = exports.isTraversableJson = exports.joinPath = exports.getParentContext = exports.getJsonValueAtPath = void 0;
4
+ const types_1 = require("../types");
5
+ const getJsonValueAtPath = (value, segments) => {
6
+ let current = value;
7
+ for (const segment of segments) {
8
+ if (current === undefined || current === null || typeof current !== 'object') {
9
+ return undefined;
10
+ }
11
+ if (Array.isArray(current) && typeof segment === 'number') {
12
+ current = current[segment];
13
+ continue;
14
+ }
15
+ if ((0, types_1.isJsonObject)(current) && typeof segment === 'string') {
16
+ current = current[segment];
17
+ continue;
18
+ }
19
+ return undefined;
20
+ }
21
+ return current;
22
+ };
23
+ exports.getJsonValueAtPath = getJsonValueAtPath;
24
+ const getParentContext = (value, segments) => {
25
+ if (segments.length === 0) {
26
+ return { parent: undefined, leaf: undefined };
27
+ }
28
+ const leaf = segments.at(-1);
29
+ const parent = segments.length === 1 ? value : (0, exports.getJsonValueAtPath)(value, segments.slice(0, -1));
30
+ return (0, exports.isTraversableJson)(parent) ? { parent, leaf } : { parent: undefined, leaf };
31
+ };
32
+ exports.getParentContext = getParentContext;
33
+ const joinPath = (base, segment) => typeof segment === 'number' ? (base ? `${base}[${segment}]` : `[${segment}]`) : base ? `${base}.${segment}` : segment;
34
+ exports.joinPath = joinPath;
35
+ const isTraversableJson = (value) => !!value && typeof value === 'object' && !(value instanceof Date);
36
+ exports.isTraversableJson = isTraversableJson;
37
+ const walkTraversableJson = (value, path, visit) => {
38
+ if (!(0, exports.isTraversableJson)(value)) {
39
+ return;
40
+ }
41
+ if (Array.isArray(value)) {
42
+ value.forEach((item, index) => (0, exports.walkTraversableJson)(item, (0, exports.joinPath)(path, index), visit));
43
+ return;
44
+ }
45
+ if ((0, types_1.isJsonObject)(value)) {
46
+ visit(value, path);
47
+ for (const key of Object.keys(value)) {
48
+ (0, exports.walkTraversableJson)(value[key], (0, exports.joinPath)(path, key), visit);
49
+ }
50
+ }
51
+ };
52
+ exports.walkTraversableJson = walkTraversableJson;
53
+ //# sourceMappingURL=jsonWalk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonWalk.js","sourceRoot":"","sources":["../../src/util/jsonWalk.ts"],"names":[],"mappings":"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"}
@@ -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/util/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"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.finalizeMaybeAsync = exports.runSequential = exports.resolveMaybeAsync = exports.awaitMaybe = void 0;
13
+ const awaitMaybe = (value) => __awaiter(void 0, void 0, void 0, function* () { return value; });
14
+ exports.awaitMaybe = awaitMaybe;
15
+ /** Normalizes sync results for async traversal without forcing Promises on the sync path. */
16
+ const resolveMaybeAsync = (value, asyncMode) => {
17
+ if (!asyncMode) {
18
+ if (value instanceof Promise) {
19
+ throw new Error('Unexpected async work on sync traversal path');
20
+ }
21
+ return value;
22
+ }
23
+ return value instanceof Promise ? value : Promise.resolve(value);
24
+ };
25
+ exports.resolveMaybeAsync = resolveMaybeAsync;
26
+ const runSequential = (items, process, asyncMode) => {
27
+ if (!asyncMode) {
28
+ for (let index = 0; index < items.length; index++) {
29
+ const result = process(items[index], index);
30
+ if (result instanceof Promise) {
31
+ throw new Error('Unexpected async work on sync traversal path');
32
+ }
33
+ }
34
+ return;
35
+ }
36
+ return (() => __awaiter(void 0, void 0, void 0, function* () {
37
+ for (let index = 0; index < items.length; index++) {
38
+ yield process(items[index], index);
39
+ }
40
+ }))();
41
+ };
42
+ exports.runSequential = runSequential;
43
+ const finalizeMaybeAsync = (work, result, asyncMode) => {
44
+ if (!asyncMode) {
45
+ if (work instanceof Promise) {
46
+ throw new Error('Unexpected async work on sync traversal path');
47
+ }
48
+ return result();
49
+ }
50
+ if (work instanceof Promise) {
51
+ return work.then(result);
52
+ }
53
+ return result();
54
+ };
55
+ exports.finalizeMaybeAsync = finalizeMaybeAsync;
56
+ //# sourceMappingURL=maybeAsync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maybeAsync.js","sourceRoot":"","sources":["../../src/util/maybeAsync.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEO,MAAM,UAAU,GAAG,CAAU,KAAoB,EAAc,EAAE,kDAAC,OAAA,KAAK,CAAA,GAAA,CAAC;AAAlE,QAAA,UAAU,cAAwD;AAE/E,6FAA6F;AACtF,MAAM,iBAAiB,GAAG,CAAI,KAAoB,EAAE,SAAkB,EAAiB,EAAE;IAC9F,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC,CAAC;AAVW,QAAA,iBAAiB,qBAU5B;AAEK,MAAM,aAAa,GAAG,CAC3B,KAAmB,EACnB,OAAqD,EACrD,SAAkB,EACA,EAAE;IACpB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;YAC5C,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QACD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAS,EAAE;QACjB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAClD,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAA,CAAC,EAAE,CAAC;AACP,CAAC,CAAC;AApBW,QAAA,aAAa,iBAoBxB;AAEK,MAAM,kBAAkB,GAAG,CAAI,IAAsB,EAAE,MAAe,EAAE,SAAkB,EAAiB,EAAE;IAClH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,IAAI,YAAY,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,MAAM,EAAE,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,YAAY,OAAO,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,EAAE,CAAC;AAClB,CAAC,CAAC;AAbW,QAAA,kBAAkB,sBAa7B"}
@@ -0,0 +1,11 @@
1
+ export type JsonPathSegment = string | number;
2
+ export type PathPatternSegment = string | number | '*';
3
+ export type ParsePathOptions = {
4
+ allowWildcard?: boolean;
5
+ coerceNumericSegments?: boolean;
6
+ };
7
+ /** Parse dot/bracket path syntax shared by JSON paths and path-rule patterns. */
8
+ export declare const parsePathSegments: (path: string, options?: ParsePathOptions) => PathPatternSegment[];
9
+ export declare const parseJsonPath: (path: string) => JsonPathSegment[];
10
+ export declare const parsePathRulePattern: (pattern: string) => PathPatternSegment[];
11
+ //# sourceMappingURL=pathParsing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathParsing.d.ts","sourceRoot":"","sources":["../../src/util/pathParsing.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,CAAC;AAC9C,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;AAEvD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAmBF,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,SAAU,MAAM,YAAW,gBAAgB,KAAQ,kBAAkB,EAuClG,CAAC;AAEF,eAAO,MAAM,aAAa,SAAU,MAAM,KAAG,eAAe,EACoB,CAAC;AAEjF,eAAO,MAAM,oBAAoB,YAAa,MAAM,KAAG,kBAAkB,EACS,CAAC"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parsePathRulePattern = exports.parseJsonPath = exports.parsePathSegments = void 0;
4
+ const pushPatternSegment = (segments, segment, coerceNumericSegments) => {
5
+ if (!segment) {
6
+ return;
7
+ }
8
+ if (coerceNumericSegments && /^\d+$/.test(segment)) {
9
+ segments.push(Number(segment));
10
+ return;
11
+ }
12
+ segments.push(segment);
13
+ };
14
+ /** Parse dot/bracket path syntax shared by JSON paths and path-rule patterns. */
15
+ const parsePathSegments = (path, options = {}) => {
16
+ if (!path) {
17
+ return [];
18
+ }
19
+ const { allowWildcard = false, coerceNumericSegments = false } = options;
20
+ const segments = [];
21
+ let current = '';
22
+ for (let index = 0; index < path.length; index++) {
23
+ const char = path[index];
24
+ if (char === '.') {
25
+ pushPatternSegment(segments, current, coerceNumericSegments);
26
+ current = '';
27
+ continue;
28
+ }
29
+ if (char === '[') {
30
+ pushPatternSegment(segments, current, coerceNumericSegments);
31
+ current = '';
32
+ const close = path.indexOf(']', index);
33
+ segments.push(Number(path.slice(index + 1, close)));
34
+ index = close;
35
+ continue;
36
+ }
37
+ if (allowWildcard && char === '*') {
38
+ pushPatternSegment(segments, current, coerceNumericSegments);
39
+ current = '';
40
+ segments.push('*');
41
+ continue;
42
+ }
43
+ current += char;
44
+ }
45
+ pushPatternSegment(segments, current, coerceNumericSegments);
46
+ return segments;
47
+ };
48
+ exports.parsePathSegments = parsePathSegments;
49
+ const parseJsonPath = (path) => (0, exports.parsePathSegments)(path, { coerceNumericSegments: false });
50
+ exports.parseJsonPath = parseJsonPath;
51
+ const parsePathRulePattern = (pattern) => (0, exports.parsePathSegments)(pattern, { allowWildcard: true, coerceNumericSegments: true });
52
+ exports.parsePathRulePattern = parsePathRulePattern;
53
+ //# sourceMappingURL=pathParsing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathParsing.js","sourceRoot":"","sources":["../../src/util/pathParsing.ts"],"names":[],"mappings":";;;AAQA,MAAM,kBAAkB,GAAG,CACzB,QAA8B,EAC9B,OAAe,EACf,qBAA8B,EACxB,EAAE;IACR,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IAED,IAAI,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF,iFAAiF;AAC1E,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,UAA4B,EAAE,EAAwB,EAAE;IACtG,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,EAAE,aAAa,GAAG,KAAK,EAAE,qBAAqB,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IACzE,MAAM,QAAQ,GAAyB,EAAE,CAAC;IAC1C,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC;YAC7D,OAAO,GAAG,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC;YAC7D,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YACpD,KAAK,GAAG,KAAK,CAAC;YACd,SAAS;QACX,CAAC;QAED,IAAI,aAAa,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAClC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC;YAC7D,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,SAAS;QACX,CAAC;QAED,OAAO,IAAI,IAAI,CAAC;IAClB,CAAC;IAED,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC;IAC7D,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAvCW,QAAA,iBAAiB,qBAuC5B;AAEK,MAAM,aAAa,GAAG,CAAC,IAAY,EAAqB,EAAE,CAC/D,IAAA,yBAAiB,EAAC,IAAI,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAsB,CAAC;AADpE,QAAA,aAAa,iBACuD;AAE1E,MAAM,oBAAoB,GAAG,CAAC,OAAe,EAAwB,EAAE,CAC5E,IAAA,yBAAiB,EAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAC;AADtE,QAAA,oBAAoB,wBACkD"}
@@ -0,0 +1,3 @@
1
+ export declare const formatRegExp: (regex: RegExp) => string;
2
+ export declare const regexIdentity: (regex: RegExp) => string;
3
+ //# sourceMappingURL=regexUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regexUtils.d.ts","sourceRoot":"","sources":["../../src/util/regexUtils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,UAAW,MAAM,KAAG,MAA2C,CAAC;AAEzF,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,MAA2C,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.regexIdentity = exports.formatRegExp = void 0;
4
+ const formatRegExp = (regex) => `/${regex.source}/${regex.flags}`;
5
+ exports.formatRegExp = formatRegExp;
6
+ const regexIdentity = (regex) => `${regex.source}\0${regex.flags}`;
7
+ exports.regexIdentity = regexIdentity;
8
+ //# sourceMappingURL=regexUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regexUtils.js","sourceRoot":"","sources":["../../src/util/regexUtils.ts"],"names":[],"mappings":";;;AAAO,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;AAA5E,QAAA,YAAY,gBAAgE;AAElF,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;AAA7E,QAAA,aAAa,iBAAgE"}