@contrast/agent-bundle 5.47.0 → 5.48.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 (526) hide show
  1. package/node_modules/@contrast/agent/package.json +10 -10
  2. package/node_modules/@contrast/agentify/package.json +14 -14
  3. package/node_modules/@contrast/architecture-components/package.json +4 -4
  4. package/node_modules/@contrast/assess/lib/configuration-analysis/install/apollo-server.js +1 -1
  5. package/node_modules/@contrast/assess/lib/configuration-analysis/install/graphql-yoga.js +1 -1
  6. package/node_modules/@contrast/assess/lib/dataflow/sinks/install/fs.js +8 -15
  7. package/node_modules/@contrast/assess/package.json +11 -11
  8. package/node_modules/@contrast/config/package.json +2 -2
  9. package/node_modules/@contrast/core/package.json +4 -4
  10. package/node_modules/@contrast/deadzones/package.json +4 -4
  11. package/node_modules/@contrast/dep-hooks/lib/export-handler-registry.js +1 -10
  12. package/node_modules/@contrast/dep-hooks/lib/export-hook-descriptor.js +1 -1
  13. package/node_modules/@contrast/dep-hooks/lib/index.d.ts +1 -1
  14. package/node_modules/@contrast/dep-hooks/lib/index.js +1 -1
  15. package/node_modules/@contrast/dep-hooks/lib/package-finder.d.ts +2 -1
  16. package/node_modules/@contrast/dep-hooks/lib/package-finder.js +11 -2
  17. package/node_modules/@contrast/dep-hooks/package.json +3 -3
  18. package/node_modules/@contrast/esm-hooks/package.json +5 -5
  19. package/node_modules/@contrast/instrumentation/package.json +4 -4
  20. package/node_modules/@contrast/library-analysis/lib/install/library-reporting/dep.json +144 -202
  21. package/node_modules/@contrast/library-analysis/package.json +3 -3
  22. package/node_modules/@contrast/logger/package.json +3 -3
  23. package/node_modules/@contrast/metrics/package.json +5 -5
  24. package/node_modules/@contrast/patcher/package.json +2 -2
  25. package/node_modules/@contrast/protect/lib/input-tracing/install/fs.js +0 -8
  26. package/node_modules/@contrast/protect/package.json +10 -10
  27. package/node_modules/@contrast/reporter/package.json +5 -5
  28. package/node_modules/@contrast/rewriter/package.json +4 -4
  29. package/node_modules/@contrast/route-coverage/lib/index.d.ts +2 -0
  30. package/node_modules/@contrast/route-coverage/lib/index.js +2 -1
  31. package/node_modules/@contrast/route-coverage/lib/install/express.js +535 -0
  32. package/node_modules/@contrast/route-coverage/lib/install/fastify/fastify-express.js +71 -0
  33. package/node_modules/@contrast/route-coverage/lib/install/fastify/fastify-middie.js +67 -0
  34. package/node_modules/@contrast/route-coverage/lib/install/{fastify.js → fastify/fastify.js} +12 -12
  35. package/node_modules/@contrast/route-coverage/lib/install/{express → fastify}/index.js +6 -5
  36. package/node_modules/@contrast/route-coverage/lib/install/koa.js +39 -45
  37. package/node_modules/@contrast/route-coverage/lib/utils/route-info.js +26 -1
  38. package/node_modules/@contrast/route-coverage/package.json +7 -7
  39. package/node_modules/@contrast/scopes/package.json +5 -5
  40. package/node_modules/@contrast/sec-obs/package.json +8 -8
  41. package/node_modules/@contrast/sources/package.json +2 -2
  42. package/node_modules/@contrast/telemetry/package.json +4 -4
  43. package/node_modules/@opentelemetry/semantic-conventions/build/esm/experimental_attributes.d.ts +697 -30
  44. package/node_modules/@opentelemetry/semantic-conventions/build/esm/experimental_attributes.js +697 -30
  45. package/node_modules/@opentelemetry/semantic-conventions/build/esm/experimental_attributes.js.map +1 -1
  46. package/node_modules/@opentelemetry/semantic-conventions/build/esm/experimental_events.d.ts +6 -0
  47. package/node_modules/@opentelemetry/semantic-conventions/build/esm/experimental_events.js +6 -0
  48. package/node_modules/@opentelemetry/semantic-conventions/build/esm/experimental_events.js.map +1 -1
  49. package/node_modules/@opentelemetry/semantic-conventions/build/esm/experimental_metrics.d.ts +877 -49
  50. package/node_modules/@opentelemetry/semantic-conventions/build/esm/experimental_metrics.js +877 -49
  51. package/node_modules/@opentelemetry/semantic-conventions/build/esm/experimental_metrics.js.map +1 -1
  52. package/node_modules/@opentelemetry/semantic-conventions/build/esm/stable_attributes.d.ts +13 -4
  53. package/node_modules/@opentelemetry/semantic-conventions/build/esm/stable_attributes.js +13 -4
  54. package/node_modules/@opentelemetry/semantic-conventions/build/esm/stable_attributes.js.map +1 -1
  55. package/node_modules/@opentelemetry/semantic-conventions/build/esm/version.d.ts +1 -1
  56. package/node_modules/@opentelemetry/semantic-conventions/build/esm/version.js +1 -1
  57. package/node_modules/@opentelemetry/semantic-conventions/build/esm/version.js.map +1 -1
  58. package/node_modules/@opentelemetry/semantic-conventions/build/esnext/experimental_attributes.d.ts +697 -30
  59. package/node_modules/@opentelemetry/semantic-conventions/build/esnext/experimental_attributes.js +697 -30
  60. package/node_modules/@opentelemetry/semantic-conventions/build/esnext/experimental_attributes.js.map +1 -1
  61. package/node_modules/@opentelemetry/semantic-conventions/build/esnext/experimental_events.d.ts +6 -0
  62. package/node_modules/@opentelemetry/semantic-conventions/build/esnext/experimental_events.js +6 -0
  63. package/node_modules/@opentelemetry/semantic-conventions/build/esnext/experimental_events.js.map +1 -1
  64. package/node_modules/@opentelemetry/semantic-conventions/build/esnext/experimental_metrics.d.ts +877 -49
  65. package/node_modules/@opentelemetry/semantic-conventions/build/esnext/experimental_metrics.js +877 -49
  66. package/node_modules/@opentelemetry/semantic-conventions/build/esnext/experimental_metrics.js.map +1 -1
  67. package/node_modules/@opentelemetry/semantic-conventions/build/esnext/stable_attributes.d.ts +13 -4
  68. package/node_modules/@opentelemetry/semantic-conventions/build/esnext/stable_attributes.js +13 -4
  69. package/node_modules/@opentelemetry/semantic-conventions/build/esnext/stable_attributes.js.map +1 -1
  70. package/node_modules/@opentelemetry/semantic-conventions/build/esnext/version.d.ts +1 -1
  71. package/node_modules/@opentelemetry/semantic-conventions/build/esnext/version.js +1 -1
  72. package/node_modules/@opentelemetry/semantic-conventions/build/esnext/version.js.map +1 -1
  73. package/node_modules/@opentelemetry/semantic-conventions/build/src/experimental_attributes.d.ts +697 -30
  74. package/node_modules/@opentelemetry/semantic-conventions/build/src/experimental_attributes.js +729 -61
  75. package/node_modules/@opentelemetry/semantic-conventions/build/src/experimental_attributes.js.map +1 -1
  76. package/node_modules/@opentelemetry/semantic-conventions/build/src/experimental_events.d.ts +6 -0
  77. package/node_modules/@opentelemetry/semantic-conventions/build/src/experimental_events.js +7 -1
  78. package/node_modules/@opentelemetry/semantic-conventions/build/src/experimental_events.js.map +1 -1
  79. package/node_modules/@opentelemetry/semantic-conventions/build/src/experimental_metrics.d.ts +877 -49
  80. package/node_modules/@opentelemetry/semantic-conventions/build/src/experimental_metrics.js +886 -56
  81. package/node_modules/@opentelemetry/semantic-conventions/build/src/experimental_metrics.js.map +1 -1
  82. package/node_modules/@opentelemetry/semantic-conventions/build/src/stable_attributes.d.ts +13 -4
  83. package/node_modules/@opentelemetry/semantic-conventions/build/src/stable_attributes.js +13 -4
  84. package/node_modules/@opentelemetry/semantic-conventions/build/src/stable_attributes.js.map +1 -1
  85. package/node_modules/@opentelemetry/semantic-conventions/build/src/version.d.ts +1 -1
  86. package/node_modules/@opentelemetry/semantic-conventions/build/src/version.js +1 -1
  87. package/node_modules/@opentelemetry/semantic-conventions/build/src/version.js.map +1 -1
  88. package/node_modules/@opentelemetry/semantic-conventions/package.json +3 -5
  89. package/node_modules/{pino → @pinojs/redact}/.github/dependabot.yml +1 -1
  90. package/node_modules/@pinojs/redact/.github/workflows/ci.yml +48 -0
  91. package/node_modules/@pinojs/redact/.github/workflows/publish-release.yml +43 -0
  92. package/node_modules/{abort-controller → @pinojs/redact}/LICENSE +1 -1
  93. package/node_modules/@pinojs/redact/README.md +350 -0
  94. package/node_modules/@pinojs/redact/benchmarks/basic.js +184 -0
  95. package/node_modules/@pinojs/redact/eslint.config.js +1 -0
  96. package/node_modules/@pinojs/redact/index.d.ts +52 -0
  97. package/node_modules/@pinojs/redact/index.js +529 -0
  98. package/node_modules/@pinojs/redact/index.test-d.ts +22 -0
  99. package/node_modules/@pinojs/redact/package.json +37 -0
  100. package/node_modules/@pinojs/redact/scripts/sync-version.mjs +20 -0
  101. package/node_modules/@pinojs/redact/test/actual-redact-comparison.test.js +211 -0
  102. package/node_modules/@pinojs/redact/test/index.test.js +824 -0
  103. package/node_modules/@pinojs/redact/test/integration.test.js +390 -0
  104. package/node_modules/@pinojs/redact/test/multiple-wildcards.test.js +227 -0
  105. package/node_modules/@pinojs/redact/test/prototype-pollution.test.js +223 -0
  106. package/node_modules/@pinojs/redact/test/selective-clone.test.js +115 -0
  107. package/node_modules/@pinojs/redact/tsconfig.json +19 -0
  108. package/node_modules/@types/node/README.md +1 -1
  109. package/node_modules/@types/node/console.d.ts +3 -2
  110. package/node_modules/@types/node/package.json +2 -2
  111. package/node_modules/@types/node/process.d.ts +7 -0
  112. package/node_modules/@types/node/sqlite.d.ts +107 -0
  113. package/node_modules/@types/node/url.d.ts +32 -8
  114. package/node_modules/axios/CHANGELOG.md +18 -0
  115. package/node_modules/axios/README.md +1 -4
  116. package/node_modules/axios/dist/axios.js +2 -2
  117. package/node_modules/axios/dist/axios.js.map +1 -1
  118. package/node_modules/axios/dist/axios.min.js +2 -2
  119. package/node_modules/axios/dist/axios.min.js.map +1 -1
  120. package/node_modules/axios/dist/browser/axios.cjs +2 -2
  121. package/node_modules/axios/dist/browser/axios.cjs.map +1 -1
  122. package/node_modules/axios/dist/esm/axios.js +2 -2
  123. package/node_modules/axios/dist/esm/axios.js.map +1 -1
  124. package/node_modules/axios/dist/esm/axios.min.js +2 -2
  125. package/node_modules/axios/dist/esm/axios.min.js.map +1 -1
  126. package/node_modules/axios/dist/node/axios.cjs +25 -20
  127. package/node_modules/axios/dist/node/axios.cjs.map +1 -1
  128. package/node_modules/axios/lib/adapters/http.js +22 -18
  129. package/node_modules/axios/lib/env/data.js +1 -1
  130. package/node_modules/axios/package.json +1 -1
  131. package/node_modules/form-data/CHANGELOG.md +60 -2
  132. package/node_modules/form-data/README.md +4 -4
  133. package/node_modules/form-data/lib/form_data.js +2 -2
  134. package/node_modules/form-data/package.json +4 -4
  135. package/node_modules/ipaddr.js/README.md +1 -0
  136. package/node_modules/ipaddr.js/ipaddr.min.js +1 -1
  137. package/node_modules/ipaddr.js/lib/ipaddr.js +11 -0
  138. package/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +1 -0
  139. package/node_modules/ipaddr.js/package.json +2 -3
  140. package/node_modules/nan/.github/workflows/ci.yml +3 -1
  141. package/node_modules/nan/CHANGELOG.md +4 -1
  142. package/node_modules/nan/README.md +2 -2
  143. package/node_modules/nan/nan.h +25 -15
  144. package/node_modules/nan/nan_maybe_43_inl.h +5 -1
  145. package/node_modules/nan/package.json +2 -2
  146. package/node_modules/node-abi/abi_registry.json +8 -1
  147. package/node_modules/node-abi/package.json +1 -1
  148. package/node_modules/pino/CONTRIBUTING.md +4 -0
  149. package/node_modules/pino/LICENSE +1 -1
  150. package/node_modules/pino/README.md +20 -3
  151. package/node_modules/pino/benchmarks/basic.bench.js +1 -1
  152. package/node_modules/pino/benchmarks/child-child.bench.js +1 -1
  153. package/node_modules/pino/benchmarks/child-creation.bench.js +1 -1
  154. package/node_modules/pino/benchmarks/child.bench.js +1 -1
  155. package/node_modules/pino/benchmarks/deep-object.bench.js +1 -1
  156. package/node_modules/pino/benchmarks/internal/just-pino-heavy.bench.js +1 -1
  157. package/node_modules/pino/benchmarks/internal/just-pino.bench.js +1 -1
  158. package/node_modules/pino/benchmarks/internal/redact.bench.js +1 -1
  159. package/node_modules/pino/benchmarks/long-string.bench.js +1 -1
  160. package/node_modules/pino/benchmarks/multi-arg.bench.js +1 -1
  161. package/node_modules/pino/benchmarks/multistream.js +1 -1
  162. package/node_modules/pino/benchmarks/object.bench.js +1 -1
  163. package/node_modules/pino/benchmarks/utils/generate-benchmark-doc.js +2 -2
  164. package/node_modules/pino/benchmarks/utils/runbench.js +3 -3
  165. package/node_modules/pino/benchmarks/utils/wrap-log-level.js +2 -2
  166. package/node_modules/pino/browser.js +76 -36
  167. package/node_modules/pino/build/sync-version.js +18 -3
  168. package/node_modules/pino/docs/api.md +155 -13
  169. package/node_modules/pino/docs/browser.md +16 -1
  170. package/node_modules/pino/docs/bundling.md +5 -3
  171. package/node_modules/pino/docs/diagnostics.md +16 -0
  172. package/node_modules/pino/docs/ecosystem.md +15 -12
  173. package/node_modules/pino/docs/help.md +29 -3
  174. package/node_modules/pino/docs/lts.md +5 -4
  175. package/node_modules/pino/docs/transports.md +442 -271
  176. package/node_modules/pino/docs/web.md +59 -9
  177. package/node_modules/pino/eslint.config.js +19 -0
  178. package/node_modules/pino/examples/transport.js +2 -2
  179. package/node_modules/pino/file.js +1 -1
  180. package/node_modules/pino/lib/meta.js +1 -1
  181. package/node_modules/pino/lib/multistream.js +17 -2
  182. package/node_modules/pino/lib/proto.js +35 -11
  183. package/node_modules/pino/lib/redaction.js +9 -13
  184. package/node_modules/pino/lib/time.js +29 -1
  185. package/node_modules/pino/lib/tools.js +37 -8
  186. package/node_modules/pino/lib/transport-stream.js +10 -4
  187. package/node_modules/pino/lib/transport.js +23 -9
  188. package/node_modules/pino/lib/worker.js +164 -24
  189. package/node_modules/pino/package.json +28 -27
  190. package/node_modules/pino/pino.d.ts +244 -203
  191. package/node_modules/pino/pino.js +7 -3
  192. package/node_modules/pino/test/basic.test.js +181 -169
  193. package/node_modules/pino/test/broken-pipe.test.js +18 -16
  194. package/node_modules/pino/test/browser-child.test.js +26 -0
  195. package/node_modules/pino/test/browser-is-level-enabled.test.js +101 -0
  196. package/node_modules/pino/test/browser-serializers.test.js +0 -2
  197. package/node_modules/pino/test/browser-transmit.test.js +68 -0
  198. package/node_modules/pino/test/browser.test.js +98 -13
  199. package/node_modules/pino/test/complex-objects.test.js +8 -6
  200. package/node_modules/pino/test/crlf.test.js +7 -5
  201. package/node_modules/pino/test/custom-levels.test.js +80 -66
  202. package/node_modules/pino/test/diagnostics.test.js +107 -0
  203. package/node_modules/pino/test/error-key.test.js +37 -0
  204. package/node_modules/pino/test/error.test.js +48 -43
  205. package/node_modules/pino/test/escaping.test.js +8 -6
  206. package/node_modules/pino/test/esm/esm.mjs +5 -3
  207. package/node_modules/pino/test/esm/index.test.js +14 -27
  208. package/node_modules/pino/test/esm/named-exports.mjs +9 -8
  209. package/node_modules/pino/test/exit.test.js +18 -16
  210. package/node_modules/pino/test/fixtures/broken-pipe/basic.js +1 -1
  211. package/node_modules/pino/test/fixtures/broken-pipe/destination.js +1 -1
  212. package/node_modules/pino/test/fixtures/broken-pipe/syncfalse.js +1 -1
  213. package/node_modules/pino/test/fixtures/console-transport.js +1 -1
  214. package/node_modules/pino/test/fixtures/crashing-transport.js +13 -0
  215. package/node_modules/pino/test/fixtures/default-exit.js +1 -1
  216. package/node_modules/pino/test/fixtures/destination-exit.js +1 -1
  217. package/node_modules/pino/test/fixtures/noop-transport.js +1 -1
  218. package/node_modules/pino/test/fixtures/pretty/null-prototype.js +1 -1
  219. package/node_modules/pino/test/fixtures/stdout-hack-protection.js +1 -1
  220. package/node_modules/pino/test/fixtures/syncfalse-child.js +1 -1
  221. package/node_modules/pino/test/fixtures/syncfalse-exit.js +1 -1
  222. package/node_modules/pino/test/fixtures/syncfalse-flush-exit.js +1 -1
  223. package/node_modules/pino/test/fixtures/syncfalse.js +1 -1
  224. package/node_modules/pino/test/fixtures/syntax-error-esm.mjs +2 -0
  225. package/node_modules/pino/test/fixtures/to-file-transport-with-transform.js +3 -3
  226. package/node_modules/pino/test/fixtures/to-file-transport.js +2 -2
  227. package/node_modules/pino/test/fixtures/to-file-transport.mjs +2 -2
  228. package/node_modules/pino/test/fixtures/transport/index.js +2 -2
  229. package/node_modules/pino/test/fixtures/transport-main.js +1 -1
  230. package/node_modules/pino/test/fixtures/transport-transform.js +1 -1
  231. package/node_modules/pino/test/fixtures/transport-uses-pino-config.js +1 -1
  232. package/node_modules/pino/test/fixtures/transport-worker-data.js +1 -1
  233. package/node_modules/pino/test/fixtures/transport-worker.js +2 -2
  234. package/node_modules/pino/test/fixtures/ts/to-file-transport-with-transform.ts +3 -3
  235. package/node_modules/pino/test/fixtures/ts/to-file-transport.ts +2 -2
  236. package/node_modules/pino/test/fixtures/ts/transpile.cjs +1 -1
  237. package/node_modules/pino/test/fixtures/ts/transport-exit-immediately-with-async-dest.ts +1 -1
  238. package/node_modules/pino/test/fixtures/ts/transport-main.ts +1 -1
  239. package/node_modules/pino/test/fixtures/ts/transport-worker.ts +1 -1
  240. package/node_modules/pino/test/formatters.test.js +46 -37
  241. package/node_modules/pino/test/helper.d.ts +1 -1
  242. package/node_modules/pino/test/helper.js +37 -10
  243. package/node_modules/pino/test/hooks.test.js +45 -28
  244. package/node_modules/pino/test/http.test.js +39 -67
  245. package/node_modules/pino/test/internals/version.test.js +11 -9
  246. package/node_modules/pino/test/is-level-enabled.test.js +66 -72
  247. package/node_modules/pino/test/levels.test.js +245 -141
  248. package/node_modules/pino/test/metadata.test.js +45 -31
  249. package/node_modules/pino/test/mixin-merge-strategy.test.js +9 -7
  250. package/node_modules/pino/test/mixin.test.js +63 -40
  251. package/node_modules/pino/test/multistream.test.js +174 -118
  252. package/node_modules/pino/test/redact.test.js +172 -126
  253. package/node_modules/pino/test/serializers.test.js +61 -57
  254. package/node_modules/pino/test/stdout-protection.test.js +14 -12
  255. package/node_modules/pino/test/syncfalse.test.js +29 -34
  256. package/node_modules/pino/test/timestamp-nano.test.js +37 -0
  257. package/node_modules/pino/test/timestamp.test.js +37 -34
  258. package/node_modules/pino/test/transport/big.test.js +11 -12
  259. package/node_modules/pino/test/transport/bundlers-support.test.js +15 -43
  260. package/node_modules/pino/test/transport/caller.test.js +9 -8
  261. package/node_modules/pino/test/transport/core.test.js +175 -145
  262. package/node_modules/pino/test/transport/core.transpiled.test.ts +17 -19
  263. package/node_modules/pino/test/transport/crash.test.js +36 -0
  264. package/node_modules/pino/test/transport/module-link.test.js +21 -19
  265. package/node_modules/pino/test/transport/pipeline.test.js +109 -8
  266. package/node_modules/pino/test/transport/repl.test.js +4 -3
  267. package/node_modules/pino/test/transport/{syncfalse.test.js → sync-false.test.js} +14 -12
  268. package/node_modules/pino/test/transport/sync-true.test.js +57 -0
  269. package/node_modules/pino/test/transport/targets.test.js +25 -5
  270. package/node_modules/pino/test/transport/uses-pino-config.test.js +16 -17
  271. package/node_modules/pino/test/transport-stream.test.js +40 -0
  272. package/node_modules/pino/test/types/{pino-import.test-d.ts → pino-import.test-d.cts} +4 -3
  273. package/node_modules/pino/test/types/pino-multistream.test-d.ts +1 -1
  274. package/node_modules/pino/test/types/pino-top-export.test-d.ts +1 -0
  275. package/node_modules/pino/test/types/pino-transport.test-d.ts +1 -1
  276. package/node_modules/pino/test/types/pino-type-only.test-d.ts +24 -6
  277. package/node_modules/pino/test/types/pino.test-d.ts +161 -6
  278. package/node_modules/pino/test/types/pino.ts +31 -19
  279. package/node_modules/pino/tsconfig.json +1 -1
  280. package/node_modules/pino-abstract-transport/.github/workflows/ci.yml +2 -4
  281. package/node_modules/pino-abstract-transport/index.js +1 -1
  282. package/node_modules/pino-abstract-transport/package.json +2 -3
  283. package/node_modules/pino-abstract-transport/test/base.test.js +1 -1
  284. package/node_modules/pino-abstract-transport/test/worker.test.js +7 -14
  285. package/node_modules/pino-std-serializers/.github/workflows/ci.yml +5 -5
  286. package/node_modules/pino-std-serializers/Readme.md +1 -0
  287. package/node_modules/pino-std-serializers/package.json +9 -8
  288. package/node_modules/pino-std-serializers/test/err-with-cause.test.js +72 -88
  289. package/node_modules/pino-std-serializers/test/err.test.js +76 -91
  290. package/node_modules/pino-std-serializers/test/req.test.js +142 -98
  291. package/node_modules/pino-std-serializers/test/res.test.js +42 -31
  292. package/node_modules/process-warning/.github/dependabot.yml +1 -1
  293. package/node_modules/process-warning/.github/workflows/ci.yml +1 -2
  294. package/node_modules/process-warning/README.md +4 -4
  295. package/node_modules/process-warning/eslint.config.js +6 -0
  296. package/node_modules/process-warning/package.json +39 -8
  297. package/node_modules/process-warning/test/emit-interpolated-string.test.js +11 -6
  298. package/node_modules/process-warning/test/emit-once-only.test.js +11 -6
  299. package/node_modules/process-warning/test/emit-reset.test.js +10 -6
  300. package/node_modules/process-warning/test/emit-set.test.js +10 -5
  301. package/node_modules/process-warning/test/emit-unlimited.test.js +12 -7
  302. package/node_modules/process-warning/test/index.test.js +20 -20
  303. package/node_modules/process-warning/test/issue-88.test.js +8 -3
  304. package/node_modules/process-warning/test/jest.test.js +17 -15
  305. package/node_modules/process-warning/test/no-warnings.test.js +9 -9
  306. package/node_modules/process-warning/test/promise.js +10 -0
  307. package/node_modules/process-warning/types/index.d.ts +5 -5
  308. package/node_modules/thread-stream/.github/workflows/ci.yml +4 -8
  309. package/node_modules/thread-stream/index.d.ts +4 -5
  310. package/node_modules/thread-stream/lib/worker.js +5 -2
  311. package/node_modules/thread-stream/package.json +6 -4
  312. package/node_modules/thread-stream/test/base.test.js +12 -0
  313. package/node_modules/thread-stream/test/never-drain.test.js +3 -1
  314. package/node_modules/thread-stream/test/pkg/pkg.test.js +2 -0
  315. package/node_modules/thread-stream/test/syntax-error.mjs +2 -0
  316. package/node_modules/thread-stream/tsconfig.json +8 -0
  317. package/node_modules/yaml/browser/dist/compose/compose-collection.js +1 -1
  318. package/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +1 -1
  319. package/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +2 -2
  320. package/node_modules/yaml/browser/dist/errors.js +1 -1
  321. package/node_modules/yaml/browser/dist/nodes/Alias.js +1 -1
  322. package/node_modules/yaml/browser/dist/parse/parser.js +2 -2
  323. package/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +1 -1
  324. package/node_modules/yaml/browser/dist/stringify/stringifyPair.js +1 -1
  325. package/node_modules/yaml/dist/compose/compose-collection.js +1 -1
  326. package/node_modules/yaml/dist/compose/resolve-block-seq.js +1 -1
  327. package/node_modules/yaml/dist/compose/resolve-flow-collection.js +2 -2
  328. package/node_modules/yaml/dist/errors.js +1 -1
  329. package/node_modules/yaml/dist/nodes/Alias.js +1 -1
  330. package/node_modules/yaml/dist/parse/parser.js +2 -2
  331. package/node_modules/yaml/dist/stringify/stringifyNumber.js +1 -1
  332. package/node_modules/yaml/dist/stringify/stringifyPair.js +1 -1
  333. package/node_modules/yaml/package.json +4 -4
  334. package/package.json +2 -2
  335. package/node_modules/@contrast/route-coverage/lib/install/express/express4.js +0 -157
  336. package/node_modules/@contrast/route-coverage/lib/install/express/express5.js +0 -553
  337. package/node_modules/abort-controller/README.md +0 -98
  338. package/node_modules/abort-controller/browser.js +0 -13
  339. package/node_modules/abort-controller/browser.mjs +0 -11
  340. package/node_modules/abort-controller/dist/abort-controller.d.ts +0 -43
  341. package/node_modules/abort-controller/dist/abort-controller.js +0 -127
  342. package/node_modules/abort-controller/dist/abort-controller.js.map +0 -1
  343. package/node_modules/abort-controller/dist/abort-controller.mjs +0 -118
  344. package/node_modules/abort-controller/dist/abort-controller.mjs.map +0 -1
  345. package/node_modules/abort-controller/dist/abort-controller.umd.js +0 -5
  346. package/node_modules/abort-controller/dist/abort-controller.umd.js.map +0 -1
  347. package/node_modules/abort-controller/package.json +0 -97
  348. package/node_modules/abort-controller/polyfill.js +0 -21
  349. package/node_modules/abort-controller/polyfill.mjs +0 -19
  350. package/node_modules/base64-js/LICENSE +0 -21
  351. package/node_modules/base64-js/README.md +0 -34
  352. package/node_modules/base64-js/base64js.min.js +0 -1
  353. package/node_modules/base64-js/index.d.ts +0 -3
  354. package/node_modules/base64-js/index.js +0 -150
  355. package/node_modules/base64-js/package.json +0 -47
  356. package/node_modules/buffer/AUTHORS.md +0 -73
  357. package/node_modules/buffer/LICENSE +0 -21
  358. package/node_modules/buffer/README.md +0 -410
  359. package/node_modules/buffer/index.d.ts +0 -194
  360. package/node_modules/buffer/index.js +0 -2106
  361. package/node_modules/buffer/package.json +0 -93
  362. package/node_modules/event-target-shim/LICENSE +0 -22
  363. package/node_modules/event-target-shim/README.md +0 -293
  364. package/node_modules/event-target-shim/dist/event-target-shim.js +0 -871
  365. package/node_modules/event-target-shim/dist/event-target-shim.js.map +0 -1
  366. package/node_modules/event-target-shim/dist/event-target-shim.mjs +0 -862
  367. package/node_modules/event-target-shim/dist/event-target-shim.mjs.map +0 -1
  368. package/node_modules/event-target-shim/dist/event-target-shim.umd.js +0 -6
  369. package/node_modules/event-target-shim/dist/event-target-shim.umd.js.map +0 -1
  370. package/node_modules/event-target-shim/index.d.ts +0 -399
  371. package/node_modules/event-target-shim/package.json +0 -82
  372. package/node_modules/events/.airtap.yml +0 -15
  373. package/node_modules/events/.github/FUNDING.yml +0 -12
  374. package/node_modules/events/.travis.yml +0 -18
  375. package/node_modules/events/History.md +0 -118
  376. package/node_modules/events/LICENSE +0 -22
  377. package/node_modules/events/Readme.md +0 -50
  378. package/node_modules/events/events.js +0 -497
  379. package/node_modules/events/package.json +0 -37
  380. package/node_modules/events/security.md +0 -10
  381. package/node_modules/events/tests/add-listeners.js +0 -111
  382. package/node_modules/events/tests/check-listener-leaks.js +0 -101
  383. package/node_modules/events/tests/common.js +0 -104
  384. package/node_modules/events/tests/errors.js +0 -13
  385. package/node_modules/events/tests/events-list.js +0 -28
  386. package/node_modules/events/tests/events-once.js +0 -234
  387. package/node_modules/events/tests/index.js +0 -64
  388. package/node_modules/events/tests/legacy-compat.js +0 -16
  389. package/node_modules/events/tests/listener-count.js +0 -37
  390. package/node_modules/events/tests/listeners-side-effects.js +0 -56
  391. package/node_modules/events/tests/listeners.js +0 -168
  392. package/node_modules/events/tests/max-listeners.js +0 -47
  393. package/node_modules/events/tests/method-names.js +0 -35
  394. package/node_modules/events/tests/modify-in-emit.js +0 -90
  395. package/node_modules/events/tests/num-args.js +0 -60
  396. package/node_modules/events/tests/once.js +0 -83
  397. package/node_modules/events/tests/prepend.js +0 -31
  398. package/node_modules/events/tests/remove-all-listeners.js +0 -133
  399. package/node_modules/events/tests/remove-listeners.js +0 -212
  400. package/node_modules/events/tests/set-max-listeners-side-effects.js +0 -31
  401. package/node_modules/events/tests/special-event-names.js +0 -45
  402. package/node_modules/events/tests/subclass.js +0 -66
  403. package/node_modules/events/tests/symbols.js +0 -25
  404. package/node_modules/fast-redact/.github/workflows/ci.yml +0 -37
  405. package/node_modules/fast-redact/LICENSE +0 -21
  406. package/node_modules/fast-redact/benchmark/index.js +0 -223
  407. package/node_modules/fast-redact/example/default-usage.js +0 -14
  408. package/node_modules/fast-redact/example/intermediate-wildcard-array.js +0 -11
  409. package/node_modules/fast-redact/example/multi-wildcard-array-depth.js +0 -11
  410. package/node_modules/fast-redact/example/multi-wildcard-array-end.js +0 -11
  411. package/node_modules/fast-redact/example/multi-wildcard-array.js +0 -11
  412. package/node_modules/fast-redact/example/serialize-false.js +0 -11
  413. package/node_modules/fast-redact/example/serialize-function.js +0 -4
  414. package/node_modules/fast-redact/example/top-wildcard-object.js +0 -9
  415. package/node_modules/fast-redact/index.js +0 -56
  416. package/node_modules/fast-redact/lib/modifiers.js +0 -291
  417. package/node_modules/fast-redact/lib/parse.js +0 -44
  418. package/node_modules/fast-redact/lib/redactor.js +0 -108
  419. package/node_modules/fast-redact/lib/restorer.js +0 -92
  420. package/node_modules/fast-redact/lib/rx.js +0 -16
  421. package/node_modules/fast-redact/lib/state.js +0 -20
  422. package/node_modules/fast-redact/lib/validator.js +0 -33
  423. package/node_modules/fast-redact/package.json +0 -50
  424. package/node_modules/fast-redact/readme.md +0 -282
  425. package/node_modules/fast-redact/test/index.js +0 -1502
  426. package/node_modules/ieee754/LICENSE +0 -11
  427. package/node_modules/ieee754/README.md +0 -51
  428. package/node_modules/ieee754/index.d.ts +0 -10
  429. package/node_modules/ieee754/index.js +0 -85
  430. package/node_modules/ieee754/package.json +0 -52
  431. package/node_modules/pino/.eslintignore +0 -2
  432. package/node_modules/pino/.eslintrc +0 -8
  433. package/node_modules/pino/.github/workflows/bench.yml +0 -61
  434. package/node_modules/pino/.github/workflows/ci.yml +0 -86
  435. package/node_modules/pino/.github/workflows/lock-threads.yml +0 -30
  436. package/node_modules/pino/.github/workflows/package-manager-ci.yml +0 -99
  437. package/node_modules/pino/.github/workflows/target-main.yml +0 -23
  438. package/node_modules/pino/.taprc.yaml +0 -8
  439. package/node_modules/pino/docsify/sidebar.md +0 -26
  440. package/node_modules/pino/favicon-16x16.png +0 -0
  441. package/node_modules/pino/favicon-32x32.png +0 -0
  442. package/node_modules/pino/lib/worker-pipeline.js +0 -38
  443. package/node_modules/pino/node_modules/sonic-boom/.eslintignore +0 -2
  444. package/node_modules/pino/node_modules/sonic-boom/.husky/pre-commit +0 -4
  445. package/node_modules/pino/node_modules/sonic-boom/.taprc.yaml +0 -11
  446. package/node_modules/pino/node_modules/sonic-boom/LICENSE +0 -21
  447. package/node_modules/pino/node_modules/sonic-boom/README.md +0 -151
  448. package/node_modules/pino/node_modules/sonic-boom/bench.js +0 -98
  449. package/node_modules/pino/node_modules/sonic-boom/check.js +0 -18
  450. package/node_modules/pino/node_modules/sonic-boom/example.js +0 -8
  451. package/node_modules/pino/node_modules/sonic-boom/fixtures/firehose.js +0 -22
  452. package/node_modules/pino/node_modules/sonic-boom/index.js +0 -690
  453. package/node_modules/pino/node_modules/sonic-boom/package.json +0 -50
  454. package/node_modules/pino/node_modules/sonic-boom/test/destroy.test.js +0 -49
  455. package/node_modules/pino/node_modules/sonic-boom/test/end.test.js +0 -98
  456. package/node_modules/pino/node_modules/sonic-boom/test/flush-sync.test.js +0 -140
  457. package/node_modules/pino/node_modules/sonic-boom/test/flush.test.js +0 -419
  458. package/node_modules/pino/node_modules/sonic-boom/test/fsync.test.js +0 -63
  459. package/node_modules/pino/node_modules/sonic-boom/test/helper.js +0 -42
  460. package/node_modules/pino/node_modules/sonic-boom/test/minlength.test.js +0 -35
  461. package/node_modules/pino/node_modules/sonic-boom/test/mode.test.js +0 -116
  462. package/node_modules/pino/node_modules/sonic-boom/test/reopen.test.js +0 -239
  463. package/node_modules/pino/node_modules/sonic-boom/test/retry.test.js +0 -414
  464. package/node_modules/pino/node_modules/sonic-boom/test/sync.test.js +0 -261
  465. package/node_modules/pino/node_modules/sonic-boom/test/write.test.js +0 -465
  466. package/node_modules/pino/node_modules/sonic-boom/types/index.d.ts +0 -62
  467. package/node_modules/pino/node_modules/sonic-boom/types/tests/test.ts +0 -4
  468. package/node_modules/pino/pino-banner.png +0 -0
  469. package/node_modules/pino/pino-logo-hire.png +0 -0
  470. package/node_modules/pino/pino-tree.png +0 -0
  471. package/node_modules/pino/pretty-demo.png +0 -0
  472. package/node_modules/pino/test/errorKey.test.js +0 -34
  473. package/node_modules/pino/test/transport/core.test.ts +0 -236
  474. package/node_modules/pino-std-serializers/.taprc +0 -2
  475. package/node_modules/process/.eslintrc +0 -21
  476. package/node_modules/process/LICENSE +0 -22
  477. package/node_modules/process/README.md +0 -26
  478. package/node_modules/process/browser.js +0 -184
  479. package/node_modules/process/index.js +0 -2
  480. package/node_modules/process/package.json +0 -27
  481. package/node_modules/process/test.js +0 -199
  482. package/node_modules/process-warning/.taprc +0 -2
  483. package/node_modules/readable-stream/LICENSE +0 -47
  484. package/node_modules/readable-stream/README.md +0 -116
  485. package/node_modules/readable-stream/lib/_stream_duplex.js +0 -4
  486. package/node_modules/readable-stream/lib/_stream_passthrough.js +0 -4
  487. package/node_modules/readable-stream/lib/_stream_readable.js +0 -4
  488. package/node_modules/readable-stream/lib/_stream_transform.js +0 -4
  489. package/node_modules/readable-stream/lib/_stream_writable.js +0 -4
  490. package/node_modules/readable-stream/lib/internal/streams/add-abort-signal.js +0 -52
  491. package/node_modules/readable-stream/lib/internal/streams/buffer_list.js +0 -157
  492. package/node_modules/readable-stream/lib/internal/streams/compose.js +0 -194
  493. package/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -290
  494. package/node_modules/readable-stream/lib/internal/streams/duplex.js +0 -143
  495. package/node_modules/readable-stream/lib/internal/streams/duplexify.js +0 -378
  496. package/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +0 -286
  497. package/node_modules/readable-stream/lib/internal/streams/from.js +0 -98
  498. package/node_modules/readable-stream/lib/internal/streams/lazy_transform.js +0 -51
  499. package/node_modules/readable-stream/lib/internal/streams/legacy.js +0 -89
  500. package/node_modules/readable-stream/lib/internal/streams/operators.js +0 -457
  501. package/node_modules/readable-stream/lib/internal/streams/passthrough.js +0 -39
  502. package/node_modules/readable-stream/lib/internal/streams/pipeline.js +0 -471
  503. package/node_modules/readable-stream/lib/internal/streams/readable.js +0 -1290
  504. package/node_modules/readable-stream/lib/internal/streams/state.js +0 -39
  505. package/node_modules/readable-stream/lib/internal/streams/transform.js +0 -180
  506. package/node_modules/readable-stream/lib/internal/streams/utils.js +0 -327
  507. package/node_modules/readable-stream/lib/internal/streams/writable.js +0 -819
  508. package/node_modules/readable-stream/lib/internal/validators.js +0 -530
  509. package/node_modules/readable-stream/lib/ours/browser.js +0 -35
  510. package/node_modules/readable-stream/lib/ours/errors.js +0 -343
  511. package/node_modules/readable-stream/lib/ours/index.js +0 -65
  512. package/node_modules/readable-stream/lib/ours/primordials.js +0 -124
  513. package/node_modules/readable-stream/lib/ours/util/inspect.js +0 -55
  514. package/node_modules/readable-stream/lib/ours/util.js +0 -148
  515. package/node_modules/readable-stream/lib/stream/promises.js +0 -43
  516. package/node_modules/readable-stream/lib/stream.js +0 -143
  517. package/node_modules/readable-stream/package.json +0 -88
  518. package/node_modules/safe-buffer/LICENSE +0 -21
  519. package/node_modules/safe-buffer/README.md +0 -584
  520. package/node_modules/safe-buffer/index.d.ts +0 -187
  521. package/node_modules/safe-buffer/index.js +0 -65
  522. package/node_modules/safe-buffer/package.json +0 -51
  523. package/node_modules/string_decoder/LICENSE +0 -48
  524. package/node_modules/string_decoder/README.md +0 -47
  525. package/node_modules/string_decoder/lib/string_decoder.js +0 -296
  526. package/node_modules/string_decoder/package.json +0 -34
@@ -0,0 +1,390 @@
1
+ const { test } = require('node:test')
2
+ const { strict: assert } = require('node:assert')
3
+ const slowRedact = require('../index.js')
4
+ const fastRedact = require('fast-redact')
5
+
6
+ test('integration: basic path redaction matches fast-redact', () => {
7
+ const obj = {
8
+ headers: {
9
+ cookie: 'secret-cookie',
10
+ authorization: 'Bearer token'
11
+ },
12
+ body: { message: 'hello' }
13
+ }
14
+
15
+ const slowResult = slowRedact({ paths: ['headers.cookie'] })(obj)
16
+ const fastResult = fastRedact({ paths: ['headers.cookie'] })(obj)
17
+
18
+ assert.strictEqual(slowResult, fastResult)
19
+ })
20
+
21
+ test('integration: multiple paths match fast-redact', () => {
22
+ const obj = {
23
+ user: { name: 'john', password: 'secret' },
24
+ session: { token: 'abc123' }
25
+ }
26
+
27
+ const paths = ['user.password', 'session.token']
28
+ const slowResult = slowRedact({ paths })(obj)
29
+ const fastResult = fastRedact({ paths })(obj)
30
+
31
+ assert.strictEqual(slowResult, fastResult)
32
+ })
33
+
34
+ test('integration: custom censor value matches fast-redact', () => {
35
+ const obj = { secret: 'hidden' }
36
+ const options = { paths: ['secret'], censor: '***' }
37
+
38
+ const slowResult = slowRedact(options)(obj)
39
+ const fastResult = fastRedact(options)(obj)
40
+
41
+ assert.strictEqual(slowResult, fastResult)
42
+ })
43
+
44
+ test('integration: bracket notation matches fast-redact', () => {
45
+ const obj = {
46
+ 'weird-key': { 'another-weird': 'secret' },
47
+ normal: 'public'
48
+ }
49
+
50
+ const options = { paths: ['["weird-key"]["another-weird"]'] }
51
+ const slowResult = slowRedact(options)(obj)
52
+ const fastResult = fastRedact(options)(obj)
53
+
54
+ assert.strictEqual(slowResult, fastResult)
55
+ })
56
+
57
+ test('integration: array paths match fast-redact', () => {
58
+ const obj = {
59
+ users: [
60
+ { name: 'john', password: 'secret1' },
61
+ { name: 'jane', password: 'secret2' }
62
+ ]
63
+ }
64
+
65
+ const options = { paths: ['users[0].password', 'users[1].password'] }
66
+ const slowResult = slowRedact(options)(obj)
67
+ const fastResult = fastRedact(options)(obj)
68
+
69
+ assert.strictEqual(slowResult, fastResult)
70
+ })
71
+
72
+ test('integration: wildcard at end matches fast-redact', () => {
73
+ const obj = {
74
+ secrets: {
75
+ key1: 'secret1',
76
+ key2: 'secret2'
77
+ },
78
+ public: 'data'
79
+ }
80
+
81
+ const options = { paths: ['secrets.*'] }
82
+ const slowResult = slowRedact(options)(obj)
83
+ const fastResult = fastRedact(options)(obj)
84
+
85
+ assert.strictEqual(slowResult, fastResult)
86
+ })
87
+
88
+ test('integration: wildcard with arrays matches fast-redact', () => {
89
+ const obj = {
90
+ items: ['secret1', 'secret2', 'secret3']
91
+ }
92
+
93
+ const options = { paths: ['items.*'] }
94
+ const slowResult = slowRedact(options)(obj)
95
+ const fastResult = fastRedact(options)(obj)
96
+
97
+ assert.strictEqual(slowResult, fastResult)
98
+ })
99
+
100
+ test('integration: intermediate wildcard matches fast-redact', () => {
101
+ const obj = {
102
+ users: {
103
+ user1: { password: 'secret1' },
104
+ user2: { password: 'secret2' }
105
+ }
106
+ }
107
+
108
+ const options = { paths: ['users.*.password'] }
109
+ const slowResult = slowRedact(options)(obj)
110
+ const fastResult = fastRedact(options)(obj)
111
+
112
+ assert.strictEqual(slowResult, fastResult)
113
+ })
114
+
115
+ test('integration: custom serialize function matches fast-redact', () => {
116
+ const obj = { secret: 'hidden', public: 'data' }
117
+ const options = {
118
+ paths: ['secret'],
119
+ serialize: (obj) => `custom:${JSON.stringify(obj)}`
120
+ }
121
+
122
+ const slowResult = slowRedact(options)(obj)
123
+ const fastResult = fastRedact(options)(obj)
124
+
125
+ assert.strictEqual(slowResult, fastResult)
126
+ })
127
+
128
+ test('integration: nested paths match fast-redact', () => {
129
+ const obj = {
130
+ level1: {
131
+ level2: {
132
+ level3: {
133
+ secret: 'hidden'
134
+ }
135
+ }
136
+ }
137
+ }
138
+
139
+ const options = { paths: ['level1.level2.level3.secret'] }
140
+ const slowResult = slowRedact(options)(obj)
141
+ const fastResult = fastRedact(options)(obj)
142
+
143
+ assert.strictEqual(slowResult, fastResult)
144
+ })
145
+
146
+ test('integration: non-existent paths match fast-redact', () => {
147
+ const obj = { existing: 'value' }
148
+ const options = { paths: ['nonexistent.path'] }
149
+
150
+ const slowResult = slowRedact(options)(obj)
151
+ const fastResult = fastRedact(options)(obj)
152
+
153
+ assert.strictEqual(slowResult, fastResult)
154
+ })
155
+
156
+ test('integration: null and undefined handling - legitimate difference', () => {
157
+ const obj = {
158
+ nullValue: null,
159
+ undefinedValue: undefined,
160
+ nested: {
161
+ nullValue: null
162
+ }
163
+ }
164
+
165
+ const options = { paths: ['nullValue', 'nested.nullValue'] }
166
+ const slowResult = slowRedact(options)(obj)
167
+ const fastResult = fastRedact(options)(obj)
168
+
169
+ // This is a legitimate behavioral difference:
170
+ // @pinojs/redact redacts null values, fast-redact doesn't
171
+ const slowParsed = JSON.parse(slowResult)
172
+ const fastParsed = JSON.parse(fastResult)
173
+
174
+ // @pinojs/redact redacts nulls
175
+ assert.strictEqual(slowParsed.nullValue, '[REDACTED]')
176
+ assert.strictEqual(slowParsed.nested.nullValue, '[REDACTED]')
177
+
178
+ // fast-redact preserves nulls
179
+ assert.strictEqual(fastParsed.nullValue, null)
180
+ assert.strictEqual(fastParsed.nested.nullValue, null)
181
+ })
182
+
183
+ test('integration: strict mode with primitives - different error handling', () => {
184
+ const options = { paths: ['test'], strict: true }
185
+
186
+ const slowRedactFn = slowRedact(options)
187
+ const fastRedactFn = fastRedact(options)
188
+
189
+ // @pinojs/redact handles primitives gracefully
190
+ const stringSlowResult = slowRedactFn('primitive')
191
+ assert.strictEqual(stringSlowResult, '"primitive"')
192
+
193
+ const numberSlowResult = slowRedactFn(42)
194
+ assert.strictEqual(numberSlowResult, '42')
195
+
196
+ // fast-redact throws an error for primitives in strict mode
197
+ assert.throws(() => {
198
+ fastRedactFn('primitive')
199
+ }, /primitives cannot be redacted/)
200
+
201
+ assert.throws(() => {
202
+ fastRedactFn(42)
203
+ }, /primitives cannot be redacted/)
204
+ })
205
+
206
+ test('integration: serialize false behavior difference', () => {
207
+ const slowObj = { secret: 'hidden' }
208
+ const fastObj = { secret: 'hidden' }
209
+ const options = { paths: ['secret'], serialize: false }
210
+
211
+ const slowResult = slowRedact(options)(slowObj)
212
+ const fastResult = fastRedact(options)(fastObj)
213
+
214
+ // Both should redact the secret
215
+ assert.strictEqual(slowResult.secret, '[REDACTED]')
216
+ assert.strictEqual(fastResult.secret, '[REDACTED]')
217
+
218
+ // @pinojs/redact always has restore method
219
+ assert.strictEqual(typeof slowResult.restore, 'function')
220
+
221
+ // @pinojs/redact should restore to original value
222
+ assert.strictEqual(slowResult.restore().secret, 'hidden')
223
+
224
+ // Key difference: original object state
225
+ // fast-redact mutates the original, @pinojs/redact doesn't
226
+ assert.strictEqual(slowObj.secret, 'hidden') // @pinojs/redact preserves original
227
+ assert.strictEqual(fastObj.secret, '[REDACTED]') // fast-redact mutates original
228
+ })
229
+
230
+ test('integration: censor function behavior', () => {
231
+ const obj = { secret: 'hidden' }
232
+ const options = {
233
+ paths: ['secret'],
234
+ censor: (value, path) => `REDACTED:${path}`
235
+ }
236
+
237
+ const slowResult = slowRedact(options)(obj)
238
+ const fastResult = fastRedact(options)(obj)
239
+
240
+ assert.strictEqual(slowResult, fastResult)
241
+ })
242
+
243
+ test('integration: complex object with mixed patterns', () => {
244
+ const obj = {
245
+ users: [
246
+ {
247
+ id: 1,
248
+ name: 'john',
249
+ credentials: { password: 'secret1', apiKey: 'key1' }
250
+ },
251
+ {
252
+ id: 2,
253
+ name: 'jane',
254
+ credentials: { password: 'secret2', apiKey: 'key2' }
255
+ }
256
+ ],
257
+ config: {
258
+ database: { password: 'db-secret' },
259
+ api: { keys: ['key1', 'key2', 'key3'] }
260
+ }
261
+ }
262
+
263
+ const options = {
264
+ paths: [
265
+ 'users.*.credentials.password',
266
+ 'users.*.credentials.apiKey',
267
+ 'config.database.password',
268
+ 'config.api.keys.*'
269
+ ]
270
+ }
271
+
272
+ const slowResult = slowRedact(options)(obj)
273
+ const fastResult = fastRedact(options)(obj)
274
+
275
+ assert.strictEqual(slowResult, fastResult)
276
+ })
277
+
278
+ // Remove option integration tests - comparing with fast-redact
279
+ test('integration: remove option basic comparison with fast-redact', () => {
280
+ const obj = { username: 'john', password: 'secret123' }
281
+ const options = { paths: ['password'], remove: true }
282
+
283
+ const slowResult = slowRedact(options)(obj)
284
+ const fastResult = fastRedact(options)(obj)
285
+
286
+ assert.strictEqual(slowResult, fastResult)
287
+
288
+ // Verify the key is actually removed
289
+ const parsed = JSON.parse(slowResult)
290
+ assert.strictEqual(parsed.username, 'john')
291
+ assert.strictEqual('password' in parsed, false)
292
+ })
293
+
294
+ test('integration: remove option multiple paths comparison with fast-redact', () => {
295
+ const obj = {
296
+ user: { name: 'john', password: 'secret' },
297
+ session: { token: 'abc123', id: 'session1' }
298
+ }
299
+
300
+ const options = {
301
+ paths: ['user.password', 'session.token'],
302
+ remove: true
303
+ }
304
+
305
+ const slowResult = slowRedact(options)(obj)
306
+ const fastResult = fastRedact(options)(obj)
307
+
308
+ assert.strictEqual(slowResult, fastResult)
309
+ })
310
+
311
+ test('integration: remove option wildcard comparison with fast-redact', () => {
312
+ const obj = {
313
+ secrets: {
314
+ key1: 'secret1',
315
+ key2: 'secret2'
316
+ },
317
+ public: 'data'
318
+ }
319
+
320
+ const options = {
321
+ paths: ['secrets.*'],
322
+ remove: true
323
+ }
324
+
325
+ const slowResult = slowRedact(options)(obj)
326
+ const fastResult = fastRedact(options)(obj)
327
+
328
+ assert.strictEqual(slowResult, fastResult)
329
+ })
330
+
331
+ test('integration: remove option intermediate wildcard comparison with fast-redact', () => {
332
+ const obj = {
333
+ users: {
334
+ user1: { password: 'secret1', name: 'john' },
335
+ user2: { password: 'secret2', name: 'jane' }
336
+ }
337
+ }
338
+
339
+ const options = {
340
+ paths: ['users.*.password'],
341
+ remove: true
342
+ }
343
+
344
+ const slowResult = slowRedact(options)(obj)
345
+ const fastResult = fastRedact(options)(obj)
346
+
347
+ assert.strictEqual(slowResult, fastResult)
348
+ })
349
+
350
+ test('integration: remove option with custom censor comparison with fast-redact', () => {
351
+ const obj = { secret: 'hidden', public: 'data' }
352
+ const options = {
353
+ paths: ['secret'],
354
+ censor: '***',
355
+ remove: true
356
+ }
357
+
358
+ const slowResult = slowRedact(options)(obj)
359
+ const fastResult = fastRedact(options)(obj)
360
+
361
+ assert.strictEqual(slowResult, fastResult)
362
+
363
+ // With remove: true, censor value should be ignored
364
+ const parsed = JSON.parse(slowResult)
365
+ assert.strictEqual('secret' in parsed, false)
366
+ assert.strictEqual(parsed.public, 'data')
367
+ })
368
+
369
+ test('integration: remove option serialize false behavior - @pinojs/redact only', () => {
370
+ // fast-redact doesn't support remove option with serialize: false
371
+ // so we test @pinojs/redact's behavior only
372
+ const obj = { secret: 'hidden', public: 'data' }
373
+ const options = { paths: ['secret'], remove: true, serialize: false }
374
+
375
+ const result = slowRedact(options)(obj)
376
+
377
+ // Should have the key removed
378
+ assert.strictEqual('secret' in result, false)
379
+ assert.strictEqual(result.public, 'data')
380
+
381
+ // Should have restore method
382
+ assert.strictEqual(typeof result.restore, 'function')
383
+
384
+ // Original object should be preserved
385
+ assert.strictEqual(obj.secret, 'hidden')
386
+
387
+ // Restore should bring back the removed key
388
+ const restored = result.restore()
389
+ assert.strictEqual(restored.secret, 'hidden')
390
+ })
@@ -0,0 +1,227 @@
1
+ 'use strict'
2
+
3
+ const { test } = require('node:test')
4
+ const { strict: assert } = require('node:assert')
5
+ const slowRedact = require('../index.js')
6
+
7
+ // Tests for Issue #2319: @pinojs/redact fails to redact patterns with 3+ consecutive wildcards
8
+ test('three consecutive wildcards: *.*.*.password (4 levels deep)', () => {
9
+ const obj = {
10
+ simple: { password: 'secret-2-levels' },
11
+ user: { auth: { password: 'secret-3-levels' } },
12
+ nested: { deep: { auth: { password: 'secret-4-levels' } } }
13
+ }
14
+
15
+ const redact = slowRedact({
16
+ paths: ['*.*.*.password']
17
+ })
18
+ const result = redact(obj)
19
+ const parsed = JSON.parse(result)
20
+
21
+ // Only the 4-level deep password should be redacted
22
+ assert.strictEqual(parsed.simple.password, 'secret-2-levels', '2-level password should NOT be redacted')
23
+ assert.strictEqual(parsed.user.auth.password, 'secret-3-levels', '3-level password should NOT be redacted')
24
+ assert.strictEqual(parsed.nested.deep.auth.password, '[REDACTED]', '4-level password SHOULD be redacted')
25
+ })
26
+
27
+ test('four consecutive wildcards: *.*.*.*.password (5 levels deep)', () => {
28
+ const obj = {
29
+ simple: { password: 'secret-2-levels' },
30
+ user: { auth: { password: 'secret-3-levels' } },
31
+ nested: { deep: { auth: { password: 'secret-4-levels' } } },
32
+ config: { user: { auth: { settings: { password: 'secret-5-levels' } } } }
33
+ }
34
+
35
+ const redact = slowRedact({
36
+ paths: ['*.*.*.*.password']
37
+ })
38
+ const result = redact(obj)
39
+ const parsed = JSON.parse(result)
40
+
41
+ // Only the 5-level deep password should be redacted
42
+ assert.strictEqual(parsed.simple.password, 'secret-2-levels', '2-level password should NOT be redacted')
43
+ assert.strictEqual(parsed.user.auth.password, 'secret-3-levels', '3-level password should NOT be redacted')
44
+ assert.strictEqual(parsed.nested.deep.auth.password, 'secret-4-levels', '4-level password should NOT be redacted')
45
+ assert.strictEqual(parsed.config.user.auth.settings.password, '[REDACTED]', '5-level password SHOULD be redacted')
46
+ })
47
+
48
+ test('five consecutive wildcards: *.*.*.*.*.password (6 levels deep)', () => {
49
+ const obj = {
50
+ simple: { password: 'secret-2-levels' },
51
+ user: { auth: { password: 'secret-3-levels' } },
52
+ nested: { deep: { auth: { password: 'secret-4-levels' } } },
53
+ config: { user: { auth: { settings: { password: 'secret-5-levels' } } } },
54
+ data: {
55
+ reqConfig: {
56
+ data: {
57
+ credentials: {
58
+ settings: {
59
+ password: 'secret-6-levels'
60
+ }
61
+ }
62
+ }
63
+ }
64
+ }
65
+ }
66
+
67
+ const redact = slowRedact({
68
+ paths: ['*.*.*.*.*.password']
69
+ })
70
+ const result = redact(obj)
71
+ const parsed = JSON.parse(result)
72
+
73
+ // Only the 6-level deep password should be redacted
74
+ assert.strictEqual(parsed.simple.password, 'secret-2-levels', '2-level password should NOT be redacted')
75
+ assert.strictEqual(parsed.user.auth.password, 'secret-3-levels', '3-level password should NOT be redacted')
76
+ assert.strictEqual(parsed.nested.deep.auth.password, 'secret-4-levels', '4-level password should NOT be redacted')
77
+ assert.strictEqual(parsed.config.user.auth.settings.password, 'secret-5-levels', '5-level password should NOT be redacted')
78
+ assert.strictEqual(parsed.data.reqConfig.data.credentials.settings.password, '[REDACTED]', '6-level password SHOULD be redacted')
79
+ })
80
+
81
+ test('three wildcards with censor function receives correct values', () => {
82
+ const obj = {
83
+ nested: { deep: { auth: { password: 'secret-value' } } }
84
+ }
85
+
86
+ const censorCalls = []
87
+ const redact = slowRedact({
88
+ paths: ['*.*.*.password'],
89
+ censor: (value, path) => {
90
+ censorCalls.push({ value, path: [...path] })
91
+ return '[REDACTED]'
92
+ }
93
+ })
94
+
95
+ const result = redact(obj)
96
+ const parsed = JSON.parse(result)
97
+
98
+ // Should have been called exactly once with the correct value
99
+ assert.strictEqual(censorCalls.length, 1, 'censor should be called once')
100
+ assert.strictEqual(censorCalls[0].value, 'secret-value', 'censor should receive the actual value')
101
+ assert.deepStrictEqual(censorCalls[0].path, ['nested', 'deep', 'auth', 'password'], 'censor should receive correct path')
102
+ assert.strictEqual(parsed.nested.deep.auth.password, '[REDACTED]')
103
+ })
104
+
105
+ test('three wildcards with multiple matches', () => {
106
+ const obj = {
107
+ api1: { v1: { auth: { token: 'token1' } } },
108
+ api2: { v2: { auth: { token: 'token2' } } },
109
+ api3: { v1: { auth: { token: 'token3' } } }
110
+ }
111
+
112
+ const redact = slowRedact({
113
+ paths: ['*.*.*.token']
114
+ })
115
+ const result = redact(obj)
116
+ const parsed = JSON.parse(result)
117
+
118
+ // All three tokens should be redacted
119
+ assert.strictEqual(parsed.api1.v1.auth.token, '[REDACTED]')
120
+ assert.strictEqual(parsed.api2.v2.auth.token, '[REDACTED]')
121
+ assert.strictEqual(parsed.api3.v1.auth.token, '[REDACTED]')
122
+ })
123
+
124
+ test('three wildcards with remove option', () => {
125
+ const obj = {
126
+ nested: { deep: { auth: { password: 'secret', username: 'admin' } } }
127
+ }
128
+
129
+ const redact = slowRedact({
130
+ paths: ['*.*.*.password'],
131
+ remove: true
132
+ })
133
+ const result = redact(obj)
134
+ const parsed = JSON.parse(result)
135
+
136
+ // Password should be removed entirely
137
+ assert.strictEqual('password' in parsed.nested.deep.auth, false, 'password key should be removed')
138
+ assert.strictEqual(parsed.nested.deep.auth.username, 'admin', 'username should remain')
139
+ })
140
+
141
+ test('mixed: two and three wildcards in same redactor', () => {
142
+ const obj = {
143
+ user: { auth: { password: 'secret-3-levels' } },
144
+ config: { deep: { auth: { password: 'secret-4-levels' } } }
145
+ }
146
+
147
+ const redact = slowRedact({
148
+ paths: ['*.*.password', '*.*.*.password']
149
+ })
150
+ const result = redact(obj)
151
+ const parsed = JSON.parse(result)
152
+
153
+ // Both should be redacted
154
+ assert.strictEqual(parsed.user.auth.password, '[REDACTED]', '3-level should be redacted by *.*.password')
155
+ assert.strictEqual(parsed.config.deep.auth.password, '[REDACTED]', '4-level should be redacted by *.*.*.password')
156
+ })
157
+
158
+ test('three wildcards should not call censor for non-existent paths', () => {
159
+ const obj = {
160
+ shallow: { data: 'value' },
161
+ nested: { deep: { auth: { password: 'secret' } } }
162
+ }
163
+
164
+ let censorCallCount = 0
165
+ const redact = slowRedact({
166
+ paths: ['*.*.*.password'],
167
+ censor: (value, path) => {
168
+ censorCallCount++
169
+ return '[REDACTED]'
170
+ }
171
+ })
172
+
173
+ redact(obj)
174
+
175
+ // Should only be called once for the path that exists
176
+ assert.strictEqual(censorCallCount, 1, 'censor should only be called for existing paths')
177
+ })
178
+
179
+ test('three wildcards with arrays', () => {
180
+ const obj = {
181
+ users: [
182
+ { auth: { password: 'secret1' } },
183
+ { auth: { password: 'secret2' } }
184
+ ]
185
+ }
186
+
187
+ const redact = slowRedact({
188
+ paths: ['*.*.*.password']
189
+ })
190
+ const result = redact(obj)
191
+ const parsed = JSON.parse(result)
192
+
193
+ // Both passwords should be redacted (users[0].auth.password is 4 levels)
194
+ assert.strictEqual(parsed.users[0].auth.password, '[REDACTED]')
195
+ assert.strictEqual(parsed.users[1].auth.password, '[REDACTED]')
196
+ })
197
+
198
+ test('four wildcards with authorization header (real-world case)', () => {
199
+ const obj = {
200
+ requests: {
201
+ api1: {
202
+ config: {
203
+ headers: {
204
+ authorization: 'Bearer secret-token'
205
+ }
206
+ }
207
+ },
208
+ api2: {
209
+ config: {
210
+ headers: {
211
+ authorization: 'Bearer another-token'
212
+ }
213
+ }
214
+ }
215
+ }
216
+ }
217
+
218
+ const redact = slowRedact({
219
+ paths: ['*.*.*.*.authorization']
220
+ })
221
+ const result = redact(obj)
222
+ const parsed = JSON.parse(result)
223
+
224
+ // Both authorization headers should be redacted
225
+ assert.strictEqual(parsed.requests.api1.config.headers.authorization, '[REDACTED]')
226
+ assert.strictEqual(parsed.requests.api2.config.headers.authorization, '[REDACTED]')
227
+ })