@wbce/projen-d9 0.0.27 → 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 (422) hide show
  1. package/.jsii +185 -46
  2. package/API.md +153 -37
  3. package/CHANGELOG.md +20 -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/.prettierignore +1 -0
  137. package/node_modules/pino/CNAME +1 -0
  138. package/node_modules/pino/CONTRIBUTING.md +34 -0
  139. package/node_modules/pino/LICENSE +21 -0
  140. package/node_modules/pino/README.md +177 -0
  141. package/node_modules/pino/SECURITY.md +103 -0
  142. package/node_modules/pino/benchmarks/basic.bench.js +95 -0
  143. package/node_modules/pino/benchmarks/child-child.bench.js +52 -0
  144. package/node_modules/pino/benchmarks/child-creation.bench.js +73 -0
  145. package/node_modules/pino/benchmarks/child.bench.js +62 -0
  146. package/node_modules/pino/benchmarks/deep-object.bench.js +88 -0
  147. package/node_modules/pino/benchmarks/formatters.bench.js +50 -0
  148. package/node_modules/pino/benchmarks/internal/custom-levels.js +67 -0
  149. package/node_modules/pino/benchmarks/internal/just-pino-heavy.bench.js +76 -0
  150. package/node_modules/pino/benchmarks/internal/just-pino.bench.js +182 -0
  151. package/node_modules/pino/benchmarks/internal/parent-vs-child.bench.js +75 -0
  152. package/node_modules/pino/benchmarks/internal/redact.bench.js +86 -0
  153. package/node_modules/pino/benchmarks/long-string.bench.js +81 -0
  154. package/node_modules/pino/benchmarks/multi-arg.bench.js +193 -0
  155. package/node_modules/pino/benchmarks/multistream.js +98 -0
  156. package/node_modules/pino/benchmarks/object.bench.js +82 -0
  157. package/node_modules/pino/benchmarks/utils/generate-benchmark-doc.js +36 -0
  158. package/node_modules/pino/benchmarks/utils/runbench.js +138 -0
  159. package/node_modules/pino/benchmarks/utils/wrap-log-level.js +55 -0
  160. package/node_modules/pino/bin.js +6 -0
  161. package/node_modules/pino/browser.js +607 -0
  162. package/node_modules/pino/build/sync-version.js +25 -0
  163. package/node_modules/pino/docs/api.md +1664 -0
  164. package/node_modules/pino/docs/asynchronous.md +55 -0
  165. package/node_modules/pino/docs/benchmarks.md +55 -0
  166. package/node_modules/pino/docs/browser.md +341 -0
  167. package/node_modules/pino/docs/bundling.md +40 -0
  168. package/node_modules/pino/docs/child-loggers.md +116 -0
  169. package/node_modules/pino/docs/diagnostics.md +16 -0
  170. package/node_modules/pino/docs/ecosystem.md +87 -0
  171. package/node_modules/pino/docs/help.md +353 -0
  172. package/node_modules/pino/docs/lts.md +93 -0
  173. package/node_modules/pino/docs/pretty.md +38 -0
  174. package/node_modules/pino/docs/redaction.md +130 -0
  175. package/node_modules/pino/docs/transports.md +1447 -0
  176. package/node_modules/pino/docs/web.md +306 -0
  177. package/node_modules/pino/eslint.config.js +36 -0
  178. package/node_modules/pino/examples/basic.js +43 -0
  179. package/node_modules/pino/examples/transport.js +68 -0
  180. package/node_modules/pino/favicon.ico +0 -0
  181. package/node_modules/pino/file.js +12 -0
  182. package/node_modules/pino/inc-version.sh +42 -0
  183. package/node_modules/pino/index.html +55 -0
  184. package/node_modules/pino/lib/caller.js +40 -0
  185. package/node_modules/pino/lib/constants.js +28 -0
  186. package/node_modules/pino/lib/deprecations.js +8 -0
  187. package/node_modules/pino/lib/levels.js +241 -0
  188. package/node_modules/pino/lib/meta.js +3 -0
  189. package/node_modules/pino/lib/multistream.js +211 -0
  190. package/node_modules/pino/lib/proto.js +256 -0
  191. package/node_modules/pino/lib/redaction.js +119 -0
  192. package/node_modules/pino/lib/symbols.js +76 -0
  193. package/node_modules/pino/lib/time.js +39 -0
  194. package/node_modules/pino/lib/tools.js +427 -0
  195. package/node_modules/pino/lib/transport-stream.js +56 -0
  196. package/node_modules/pino/lib/transport.js +302 -0
  197. package/node_modules/pino/lib/worker.js +197 -0
  198. package/node_modules/pino/package.json +112 -0
  199. package/node_modules/pino/pino.d.ts +881 -0
  200. package/node_modules/pino/pino.js +259 -0
  201. package/node_modules/pino/test/basic.test.js +952 -0
  202. package/node_modules/pino/test/broken-pipe.test.js +59 -0
  203. package/node_modules/pino/test/browser-bindings.test.js +114 -0
  204. package/node_modules/pino/test/browser-child.test.js +132 -0
  205. package/node_modules/pino/test/browser-disabled.test.js +87 -0
  206. package/node_modules/pino/test/browser-early-console-freeze.test.js +12 -0
  207. package/node_modules/pino/test/browser-is-level-enabled.test.js +101 -0
  208. package/node_modules/pino/test/browser-levels.test.js +241 -0
  209. package/node_modules/pino/test/browser-redaction.test.js +264 -0
  210. package/node_modules/pino/test/browser-serializers.test.js +352 -0
  211. package/node_modules/pino/test/browser-set-bindings.test.js +99 -0
  212. package/node_modules/pino/test/browser-timestamp.test.js +88 -0
  213. package/node_modules/pino/test/browser-transmit.test.js +417 -0
  214. package/node_modules/pino/test/browser.test.js +698 -0
  215. package/node_modules/pino/test/caller.test.js +20 -0
  216. package/node_modules/pino/test/complex-objects.test.js +36 -0
  217. package/node_modules/pino/test/crlf.test.js +34 -0
  218. package/node_modules/pino/test/custom-levels.test.js +267 -0
  219. package/node_modules/pino/test/diagnostics.test.js +107 -0
  220. package/node_modules/pino/test/error-key.test.js +37 -0
  221. package/node_modules/pino/test/error.test.js +403 -0
  222. package/node_modules/pino/test/escaping.test.js +110 -0
  223. package/node_modules/pino/test/esm/esm.mjs +14 -0
  224. package/node_modules/pino/test/esm/index.test.js +21 -0
  225. package/node_modules/pino/test/esm/named-exports.mjs +29 -0
  226. package/node_modules/pino/test/exit.test.js +79 -0
  227. package/node_modules/pino/test/fixtures/broken-pipe/basic.js +9 -0
  228. package/node_modules/pino/test/fixtures/broken-pipe/destination.js +10 -0
  229. package/node_modules/pino/test/fixtures/broken-pipe/syncfalse.js +12 -0
  230. package/node_modules/pino/test/fixtures/caller-loop.js +6 -0
  231. package/node_modules/pino/test/fixtures/console-transport.js +13 -0
  232. package/node_modules/pino/test/fixtures/crashing-transport.js +13 -0
  233. package/node_modules/pino/test/fixtures/default-exit.js +8 -0
  234. package/node_modules/pino/test/fixtures/destination-exit.js +8 -0
  235. package/node_modules/pino/test/fixtures/eval/index.js +13 -0
  236. package/node_modules/pino/test/fixtures/eval/node_modules/14-files.js +3 -0
  237. package/node_modules/pino/test/fixtures/eval/node_modules/2-files.js +3 -0
  238. package/node_modules/pino/test/fixtures/eval/node_modules/file1.js +5 -0
  239. package/node_modules/pino/test/fixtures/eval/node_modules/file10.js +5 -0
  240. package/node_modules/pino/test/fixtures/eval/node_modules/file11.js +5 -0
  241. package/node_modules/pino/test/fixtures/eval/node_modules/file12.js +5 -0
  242. package/node_modules/pino/test/fixtures/eval/node_modules/file13.js +5 -0
  243. package/node_modules/pino/test/fixtures/eval/node_modules/file14.js +11 -0
  244. package/node_modules/pino/test/fixtures/eval/node_modules/file2.js +5 -0
  245. package/node_modules/pino/test/fixtures/eval/node_modules/file3.js +5 -0
  246. package/node_modules/pino/test/fixtures/eval/node_modules/file4.js +5 -0
  247. package/node_modules/pino/test/fixtures/eval/node_modules/file5.js +5 -0
  248. package/node_modules/pino/test/fixtures/eval/node_modules/file6.js +5 -0
  249. package/node_modules/pino/test/fixtures/eval/node_modules/file7.js +5 -0
  250. package/node_modules/pino/test/fixtures/eval/node_modules/file8.js +5 -0
  251. package/node_modules/pino/test/fixtures/eval/node_modules/file9.js +5 -0
  252. package/node_modules/pino/test/fixtures/noop-transport.js +10 -0
  253. package/node_modules/pino/test/fixtures/pretty/null-prototype.js +8 -0
  254. package/node_modules/pino/test/fixtures/stdout-hack-protection.js +11 -0
  255. package/node_modules/pino/test/fixtures/syncfalse-child.js +6 -0
  256. package/node_modules/pino/test/fixtures/syncfalse-exit.js +9 -0
  257. package/node_modules/pino/test/fixtures/syncfalse-flush-exit.js +10 -0
  258. package/node_modules/pino/test/fixtures/syncfalse.js +6 -0
  259. package/node_modules/pino/test/fixtures/syntax-error-esm.mjs +2 -0
  260. package/node_modules/pino/test/fixtures/to-file-transport-with-transform.js +20 -0
  261. package/node_modules/pino/test/fixtures/to-file-transport.js +13 -0
  262. package/node_modules/pino/test/fixtures/to-file-transport.mjs +8 -0
  263. package/node_modules/pino/test/fixtures/transport/index.js +12 -0
  264. package/node_modules/pino/test/fixtures/transport/package.json +5 -0
  265. package/node_modules/pino/test/fixtures/transport-exit-immediately-with-async-dest.js +16 -0
  266. package/node_modules/pino/test/fixtures/transport-exit-immediately.js +11 -0
  267. package/node_modules/pino/test/fixtures/transport-exit-on-ready.js +12 -0
  268. package/node_modules/pino/test/fixtures/transport-invalid-node-options.js +26 -0
  269. package/node_modules/pino/test/fixtures/transport-main.js +9 -0
  270. package/node_modules/pino/test/fixtures/transport-many-lines.js +29 -0
  271. package/node_modules/pino/test/fixtures/transport-preload-main.mjs +13 -0
  272. package/node_modules/pino/test/fixtures/transport-preload.mjs +13 -0
  273. package/node_modules/pino/test/fixtures/transport-string-stdout.js +9 -0
  274. package/node_modules/pino/test/fixtures/transport-transform.js +21 -0
  275. package/node_modules/pino/test/fixtures/transport-uses-pino-config.js +33 -0
  276. package/node_modules/pino/test/fixtures/transport-with-on-exit.js +12 -0
  277. package/node_modules/pino/test/fixtures/transport-worker-data.js +19 -0
  278. package/node_modules/pino/test/fixtures/transport-worker-name.js +24 -0
  279. package/node_modules/pino/test/fixtures/transport-worker.js +15 -0
  280. package/node_modules/pino/test/fixtures/transport-wrong-export-type.js +3 -0
  281. package/node_modules/pino/test/fixtures/ts/to-file-transport-native.mts +15 -0
  282. package/node_modules/pino/test/fixtures/ts/to-file-transport-with-transform.ts +18 -0
  283. package/node_modules/pino/test/fixtures/ts/to-file-transport.ts +11 -0
  284. package/node_modules/pino/test/fixtures/ts/transpile.cjs +36 -0
  285. package/node_modules/pino/test/fixtures/ts/transport-exit-immediately-with-async-dest.ts +15 -0
  286. package/node_modules/pino/test/fixtures/ts/transport-exit-immediately.ts +10 -0
  287. package/node_modules/pino/test/fixtures/ts/transport-exit-on-ready.ts +11 -0
  288. package/node_modules/pino/test/fixtures/ts/transport-main.ts +8 -0
  289. package/node_modules/pino/test/fixtures/ts/transport-string-stdout.ts +8 -0
  290. package/node_modules/pino/test/fixtures/ts/transport-worker.ts +14 -0
  291. package/node_modules/pino/test/formatters.test.js +364 -0
  292. package/node_modules/pino/test/helper.d.ts +4 -0
  293. package/node_modules/pino/test/helper.js +159 -0
  294. package/node_modules/pino/test/hooks.test.js +114 -0
  295. package/node_modules/pino/test/http.test.js +214 -0
  296. package/node_modules/pino/test/internals/version.test.js +17 -0
  297. package/node_modules/pino/test/is-level-enabled.test.js +179 -0
  298. package/node_modules/pino/test/jest/basic.spec.js +10 -0
  299. package/node_modules/pino/test/levels.test.js +810 -0
  300. package/node_modules/pino/test/metadata.test.js +120 -0
  301. package/node_modules/pino/test/mixin-merge-strategy.test.js +57 -0
  302. package/node_modules/pino/test/mixin.test.js +241 -0
  303. package/node_modules/pino/test/multistream.test.js +793 -0
  304. package/node_modules/pino/test/redact.test.js +923 -0
  305. package/node_modules/pino/test/serializers.test.js +257 -0
  306. package/node_modules/pino/test/smoke.js +59 -0
  307. package/node_modules/pino/test/stdout-protection.test.js +41 -0
  308. package/node_modules/pino/test/syncfalse.test.js +186 -0
  309. package/node_modules/pino/test/timestamp-nano.test.js +37 -0
  310. package/node_modules/pino/test/timestamp.test.js +124 -0
  311. package/node_modules/pino/test/transport/big.test.js +42 -0
  312. package/node_modules/pino/test/transport/bundlers-support.test.js +99 -0
  313. package/node_modules/pino/test/transport/caller.test.js +24 -0
  314. package/node_modules/pino/test/transport/core.test.js +818 -0
  315. package/node_modules/pino/test/transport/core.transpiled.test.ts +114 -0
  316. package/node_modules/pino/test/transport/crash.test.js +36 -0
  317. package/node_modules/pino/test/transport/module-link.test.js +241 -0
  318. package/node_modules/pino/test/transport/native-type-stripping.test.mjs +151 -0
  319. package/node_modules/pino/test/transport/node-options.test.js +116 -0
  320. package/node_modules/pino/test/transport/pipeline.test.js +137 -0
  321. package/node_modules/pino/test/transport/preload.test.js +54 -0
  322. package/node_modules/pino/test/transport/repl.test.js +15 -0
  323. package/node_modules/pino/test/transport/sync-false.test.js +79 -0
  324. package/node_modules/pino/test/transport/sync-true.test.js +57 -0
  325. package/node_modules/pino/test/transport/targets.test.js +48 -0
  326. package/node_modules/pino/test/transport/uses-pino-config.test.js +166 -0
  327. package/node_modules/pino/test/transport-stream.test.js +40 -0
  328. package/node_modules/pino/test/types/pino-import.tst.cts +30 -0
  329. package/node_modules/pino/test/types/pino-import.tst.js +73 -0
  330. package/node_modules/pino/test/types/pino-multistream.tst.ts +49 -0
  331. package/node_modules/pino/test/types/pino-top-export.tst.ts +32 -0
  332. package/node_modules/pino/test/types/pino-transport.tst.ts +171 -0
  333. package/node_modules/pino/test/types/pino-type-only.tst.ts +77 -0
  334. package/node_modules/pino/test/types/pino.ts +98 -0
  335. package/node_modules/pino/test/types/pino.tst.ts +681 -0
  336. package/node_modules/pino/test/types/tsconfig.json +10 -0
  337. package/node_modules/pino/tsconfig.json +14 -0
  338. package/node_modules/pino-pretty/.borp.yaml +6 -0
  339. package/node_modules/pino-pretty/.editorconfig +13 -0
  340. package/node_modules/pino-pretty/.github/dependabot.yml +13 -0
  341. package/node_modules/pino-pretty/.github/workflows/ci.yml +83 -0
  342. package/node_modules/pino-pretty/LICENSE +21 -0
  343. package/node_modules/pino-pretty/Readme.md +425 -0
  344. package/node_modules/pino-pretty/SECURITY.md +146 -0
  345. package/node_modules/pino-pretty/benchmark.js +105 -0
  346. package/node_modules/pino-pretty/bin.js +113 -0
  347. package/node_modules/pino-pretty/demo.png +0 -0
  348. package/node_modules/pino-pretty/docs/help.md +24 -0
  349. package/node_modules/pino-pretty/eslint.config.js +5 -0
  350. package/node_modules/pino-pretty/help/help.txt +68 -0
  351. package/node_modules/pino-pretty/index.d.ts +227 -0
  352. package/node_modules/pino-pretty/index.js +234 -0
  353. package/node_modules/pino-pretty/lib/colors.js +134 -0
  354. package/node_modules/pino-pretty/lib/colors.test.js +132 -0
  355. package/node_modules/pino-pretty/lib/constants.js +55 -0
  356. package/node_modules/pino-pretty/lib/pretty.js +171 -0
  357. package/node_modules/pino-pretty/lib/utils/build-safe-sonic-boom.js +69 -0
  358. package/node_modules/pino-pretty/lib/utils/build-safe-sonic-boom.test.js +84 -0
  359. package/node_modules/pino-pretty/lib/utils/create-date.js +26 -0
  360. package/node_modules/pino-pretty/lib/utils/create-date.test.js +20 -0
  361. package/node_modules/pino-pretty/lib/utils/delete-log-property.js +28 -0
  362. package/node_modules/pino-pretty/lib/utils/delete-log-property.test.js +31 -0
  363. package/node_modules/pino-pretty/lib/utils/filter-log.js +99 -0
  364. package/node_modules/pino-pretty/lib/utils/filter-log.test.js +265 -0
  365. package/node_modules/pino-pretty/lib/utils/format-time.js +66 -0
  366. package/node_modules/pino-pretty/lib/utils/format-time.test.js +71 -0
  367. package/node_modules/pino-pretty/lib/utils/get-level-label-data.js +29 -0
  368. package/node_modules/pino-pretty/lib/utils/get-property-value.js +30 -0
  369. package/node_modules/pino-pretty/lib/utils/get-property-value.test.js +31 -0
  370. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-names-opts.js +38 -0
  371. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-names-opts.test.js +45 -0
  372. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-opts.js +39 -0
  373. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-opts.test.js +47 -0
  374. package/node_modules/pino-pretty/lib/utils/index.js +108 -0
  375. package/node_modules/pino-pretty/lib/utils/index.test.js +37 -0
  376. package/node_modules/pino-pretty/lib/utils/interpret-conditionals.js +41 -0
  377. package/node_modules/pino-pretty/lib/utils/interpret-conditionals.test.js +84 -0
  378. package/node_modules/pino-pretty/lib/utils/is-object.js +7 -0
  379. package/node_modules/pino-pretty/lib/utils/is-object.test.js +10 -0
  380. package/node_modules/pino-pretty/lib/utils/is-valid-date.js +14 -0
  381. package/node_modules/pino-pretty/lib/utils/is-valid-date.test.js +16 -0
  382. package/node_modules/pino-pretty/lib/utils/join-lines-with-indentation.js +29 -0
  383. package/node_modules/pino-pretty/lib/utils/join-lines-with-indentation.test.js +16 -0
  384. package/node_modules/pino-pretty/lib/utils/noop.js +3 -0
  385. package/node_modules/pino-pretty/lib/utils/noop.test.js +12 -0
  386. package/node_modules/pino-pretty/lib/utils/parse-factory-options.js +171 -0
  387. package/node_modules/pino-pretty/lib/utils/prettify-error-log.js +76 -0
  388. package/node_modules/pino-pretty/lib/utils/prettify-error-log.test.js +143 -0
  389. package/node_modules/pino-pretty/lib/utils/prettify-error.js +54 -0
  390. package/node_modules/pino-pretty/lib/utils/prettify-error.test.js +25 -0
  391. package/node_modules/pino-pretty/lib/utils/prettify-level.js +41 -0
  392. package/node_modules/pino-pretty/lib/utils/prettify-level.test.js +70 -0
  393. package/node_modules/pino-pretty/lib/utils/prettify-message.js +65 -0
  394. package/node_modules/pino-pretty/lib/utils/prettify-message.test.js +287 -0
  395. package/node_modules/pino-pretty/lib/utils/prettify-metadata.js +75 -0
  396. package/node_modules/pino-pretty/lib/utils/prettify-metadata.test.js +170 -0
  397. package/node_modules/pino-pretty/lib/utils/prettify-object.js +115 -0
  398. package/node_modules/pino-pretty/lib/utils/prettify-object.test.js +217 -0
  399. package/node_modules/pino-pretty/lib/utils/prettify-time.js +43 -0
  400. package/node_modules/pino-pretty/lib/utils/prettify-time.test.js +264 -0
  401. package/node_modules/pino-pretty/lib/utils/split-property-key.js +49 -0
  402. package/node_modules/pino-pretty/lib/utils/split-property-key.test.js +29 -0
  403. package/node_modules/pino-pretty/lib/utils/strip-unsafe-control-chars.js +18 -0
  404. package/node_modules/pino-pretty/lib/utils/strip-unsafe-control-chars.test.js +9 -0
  405. package/node_modules/pino-pretty/package.json +64 -0
  406. package/node_modules/pino-pretty/test/basic.test.js +1305 -0
  407. package/node_modules/pino-pretty/test/boolean-options.test.js +228 -0
  408. package/node_modules/pino-pretty/test/cli-rc.test.js +275 -0
  409. package/node_modules/pino-pretty/test/cli.test.js +360 -0
  410. package/node_modules/pino-pretty/test/crlf.test.js +33 -0
  411. package/node_modules/pino-pretty/test/error-objects.test.js +494 -0
  412. package/node_modules/pino-pretty/test/example/example.js +33 -0
  413. package/node_modules/pino-pretty/test/helper.js +19 -0
  414. package/node_modules/pino-pretty/test/types/exports.tst.ts +15 -0
  415. package/node_modules/pino-pretty/test/types/pino-pretty.tst.ts +140 -0
  416. package/node_modules/pino-pretty/test/types/tsconfig.json +9 -0
  417. package/package.json +14 -7
  418. package/lib/cli/commands/init.d.ts +0 -1
  419. package/lib/cli/commands/init.js +0 -8
  420. package/lib/cli/commands/save/draft.js +0 -2
  421. package/node_modules/@types/node/globals.global.d.ts +0 -1
  422. /package/{lib/cli/commands/save/draft.d.ts → node_modules/pino/.nojekyll} +0 -0
@@ -0,0 +1,265 @@
1
+ 'use strict'
2
+
3
+ const { describe, test } = require('node:test')
4
+ const filterLog = require('./filter-log')
5
+
6
+ const context = {
7
+ includeKeys: undefined,
8
+ ignoreKeys: undefined
9
+ }
10
+ const logData = {
11
+ level: 30,
12
+ time: 1522431328992,
13
+ data1: {
14
+ data2: { 'data-3': 'bar' },
15
+ error: new Error('test')
16
+ }
17
+ }
18
+ const logData2 = Object.assign({
19
+ 'logging.domain.corp/operation': {
20
+ id: 'foo',
21
+ producer: 'bar'
22
+ }
23
+ }, logData)
24
+
25
+ describe('#filterLog with an ignoreKeys option', () => {
26
+ test('filterLog removes single entry', t => {
27
+ const result = filterLog({
28
+ log: logData,
29
+ context: {
30
+ ...context,
31
+ ignoreKeys: ['data1.data2.data-3']
32
+ }
33
+ })
34
+ t.assert.deepStrictEqual(result, { level: 30, time: 1522431328992, data1: { data2: { }, error: new Error('test') } })
35
+ })
36
+
37
+ test('filterLog removes multiple entries', t => {
38
+ const result = filterLog({
39
+ log: logData,
40
+ context: {
41
+ ...context,
42
+ ignoreKeys: ['time', 'data1']
43
+ }
44
+ })
45
+ t.assert.deepStrictEqual(result, { level: 30 })
46
+ })
47
+
48
+ test('filterLog keeps error instance', t => {
49
+ const result = filterLog({
50
+ log: logData,
51
+ context: {
52
+ ...context,
53
+ ignoreKeys: []
54
+ }
55
+ })
56
+ t.assert.strictEqual(logData.data1.error, result.data1.error)
57
+ })
58
+
59
+ test('filterLog removes entry with escape sequence', t => {
60
+ const result = filterLog({
61
+ log: logData2,
62
+ context: {
63
+ ...context,
64
+ ignoreKeys: ['data1', 'logging\\.domain\\.corp/operation']
65
+ }
66
+ })
67
+ t.assert.deepStrictEqual(result, { level: 30, time: 1522431328992 })
68
+ })
69
+
70
+ test('filterLog removes entry with escape sequence nested', t => {
71
+ const result = filterLog({
72
+ log: logData2,
73
+ context: {
74
+ ...context,
75
+ ignoreKeys: ['data1', 'logging\\.domain\\.corp/operation.producer']
76
+ }
77
+ })
78
+ t.assert.deepStrictEqual(result, { level: 30, time: 1522431328992, 'logging.domain.corp/operation': { id: 'foo' } })
79
+ })
80
+ })
81
+
82
+ for (const ignoreKeys of [
83
+ undefined,
84
+ ['level'],
85
+ ['level', 'data1.data2.data-3']
86
+ ]) {
87
+ describe(`#filterLog with an includeKeys option when the ignoreKeys being ${ignoreKeys}`, () => {
88
+ test('filterLog include nothing', t => {
89
+ const result = filterLog({
90
+ log: logData,
91
+ context: {
92
+ ...context,
93
+ ignoreKeys,
94
+ includeKeys: []
95
+ }
96
+ })
97
+ t.assert.deepStrictEqual(result, {})
98
+ })
99
+
100
+ test('filterLog include empty key is a no-op', t => {
101
+ const result = filterLog({
102
+ log: logData,
103
+ context: {
104
+ ...context,
105
+ ignoreKeys,
106
+ includeKeys: ['']
107
+ }
108
+ })
109
+ t.assert.deepStrictEqual(result, {})
110
+ })
111
+
112
+ test('filterLog include single entry', t => {
113
+ const result = filterLog({
114
+ log: logData,
115
+ context: {
116
+ ...context,
117
+ ignoreKeys,
118
+ includeKeys: ['time']
119
+ }
120
+ })
121
+ t.assert.deepStrictEqual(result, { time: 1522431328992 })
122
+ })
123
+
124
+ test('filterLog include multiple entries', t => {
125
+ const result = filterLog({
126
+ log: logData,
127
+ context: {
128
+ ...context,
129
+ ignoreKeys,
130
+ includeKeys: ['time', 'data1']
131
+ }
132
+ })
133
+ t.assert.deepStrictEqual(result, {
134
+ time: 1522431328992,
135
+ data1: {
136
+ data2: { 'data-3': 'bar' },
137
+ error: new Error('test')
138
+ }
139
+ })
140
+ })
141
+
142
+ test('filterLog include nested entry', t => {
143
+ const result = filterLog({
144
+ log: logData,
145
+ context: {
146
+ ...context,
147
+ ignoreKeys,
148
+ includeKeys: ['data1.data2.data-3']
149
+ }
150
+ })
151
+ t.assert.deepStrictEqual(result, { data1: { data2: { 'data-3': 'bar' } } })
152
+ })
153
+
154
+ test('filterLog include nested and top-level entries', t => {
155
+ const result = filterLog({
156
+ log: logData,
157
+ context: {
158
+ ...context,
159
+ ignoreKeys,
160
+ includeKeys: ['time', 'data1.data2.data-3']
161
+ }
162
+ })
163
+ t.assert.deepStrictEqual(result, {
164
+ time: 1522431328992,
165
+ data1: { data2: { 'data-3': 'bar' } }
166
+ })
167
+ })
168
+
169
+ test('filterLog include missing nested entry', t => {
170
+ const result = filterLog({
171
+ log: logData,
172
+ context: {
173
+ ...context,
174
+ ignoreKeys,
175
+ includeKeys: ['data1.missing']
176
+ }
177
+ })
178
+ t.assert.deepStrictEqual(result, {})
179
+ })
180
+ })
181
+ }
182
+
183
+ describe('#filterLog includeKeys with escaped nested keys', () => {
184
+ test('filterLog include escaped top-level key', t => {
185
+ const result = filterLog({
186
+ log: logData2,
187
+ context: {
188
+ ...context,
189
+ includeKeys: ['logging\\.domain\\.corp/operation']
190
+ }
191
+ })
192
+ t.assert.deepStrictEqual(result, {
193
+ 'logging.domain.corp/operation': {
194
+ id: 'foo',
195
+ producer: 'bar'
196
+ }
197
+ })
198
+ })
199
+
200
+ test('filterLog include escaped nested key', t => {
201
+ const result = filterLog({
202
+ log: logData2,
203
+ context: {
204
+ ...context,
205
+ includeKeys: ['logging\\.domain\\.corp/operation.producer']
206
+ }
207
+ })
208
+ t.assert.deepStrictEqual(result, {
209
+ 'logging.domain.corp/operation': { producer: 'bar' }
210
+ })
211
+ })
212
+ })
213
+
214
+ describe('#filterLog with circular references', () => {
215
+ const logData = {
216
+ level: 30,
217
+ time: 1522431328992,
218
+ data1: 'test'
219
+ }
220
+ logData.circular = logData
221
+
222
+ test('filterLog removes single entry', t => {
223
+ const result = filterLog({
224
+ log: logData,
225
+ context: {
226
+ ...context,
227
+ ignoreKeys: ['data1']
228
+ }
229
+ })
230
+
231
+ t.assert.deepStrictEqual(result.circular.level, result.level)
232
+ t.assert.deepStrictEqual(result.circular.time, result.time)
233
+
234
+ delete result.circular
235
+ t.assert.deepStrictEqual(result, { level: 30, time: 1522431328992 })
236
+ })
237
+
238
+ test('filterLog includes single entry', t => {
239
+ const result = filterLog({
240
+ log: logData,
241
+ context: {
242
+ ...context,
243
+ includeKeys: ['data1']
244
+ }
245
+ })
246
+
247
+ t.assert.deepStrictEqual(result, { data1: 'test' })
248
+ })
249
+
250
+ test('filterLog includes circular keys', t => {
251
+ const result = filterLog({
252
+ log: logData,
253
+ context: {
254
+ ...context,
255
+ includeKeys: ['level', 'circular']
256
+ }
257
+ })
258
+
259
+ t.assert.deepStrictEqual(result.circular.level, logData.level)
260
+ t.assert.deepStrictEqual(result.circular.time, logData.time)
261
+
262
+ delete result.circular
263
+ t.assert.deepStrictEqual(result, { level: 30 })
264
+ })
265
+ })
@@ -0,0 +1,66 @@
1
+ 'use strict'
2
+
3
+ module.exports = formatTime
4
+
5
+ const {
6
+ DATE_FORMAT,
7
+ DATE_FORMAT_SIMPLE
8
+ } = require('../constants')
9
+
10
+ const dateformat = require('dateformat')
11
+ const createDate = require('./create-date')
12
+ const isValidDate = require('./is-valid-date')
13
+
14
+ /**
15
+ * Converts a given `epoch` to a desired display format.
16
+ *
17
+ * @param {number|string} epoch The time to convert. May be any value that is
18
+ * valid for `new Date()`.
19
+ * @param {boolean|string} [translateTime=false] When `false`, the given `epoch`
20
+ * will simply be returned. When `true`, the given `epoch` will be converted
21
+ * to a string at UTC using the `DATE_FORMAT_SIMPLE` constant. If `translateTime` is
22
+ * a string, the following rules are available:
23
+ *
24
+ * - `<format string>`: The string is a literal format string. This format
25
+ * string will be used to interpret the `epoch` and return a display string
26
+ * at UTC.
27
+ * - `SYS:STANDARD`: The returned display string will follow the `DATE_FORMAT`
28
+ * constant at the system's local timezone.
29
+ * - `SYS:<format string>`: The returned display string will follow the given
30
+ * `<format string>` at the system's local timezone.
31
+ * - `UTC:<format string>`: The returned display string will follow the given
32
+ * `<format string>` at UTC.
33
+ *
34
+ * @returns {number|string} The formatted time.
35
+ */
36
+ function formatTime (epoch, translateTime = false) {
37
+ if (translateTime === false) {
38
+ return epoch
39
+ }
40
+
41
+ const instant = createDate(epoch)
42
+
43
+ // If the Date is invalid, do not attempt to format
44
+ if (!isValidDate(instant)) {
45
+ return epoch
46
+ }
47
+
48
+ if (translateTime === true) {
49
+ return dateformat(instant, DATE_FORMAT_SIMPLE)
50
+ }
51
+
52
+ const upperFormat = translateTime.toUpperCase()
53
+ if (upperFormat === 'SYS:STANDARD') {
54
+ return dateformat(instant, DATE_FORMAT)
55
+ }
56
+
57
+ const prefix = upperFormat.substr(0, 4)
58
+ if (prefix === 'SYS:' || prefix === 'UTC:') {
59
+ if (prefix === 'UTC:') {
60
+ return dateformat(instant, translateTime)
61
+ }
62
+ return dateformat(instant, translateTime.slice(4))
63
+ }
64
+
65
+ return dateformat(instant, `UTC:${translateTime}`)
66
+ }
@@ -0,0 +1,71 @@
1
+ 'use strict'
2
+
3
+ process.env.TZ = 'UTC'
4
+
5
+ const { test } = require('node:test')
6
+ const formatTime = require('./format-time')
7
+
8
+ const dateStr = '2019-04-06T13:30:00.000-04:00'
9
+ const epoch = new Date(dateStr)
10
+ const epochMS = epoch.getTime()
11
+
12
+ test('passes through epoch if `translateTime` is `false`', t => {
13
+ const formattedTime = formatTime(epochMS)
14
+ t.assert.strictEqual(formattedTime, epochMS)
15
+ })
16
+
17
+ test('passes through epoch if date is invalid', t => {
18
+ const input = 'this is not a date'
19
+ const formattedTime = formatTime(input, true)
20
+ t.assert.strictEqual(formattedTime, input)
21
+ })
22
+
23
+ test('translates epoch milliseconds if `translateTime` is `true`', t => {
24
+ const formattedTime = formatTime(epochMS, true)
25
+ t.assert.strictEqual(formattedTime, '17:30:00.000')
26
+ })
27
+
28
+ test('translates epoch milliseconds to UTC string given format', t => {
29
+ const formattedTime = formatTime(epochMS, 'd mmm yyyy H:MM')
30
+ t.assert.strictEqual(formattedTime, '6 Apr 2019 17:30')
31
+ })
32
+
33
+ test('translates epoch milliseconds to SYS:STANDARD', t => {
34
+ const formattedTime = formatTime(epochMS, 'SYS:STANDARD')
35
+ t.assert.match(formattedTime, /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [-+]?\d{4}/)
36
+ })
37
+
38
+ test('translates epoch milliseconds to SYS:<FORMAT>', t => {
39
+ const formattedTime = formatTime(epochMS, 'SYS:d mmm yyyy H:MM')
40
+ t.assert.match(formattedTime, /\d{1} \w{3} \d{4} \d{1,2}:\d{2}/)
41
+ })
42
+
43
+ test('passes through date string if `translateTime` is `false`', t => {
44
+ const formattedTime = formatTime(dateStr)
45
+ t.assert.strictEqual(formattedTime, dateStr)
46
+ })
47
+
48
+ test('translates date string if `translateTime` is `true`', t => {
49
+ const formattedTime = formatTime(dateStr, true)
50
+ t.assert.strictEqual(formattedTime, '17:30:00.000')
51
+ })
52
+
53
+ test('translates date string to UTC string given format', t => {
54
+ const formattedTime = formatTime(dateStr, 'd mmm yyyy H:MM')
55
+ t.assert.strictEqual(formattedTime, '6 Apr 2019 17:30')
56
+ })
57
+
58
+ test('translates date string to SYS:STANDARD', t => {
59
+ const formattedTime = formatTime(dateStr, 'SYS:STANDARD')
60
+ t.assert.match(formattedTime, /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [-+]?\d{4}/)
61
+ })
62
+
63
+ test('translates date string to UTC:<FORMAT>', t => {
64
+ const formattedTime = formatTime(dateStr, 'UTC:d mmm yyyy H:MM')
65
+ t.assert.strictEqual(formattedTime, '6 Apr 2019 17:30')
66
+ })
67
+
68
+ test('translates date string to SYS:<FORMAT>', t => {
69
+ const formattedTime = formatTime(dateStr, 'SYS:d mmm yyyy H:MM')
70
+ t.assert.match(formattedTime, /\d{1} \w{3} \d{4} \d{1,2}:\d{2}/)
71
+ })
@@ -0,0 +1,29 @@
1
+ 'use strict'
2
+
3
+ module.exports = getLevelLabelData
4
+ const { LEVELS, LEVEL_NAMES } = require('../constants')
5
+
6
+ /**
7
+ * Given initial settings for custom levels/names and use of only custom props
8
+ * get the level label that corresponds with a given level number
9
+ *
10
+ * @param {boolean} useOnlyCustomProps
11
+ * @param {object} customLevels
12
+ * @param {object} customLevelNames
13
+ *
14
+ * @returns {function} A function that takes a number level and returns the level's label string
15
+ */
16
+ function getLevelLabelData (useOnlyCustomProps, customLevels, customLevelNames) {
17
+ const levels = useOnlyCustomProps ? customLevels || LEVELS : Object.assign({}, LEVELS, customLevels)
18
+ const levelNames = useOnlyCustomProps ? customLevelNames || LEVEL_NAMES : Object.assign({}, LEVEL_NAMES, customLevelNames)
19
+ return function (level) {
20
+ let levelNum = 'default'
21
+ if (Number.isInteger(+level)) {
22
+ levelNum = Object.prototype.hasOwnProperty.call(levels, level) ? level : levelNum
23
+ } else {
24
+ levelNum = Object.prototype.hasOwnProperty.call(levelNames, level.toLowerCase()) ? levelNames[level.toLowerCase()] : levelNum
25
+ }
26
+
27
+ return [levels[levelNum], levelNum]
28
+ }
29
+ }
@@ -0,0 +1,30 @@
1
+ 'use strict'
2
+
3
+ module.exports = getPropertyValue
4
+
5
+ const splitPropertyKey = require('./split-property-key')
6
+
7
+ /**
8
+ * Gets a specified property from an object if it exists.
9
+ *
10
+ * @param {object} obj The object to be searched.
11
+ * @param {string|string[]} property A string, or an array of strings, identifying
12
+ * the property to be retrieved from the object.
13
+ * Accepts nested properties delimited by a `.`.
14
+ * Delimiter can be escaped to preserve property names that contain the delimiter.
15
+ * e.g. `'prop1.prop2'` or `'prop2\.domain\.corp.prop2'`.
16
+ *
17
+ * @returns {*}
18
+ */
19
+ function getPropertyValue (obj, property) {
20
+ const props = Array.isArray(property) ? property : splitPropertyKey(property)
21
+
22
+ for (const prop of props) {
23
+ if (!Object.prototype.hasOwnProperty.call(obj, prop)) {
24
+ return
25
+ }
26
+ obj = obj[prop]
27
+ }
28
+
29
+ return obj
30
+ }
@@ -0,0 +1,31 @@
1
+ 'use strict'
2
+
3
+ const { test } = require('node:test')
4
+ const getPropertyValue = require('./get-property-value')
5
+
6
+ test('getPropertyValue returns the value of the property', t => {
7
+ const result = getPropertyValue({
8
+ foo: 'bar'
9
+ }, 'foo')
10
+ t.assert.strictEqual(result, 'bar')
11
+ })
12
+
13
+ test('getPropertyValue returns the value of the nested property', t => {
14
+ const result = getPropertyValue({ extra: { foo: { value: 'bar' } } }, 'extra.foo.value')
15
+ t.assert.strictEqual(result, 'bar')
16
+ })
17
+
18
+ test('getPropertyValue returns the value of the nested property using the array of nested property keys', t => {
19
+ const result = getPropertyValue({ extra: { foo: { value: 'bar' } } }, ['extra', 'foo', 'value'])
20
+ t.assert.strictEqual(result, 'bar')
21
+ })
22
+
23
+ test('getPropertyValue returns undefined for non-existing properties', t => {
24
+ const result = getPropertyValue({ extra: { foo: { value: 'bar' } } }, 'extra.foo.value-2')
25
+ t.assert.strictEqual(result, undefined)
26
+ })
27
+
28
+ test('getPropertyValue returns undefined for non-existing properties using the array of nested property keys', t => {
29
+ const result = getPropertyValue({ extra: { foo: { value: 'bar' } } }, ['extra', 'foo', 'value-2'])
30
+ t.assert.strictEqual(result, undefined)
31
+ })
@@ -0,0 +1,38 @@
1
+ 'use strict'
2
+
3
+ module.exports = handleCustomLevelsNamesOpts
4
+
5
+ /**
6
+ * Parse a CSV string or options object that maps level
7
+ * labels to level values.
8
+ *
9
+ * @param {string|object} cLevels An object mapping level
10
+ * names to level values, e.g. `{ info: 30, debug: 65 }`, or a
11
+ * CSV string in the format `level_name:level_value`, e.g.
12
+ * `info:30,debug:65`.
13
+ *
14
+ * @returns {object} An object mapping levels names to level values
15
+ * e.g. `{ info: 30, debug: 65 }`.
16
+ */
17
+ function handleCustomLevelsNamesOpts (cLevels) {
18
+ if (!cLevels) return {}
19
+
20
+ if (typeof cLevels === 'string') {
21
+ return cLevels
22
+ .split(',')
23
+ .reduce((agg, value, idx) => {
24
+ const [levelName, levelNum = idx] = value.split(':')
25
+ agg[levelName.toLowerCase()] = levelNum
26
+ return agg
27
+ }, {})
28
+ } else if (Object.prototype.toString.call(cLevels) === '[object Object]') {
29
+ return Object
30
+ .keys(cLevels)
31
+ .reduce((agg, levelName) => {
32
+ agg[levelName.toLowerCase()] = cLevels[levelName]
33
+ return agg
34
+ }, {})
35
+ } else {
36
+ return {}
37
+ }
38
+ }
@@ -0,0 +1,45 @@
1
+ 'use strict'
2
+
3
+ const { test } = require('node:test')
4
+ const match = require('@jsumners/assert-match')
5
+ const handleCustomLevelsNamesOpts = require('./handle-custom-levels-names-opts')
6
+
7
+ test('returns a empty object `{}` for undefined parameter', t => {
8
+ const handledCustomLevelNames = handleCustomLevelsNamesOpts()
9
+ t.assert.deepStrictEqual(handledCustomLevelNames, {})
10
+ })
11
+
12
+ test('returns a empty object `{}` for unknown parameter', t => {
13
+ const handledCustomLevelNames = handleCustomLevelsNamesOpts(123)
14
+ t.assert.deepStrictEqual(handledCustomLevelNames, {})
15
+ })
16
+
17
+ test('returns a filled object for string parameter', t => {
18
+ const handledCustomLevelNames = handleCustomLevelsNamesOpts('ok:10,warn:20,error:35')
19
+ match(handledCustomLevelNames, {
20
+ ok: 10,
21
+ warn: 20,
22
+ error: 35
23
+ }, t)
24
+ })
25
+
26
+ test('returns a filled object for object parameter', t => {
27
+ const handledCustomLevelNames = handleCustomLevelsNamesOpts({
28
+ ok: 10,
29
+ warn: 20,
30
+ error: 35
31
+ })
32
+ match(handledCustomLevelNames, {
33
+ ok: 10,
34
+ warn: 20,
35
+ error: 35
36
+ }, t)
37
+ })
38
+
39
+ test('defaults missing level num to first index', t => {
40
+ const result = handleCustomLevelsNamesOpts('ok:10,info')
41
+ match(result, {
42
+ ok: 10,
43
+ info: 1
44
+ }, t)
45
+ })
@@ -0,0 +1,39 @@
1
+ 'use strict'
2
+
3
+ module.exports = handleCustomLevelsOpts
4
+
5
+ /**
6
+ * Parse a CSV string or options object that specifies
7
+ * configuration for custom levels.
8
+ *
9
+ * @param {string|object} cLevels An object mapping level
10
+ * names to values, e.g. `{ info: 30, debug: 65 }`, or a
11
+ * CSV string in the format `level_name:level_value`, e.g.
12
+ * `info:30,debug:65`.
13
+ *
14
+ * @returns {object} An object mapping levels to labels that
15
+ * appear in logs, e.g. `{ '30': 'INFO', '65': 'DEBUG' }`.
16
+ */
17
+ function handleCustomLevelsOpts (cLevels) {
18
+ if (!cLevels) return {}
19
+
20
+ if (typeof cLevels === 'string') {
21
+ return cLevels
22
+ .split(',')
23
+ .reduce((agg, value, idx) => {
24
+ const [levelName, levelNum = idx] = value.split(':')
25
+ agg[levelNum] = levelName.toUpperCase()
26
+ return agg
27
+ },
28
+ { default: 'USERLVL' })
29
+ } else if (Object.prototype.toString.call(cLevels) === '[object Object]') {
30
+ return Object
31
+ .keys(cLevels)
32
+ .reduce((agg, levelName) => {
33
+ agg[cLevels[levelName]] = levelName.toUpperCase()
34
+ return agg
35
+ }, { default: 'USERLVL' })
36
+ } else {
37
+ return {}
38
+ }
39
+ }
@@ -0,0 +1,47 @@
1
+ 'use strict'
2
+
3
+ const { test } = require('node:test')
4
+ const handleCustomLevelsOpts = require('./handle-custom-levels-opts')
5
+
6
+ test('returns a empty object `{}` for undefined parameter', t => {
7
+ const handledCustomLevel = handleCustomLevelsOpts()
8
+ t.assert.deepStrictEqual(handledCustomLevel, {})
9
+ })
10
+
11
+ test('returns a empty object `{}` for unknown parameter', t => {
12
+ const handledCustomLevel = handleCustomLevelsOpts(123)
13
+ t.assert.deepStrictEqual(handledCustomLevel, {})
14
+ })
15
+
16
+ test('returns a filled object for string parameter', t => {
17
+ const handledCustomLevel = handleCustomLevelsOpts('ok:10,warn:20,error:35')
18
+ t.assert.deepStrictEqual(handledCustomLevel, {
19
+ 10: 'OK',
20
+ 20: 'WARN',
21
+ 35: 'ERROR',
22
+ default: 'USERLVL'
23
+ })
24
+ })
25
+
26
+ test('returns a filled object for object parameter', t => {
27
+ const handledCustomLevel = handleCustomLevelsOpts({
28
+ ok: 10,
29
+ warn: 20,
30
+ error: 35
31
+ })
32
+ t.assert.deepStrictEqual(handledCustomLevel, {
33
+ 10: 'OK',
34
+ 20: 'WARN',
35
+ 35: 'ERROR',
36
+ default: 'USERLVL'
37
+ })
38
+ })
39
+
40
+ test('defaults missing level num to first index', t => {
41
+ const result = handleCustomLevelsOpts('ok:10,info')
42
+ t.assert.deepStrictEqual(result, {
43
+ 10: 'OK',
44
+ 1: 'INFO',
45
+ default: 'USERLVL'
46
+ })
47
+ })