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
@@ -1 +1 @@
1
- {"version":3,"file":"secretManager.js","sourceRoot":"","sources":["../src/secretManager.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACH,MAAa,aAAa;IAMxB,YAAY,MAA2B;QACrC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC5C,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC5C,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAEhD,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACtG,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACI,WAAW,CAAC,GAAW;QAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,aAAa,CAAC,yBAAyB,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACvE,CAAC;IAED;;;;OAIG;IACI,eAAe,CAAC,GAAW;QAChC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,aAAa,CAAC,yBAAyB,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3E,CAAC;IAED;;;;OAIG;IACI,eAAe,CAAC,GAAW;QAChC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,aAAa,CAAC,yBAAyB,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3E,CAAC;IAED;;;;OAIG;IACI,iBAAiB,CAAC,GAAW;QAClC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,aAAa,CAAC,yBAAyB,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7E,CAAC;IAEO,MAAM,CAAC,yBAAyB,CAAC,KAAa,EAAE,OAAiB;QACvE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACpD,CAAC;CACF;AA1ED,sCA0EC"}
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
@@ -1,28 +1,165 @@
1
- export type Redactor = (value: any) => Promise<string>;
1
+ /** JSON-compatible primitive. */
2
+ export type JsonPrimitive = string | number | boolean | null;
3
+ /** Function values encountered during traversal are left unchanged. */
4
+ export type JsonFunction = (...args: never[]) => unknown;
5
+ /** Scalar values that may appear in JSON-like structures during redaction. */
6
+ export type JsonLeafValue = JsonPrimitive | Date | JsonFunction;
7
+ /** JSON-compatible object. */
8
+ export type JsonObject = {
9
+ [key: string]: JsonValue | undefined;
10
+ };
11
+ /** JSON-compatible array. */
12
+ export type JsonArray = Array<JsonValue | undefined>;
13
+ /** JSON-compatible value. */
14
+ export type JsonValue = JsonLeafValue | JsonObject | JsonArray;
15
+ /**
16
+ * Values accepted by {@link FieldRedactor.redact} and {@link FieldRedactor.redactInPlace}.
17
+ * Root-level primitives, `Date`, and functions are returned unchanged without traversal.
18
+ */
19
+ export type RedactableInput = JsonValue | undefined;
20
+ /** Primitive values that may be passed to a custom {@link Redactor} function. */
21
+ export type RedactorInput = JsonPrimitive | undefined;
22
+ /** Primitive values processed by {@link PrimitiveRedactor}. */
23
+ export type RedactablePrimitive = RedactorInput;
24
+ /** Result of redacting a primitive value. */
25
+ export type RedactedPrimitive = string | boolean | null | undefined | 0;
26
+ /**
27
+ * Sibling field value used to resolve secret specifiers in custom object schemas
28
+ * (for example, the string `"email"` in a `{ name, value }` metadata entry).
29
+ */
30
+ export type SecretSpecifierValue = string | number | boolean;
31
+ export type Redactor = (value: RedactorInput) => Promise<string>;
32
+ /** Synchronous redactor for use with {@link FieldRedactor.redactSync} without Promise overhead. */
33
+ export type SyncRedactor = (value: RedactorInput) => string;
34
+ /**
35
+ * Per-field redaction mode inside a {@link CustomObject} schema.
36
+ * Prefer {@link CustomObjectMatchType.Opaque} / {@link CustomObjectMatchType.Remove}
37
+ * over the legacy Full / Delete names (same numeric values).
38
+ */
2
39
  export declare enum CustomObjectMatchType {
40
+ /** @deprecated Prefer {@link CustomObjectMatchType.Remove}. */
3
41
  Delete = 0,
42
+ /** Remove — delete the field from output. */
43
+ Remove = 0,
44
+ /** @deprecated Prefer {@link CustomObjectMatchType.Opaque}. */
4
45
  Full = 1,
46
+ /** Opaque — stringify the entire value, then redact. */
47
+ Opaque = 1,
5
48
  Deep = 2,
6
49
  Shallow = 3,
7
50
  Pass = 4,
8
51
  Ignore = 5
9
52
  }
10
53
  export type CustomObject = {
54
+ /**
55
+ * Object schema for **Schema** (`customObjects`) mode.
56
+ * Keys define required fields for matching; input objects may contain additional keys.
57
+ */
11
58
  [key: string]: CustomObjectMatchType | string;
12
59
  };
13
60
  export type PrimitiveRedactorConfig = {
14
61
  redactor?: Redactor;
62
+ syncRedactor?: SyncRedactor;
15
63
  ignoreBooleans: boolean;
16
64
  ignoreNullOrUndefined: boolean;
17
65
  };
18
66
  export type SecretManagerConfig = {
67
+ /** Shallow — redact matching keys' scalar values only (`secretKeys`). */
19
68
  secretKeys?: RegExp[];
69
+ /** Deep — redact matching keys and all descendant primitives (`deepSecretKeys`). */
20
70
  deepSecretKeys?: RegExp[];
71
+ /**
72
+ * Opaque — stringify entire value at matching keys, then redact.
73
+ * Preferred alias: {@link SecretManagerConfig.opaqueSecretKeys}.
74
+ */
21
75
  fullSecretKeys?: RegExp[];
76
+ /** Opaque — preferred name for {@link SecretManagerConfig.fullSecretKeys}. */
77
+ opaqueSecretKeys?: RegExp[];
78
+ /**
79
+ * Remove — delete matching keys from output.
80
+ * Preferred alias: {@link SecretManagerConfig.removeSecretKeys}.
81
+ */
22
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[];
104
+ };
105
+ export type ValuePatternConfig = {
106
+ /**
107
+ * Opt-in value-pattern redaction: redact scalar fields whose **string form** matches a pattern,
108
+ * regardless of key name. Lowest precedence — runs only when key-based rules leave the value unchanged.
109
+ */
110
+ valuePatterns?: RegExp[];
23
111
  };
24
- export type FieldRedactorConfig = Partial<PrimitiveRedactorConfig> & SecretManagerConfig & {
112
+ export type FieldRedactorConfig = Partial<PrimitiveRedactorConfig> & SecretManagerConfig & ValuePatternConfig & PathRuleConfig & {
25
113
  redactor?: Redactor;
114
+ syncRedactor?: SyncRedactor;
115
+ /** Schema rules for shaped objects (`customObjects`). */
26
116
  customObjects?: CustomObject[];
117
+ /**
118
+ * When true (default), `redact()` and `redactSync()` leave the input untouched using copy-on-write
119
+ * structural sharing. When false, those methods mutate the input in place (equivalent to `redactInPlace`).
120
+ */
121
+ cloneInput?: boolean;
122
+ /**
123
+ * When true, configuration warnings throw {@link FieldRedactorConfigurationError} at construction time.
124
+ * When false (default), warnings are exposed via {@link FieldRedactor.configWarnings} and `onConfigWarning`.
125
+ */
126
+ strict?: boolean;
127
+ /** Called for each non-fatal configuration warning when `strict` is false. */
128
+ onConfigWarning?: (message: string) => void;
129
+ /**
130
+ * Optional labels parallel to `customObjects` (same index). Used in {@link FieldRedactor.dryRun} reports.
131
+ * Set via {@link FieldRedactorConfigBuilder.schema}.
132
+ */
133
+ schemaNames?: (string | undefined)[];
134
+ };
135
+ export type MatchedSchemaReport = {
136
+ path: string;
137
+ schemaIndex: number;
138
+ schemaName?: string;
139
+ };
140
+ export type RedactionRuleLabel = 'schema' | RedactionMode | 'value' | 'default';
141
+ export type DryRunPathRule = {
142
+ path: string;
143
+ action: 'redact' | 'delete';
144
+ rule: RedactionRuleLabel;
145
+ pattern?: string;
146
+ schemaIndex?: number;
147
+ schemaName?: string;
148
+ };
149
+ export type DryRunReport = {
150
+ redactedPaths: string[];
151
+ deletedPaths: string[];
152
+ matchedSchemas: MatchedSchemaReport[];
153
+ /** Per-path rule attribution for redacted and deleted paths. */
154
+ pathRules: DryRunPathRule[];
155
+ };
156
+ export type DryRunResult<T> = {
157
+ result: T;
158
+ report: DryRunReport;
27
159
  };
160
+ /** JSON object or array traversed during in-place redaction. */
161
+ export type TraversableJson = JsonObject | JsonArray;
162
+ /** Mutable key/value map used while traversing JSON object or array keys in place. */
163
+ export type JsonRecord = Record<string, JsonValue | undefined>;
164
+ export declare const isJsonObject: (value: JsonValue | undefined) => value is JsonObject;
28
165
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEvD,oBAAY,qBAAqB;IAC/B,MAAM,IAAA;IACN,IAAI,IAAA;IACJ,IAAI,IAAA;IACJ,OAAO,IAAA;IACP,IAAI,IAAA;IACJ,MAAM,IAAA;CACP;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAAG,MAAM,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,uBAAuB,CAAC,GAChE,mBAAmB,GAAG;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;CAChC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -1,13 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CustomObjectMatchType = void 0;
3
+ exports.isJsonObject = exports.CustomObjectMatchType = void 0;
4
+ /**
5
+ * Per-field redaction mode inside a {@link CustomObject} schema.
6
+ * Prefer {@link CustomObjectMatchType.Opaque} / {@link CustomObjectMatchType.Remove}
7
+ * over the legacy Full / Delete names (same numeric values).
8
+ */
4
9
  var CustomObjectMatchType;
5
10
  (function (CustomObjectMatchType) {
11
+ /** @deprecated Prefer {@link CustomObjectMatchType.Remove}. */
6
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}. */
7
16
  CustomObjectMatchType[CustomObjectMatchType["Full"] = 1] = "Full";
17
+ /** Opaque — stringify the entire value, then redact. */
18
+ CustomObjectMatchType[CustomObjectMatchType["Opaque"] = 1] = "Opaque";
8
19
  CustomObjectMatchType[CustomObjectMatchType["Deep"] = 2] = "Deep";
9
20
  CustomObjectMatchType[CustomObjectMatchType["Shallow"] = 3] = "Shallow";
10
21
  CustomObjectMatchType[CustomObjectMatchType["Pass"] = 4] = "Pass";
11
22
  CustomObjectMatchType[CustomObjectMatchType["Ignore"] = 5] = "Ignore";
12
23
  })(CustomObjectMatchType || (exports.CustomObjectMatchType = CustomObjectMatchType = {}));
24
+ const isJsonObject = (value) => !!value && typeof value === 'object' && !(value instanceof Date) && !Array.isArray(value);
25
+ exports.isJsonObject = isJsonObject;
13
26
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAEA,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"}
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":";;;AAAA,oCAA0E;AAEnE,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/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"}
@@ -0,0 +1,15 @@
1
+ import { RedactablePrimitive } from './types';
2
+ /**
3
+ * Opt-in regex matching against scalar **values** (not key names).
4
+ * Applied only when key-based rules do not already redact the field.
5
+ */
6
+ export declare class ValuePatternMatcher {
7
+ private readonly patterns;
8
+ constructor(patterns?: RegExp[]);
9
+ hasPatterns(): boolean;
10
+ findMatching(value: RedactablePrimitive | undefined): RegExp | undefined;
11
+ formatPattern(regex: RegExp): string;
12
+ }
13
+ /** Shared empty matcher for tests and configs without value patterns. */
14
+ export declare const EMPTY_VALUE_PATTERN_MATCHER: ValuePatternMatcher;
15
+ //# sourceMappingURL=valuePatternMatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valuePatternMatcher.d.ts","sourceRoot":"","sources":["../src/valuePatternMatcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;gBAExB,QAAQ,CAAC,EAAE,MAAM,EAAE;IAIxB,WAAW,IAAI,OAAO;IAItB,YAAY,CAAC,KAAK,EAAE,mBAAmB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS;IASxE,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAG5C;AAED,yEAAyE;AACzE,eAAO,MAAM,2BAA2B,qBAA4B,CAAC"}
@@ -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("./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/valuePatternMatcher.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAG5C;;;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"}