@wbce/projen-d9 0.0.28 → 0.1.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 (421) hide show
  1. package/.jsii +184 -45
  2. package/API.md +153 -37
  3. package/CHANGELOG.md +13 -0
  4. package/README.md +10 -3
  5. package/docs/D9-plumbing.md +189 -0
  6. package/lib/cli/atlas.d.ts +10 -0
  7. package/lib/cli/atlas.js +65 -0
  8. package/lib/cli/commands/cedar/cedar-format.d.ts +7 -0
  9. package/lib/cli/commands/cedar/cedar-format.js +75 -0
  10. package/lib/cli/commands/cedar/cedar-to-d9-translations.d.ts +12 -0
  11. package/lib/cli/commands/cedar/cedar-to-d9-translations.js +130 -0
  12. package/lib/cli/commands/cedar/cedar-to-d9.d.ts +57 -0
  13. package/lib/cli/commands/cedar/cedar-to-d9.js +221 -0
  14. package/lib/cli/commands/cedar/cedar-translations.d.ts +9 -0
  15. package/lib/cli/commands/cedar/cedar-translations.js +213 -0
  16. package/lib/cli/commands/cedar/d9-permission.d.ts +27 -0
  17. package/lib/cli/commands/cedar/d9-permission.js +45 -0
  18. package/lib/cli/commands/cedar/d9-to-cedar.d.ts +33 -0
  19. package/lib/cli/commands/cedar/d9-to-cedar.js +157 -0
  20. package/lib/cli/commands/cedar/roles-table.d.ts +14 -0
  21. package/lib/cli/commands/cedar/roles-table.js +29 -0
  22. package/lib/cli/commands/save/apply-snapshot.js +39 -30
  23. package/lib/cli/commands/save/check-unsaved.d.ts +9 -0
  24. package/lib/cli/commands/save/check-unsaved.js +81 -0
  25. package/lib/cli/commands/save/env.d.ts +33 -0
  26. package/lib/cli/commands/save/env.js +109 -0
  27. package/lib/cli/commands/save/save-snapshot.d.ts +9 -0
  28. package/lib/cli/commands/save/save-snapshot.js +232 -0
  29. package/lib/cli/commands/save/sync-files.d.ts +5 -0
  30. package/lib/cli/commands/save/sync-files.js +46 -0
  31. package/lib/cli/commands/save/transfer.d.ts +18 -0
  32. package/lib/cli/commands/save/transfer.js +96 -0
  33. package/lib/cli/commands/save/utils.d.ts +5 -0
  34. package/lib/cli/commands/save/utils.js +33 -3
  35. package/lib/cli/commands/sync.js +4 -3
  36. package/lib/cli/index.js +65 -25
  37. package/lib/cli/logger.d.ts +2 -0
  38. package/lib/cli/logger.js +10 -0
  39. package/lib/cli/plumbing-config.d.ts +11 -0
  40. package/lib/cli/plumbing-config.js +13 -0
  41. package/lib/index.d.ts +44 -5
  42. package/lib/index.js +54 -41
  43. package/node_modules/@cedar-policy/cedar-wasm/README.md +181 -0
  44. package/node_modules/@cedar-policy/cedar-wasm/esm/README.md +181 -0
  45. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm.d.ts +427 -0
  46. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm.js +9 -0
  47. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm_bg.js +434 -0
  48. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm_bg.wasm +0 -0
  49. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm_bg.wasm.d.ts +34 -0
  50. package/node_modules/@cedar-policy/cedar-wasm/esm/package.json +23 -0
  51. package/node_modules/@cedar-policy/cedar-wasm/nodejs/README.md +181 -0
  52. package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm.d.ts +427 -0
  53. package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm.js +463 -0
  54. package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm_bg.wasm +0 -0
  55. package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm_bg.wasm.d.ts +34 -0
  56. package/node_modules/@cedar-policy/cedar-wasm/nodejs/package.json +18 -0
  57. package/node_modules/@cedar-policy/cedar-wasm/package.json +53 -0
  58. package/node_modules/@cedar-policy/cedar-wasm/web/README.md +181 -0
  59. package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm.d.ts +486 -0
  60. package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm.js +534 -0
  61. package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm_bg.wasm +0 -0
  62. package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm_bg.wasm.d.ts +34 -0
  63. package/node_modules/@cedar-policy/cedar-wasm/web/package.json +21 -0
  64. package/node_modules/@types/node/README.md +5 -6
  65. package/node_modules/@types/node/assert/strict.d.ts +111 -0
  66. package/node_modules/@types/node/assert.d.ts +1040 -79
  67. package/node_modules/@types/node/async_hooks.d.ts +476 -119
  68. package/node_modules/@types/node/buffer.buffer.d.ts +472 -0
  69. package/node_modules/@types/node/buffer.d.ts +1925 -13
  70. package/node_modules/@types/node/child_process.d.ts +1204 -235
  71. package/node_modules/@types/node/cluster.d.ts +455 -137
  72. package/node_modules/@types/node/compatibility/disposable.d.ts +14 -0
  73. package/node_modules/@types/node/compatibility/index.d.ts +9 -0
  74. package/node_modules/@types/node/compatibility/indexable.d.ts +20 -0
  75. package/node_modules/@types/node/compatibility/iterators.d.ts +20 -0
  76. package/node_modules/@types/node/console.d.ts +450 -1
  77. package/node_modules/@types/node/constants.d.ts +20 -447
  78. package/node_modules/@types/node/crypto.d.ts +3962 -600
  79. package/node_modules/@types/node/dgram.d.ts +515 -33
  80. package/node_modules/@types/node/diagnostics_channel.d.ts +578 -0
  81. package/node_modules/@types/node/dns/promises.d.ts +503 -0
  82. package/node_modules/@types/node/dns.d.ts +798 -247
  83. package/node_modules/@types/node/domain.d.ts +164 -10
  84. package/node_modules/@types/node/events.d.ts +954 -25
  85. package/node_modules/@types/node/fs/promises.d.ts +1295 -0
  86. package/node_modules/@types/node/fs.d.ts +3463 -1569
  87. package/node_modules/@types/node/globals.d.ts +98 -1277
  88. package/node_modules/@types/node/globals.typedarray.d.ts +38 -0
  89. package/node_modules/@types/node/http.d.ts +1933 -300
  90. package/node_modules/@types/node/http2.d.ts +1946 -254
  91. package/node_modules/@types/node/https.d.ts +557 -134
  92. package/node_modules/@types/node/index.d.ts +54 -48
  93. package/node_modules/@types/node/inspector.d.ts +227 -3014
  94. package/node_modules/@types/node/inspector.generated.d.ts +4052 -0
  95. package/node_modules/@types/node/module.d.ts +890 -2
  96. package/node_modules/@types/node/net.d.ts +872 -105
  97. package/node_modules/@types/node/os.d.ts +452 -209
  98. package/node_modules/@types/node/package.json +78 -128
  99. package/node_modules/@types/node/path.d.ts +196 -155
  100. package/node_modules/@types/node/perf_hooks.d.ts +829 -120
  101. package/node_modules/@types/node/process.d.ts +2072 -3
  102. package/node_modules/@types/node/punycode.d.ts +69 -27
  103. package/node_modules/@types/node/querystring.d.ts +132 -9
  104. package/node_modules/@types/node/readline/promises.d.ts +161 -0
  105. package/node_modules/@types/node/readline.d.ts +485 -49
  106. package/node_modules/@types/node/repl.d.ts +121 -83
  107. package/node_modules/@types/node/sea.d.ts +153 -0
  108. package/node_modules/@types/node/sqlite.d.ts +721 -0
  109. package/node_modules/@types/node/stream/consumers.d.ts +38 -0
  110. package/node_modules/@types/node/stream/promises.d.ts +90 -0
  111. package/node_modules/@types/node/stream/web.d.ts +622 -0
  112. package/node_modules/@types/node/stream.d.ts +1470 -140
  113. package/node_modules/@types/node/string_decoder.d.ts +64 -4
  114. package/node_modules/@types/node/test.d.ts +2163 -0
  115. package/node_modules/@types/node/timers/promises.d.ts +108 -0
  116. package/node_modules/@types/node/timers.d.ts +284 -13
  117. package/node_modules/@types/node/tls.d.ts +850 -244
  118. package/node_modules/@types/node/trace_events.d.ts +147 -11
  119. package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +468 -0
  120. package/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +34 -0
  121. package/node_modules/@types/node/ts5.6/index.d.ts +97 -0
  122. package/node_modules/@types/node/tty.d.ts +160 -18
  123. package/node_modules/@types/node/url.d.ts +890 -53
  124. package/node_modules/@types/node/util.d.ts +2566 -160
  125. package/node_modules/@types/node/v8.d.ts +806 -83
  126. package/node_modules/@types/node/vm.d.ts +932 -44
  127. package/node_modules/@types/node/wasi.d.ts +148 -22
  128. package/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
  129. package/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  130. package/node_modules/@types/node/web-globals/events.d.ts +97 -0
  131. package/node_modules/@types/node/web-globals/fetch.d.ts +55 -0
  132. package/node_modules/@types/node/web-globals/navigator.d.ts +22 -0
  133. package/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  134. package/node_modules/@types/node/worker_threads.d.ts +657 -80
  135. package/node_modules/@types/node/zlib.d.ts +510 -119
  136. package/node_modules/pino/.nojekyll +0 -0
  137. package/node_modules/pino/.prettierignore +1 -0
  138. package/node_modules/pino/CNAME +1 -0
  139. package/node_modules/pino/CONTRIBUTING.md +34 -0
  140. package/node_modules/pino/LICENSE +21 -0
  141. package/node_modules/pino/README.md +177 -0
  142. package/node_modules/pino/SECURITY.md +103 -0
  143. package/node_modules/pino/benchmarks/basic.bench.js +95 -0
  144. package/node_modules/pino/benchmarks/child-child.bench.js +52 -0
  145. package/node_modules/pino/benchmarks/child-creation.bench.js +73 -0
  146. package/node_modules/pino/benchmarks/child.bench.js +62 -0
  147. package/node_modules/pino/benchmarks/deep-object.bench.js +88 -0
  148. package/node_modules/pino/benchmarks/formatters.bench.js +50 -0
  149. package/node_modules/pino/benchmarks/internal/custom-levels.js +67 -0
  150. package/node_modules/pino/benchmarks/internal/just-pino-heavy.bench.js +76 -0
  151. package/node_modules/pino/benchmarks/internal/just-pino.bench.js +182 -0
  152. package/node_modules/pino/benchmarks/internal/parent-vs-child.bench.js +75 -0
  153. package/node_modules/pino/benchmarks/internal/redact.bench.js +86 -0
  154. package/node_modules/pino/benchmarks/long-string.bench.js +81 -0
  155. package/node_modules/pino/benchmarks/multi-arg.bench.js +193 -0
  156. package/node_modules/pino/benchmarks/multistream.js +98 -0
  157. package/node_modules/pino/benchmarks/object.bench.js +82 -0
  158. package/node_modules/pino/benchmarks/utils/generate-benchmark-doc.js +36 -0
  159. package/node_modules/pino/benchmarks/utils/runbench.js +138 -0
  160. package/node_modules/pino/benchmarks/utils/wrap-log-level.js +55 -0
  161. package/node_modules/pino/bin.js +6 -0
  162. package/node_modules/pino/browser.js +607 -0
  163. package/node_modules/pino/build/sync-version.js +25 -0
  164. package/node_modules/pino/docs/api.md +1664 -0
  165. package/node_modules/pino/docs/asynchronous.md +55 -0
  166. package/node_modules/pino/docs/benchmarks.md +55 -0
  167. package/node_modules/pino/docs/browser.md +341 -0
  168. package/node_modules/pino/docs/bundling.md +40 -0
  169. package/node_modules/pino/docs/child-loggers.md +116 -0
  170. package/node_modules/pino/docs/diagnostics.md +16 -0
  171. package/node_modules/pino/docs/ecosystem.md +87 -0
  172. package/node_modules/pino/docs/help.md +353 -0
  173. package/node_modules/pino/docs/lts.md +93 -0
  174. package/node_modules/pino/docs/pretty.md +38 -0
  175. package/node_modules/pino/docs/redaction.md +130 -0
  176. package/node_modules/pino/docs/transports.md +1447 -0
  177. package/node_modules/pino/docs/web.md +306 -0
  178. package/node_modules/pino/eslint.config.js +36 -0
  179. package/node_modules/pino/examples/basic.js +43 -0
  180. package/node_modules/pino/examples/transport.js +68 -0
  181. package/node_modules/pino/favicon.ico +0 -0
  182. package/node_modules/pino/file.js +12 -0
  183. package/node_modules/pino/inc-version.sh +42 -0
  184. package/node_modules/pino/index.html +55 -0
  185. package/node_modules/pino/lib/caller.js +40 -0
  186. package/node_modules/pino/lib/constants.js +28 -0
  187. package/node_modules/pino/lib/deprecations.js +8 -0
  188. package/node_modules/pino/lib/levels.js +241 -0
  189. package/node_modules/pino/lib/meta.js +3 -0
  190. package/node_modules/pino/lib/multistream.js +211 -0
  191. package/node_modules/pino/lib/proto.js +256 -0
  192. package/node_modules/pino/lib/redaction.js +119 -0
  193. package/node_modules/pino/lib/symbols.js +76 -0
  194. package/node_modules/pino/lib/time.js +39 -0
  195. package/node_modules/pino/lib/tools.js +427 -0
  196. package/node_modules/pino/lib/transport-stream.js +56 -0
  197. package/node_modules/pino/lib/transport.js +302 -0
  198. package/node_modules/pino/lib/worker.js +197 -0
  199. package/node_modules/pino/package.json +112 -0
  200. package/node_modules/pino/pino.d.ts +881 -0
  201. package/node_modules/pino/pino.js +259 -0
  202. package/node_modules/pino/test/basic.test.js +952 -0
  203. package/node_modules/pino/test/broken-pipe.test.js +59 -0
  204. package/node_modules/pino/test/browser-bindings.test.js +114 -0
  205. package/node_modules/pino/test/browser-child.test.js +132 -0
  206. package/node_modules/pino/test/browser-disabled.test.js +87 -0
  207. package/node_modules/pino/test/browser-early-console-freeze.test.js +12 -0
  208. package/node_modules/pino/test/browser-is-level-enabled.test.js +101 -0
  209. package/node_modules/pino/test/browser-levels.test.js +241 -0
  210. package/node_modules/pino/test/browser-redaction.test.js +264 -0
  211. package/node_modules/pino/test/browser-serializers.test.js +352 -0
  212. package/node_modules/pino/test/browser-set-bindings.test.js +99 -0
  213. package/node_modules/pino/test/browser-timestamp.test.js +88 -0
  214. package/node_modules/pino/test/browser-transmit.test.js +417 -0
  215. package/node_modules/pino/test/browser.test.js +698 -0
  216. package/node_modules/pino/test/caller.test.js +20 -0
  217. package/node_modules/pino/test/complex-objects.test.js +36 -0
  218. package/node_modules/pino/test/crlf.test.js +34 -0
  219. package/node_modules/pino/test/custom-levels.test.js +267 -0
  220. package/node_modules/pino/test/diagnostics.test.js +107 -0
  221. package/node_modules/pino/test/error-key.test.js +37 -0
  222. package/node_modules/pino/test/error.test.js +403 -0
  223. package/node_modules/pino/test/escaping.test.js +110 -0
  224. package/node_modules/pino/test/esm/esm.mjs +14 -0
  225. package/node_modules/pino/test/esm/index.test.js +21 -0
  226. package/node_modules/pino/test/esm/named-exports.mjs +29 -0
  227. package/node_modules/pino/test/exit.test.js +79 -0
  228. package/node_modules/pino/test/fixtures/broken-pipe/basic.js +9 -0
  229. package/node_modules/pino/test/fixtures/broken-pipe/destination.js +10 -0
  230. package/node_modules/pino/test/fixtures/broken-pipe/syncfalse.js +12 -0
  231. package/node_modules/pino/test/fixtures/caller-loop.js +6 -0
  232. package/node_modules/pino/test/fixtures/console-transport.js +13 -0
  233. package/node_modules/pino/test/fixtures/crashing-transport.js +13 -0
  234. package/node_modules/pino/test/fixtures/default-exit.js +8 -0
  235. package/node_modules/pino/test/fixtures/destination-exit.js +8 -0
  236. package/node_modules/pino/test/fixtures/eval/index.js +13 -0
  237. package/node_modules/pino/test/fixtures/eval/node_modules/14-files.js +3 -0
  238. package/node_modules/pino/test/fixtures/eval/node_modules/2-files.js +3 -0
  239. package/node_modules/pino/test/fixtures/eval/node_modules/file1.js +5 -0
  240. package/node_modules/pino/test/fixtures/eval/node_modules/file10.js +5 -0
  241. package/node_modules/pino/test/fixtures/eval/node_modules/file11.js +5 -0
  242. package/node_modules/pino/test/fixtures/eval/node_modules/file12.js +5 -0
  243. package/node_modules/pino/test/fixtures/eval/node_modules/file13.js +5 -0
  244. package/node_modules/pino/test/fixtures/eval/node_modules/file14.js +11 -0
  245. package/node_modules/pino/test/fixtures/eval/node_modules/file2.js +5 -0
  246. package/node_modules/pino/test/fixtures/eval/node_modules/file3.js +5 -0
  247. package/node_modules/pino/test/fixtures/eval/node_modules/file4.js +5 -0
  248. package/node_modules/pino/test/fixtures/eval/node_modules/file5.js +5 -0
  249. package/node_modules/pino/test/fixtures/eval/node_modules/file6.js +5 -0
  250. package/node_modules/pino/test/fixtures/eval/node_modules/file7.js +5 -0
  251. package/node_modules/pino/test/fixtures/eval/node_modules/file8.js +5 -0
  252. package/node_modules/pino/test/fixtures/eval/node_modules/file9.js +5 -0
  253. package/node_modules/pino/test/fixtures/noop-transport.js +10 -0
  254. package/node_modules/pino/test/fixtures/pretty/null-prototype.js +8 -0
  255. package/node_modules/pino/test/fixtures/stdout-hack-protection.js +11 -0
  256. package/node_modules/pino/test/fixtures/syncfalse-child.js +6 -0
  257. package/node_modules/pino/test/fixtures/syncfalse-exit.js +9 -0
  258. package/node_modules/pino/test/fixtures/syncfalse-flush-exit.js +10 -0
  259. package/node_modules/pino/test/fixtures/syncfalse.js +6 -0
  260. package/node_modules/pino/test/fixtures/syntax-error-esm.mjs +2 -0
  261. package/node_modules/pino/test/fixtures/to-file-transport-with-transform.js +20 -0
  262. package/node_modules/pino/test/fixtures/to-file-transport.js +13 -0
  263. package/node_modules/pino/test/fixtures/to-file-transport.mjs +8 -0
  264. package/node_modules/pino/test/fixtures/transport/index.js +12 -0
  265. package/node_modules/pino/test/fixtures/transport/package.json +5 -0
  266. package/node_modules/pino/test/fixtures/transport-exit-immediately-with-async-dest.js +16 -0
  267. package/node_modules/pino/test/fixtures/transport-exit-immediately.js +11 -0
  268. package/node_modules/pino/test/fixtures/transport-exit-on-ready.js +12 -0
  269. package/node_modules/pino/test/fixtures/transport-invalid-node-options.js +26 -0
  270. package/node_modules/pino/test/fixtures/transport-main.js +9 -0
  271. package/node_modules/pino/test/fixtures/transport-many-lines.js +29 -0
  272. package/node_modules/pino/test/fixtures/transport-preload-main.mjs +13 -0
  273. package/node_modules/pino/test/fixtures/transport-preload.mjs +13 -0
  274. package/node_modules/pino/test/fixtures/transport-string-stdout.js +9 -0
  275. package/node_modules/pino/test/fixtures/transport-transform.js +21 -0
  276. package/node_modules/pino/test/fixtures/transport-uses-pino-config.js +33 -0
  277. package/node_modules/pino/test/fixtures/transport-with-on-exit.js +12 -0
  278. package/node_modules/pino/test/fixtures/transport-worker-data.js +19 -0
  279. package/node_modules/pino/test/fixtures/transport-worker-name.js +24 -0
  280. package/node_modules/pino/test/fixtures/transport-worker.js +15 -0
  281. package/node_modules/pino/test/fixtures/transport-wrong-export-type.js +3 -0
  282. package/node_modules/pino/test/fixtures/ts/to-file-transport-native.mts +15 -0
  283. package/node_modules/pino/test/fixtures/ts/to-file-transport-with-transform.ts +18 -0
  284. package/node_modules/pino/test/fixtures/ts/to-file-transport.ts +11 -0
  285. package/node_modules/pino/test/fixtures/ts/transpile.cjs +36 -0
  286. package/node_modules/pino/test/fixtures/ts/transport-exit-immediately-with-async-dest.ts +15 -0
  287. package/node_modules/pino/test/fixtures/ts/transport-exit-immediately.ts +10 -0
  288. package/node_modules/pino/test/fixtures/ts/transport-exit-on-ready.ts +11 -0
  289. package/node_modules/pino/test/fixtures/ts/transport-main.ts +8 -0
  290. package/node_modules/pino/test/fixtures/ts/transport-string-stdout.ts +8 -0
  291. package/node_modules/pino/test/fixtures/ts/transport-worker.ts +14 -0
  292. package/node_modules/pino/test/formatters.test.js +364 -0
  293. package/node_modules/pino/test/helper.d.ts +4 -0
  294. package/node_modules/pino/test/helper.js +159 -0
  295. package/node_modules/pino/test/hooks.test.js +114 -0
  296. package/node_modules/pino/test/http.test.js +214 -0
  297. package/node_modules/pino/test/internals/version.test.js +17 -0
  298. package/node_modules/pino/test/is-level-enabled.test.js +179 -0
  299. package/node_modules/pino/test/jest/basic.spec.js +10 -0
  300. package/node_modules/pino/test/levels.test.js +810 -0
  301. package/node_modules/pino/test/metadata.test.js +120 -0
  302. package/node_modules/pino/test/mixin-merge-strategy.test.js +57 -0
  303. package/node_modules/pino/test/mixin.test.js +241 -0
  304. package/node_modules/pino/test/multistream.test.js +793 -0
  305. package/node_modules/pino/test/redact.test.js +923 -0
  306. package/node_modules/pino/test/serializers.test.js +257 -0
  307. package/node_modules/pino/test/smoke.js +59 -0
  308. package/node_modules/pino/test/stdout-protection.test.js +41 -0
  309. package/node_modules/pino/test/syncfalse.test.js +186 -0
  310. package/node_modules/pino/test/timestamp-nano.test.js +37 -0
  311. package/node_modules/pino/test/timestamp.test.js +124 -0
  312. package/node_modules/pino/test/transport/big.test.js +42 -0
  313. package/node_modules/pino/test/transport/bundlers-support.test.js +99 -0
  314. package/node_modules/pino/test/transport/caller.test.js +24 -0
  315. package/node_modules/pino/test/transport/core.test.js +818 -0
  316. package/node_modules/pino/test/transport/core.transpiled.test.ts +114 -0
  317. package/node_modules/pino/test/transport/crash.test.js +36 -0
  318. package/node_modules/pino/test/transport/module-link.test.js +241 -0
  319. package/node_modules/pino/test/transport/native-type-stripping.test.mjs +151 -0
  320. package/node_modules/pino/test/transport/node-options.test.js +116 -0
  321. package/node_modules/pino/test/transport/pipeline.test.js +137 -0
  322. package/node_modules/pino/test/transport/preload.test.js +54 -0
  323. package/node_modules/pino/test/transport/repl.test.js +15 -0
  324. package/node_modules/pino/test/transport/sync-false.test.js +79 -0
  325. package/node_modules/pino/test/transport/sync-true.test.js +57 -0
  326. package/node_modules/pino/test/transport/targets.test.js +48 -0
  327. package/node_modules/pino/test/transport/uses-pino-config.test.js +166 -0
  328. package/node_modules/pino/test/transport-stream.test.js +40 -0
  329. package/node_modules/pino/test/types/pino-import.tst.cts +30 -0
  330. package/node_modules/pino/test/types/pino-import.tst.js +73 -0
  331. package/node_modules/pino/test/types/pino-multistream.tst.ts +49 -0
  332. package/node_modules/pino/test/types/pino-top-export.tst.ts +32 -0
  333. package/node_modules/pino/test/types/pino-transport.tst.ts +171 -0
  334. package/node_modules/pino/test/types/pino-type-only.tst.ts +77 -0
  335. package/node_modules/pino/test/types/pino.ts +98 -0
  336. package/node_modules/pino/test/types/pino.tst.ts +681 -0
  337. package/node_modules/pino/test/types/tsconfig.json +10 -0
  338. package/node_modules/pino/tsconfig.json +14 -0
  339. package/node_modules/pino-pretty/.borp.yaml +6 -0
  340. package/node_modules/pino-pretty/.editorconfig +13 -0
  341. package/node_modules/pino-pretty/.github/dependabot.yml +13 -0
  342. package/node_modules/pino-pretty/.github/workflows/ci.yml +83 -0
  343. package/node_modules/pino-pretty/LICENSE +21 -0
  344. package/node_modules/pino-pretty/Readme.md +425 -0
  345. package/node_modules/pino-pretty/SECURITY.md +146 -0
  346. package/node_modules/pino-pretty/benchmark.js +105 -0
  347. package/node_modules/pino-pretty/bin.js +113 -0
  348. package/node_modules/pino-pretty/demo.png +0 -0
  349. package/node_modules/pino-pretty/docs/help.md +24 -0
  350. package/node_modules/pino-pretty/eslint.config.js +5 -0
  351. package/node_modules/pino-pretty/help/help.txt +68 -0
  352. package/node_modules/pino-pretty/index.d.ts +227 -0
  353. package/node_modules/pino-pretty/index.js +234 -0
  354. package/node_modules/pino-pretty/lib/colors.js +134 -0
  355. package/node_modules/pino-pretty/lib/colors.test.js +132 -0
  356. package/node_modules/pino-pretty/lib/constants.js +55 -0
  357. package/node_modules/pino-pretty/lib/pretty.js +171 -0
  358. package/node_modules/pino-pretty/lib/utils/build-safe-sonic-boom.js +69 -0
  359. package/node_modules/pino-pretty/lib/utils/build-safe-sonic-boom.test.js +84 -0
  360. package/node_modules/pino-pretty/lib/utils/create-date.js +26 -0
  361. package/node_modules/pino-pretty/lib/utils/create-date.test.js +20 -0
  362. package/node_modules/pino-pretty/lib/utils/delete-log-property.js +28 -0
  363. package/node_modules/pino-pretty/lib/utils/delete-log-property.test.js +31 -0
  364. package/node_modules/pino-pretty/lib/utils/filter-log.js +99 -0
  365. package/node_modules/pino-pretty/lib/utils/filter-log.test.js +265 -0
  366. package/node_modules/pino-pretty/lib/utils/format-time.js +66 -0
  367. package/node_modules/pino-pretty/lib/utils/format-time.test.js +71 -0
  368. package/node_modules/pino-pretty/lib/utils/get-level-label-data.js +29 -0
  369. package/node_modules/pino-pretty/lib/utils/get-property-value.js +30 -0
  370. package/node_modules/pino-pretty/lib/utils/get-property-value.test.js +31 -0
  371. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-names-opts.js +38 -0
  372. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-names-opts.test.js +45 -0
  373. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-opts.js +39 -0
  374. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-opts.test.js +47 -0
  375. package/node_modules/pino-pretty/lib/utils/index.js +108 -0
  376. package/node_modules/pino-pretty/lib/utils/index.test.js +37 -0
  377. package/node_modules/pino-pretty/lib/utils/interpret-conditionals.js +41 -0
  378. package/node_modules/pino-pretty/lib/utils/interpret-conditionals.test.js +84 -0
  379. package/node_modules/pino-pretty/lib/utils/is-object.js +7 -0
  380. package/node_modules/pino-pretty/lib/utils/is-object.test.js +10 -0
  381. package/node_modules/pino-pretty/lib/utils/is-valid-date.js +14 -0
  382. package/node_modules/pino-pretty/lib/utils/is-valid-date.test.js +16 -0
  383. package/node_modules/pino-pretty/lib/utils/join-lines-with-indentation.js +29 -0
  384. package/node_modules/pino-pretty/lib/utils/join-lines-with-indentation.test.js +16 -0
  385. package/node_modules/pino-pretty/lib/utils/noop.js +3 -0
  386. package/node_modules/pino-pretty/lib/utils/noop.test.js +12 -0
  387. package/node_modules/pino-pretty/lib/utils/parse-factory-options.js +171 -0
  388. package/node_modules/pino-pretty/lib/utils/prettify-error-log.js +76 -0
  389. package/node_modules/pino-pretty/lib/utils/prettify-error-log.test.js +143 -0
  390. package/node_modules/pino-pretty/lib/utils/prettify-error.js +54 -0
  391. package/node_modules/pino-pretty/lib/utils/prettify-error.test.js +25 -0
  392. package/node_modules/pino-pretty/lib/utils/prettify-level.js +41 -0
  393. package/node_modules/pino-pretty/lib/utils/prettify-level.test.js +70 -0
  394. package/node_modules/pino-pretty/lib/utils/prettify-message.js +65 -0
  395. package/node_modules/pino-pretty/lib/utils/prettify-message.test.js +287 -0
  396. package/node_modules/pino-pretty/lib/utils/prettify-metadata.js +75 -0
  397. package/node_modules/pino-pretty/lib/utils/prettify-metadata.test.js +170 -0
  398. package/node_modules/pino-pretty/lib/utils/prettify-object.js +115 -0
  399. package/node_modules/pino-pretty/lib/utils/prettify-object.test.js +217 -0
  400. package/node_modules/pino-pretty/lib/utils/prettify-time.js +43 -0
  401. package/node_modules/pino-pretty/lib/utils/prettify-time.test.js +264 -0
  402. package/node_modules/pino-pretty/lib/utils/split-property-key.js +49 -0
  403. package/node_modules/pino-pretty/lib/utils/split-property-key.test.js +29 -0
  404. package/node_modules/pino-pretty/lib/utils/strip-unsafe-control-chars.js +18 -0
  405. package/node_modules/pino-pretty/lib/utils/strip-unsafe-control-chars.test.js +9 -0
  406. package/node_modules/pino-pretty/package.json +64 -0
  407. package/node_modules/pino-pretty/test/basic.test.js +1305 -0
  408. package/node_modules/pino-pretty/test/boolean-options.test.js +228 -0
  409. package/node_modules/pino-pretty/test/cli-rc.test.js +275 -0
  410. package/node_modules/pino-pretty/test/cli.test.js +360 -0
  411. package/node_modules/pino-pretty/test/crlf.test.js +33 -0
  412. package/node_modules/pino-pretty/test/error-objects.test.js +494 -0
  413. package/node_modules/pino-pretty/test/example/example.js +33 -0
  414. package/node_modules/pino-pretty/test/helper.js +19 -0
  415. package/node_modules/pino-pretty/test/types/exports.tst.ts +15 -0
  416. package/node_modules/pino-pretty/test/types/pino-pretty.tst.ts +140 -0
  417. package/node_modules/pino-pretty/test/types/tsconfig.json +9 -0
  418. package/package.json +12 -5
  419. package/lib/cli/commands/init.d.ts +0 -1
  420. package/lib/cli/commands/init.js +0 -8
  421. package/node_modules/@types/node/globals.global.d.ts +0 -1
@@ -0,0 +1,171 @@
1
+ 'use strict'
2
+
3
+ module.exports = pretty
4
+
5
+ const sjs = require('secure-json-parse')
6
+
7
+ const isObject = require('./utils/is-object')
8
+ const prettifyErrorLog = require('./utils/prettify-error-log')
9
+ const prettifyLevel = require('./utils/prettify-level')
10
+ const prettifyMessage = require('./utils/prettify-message')
11
+ const prettifyMetadata = require('./utils/prettify-metadata')
12
+ const prettifyObject = require('./utils/prettify-object')
13
+ const prettifyTime = require('./utils/prettify-time')
14
+ const filterLog = require('./utils/filter-log')
15
+
16
+ const {
17
+ LEVELS,
18
+ LEVEL_KEY,
19
+ LEVEL_NAMES
20
+ } = require('./constants')
21
+
22
+ const jsonParser = input => {
23
+ try {
24
+ return { value: sjs.parse(input, { protoAction: 'remove' }) }
25
+ } catch (err) {
26
+ return { err }
27
+ }
28
+ }
29
+
30
+ /**
31
+ * Orchestrates processing the received log data according to the provided
32
+ * configuration and returns a prettified log string.
33
+ *
34
+ * @typedef {function} LogPrettifierFunc
35
+ * @param {string|object} inputData A log string or a log-like object.
36
+ * @returns {string} A string that represents the prettified log data.
37
+ */
38
+ function pretty (inputData) {
39
+ let log
40
+ if (!isObject(inputData)) {
41
+ const parsed = jsonParser(inputData)
42
+ if (parsed.err || !isObject(parsed.value)) {
43
+ // pass through
44
+ return inputData + this.EOL
45
+ }
46
+ log = parsed.value
47
+ } else {
48
+ log = inputData
49
+ }
50
+
51
+ if (this.minimumLevel) {
52
+ // We need to figure out if the custom levels has the desired minimum
53
+ // level & use that one if found. If not, determine if the level exists
54
+ // in the standard levels. In both cases, make sure we have the level
55
+ // number instead of the level name.
56
+ let condition
57
+ if (this.useOnlyCustomProps) {
58
+ condition = this.customLevels
59
+ } else {
60
+ condition = this.customLevelNames[this.minimumLevel] !== undefined
61
+ }
62
+ let minimum
63
+ if (condition) {
64
+ minimum = this.customLevelNames[this.minimumLevel]
65
+ } else {
66
+ minimum = LEVEL_NAMES[this.minimumLevel]
67
+ }
68
+ if (!minimum) {
69
+ minimum = typeof this.minimumLevel === 'string'
70
+ ? LEVEL_NAMES[this.minimumLevel]
71
+ : LEVEL_NAMES[LEVELS[this.minimumLevel].toLowerCase()]
72
+ }
73
+
74
+ const level = log[this.levelKey === undefined ? LEVEL_KEY : this.levelKey]
75
+ if (level < minimum) return
76
+ }
77
+
78
+ const prettifiedMessage = prettifyMessage({ log, context: this.context })
79
+
80
+ if (this.ignoreKeys || this.includeKeys) {
81
+ log = filterLog({ log, context: this.context })
82
+ }
83
+
84
+ const prettifiedLevel = prettifyLevel({
85
+ log,
86
+ context: {
87
+ ...this.context,
88
+ // This is odd. The colorizer ends up relying on the value of
89
+ // `customProperties` instead of the original `customLevels` and
90
+ // `customLevelNames`.
91
+ ...this.context.customProperties
92
+ }
93
+ })
94
+ const prettifiedMetadata = prettifyMetadata({ log, context: this.context })
95
+ const prettifiedTime = prettifyTime({ log, context: this.context })
96
+
97
+ let line = ''
98
+ if (this.levelFirst && prettifiedLevel) {
99
+ line = `${prettifiedLevel}`
100
+ }
101
+
102
+ if (prettifiedTime && line === '') {
103
+ line = `${prettifiedTime}`
104
+ } else if (prettifiedTime) {
105
+ line = `${line} ${prettifiedTime}`
106
+ }
107
+
108
+ if (!this.levelFirst && prettifiedLevel) {
109
+ if (line.length > 0) {
110
+ line = `${line} ${prettifiedLevel}`
111
+ } else {
112
+ line = prettifiedLevel
113
+ }
114
+ }
115
+
116
+ if (prettifiedMetadata) {
117
+ if (line.length > 0) {
118
+ line = `${line} ${prettifiedMetadata}:`
119
+ } else {
120
+ line = prettifiedMetadata
121
+ }
122
+ }
123
+
124
+ if (line.endsWith(':') === false && line !== '') {
125
+ line += ':'
126
+ }
127
+
128
+ if (prettifiedMessage !== undefined) {
129
+ if (line.length > 0) {
130
+ line = `${line} ${prettifiedMessage}`
131
+ } else {
132
+ line = prettifiedMessage
133
+ }
134
+ }
135
+
136
+ if (line.length > 0 && !this.singleLine) {
137
+ line += this.EOL
138
+ }
139
+
140
+ // pino@7+ does not log this anymore
141
+ if (log.type === 'Error' && typeof log.stack === 'string') {
142
+ const prettifiedErrorLog = prettifyErrorLog({ log, context: this.context })
143
+ if (this.singleLine) line += this.EOL
144
+ line += prettifiedErrorLog
145
+ } else if (this.hideObject === false) {
146
+ const skipKeys = [
147
+ this.messageKey,
148
+ this.levelKey,
149
+ this.timestampKey
150
+ ]
151
+ .map((key) => key.replaceAll(/\\/g, ''))
152
+ .filter(key => {
153
+ return typeof log[key] === 'string' ||
154
+ typeof log[key] === 'number' ||
155
+ typeof log[key] === 'boolean'
156
+ })
157
+ const prettifiedObject = prettifyObject({
158
+ log,
159
+ skipKeys,
160
+ context: this.context
161
+ })
162
+
163
+ // In single line mode, include a space only if prettified version isn't empty
164
+ if (this.singleLine && !/^\s$/.test(prettifiedObject)) {
165
+ line += ' '
166
+ }
167
+ line += prettifiedObject
168
+ }
169
+
170
+ return line
171
+ }
@@ -0,0 +1,69 @@
1
+ 'use strict'
2
+
3
+ module.exports = buildSafeSonicBoom
4
+
5
+ const { isMainThread } = require('node:worker_threads')
6
+ const SonicBoom = require('sonic-boom')
7
+ const noop = require('./noop')
8
+
9
+ /**
10
+ * Creates a safe SonicBoom instance
11
+ *
12
+ * @param {object} opts Options for SonicBoom
13
+ *
14
+ * @returns {object} A new SonicBoom stream
15
+ */
16
+ function buildSafeSonicBoom (opts) {
17
+ const stream = new SonicBoom(opts)
18
+ stream.on('error', filterBrokenPipe)
19
+ // if we are sync: false, we must flush on exit
20
+ if (!opts.sync && isMainThread) {
21
+ setupOnExit(stream)
22
+ }
23
+ return stream
24
+
25
+ function filterBrokenPipe (err) {
26
+ if (err.code === 'EPIPE') {
27
+ stream.write = noop
28
+ stream.end = noop
29
+ stream.flushSync = noop
30
+ stream.destroy = noop
31
+ return
32
+ }
33
+ stream.removeListener('error', filterBrokenPipe)
34
+ }
35
+ }
36
+
37
+ function setupOnExit (stream) {
38
+ /* istanbul ignore next */
39
+ if (global.WeakRef && global.WeakMap && global.FinalizationRegistry) {
40
+ // This is leak free, it does not leave event handlers
41
+ const onExit = require('on-exit-leak-free')
42
+
43
+ onExit.register(stream, autoEnd)
44
+
45
+ stream.on('close', function () {
46
+ onExit.unregister(stream)
47
+ })
48
+ }
49
+ }
50
+
51
+ /* istanbul ignore next */
52
+ function autoEnd (stream, eventName) {
53
+ // This check is needed only on some platforms
54
+
55
+ if (stream.destroyed) {
56
+ return
57
+ }
58
+
59
+ if (eventName === 'beforeExit') {
60
+ // We still have an event loop, let's use it
61
+ stream.flush()
62
+ stream.on('drain', function () {
63
+ stream.end()
64
+ })
65
+ } else {
66
+ // We do not have an event loop, so flush synchronously
67
+ stream.flushSync()
68
+ }
69
+ }
@@ -0,0 +1,84 @@
1
+ 'use strict'
2
+
3
+ const { test } = require('node:test')
4
+ const { rimraf } = require('rimraf')
5
+ const fs = require('node:fs')
6
+ const { join } = require('node:path')
7
+
8
+ const buildSafeSonicBoom = require('./build-safe-sonic-boom')
9
+
10
+ const file = () => {
11
+ const dest = join(__dirname, `${process.pid}-${process.hrtime().toString()}`)
12
+ const fd = fs.openSync(dest, 'w')
13
+ return { dest, fd }
14
+ }
15
+
16
+ test('should not write when error emitted and code is "EPIPE"', t => {
17
+ t.plan(1)
18
+
19
+ const { fd, dest } = file()
20
+ const stream = buildSafeSonicBoom({ sync: true, fd, mkdir: true })
21
+ t.after(() => rimraf(dest))
22
+
23
+ stream.emit('error', { code: 'EPIPE' })
24
+ stream.write('will not work')
25
+
26
+ const dataFile = fs.readFileSync(dest)
27
+ t.assert.strictEqual(dataFile.length, 0)
28
+ })
29
+
30
+ test('should stream.write works when error code is not "EPIPE"', t => {
31
+ t.plan(3)
32
+ const { fd, dest } = file()
33
+ const stream = buildSafeSonicBoom({ sync: true, fd, mkdir: true })
34
+
35
+ t.after(() => rimraf(dest))
36
+
37
+ stream.on('error', () => t.assert.ok('error emitted'))
38
+
39
+ stream.emit('error', 'fake error description')
40
+
41
+ t.assert.ok(stream.write('will work'))
42
+
43
+ const dataFile = fs.readFileSync(dest)
44
+ t.assert.strictEqual(dataFile.toString(), 'will work')
45
+ })
46
+
47
+ test('cover setupOnExit', async t => {
48
+ t.plan(3)
49
+ const { fd, dest } = file()
50
+ const stream = buildSafeSonicBoom({ sync: false, fd, mkdir: true })
51
+
52
+ t.after(() => rimraf(dest))
53
+
54
+ stream.on('error', () => t.assert.ok('error emitted'))
55
+ stream.emit('error', 'fake error description')
56
+
57
+ t.assert.ok(stream.write('will work'))
58
+
59
+ await watchFileCreated(dest)
60
+
61
+ const dataFile = fs.readFileSync(dest)
62
+ t.assert.strictEqual(dataFile.toString(), 'will work')
63
+ })
64
+
65
+ function watchFileCreated (filename) {
66
+ return new Promise((resolve, reject) => {
67
+ const TIMEOUT = 2000
68
+ const INTERVAL = 100
69
+ const threshold = TIMEOUT / INTERVAL
70
+ let counter = 0
71
+ const interval = setInterval(() => {
72
+ // On some CI runs file is created but not filled
73
+ if (fs.existsSync(filename) && fs.statSync(filename).size !== 0) {
74
+ clearInterval(interval)
75
+ resolve()
76
+ } else if (counter <= threshold) {
77
+ counter++
78
+ } else {
79
+ clearInterval(interval)
80
+ reject(new Error(`${filename} was not created.`))
81
+ }
82
+ }, INTERVAL)
83
+ })
84
+ }
@@ -0,0 +1,26 @@
1
+ 'use strict'
2
+
3
+ module.exports = createDate
4
+
5
+ const isValidDate = require('./is-valid-date')
6
+
7
+ /**
8
+ * Constructs a JS Date from a number or string. Accepts any single number
9
+ * or single string argument that is valid for the Date() constructor,
10
+ * or an epoch as a string.
11
+ *
12
+ * @param {string|number} epoch The representation of the Date.
13
+ *
14
+ * @returns {Date} The constructed Date.
15
+ */
16
+ function createDate (epoch) {
17
+ // If epoch is already a valid argument, return the valid Date
18
+ let date = new Date(epoch)
19
+ if (isValidDate(date)) {
20
+ return date
21
+ }
22
+
23
+ // Convert to a number to permit epoch as a string
24
+ date = new Date(+epoch)
25
+ return date
26
+ }
@@ -0,0 +1,20 @@
1
+ 'use strict'
2
+
3
+ const { test } = require('node:test')
4
+ const createDate = require('./create-date')
5
+
6
+ const wanted = 1624450038567
7
+
8
+ test('accepts arguments the Date constructor would accept', t => {
9
+ t.plan(2)
10
+ t.assert.strictEqual(createDate(1624450038567).getTime(), wanted)
11
+ t.assert.strictEqual(createDate('2021-06-23T12:07:18.567Z').getTime(), wanted)
12
+ })
13
+
14
+ test('accepts epoch as a string', t => {
15
+ // If Date() accepts this argument, the createDate function is not needed
16
+ // and can be replaced with Date()
17
+ t.plan(2)
18
+ t.assert.notEqual(new Date('16244500385-67').getTime(), wanted)
19
+ t.assert.strictEqual(createDate('1624450038567').getTime(), wanted)
20
+ })
@@ -0,0 +1,28 @@
1
+ 'use strict'
2
+
3
+ module.exports = deleteLogProperty
4
+
5
+ const getPropertyValue = require('./get-property-value')
6
+ const splitPropertyKey = require('./split-property-key')
7
+
8
+ /**
9
+ * Deletes a specified property from a log object if it exists.
10
+ * This function mutates the passed in `log` object.
11
+ *
12
+ * @param {object} log The log object to be modified.
13
+ * @param {string} property A string identifying the property to be deleted from
14
+ * the log object. Accepts nested properties delimited by a `.`
15
+ * Delimiter can be escaped to preserve property names that contain the delimiter.
16
+ * e.g. `'prop1.prop2'` or `'prop2\.domain\.corp.prop2'`
17
+ */
18
+ function deleteLogProperty (log, property) {
19
+ const props = splitPropertyKey(property)
20
+ const propToDelete = props.pop()
21
+
22
+ log = getPropertyValue(log, props)
23
+
24
+ /* istanbul ignore else */
25
+ if (log !== null && typeof log === 'object' && Object.prototype.hasOwnProperty.call(log, propToDelete)) {
26
+ delete log[propToDelete]
27
+ }
28
+ }
@@ -0,0 +1,31 @@
1
+ 'use strict'
2
+
3
+ const { test } = require('node:test')
4
+ const { createCopier } = require('fast-copy')
5
+ const fastCopy = createCopier({})
6
+ const deleteLogProperty = require('./delete-log-property')
7
+
8
+ const logData = {
9
+ level: 30,
10
+ data1: {
11
+ data2: { 'data-3': 'bar' }
12
+ }
13
+ }
14
+
15
+ test('deleteLogProperty deletes property of depth 1', t => {
16
+ const log = fastCopy(logData)
17
+ deleteLogProperty(log, 'data1')
18
+ t.assert.deepStrictEqual(log, { level: 30 })
19
+ })
20
+
21
+ test('deleteLogProperty deletes property of depth 2', t => {
22
+ const log = fastCopy(logData)
23
+ deleteLogProperty(log, 'data1.data2')
24
+ t.assert.deepStrictEqual(log, { level: 30, data1: { } })
25
+ })
26
+
27
+ test('deleteLogProperty deletes property of depth 3', t => {
28
+ const log = fastCopy(logData)
29
+ deleteLogProperty(log, 'data1.data2.data-3')
30
+ t.assert.deepStrictEqual(log, { level: 30, data1: { data2: { } } })
31
+ })
@@ -0,0 +1,99 @@
1
+ 'use strict'
2
+
3
+ module.exports = filterLog
4
+
5
+ const { createCopier } = require('fast-copy')
6
+ const fastCopy = createCopier({})
7
+
8
+ const deleteLogProperty = require('./delete-log-property')
9
+ const getPropertyValue = require('./get-property-value')
10
+ const splitPropertyKey = require('./split-property-key')
11
+
12
+ /**
13
+ * @typedef {object} FilterLogParams
14
+ * @property {object} log The log object to be modified.
15
+ * @property {PrettyContext} context The context object built from parsing
16
+ * the options.
17
+ */
18
+
19
+ /**
20
+ * True when every segment of a (possibly nested) property path exists.
21
+ *
22
+ * @param {object} log
23
+ * @param {string} property
24
+ * @returns {boolean}
25
+ */
26
+ function hasLogProperty (log, property) {
27
+ const props = splitPropertyKey(property)
28
+ if (props.length === 0) {
29
+ return false
30
+ }
31
+ let current = log
32
+
33
+ for (const prop of props) {
34
+ if (current === null || typeof current !== 'object' || !Object.prototype.hasOwnProperty.call(current, prop)) {
35
+ return false
36
+ }
37
+ current = current[prop]
38
+ }
39
+
40
+ return true
41
+ }
42
+
43
+ /**
44
+ * Assigns `value` at a (possibly nested) property path, creating intermediate
45
+ * objects as needed. Nested keys use the same `.` / `\.` rules as ignore.
46
+ *
47
+ * @param {object} log
48
+ * @param {string} property
49
+ * @param {*} value
50
+ */
51
+ function setLogProperty (log, property, value) {
52
+ const props = splitPropertyKey(property)
53
+ const last = props.pop()
54
+ let current = log
55
+
56
+ for (const prop of props) {
57
+ if (current[prop] === null || typeof current[prop] !== 'object') {
58
+ current[prop] = {}
59
+ }
60
+ current = current[prop]
61
+ }
62
+
63
+ current[last] = value
64
+ }
65
+
66
+ /**
67
+ * Filter a log object by removing or including keys accordingly.
68
+ * When `includeKeys` is passed, `ignoredKeys` will be ignored.
69
+ * One of ignoreKeys or includeKeys must be pass in.
70
+ *
71
+ * Nested keys (e.g. `user.id`) are supported for both include and ignore,
72
+ * including escaped dots in property names.
73
+ *
74
+ * @param {FilterLogParams} input
75
+ *
76
+ * @returns {object} A new `log` object instance that
77
+ * either only includes the keys in includeKeys
78
+ * or does not include those in ignoredKeys.
79
+ */
80
+ function filterLog ({ log, context }) {
81
+ const { ignoreKeys, includeKeys } = context
82
+ const logCopy = fastCopy(log)
83
+
84
+ if (includeKeys) {
85
+ const logIncluded = {}
86
+
87
+ includeKeys.forEach((key) => {
88
+ if (hasLogProperty(logCopy, key)) {
89
+ setLogProperty(logIncluded, key, getPropertyValue(logCopy, key))
90
+ }
91
+ })
92
+ return logIncluded
93
+ }
94
+
95
+ ignoreKeys.forEach((ignoreKey) => {
96
+ deleteLogProperty(logCopy, ignoreKey)
97
+ })
98
+ return logCopy
99
+ }