@wbce/projen-d9 0.0.28 → 0.1.1

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 +202 -45
  2. package/API.md +167 -37
  3. package/CHANGELOG.md +19 -0
  4. package/README.md +10 -3
  5. package/docs/D9-plumbing.md +194 -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.d.ts +2 -7
  23. package/lib/cli/commands/save/apply-snapshot.js +41 -31
  24. package/lib/cli/commands/save/check-unsaved.d.ts +9 -0
  25. package/lib/cli/commands/save/check-unsaved.js +81 -0
  26. package/lib/cli/commands/save/env.d.ts +37 -0
  27. package/lib/cli/commands/save/env.js +111 -0
  28. package/lib/cli/commands/save/save-snapshot.d.ts +4 -0
  29. package/lib/cli/commands/save/save-snapshot.js +233 -0
  30. package/lib/cli/commands/save/sync-files.d.ts +5 -0
  31. package/lib/cli/commands/save/sync-files.js +46 -0
  32. package/lib/cli/commands/save/transfer.d.ts +18 -0
  33. package/lib/cli/commands/save/transfer.js +97 -0
  34. package/lib/cli/commands/save/utils.d.ts +5 -0
  35. package/lib/cli/commands/save/utils.js +33 -3
  36. package/lib/cli/commands/sync.js +4 -3
  37. package/lib/cli/index.js +67 -25
  38. package/lib/cli/logger.d.ts +2 -0
  39. package/lib/cli/logger.js +10 -0
  40. package/lib/cli/plumbing-config.d.ts +12 -0
  41. package/lib/cli/plumbing-config.js +13 -0
  42. package/lib/index.d.ts +49 -5
  43. package/lib/index.js +54 -41
  44. package/node_modules/@cedar-policy/cedar-wasm/README.md +181 -0
  45. package/node_modules/@cedar-policy/cedar-wasm/esm/README.md +181 -0
  46. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm.d.ts +427 -0
  47. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm.js +9 -0
  48. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm_bg.js +434 -0
  49. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm_bg.wasm +0 -0
  50. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm_bg.wasm.d.ts +34 -0
  51. package/node_modules/@cedar-policy/cedar-wasm/esm/package.json +23 -0
  52. package/node_modules/@cedar-policy/cedar-wasm/nodejs/README.md +181 -0
  53. package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm.d.ts +427 -0
  54. package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm.js +463 -0
  55. package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm_bg.wasm +0 -0
  56. package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm_bg.wasm.d.ts +34 -0
  57. package/node_modules/@cedar-policy/cedar-wasm/nodejs/package.json +18 -0
  58. package/node_modules/@cedar-policy/cedar-wasm/package.json +53 -0
  59. package/node_modules/@cedar-policy/cedar-wasm/web/README.md +181 -0
  60. package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm.d.ts +486 -0
  61. package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm.js +534 -0
  62. package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm_bg.wasm +0 -0
  63. package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm_bg.wasm.d.ts +34 -0
  64. package/node_modules/@cedar-policy/cedar-wasm/web/package.json +21 -0
  65. package/node_modules/@types/node/README.md +5 -6
  66. package/node_modules/@types/node/assert/strict.d.ts +111 -0
  67. package/node_modules/@types/node/assert.d.ts +1040 -79
  68. package/node_modules/@types/node/async_hooks.d.ts +476 -119
  69. package/node_modules/@types/node/buffer.buffer.d.ts +472 -0
  70. package/node_modules/@types/node/buffer.d.ts +1925 -13
  71. package/node_modules/@types/node/child_process.d.ts +1204 -235
  72. package/node_modules/@types/node/cluster.d.ts +455 -137
  73. package/node_modules/@types/node/compatibility/disposable.d.ts +14 -0
  74. package/node_modules/@types/node/compatibility/index.d.ts +9 -0
  75. package/node_modules/@types/node/compatibility/indexable.d.ts +20 -0
  76. package/node_modules/@types/node/compatibility/iterators.d.ts +20 -0
  77. package/node_modules/@types/node/console.d.ts +450 -1
  78. package/node_modules/@types/node/constants.d.ts +20 -447
  79. package/node_modules/@types/node/crypto.d.ts +3962 -600
  80. package/node_modules/@types/node/dgram.d.ts +515 -33
  81. package/node_modules/@types/node/diagnostics_channel.d.ts +578 -0
  82. package/node_modules/@types/node/dns/promises.d.ts +503 -0
  83. package/node_modules/@types/node/dns.d.ts +798 -247
  84. package/node_modules/@types/node/domain.d.ts +164 -10
  85. package/node_modules/@types/node/events.d.ts +954 -25
  86. package/node_modules/@types/node/fs/promises.d.ts +1295 -0
  87. package/node_modules/@types/node/fs.d.ts +3463 -1569
  88. package/node_modules/@types/node/globals.d.ts +98 -1277
  89. package/node_modules/@types/node/globals.typedarray.d.ts +38 -0
  90. package/node_modules/@types/node/http.d.ts +1933 -300
  91. package/node_modules/@types/node/http2.d.ts +1946 -254
  92. package/node_modules/@types/node/https.d.ts +557 -134
  93. package/node_modules/@types/node/index.d.ts +54 -48
  94. package/node_modules/@types/node/inspector.d.ts +227 -3014
  95. package/node_modules/@types/node/inspector.generated.d.ts +4052 -0
  96. package/node_modules/@types/node/module.d.ts +890 -2
  97. package/node_modules/@types/node/net.d.ts +872 -105
  98. package/node_modules/@types/node/os.d.ts +452 -209
  99. package/node_modules/@types/node/package.json +78 -128
  100. package/node_modules/@types/node/path.d.ts +196 -155
  101. package/node_modules/@types/node/perf_hooks.d.ts +829 -120
  102. package/node_modules/@types/node/process.d.ts +2072 -3
  103. package/node_modules/@types/node/punycode.d.ts +69 -27
  104. package/node_modules/@types/node/querystring.d.ts +132 -9
  105. package/node_modules/@types/node/readline/promises.d.ts +161 -0
  106. package/node_modules/@types/node/readline.d.ts +485 -49
  107. package/node_modules/@types/node/repl.d.ts +121 -83
  108. package/node_modules/@types/node/sea.d.ts +153 -0
  109. package/node_modules/@types/node/sqlite.d.ts +721 -0
  110. package/node_modules/@types/node/stream/consumers.d.ts +38 -0
  111. package/node_modules/@types/node/stream/promises.d.ts +90 -0
  112. package/node_modules/@types/node/stream/web.d.ts +622 -0
  113. package/node_modules/@types/node/stream.d.ts +1470 -140
  114. package/node_modules/@types/node/string_decoder.d.ts +64 -4
  115. package/node_modules/@types/node/test.d.ts +2163 -0
  116. package/node_modules/@types/node/timers/promises.d.ts +108 -0
  117. package/node_modules/@types/node/timers.d.ts +284 -13
  118. package/node_modules/@types/node/tls.d.ts +850 -244
  119. package/node_modules/@types/node/trace_events.d.ts +147 -11
  120. package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +468 -0
  121. package/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +34 -0
  122. package/node_modules/@types/node/ts5.6/index.d.ts +97 -0
  123. package/node_modules/@types/node/tty.d.ts +160 -18
  124. package/node_modules/@types/node/url.d.ts +890 -53
  125. package/node_modules/@types/node/util.d.ts +2566 -160
  126. package/node_modules/@types/node/v8.d.ts +806 -83
  127. package/node_modules/@types/node/vm.d.ts +932 -44
  128. package/node_modules/@types/node/wasi.d.ts +148 -22
  129. package/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
  130. package/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  131. package/node_modules/@types/node/web-globals/events.d.ts +97 -0
  132. package/node_modules/@types/node/web-globals/fetch.d.ts +55 -0
  133. package/node_modules/@types/node/web-globals/navigator.d.ts +22 -0
  134. package/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  135. package/node_modules/@types/node/worker_threads.d.ts +657 -80
  136. package/node_modules/@types/node/zlib.d.ts +510 -119
  137. package/node_modules/pino/.nojekyll +0 -0
  138. package/node_modules/pino/.prettierignore +1 -0
  139. package/node_modules/pino/CNAME +1 -0
  140. package/node_modules/pino/CONTRIBUTING.md +34 -0
  141. package/node_modules/pino/LICENSE +21 -0
  142. package/node_modules/pino/README.md +177 -0
  143. package/node_modules/pino/SECURITY.md +103 -0
  144. package/node_modules/pino/benchmarks/basic.bench.js +95 -0
  145. package/node_modules/pino/benchmarks/child-child.bench.js +52 -0
  146. package/node_modules/pino/benchmarks/child-creation.bench.js +73 -0
  147. package/node_modules/pino/benchmarks/child.bench.js +62 -0
  148. package/node_modules/pino/benchmarks/deep-object.bench.js +88 -0
  149. package/node_modules/pino/benchmarks/formatters.bench.js +50 -0
  150. package/node_modules/pino/benchmarks/internal/custom-levels.js +67 -0
  151. package/node_modules/pino/benchmarks/internal/just-pino-heavy.bench.js +76 -0
  152. package/node_modules/pino/benchmarks/internal/just-pino.bench.js +182 -0
  153. package/node_modules/pino/benchmarks/internal/parent-vs-child.bench.js +75 -0
  154. package/node_modules/pino/benchmarks/internal/redact.bench.js +86 -0
  155. package/node_modules/pino/benchmarks/long-string.bench.js +81 -0
  156. package/node_modules/pino/benchmarks/multi-arg.bench.js +193 -0
  157. package/node_modules/pino/benchmarks/multistream.js +98 -0
  158. package/node_modules/pino/benchmarks/object.bench.js +82 -0
  159. package/node_modules/pino/benchmarks/utils/generate-benchmark-doc.js +36 -0
  160. package/node_modules/pino/benchmarks/utils/runbench.js +138 -0
  161. package/node_modules/pino/benchmarks/utils/wrap-log-level.js +55 -0
  162. package/node_modules/pino/bin.js +6 -0
  163. package/node_modules/pino/browser.js +607 -0
  164. package/node_modules/pino/build/sync-version.js +25 -0
  165. package/node_modules/pino/docs/api.md +1664 -0
  166. package/node_modules/pino/docs/asynchronous.md +55 -0
  167. package/node_modules/pino/docs/benchmarks.md +55 -0
  168. package/node_modules/pino/docs/browser.md +341 -0
  169. package/node_modules/pino/docs/bundling.md +40 -0
  170. package/node_modules/pino/docs/child-loggers.md +116 -0
  171. package/node_modules/pino/docs/diagnostics.md +16 -0
  172. package/node_modules/pino/docs/ecosystem.md +87 -0
  173. package/node_modules/pino/docs/help.md +353 -0
  174. package/node_modules/pino/docs/lts.md +93 -0
  175. package/node_modules/pino/docs/pretty.md +38 -0
  176. package/node_modules/pino/docs/redaction.md +130 -0
  177. package/node_modules/pino/docs/transports.md +1447 -0
  178. package/node_modules/pino/docs/web.md +306 -0
  179. package/node_modules/pino/eslint.config.js +36 -0
  180. package/node_modules/pino/examples/basic.js +43 -0
  181. package/node_modules/pino/examples/transport.js +68 -0
  182. package/node_modules/pino/favicon.ico +0 -0
  183. package/node_modules/pino/file.js +12 -0
  184. package/node_modules/pino/inc-version.sh +42 -0
  185. package/node_modules/pino/index.html +55 -0
  186. package/node_modules/pino/lib/caller.js +40 -0
  187. package/node_modules/pino/lib/constants.js +28 -0
  188. package/node_modules/pino/lib/deprecations.js +8 -0
  189. package/node_modules/pino/lib/levels.js +241 -0
  190. package/node_modules/pino/lib/meta.js +3 -0
  191. package/node_modules/pino/lib/multistream.js +211 -0
  192. package/node_modules/pino/lib/proto.js +256 -0
  193. package/node_modules/pino/lib/redaction.js +119 -0
  194. package/node_modules/pino/lib/symbols.js +76 -0
  195. package/node_modules/pino/lib/time.js +39 -0
  196. package/node_modules/pino/lib/tools.js +427 -0
  197. package/node_modules/pino/lib/transport-stream.js +56 -0
  198. package/node_modules/pino/lib/transport.js +302 -0
  199. package/node_modules/pino/lib/worker.js +197 -0
  200. package/node_modules/pino/package.json +112 -0
  201. package/node_modules/pino/pino.d.ts +881 -0
  202. package/node_modules/pino/pino.js +259 -0
  203. package/node_modules/pino/test/basic.test.js +952 -0
  204. package/node_modules/pino/test/broken-pipe.test.js +59 -0
  205. package/node_modules/pino/test/browser-bindings.test.js +114 -0
  206. package/node_modules/pino/test/browser-child.test.js +132 -0
  207. package/node_modules/pino/test/browser-disabled.test.js +87 -0
  208. package/node_modules/pino/test/browser-early-console-freeze.test.js +12 -0
  209. package/node_modules/pino/test/browser-is-level-enabled.test.js +101 -0
  210. package/node_modules/pino/test/browser-levels.test.js +241 -0
  211. package/node_modules/pino/test/browser-redaction.test.js +264 -0
  212. package/node_modules/pino/test/browser-serializers.test.js +352 -0
  213. package/node_modules/pino/test/browser-set-bindings.test.js +99 -0
  214. package/node_modules/pino/test/browser-timestamp.test.js +88 -0
  215. package/node_modules/pino/test/browser-transmit.test.js +417 -0
  216. package/node_modules/pino/test/browser.test.js +698 -0
  217. package/node_modules/pino/test/caller.test.js +20 -0
  218. package/node_modules/pino/test/complex-objects.test.js +36 -0
  219. package/node_modules/pino/test/crlf.test.js +34 -0
  220. package/node_modules/pino/test/custom-levels.test.js +267 -0
  221. package/node_modules/pino/test/diagnostics.test.js +107 -0
  222. package/node_modules/pino/test/error-key.test.js +37 -0
  223. package/node_modules/pino/test/error.test.js +403 -0
  224. package/node_modules/pino/test/escaping.test.js +110 -0
  225. package/node_modules/pino/test/esm/esm.mjs +14 -0
  226. package/node_modules/pino/test/esm/index.test.js +21 -0
  227. package/node_modules/pino/test/esm/named-exports.mjs +29 -0
  228. package/node_modules/pino/test/exit.test.js +79 -0
  229. package/node_modules/pino/test/fixtures/broken-pipe/basic.js +9 -0
  230. package/node_modules/pino/test/fixtures/broken-pipe/destination.js +10 -0
  231. package/node_modules/pino/test/fixtures/broken-pipe/syncfalse.js +12 -0
  232. package/node_modules/pino/test/fixtures/caller-loop.js +6 -0
  233. package/node_modules/pino/test/fixtures/console-transport.js +13 -0
  234. package/node_modules/pino/test/fixtures/crashing-transport.js +13 -0
  235. package/node_modules/pino/test/fixtures/default-exit.js +8 -0
  236. package/node_modules/pino/test/fixtures/destination-exit.js +8 -0
  237. package/node_modules/pino/test/fixtures/eval/index.js +13 -0
  238. package/node_modules/pino/test/fixtures/eval/node_modules/14-files.js +3 -0
  239. package/node_modules/pino/test/fixtures/eval/node_modules/2-files.js +3 -0
  240. package/node_modules/pino/test/fixtures/eval/node_modules/file1.js +5 -0
  241. package/node_modules/pino/test/fixtures/eval/node_modules/file10.js +5 -0
  242. package/node_modules/pino/test/fixtures/eval/node_modules/file11.js +5 -0
  243. package/node_modules/pino/test/fixtures/eval/node_modules/file12.js +5 -0
  244. package/node_modules/pino/test/fixtures/eval/node_modules/file13.js +5 -0
  245. package/node_modules/pino/test/fixtures/eval/node_modules/file14.js +11 -0
  246. package/node_modules/pino/test/fixtures/eval/node_modules/file2.js +5 -0
  247. package/node_modules/pino/test/fixtures/eval/node_modules/file3.js +5 -0
  248. package/node_modules/pino/test/fixtures/eval/node_modules/file4.js +5 -0
  249. package/node_modules/pino/test/fixtures/eval/node_modules/file5.js +5 -0
  250. package/node_modules/pino/test/fixtures/eval/node_modules/file6.js +5 -0
  251. package/node_modules/pino/test/fixtures/eval/node_modules/file7.js +5 -0
  252. package/node_modules/pino/test/fixtures/eval/node_modules/file8.js +5 -0
  253. package/node_modules/pino/test/fixtures/eval/node_modules/file9.js +5 -0
  254. package/node_modules/pino/test/fixtures/noop-transport.js +10 -0
  255. package/node_modules/pino/test/fixtures/pretty/null-prototype.js +8 -0
  256. package/node_modules/pino/test/fixtures/stdout-hack-protection.js +11 -0
  257. package/node_modules/pino/test/fixtures/syncfalse-child.js +6 -0
  258. package/node_modules/pino/test/fixtures/syncfalse-exit.js +9 -0
  259. package/node_modules/pino/test/fixtures/syncfalse-flush-exit.js +10 -0
  260. package/node_modules/pino/test/fixtures/syncfalse.js +6 -0
  261. package/node_modules/pino/test/fixtures/syntax-error-esm.mjs +2 -0
  262. package/node_modules/pino/test/fixtures/to-file-transport-with-transform.js +20 -0
  263. package/node_modules/pino/test/fixtures/to-file-transport.js +13 -0
  264. package/node_modules/pino/test/fixtures/to-file-transport.mjs +8 -0
  265. package/node_modules/pino/test/fixtures/transport/index.js +12 -0
  266. package/node_modules/pino/test/fixtures/transport/package.json +5 -0
  267. package/node_modules/pino/test/fixtures/transport-exit-immediately-with-async-dest.js +16 -0
  268. package/node_modules/pino/test/fixtures/transport-exit-immediately.js +11 -0
  269. package/node_modules/pino/test/fixtures/transport-exit-on-ready.js +12 -0
  270. package/node_modules/pino/test/fixtures/transport-invalid-node-options.js +26 -0
  271. package/node_modules/pino/test/fixtures/transport-main.js +9 -0
  272. package/node_modules/pino/test/fixtures/transport-many-lines.js +29 -0
  273. package/node_modules/pino/test/fixtures/transport-preload-main.mjs +13 -0
  274. package/node_modules/pino/test/fixtures/transport-preload.mjs +13 -0
  275. package/node_modules/pino/test/fixtures/transport-string-stdout.js +9 -0
  276. package/node_modules/pino/test/fixtures/transport-transform.js +21 -0
  277. package/node_modules/pino/test/fixtures/transport-uses-pino-config.js +33 -0
  278. package/node_modules/pino/test/fixtures/transport-with-on-exit.js +12 -0
  279. package/node_modules/pino/test/fixtures/transport-worker-data.js +19 -0
  280. package/node_modules/pino/test/fixtures/transport-worker-name.js +24 -0
  281. package/node_modules/pino/test/fixtures/transport-worker.js +15 -0
  282. package/node_modules/pino/test/fixtures/transport-wrong-export-type.js +3 -0
  283. package/node_modules/pino/test/fixtures/ts/to-file-transport-native.mts +15 -0
  284. package/node_modules/pino/test/fixtures/ts/to-file-transport-with-transform.ts +18 -0
  285. package/node_modules/pino/test/fixtures/ts/to-file-transport.ts +11 -0
  286. package/node_modules/pino/test/fixtures/ts/transpile.cjs +36 -0
  287. package/node_modules/pino/test/fixtures/ts/transport-exit-immediately-with-async-dest.ts +15 -0
  288. package/node_modules/pino/test/fixtures/ts/transport-exit-immediately.ts +10 -0
  289. package/node_modules/pino/test/fixtures/ts/transport-exit-on-ready.ts +11 -0
  290. package/node_modules/pino/test/fixtures/ts/transport-main.ts +8 -0
  291. package/node_modules/pino/test/fixtures/ts/transport-string-stdout.ts +8 -0
  292. package/node_modules/pino/test/fixtures/ts/transport-worker.ts +14 -0
  293. package/node_modules/pino/test/formatters.test.js +364 -0
  294. package/node_modules/pino/test/helper.d.ts +4 -0
  295. package/node_modules/pino/test/helper.js +159 -0
  296. package/node_modules/pino/test/hooks.test.js +114 -0
  297. package/node_modules/pino/test/http.test.js +214 -0
  298. package/node_modules/pino/test/internals/version.test.js +17 -0
  299. package/node_modules/pino/test/is-level-enabled.test.js +179 -0
  300. package/node_modules/pino/test/jest/basic.spec.js +10 -0
  301. package/node_modules/pino/test/levels.test.js +810 -0
  302. package/node_modules/pino/test/metadata.test.js +120 -0
  303. package/node_modules/pino/test/mixin-merge-strategy.test.js +57 -0
  304. package/node_modules/pino/test/mixin.test.js +241 -0
  305. package/node_modules/pino/test/multistream.test.js +793 -0
  306. package/node_modules/pino/test/redact.test.js +923 -0
  307. package/node_modules/pino/test/serializers.test.js +257 -0
  308. package/node_modules/pino/test/smoke.js +59 -0
  309. package/node_modules/pino/test/stdout-protection.test.js +41 -0
  310. package/node_modules/pino/test/syncfalse.test.js +186 -0
  311. package/node_modules/pino/test/timestamp-nano.test.js +37 -0
  312. package/node_modules/pino/test/timestamp.test.js +124 -0
  313. package/node_modules/pino/test/transport/big.test.js +42 -0
  314. package/node_modules/pino/test/transport/bundlers-support.test.js +99 -0
  315. package/node_modules/pino/test/transport/caller.test.js +24 -0
  316. package/node_modules/pino/test/transport/core.test.js +818 -0
  317. package/node_modules/pino/test/transport/core.transpiled.test.ts +114 -0
  318. package/node_modules/pino/test/transport/crash.test.js +36 -0
  319. package/node_modules/pino/test/transport/module-link.test.js +241 -0
  320. package/node_modules/pino/test/transport/native-type-stripping.test.mjs +151 -0
  321. package/node_modules/pino/test/transport/node-options.test.js +116 -0
  322. package/node_modules/pino/test/transport/pipeline.test.js +137 -0
  323. package/node_modules/pino/test/transport/preload.test.js +54 -0
  324. package/node_modules/pino/test/transport/repl.test.js +15 -0
  325. package/node_modules/pino/test/transport/sync-false.test.js +79 -0
  326. package/node_modules/pino/test/transport/sync-true.test.js +57 -0
  327. package/node_modules/pino/test/transport/targets.test.js +48 -0
  328. package/node_modules/pino/test/transport/uses-pino-config.test.js +166 -0
  329. package/node_modules/pino/test/transport-stream.test.js +40 -0
  330. package/node_modules/pino/test/types/pino-import.tst.cts +30 -0
  331. package/node_modules/pino/test/types/pino-import.tst.js +73 -0
  332. package/node_modules/pino/test/types/pino-multistream.tst.ts +49 -0
  333. package/node_modules/pino/test/types/pino-top-export.tst.ts +32 -0
  334. package/node_modules/pino/test/types/pino-transport.tst.ts +171 -0
  335. package/node_modules/pino/test/types/pino-type-only.tst.ts +77 -0
  336. package/node_modules/pino/test/types/pino.ts +98 -0
  337. package/node_modules/pino/test/types/pino.tst.ts +681 -0
  338. package/node_modules/pino/test/types/tsconfig.json +10 -0
  339. package/node_modules/pino/tsconfig.json +14 -0
  340. package/node_modules/pino-pretty/.borp.yaml +6 -0
  341. package/node_modules/pino-pretty/.editorconfig +13 -0
  342. package/node_modules/pino-pretty/.github/dependabot.yml +13 -0
  343. package/node_modules/pino-pretty/.github/workflows/ci.yml +83 -0
  344. package/node_modules/pino-pretty/LICENSE +21 -0
  345. package/node_modules/pino-pretty/Readme.md +425 -0
  346. package/node_modules/pino-pretty/SECURITY.md +146 -0
  347. package/node_modules/pino-pretty/benchmark.js +105 -0
  348. package/node_modules/pino-pretty/bin.js +113 -0
  349. package/node_modules/pino-pretty/demo.png +0 -0
  350. package/node_modules/pino-pretty/docs/help.md +24 -0
  351. package/node_modules/pino-pretty/eslint.config.js +5 -0
  352. package/node_modules/pino-pretty/help/help.txt +68 -0
  353. package/node_modules/pino-pretty/index.d.ts +227 -0
  354. package/node_modules/pino-pretty/index.js +234 -0
  355. package/node_modules/pino-pretty/lib/colors.js +134 -0
  356. package/node_modules/pino-pretty/lib/colors.test.js +132 -0
  357. package/node_modules/pino-pretty/lib/constants.js +55 -0
  358. package/node_modules/pino-pretty/lib/pretty.js +171 -0
  359. package/node_modules/pino-pretty/lib/utils/build-safe-sonic-boom.js +69 -0
  360. package/node_modules/pino-pretty/lib/utils/build-safe-sonic-boom.test.js +84 -0
  361. package/node_modules/pino-pretty/lib/utils/create-date.js +26 -0
  362. package/node_modules/pino-pretty/lib/utils/create-date.test.js +20 -0
  363. package/node_modules/pino-pretty/lib/utils/delete-log-property.js +28 -0
  364. package/node_modules/pino-pretty/lib/utils/delete-log-property.test.js +31 -0
  365. package/node_modules/pino-pretty/lib/utils/filter-log.js +99 -0
  366. package/node_modules/pino-pretty/lib/utils/filter-log.test.js +265 -0
  367. package/node_modules/pino-pretty/lib/utils/format-time.js +66 -0
  368. package/node_modules/pino-pretty/lib/utils/format-time.test.js +71 -0
  369. package/node_modules/pino-pretty/lib/utils/get-level-label-data.js +29 -0
  370. package/node_modules/pino-pretty/lib/utils/get-property-value.js +30 -0
  371. package/node_modules/pino-pretty/lib/utils/get-property-value.test.js +31 -0
  372. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-names-opts.js +38 -0
  373. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-names-opts.test.js +45 -0
  374. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-opts.js +39 -0
  375. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-opts.test.js +47 -0
  376. package/node_modules/pino-pretty/lib/utils/index.js +108 -0
  377. package/node_modules/pino-pretty/lib/utils/index.test.js +37 -0
  378. package/node_modules/pino-pretty/lib/utils/interpret-conditionals.js +41 -0
  379. package/node_modules/pino-pretty/lib/utils/interpret-conditionals.test.js +84 -0
  380. package/node_modules/pino-pretty/lib/utils/is-object.js +7 -0
  381. package/node_modules/pino-pretty/lib/utils/is-object.test.js +10 -0
  382. package/node_modules/pino-pretty/lib/utils/is-valid-date.js +14 -0
  383. package/node_modules/pino-pretty/lib/utils/is-valid-date.test.js +16 -0
  384. package/node_modules/pino-pretty/lib/utils/join-lines-with-indentation.js +29 -0
  385. package/node_modules/pino-pretty/lib/utils/join-lines-with-indentation.test.js +16 -0
  386. package/node_modules/pino-pretty/lib/utils/noop.js +3 -0
  387. package/node_modules/pino-pretty/lib/utils/noop.test.js +12 -0
  388. package/node_modules/pino-pretty/lib/utils/parse-factory-options.js +171 -0
  389. package/node_modules/pino-pretty/lib/utils/prettify-error-log.js +76 -0
  390. package/node_modules/pino-pretty/lib/utils/prettify-error-log.test.js +143 -0
  391. package/node_modules/pino-pretty/lib/utils/prettify-error.js +54 -0
  392. package/node_modules/pino-pretty/lib/utils/prettify-error.test.js +25 -0
  393. package/node_modules/pino-pretty/lib/utils/prettify-level.js +41 -0
  394. package/node_modules/pino-pretty/lib/utils/prettify-level.test.js +70 -0
  395. package/node_modules/pino-pretty/lib/utils/prettify-message.js +65 -0
  396. package/node_modules/pino-pretty/lib/utils/prettify-message.test.js +287 -0
  397. package/node_modules/pino-pretty/lib/utils/prettify-metadata.js +75 -0
  398. package/node_modules/pino-pretty/lib/utils/prettify-metadata.test.js +170 -0
  399. package/node_modules/pino-pretty/lib/utils/prettify-object.js +115 -0
  400. package/node_modules/pino-pretty/lib/utils/prettify-object.test.js +217 -0
  401. package/node_modules/pino-pretty/lib/utils/prettify-time.js +43 -0
  402. package/node_modules/pino-pretty/lib/utils/prettify-time.test.js +264 -0
  403. package/node_modules/pino-pretty/lib/utils/split-property-key.js +49 -0
  404. package/node_modules/pino-pretty/lib/utils/split-property-key.test.js +29 -0
  405. package/node_modules/pino-pretty/lib/utils/strip-unsafe-control-chars.js +18 -0
  406. package/node_modules/pino-pretty/lib/utils/strip-unsafe-control-chars.test.js +9 -0
  407. package/node_modules/pino-pretty/package.json +64 -0
  408. package/node_modules/pino-pretty/test/basic.test.js +1305 -0
  409. package/node_modules/pino-pretty/test/boolean-options.test.js +228 -0
  410. package/node_modules/pino-pretty/test/cli-rc.test.js +275 -0
  411. package/node_modules/pino-pretty/test/cli.test.js +360 -0
  412. package/node_modules/pino-pretty/test/crlf.test.js +33 -0
  413. package/node_modules/pino-pretty/test/error-objects.test.js +494 -0
  414. package/node_modules/pino-pretty/test/example/example.js +33 -0
  415. package/node_modules/pino-pretty/test/helper.js +19 -0
  416. package/node_modules/pino-pretty/test/types/exports.tst.ts +15 -0
  417. package/node_modules/pino-pretty/test/types/pino-pretty.tst.ts +140 -0
  418. package/node_modules/pino-pretty/test/types/tsconfig.json +9 -0
  419. package/package.json +12 -5
  420. package/lib/cli/commands/init.d.ts +0 -1
  421. package/lib/cli/commands/init.js +0 -8
  422. package/node_modules/@types/node/globals.global.d.ts +0 -1
@@ -0,0 +1,793 @@
1
+ 'use strict'
2
+
3
+ const test = require('node:test')
4
+ const assert = require('node:assert')
5
+ const { readFileSync } = require('node:fs')
6
+ const { join } = require('node:path')
7
+ const proxyquire = require('proxyquire')
8
+ const strip = require('strip-ansi')
9
+ const tspl = require('@matteo.collina/tspl')
10
+
11
+ const writeStream = require('flush-write-stream')
12
+ const pino = require('../')
13
+ const multistream = pino.multistream
14
+ const { file, sink } = require('./helper')
15
+
16
+ test('sends to multiple streams using string levels', async () => {
17
+ let messageCount = 0
18
+ const stream = writeStream(function (data, enc, cb) {
19
+ messageCount += 1
20
+ cb()
21
+ })
22
+ const streams = [
23
+ { stream },
24
+ { level: 'debug', stream },
25
+ { level: 'trace', stream },
26
+ { level: 'fatal', stream },
27
+ { level: 'silent', stream }
28
+ ]
29
+ const log = pino({
30
+ level: 'trace'
31
+ }, multistream(streams))
32
+ log.info('info stream')
33
+ log.debug('debug stream')
34
+ log.fatal('fatal stream')
35
+ assert.equal(messageCount, 9)
36
+ })
37
+
38
+ test('sends to multiple streams using custom levels', async () => {
39
+ let messageCount = 0
40
+ const stream = writeStream(function (data, enc, cb) {
41
+ messageCount += 1
42
+ cb()
43
+ })
44
+ const streams = [
45
+ { stream },
46
+ { level: 'debug', stream },
47
+ { level: 'trace', stream },
48
+ { level: 'fatal', stream },
49
+ { level: 'silent', stream }
50
+ ]
51
+ const log = pino({
52
+ level: 'trace'
53
+ }, multistream(streams))
54
+ log.info('info stream')
55
+ log.debug('debug stream')
56
+ log.fatal('fatal stream')
57
+ assert.equal(messageCount, 9)
58
+ })
59
+
60
+ test('sends to multiple streams using optionally predefined levels', async () => {
61
+ let messageCount = 0
62
+ const stream = writeStream(function (data, enc, cb) {
63
+ messageCount += 1
64
+ cb()
65
+ })
66
+ const opts = {
67
+ levels: {
68
+ silent: Infinity,
69
+ fatal: 60,
70
+ error: 50,
71
+ warn: 50,
72
+ info: 30,
73
+ debug: 20,
74
+ trace: 10
75
+ }
76
+ }
77
+ const streams = [
78
+ { stream },
79
+ { level: 'trace', stream },
80
+ { level: 'debug', stream },
81
+ { level: 'info', stream },
82
+ { level: 'warn', stream },
83
+ { level: 'error', stream },
84
+ { level: 'fatal', stream },
85
+ { level: 'silent', stream }
86
+ ]
87
+ const mstream = multistream(streams, opts)
88
+ const log = pino({
89
+ level: 'trace'
90
+ }, mstream)
91
+ log.trace('trace stream')
92
+ log.debug('debug stream')
93
+ log.info('info stream')
94
+ log.warn('warn stream')
95
+ log.error('error stream')
96
+ log.fatal('fatal stream')
97
+ log.silent('silent stream')
98
+ assert.equal(messageCount, 24)
99
+ })
100
+
101
+ test('sends to multiple streams using number levels', async () => {
102
+ let messageCount = 0
103
+ const stream = writeStream(function (data, enc, cb) {
104
+ messageCount += 1
105
+ cb()
106
+ })
107
+ const streams = [
108
+ { stream },
109
+ { level: 20, stream },
110
+ { level: 60, stream }
111
+ ]
112
+ const log = pino({
113
+ level: 'debug'
114
+ }, multistream(streams))
115
+ log.info('info stream')
116
+ log.debug('debug stream')
117
+ log.fatal('fatal stream')
118
+ assert.equal(messageCount, 6)
119
+ })
120
+
121
+ test('level include higher levels', async () => {
122
+ let messageCount = 0
123
+ const stream = writeStream(function (data, enc, cb) {
124
+ messageCount += 1
125
+ cb()
126
+ })
127
+ const log = pino({}, multistream([{ level: 'info', stream }]))
128
+ log.fatal('message')
129
+ assert.equal(messageCount, 1)
130
+ })
131
+
132
+ test('supports multiple arguments', async (t) => {
133
+ const plan = tspl(t, { plan: 2 })
134
+ const messages = []
135
+ const stream = writeStream(function (data, enc, cb) {
136
+ messages.push(JSON.parse(data))
137
+ if (messages.length === 2) {
138
+ const msg1 = messages[0]
139
+ plan.equal(msg1.msg, 'foo bar baz foobar')
140
+
141
+ const msg2 = messages[1]
142
+ plan.equal(msg2.msg, 'foo bar baz foobar barfoo foofoo')
143
+ }
144
+ cb()
145
+ })
146
+ const log = pino({}, multistream({ stream }))
147
+ log.info('%s %s %s %s', 'foo', 'bar', 'baz', 'foobar') // apply not invoked
148
+ log.info('%s %s %s %s %s %s', 'foo', 'bar', 'baz', 'foobar', 'barfoo', 'foofoo') // apply invoked
149
+
150
+ await plan
151
+ })
152
+
153
+ test('supports children', async (t) => {
154
+ const plan = tspl(t, { plan: 2 })
155
+ const stream = writeStream(function (data, enc, cb) {
156
+ const input = JSON.parse(data)
157
+ plan.equal(input.msg, 'child stream')
158
+ plan.equal(input.child, 'one')
159
+ cb()
160
+ })
161
+ const streams = [
162
+ { stream }
163
+ ]
164
+ const log = pino({}, multistream(streams)).child({ child: 'one' })
165
+ log.info('child stream')
166
+
167
+ await plan
168
+ })
169
+
170
+ test('supports grandchildren', async (t) => {
171
+ const plan = tspl(t, { plan: 9 })
172
+ const messages = []
173
+ const stream = writeStream(function (data, enc, cb) {
174
+ messages.push(JSON.parse(data))
175
+ if (messages.length === 3) {
176
+ const msg1 = messages[0]
177
+ plan.equal(msg1.msg, 'grandchild stream')
178
+ plan.equal(msg1.child, 'one')
179
+ plan.equal(msg1.grandchild, 'two')
180
+
181
+ const msg2 = messages[1]
182
+ plan.equal(msg2.msg, 'grandchild stream')
183
+ plan.equal(msg2.child, 'one')
184
+ plan.equal(msg2.grandchild, 'two')
185
+
186
+ const msg3 = messages[2]
187
+ plan.equal(msg3.msg, 'debug grandchild')
188
+ plan.equal(msg3.child, 'one')
189
+ plan.equal(msg3.grandchild, 'two')
190
+ }
191
+ cb()
192
+ })
193
+ const streams = [
194
+ { stream },
195
+ { level: 'debug', stream }
196
+ ]
197
+ const log = pino({
198
+ level: 'debug'
199
+ }, multistream(streams)).child({ child: 'one' }).child({ grandchild: 'two' })
200
+ log.info('grandchild stream')
201
+ log.debug('debug grandchild')
202
+
203
+ await plan
204
+ })
205
+
206
+ test('supports custom levels', (t, end) => {
207
+ const stream = writeStream(function (data, enc, cb) {
208
+ assert.equal(JSON.parse(data).msg, 'bar')
209
+ end()
210
+ })
211
+ const log = pino({
212
+ customLevels: {
213
+ foo: 35
214
+ }
215
+ }, multistream([{ level: 35, stream }]))
216
+ log.foo('bar')
217
+ })
218
+
219
+ test('supports pretty print', async (t) => {
220
+ const plan = tspl(t, { plan: 2 })
221
+ const stream = writeStream(function (data, enc, cb) {
222
+ plan.equal(strip(data.toString()).match(/INFO.*: pretty print/) != null, true)
223
+ cb()
224
+ })
225
+
226
+ const safeBoom = proxyquire('pino-pretty/lib/utils/build-safe-sonic-boom.js', {
227
+ 'sonic-boom': function () {
228
+ plan.ok('sonic created')
229
+ stream.flushSync = () => {}
230
+ stream.flush = () => {}
231
+ return stream
232
+ }
233
+ })
234
+ const nested = proxyquire('pino-pretty/lib/utils/index.js', {
235
+ './build-safe-sonic-boom.js': safeBoom
236
+ })
237
+ const pretty = proxyquire('pino-pretty', {
238
+ './lib/utils/index.js': nested
239
+ })
240
+
241
+ const log = pino({
242
+ level: 'debug',
243
+ name: 'helloName'
244
+ }, multistream([
245
+ { stream: pretty() }
246
+ ]))
247
+
248
+ log.info('pretty print')
249
+
250
+ await plan
251
+ })
252
+
253
+ test('emit propagates events to each stream', async (t) => {
254
+ const plan = tspl(t, { plan: 3 })
255
+ const handler = function (data) {
256
+ plan.equal(data.msg, 'world')
257
+ }
258
+ const streams = [sink(), sink(), sink()]
259
+ streams.forEach(function (s) {
260
+ s.once('hello', handler)
261
+ })
262
+ const stream = multistream(streams)
263
+ stream.emit('hello', { msg: 'world' })
264
+
265
+ await plan
266
+ })
267
+
268
+ test('children support custom levels', async (t) => {
269
+ const plan = tspl(t, { plan: 1 })
270
+ const stream = writeStream(function (data, enc, cb) {
271
+ plan.equal(JSON.parse(data).msg, 'bar')
272
+ })
273
+ const parent = pino({
274
+ customLevels: {
275
+ foo: 35
276
+ }
277
+ }, multistream([{ level: 35, stream }]))
278
+ const child = parent.child({ child: 'yes' })
279
+ child.foo('bar')
280
+
281
+ await plan
282
+ })
283
+
284
+ test('levelVal overrides level', async () => {
285
+ let messageCount = 0
286
+ const stream = writeStream(function (data, enc, cb) {
287
+ messageCount += 1
288
+ cb()
289
+ })
290
+ const streams = [
291
+ { stream },
292
+ { level: 'blabla', levelVal: 15, stream },
293
+ { level: 60, stream }
294
+ ]
295
+ const log = pino({
296
+ level: 'debug'
297
+ }, multistream(streams))
298
+ log.info('info stream')
299
+ log.debug('debug stream')
300
+ log.fatal('fatal stream')
301
+ assert.equal(messageCount, 6)
302
+ })
303
+
304
+ test('forwards metadata', async (t) => {
305
+ const plan = tspl(t, { plan: 4 })
306
+ const streams = [
307
+ {
308
+ stream: {
309
+ [Symbol.for('pino.metadata')]: true,
310
+ write (chunk) {
311
+ plan.equal(log, this.lastLogger)
312
+ plan.equal(30, this.lastLevel)
313
+ plan.deepEqual({ hello: 'world' }, this.lastObj)
314
+ plan.deepEqual('a msg', this.lastMsg)
315
+ }
316
+ }
317
+ }
318
+ ]
319
+
320
+ const log = pino({
321
+ level: 'debug'
322
+ }, multistream(streams))
323
+
324
+ log.info({ hello: 'world' }, 'a msg')
325
+
326
+ await plan
327
+ })
328
+
329
+ test('forward name', async (t) => {
330
+ const plan = tspl(t, { plan: 2 })
331
+ const streams = [
332
+ {
333
+ stream: {
334
+ [Symbol.for('pino.metadata')]: true,
335
+ write (chunk) {
336
+ const line = JSON.parse(chunk)
337
+ plan.equal(line.name, 'helloName')
338
+ plan.equal(line.hello, 'world')
339
+ }
340
+ }
341
+ }
342
+ ]
343
+
344
+ const log = pino({
345
+ level: 'debug',
346
+ name: 'helloName'
347
+ }, multistream(streams))
348
+
349
+ log.info({ hello: 'world' }, 'a msg')
350
+
351
+ await plan
352
+ })
353
+
354
+ test('forward name with child', async (t) => {
355
+ const plan = tspl(t, { plan: 3 })
356
+ const streams = [
357
+ {
358
+ stream: {
359
+ write (chunk) {
360
+ const line = JSON.parse(chunk)
361
+ plan.equal(line.name, 'helloName')
362
+ plan.equal(line.hello, 'world')
363
+ plan.equal(line.component, 'aComponent')
364
+ }
365
+ }
366
+ }
367
+ ]
368
+
369
+ const log = pino({
370
+ level: 'debug',
371
+ name: 'helloName'
372
+ }, multistream(streams)).child({ component: 'aComponent' })
373
+
374
+ log.info({ hello: 'world' }, 'a msg')
375
+
376
+ await plan
377
+ })
378
+
379
+ test('clone generates a new multistream with all stream at the same level', async (t) => {
380
+ const plan = tspl(t, { plan: 14 })
381
+ let messageCount = 0
382
+ const stream = writeStream(function (data, enc, cb) {
383
+ messageCount += 1
384
+ cb()
385
+ })
386
+ const streams = [
387
+ { stream },
388
+ { level: 'debug', stream },
389
+ { level: 'trace', stream },
390
+ { level: 'fatal', stream }
391
+ ]
392
+ const ms = multistream(streams)
393
+ const clone = ms.clone(30)
394
+
395
+ // eslint-disable-next-line eqeqeq
396
+ plan.equal(clone != ms, true)
397
+
398
+ clone.streams.forEach((s, i) => {
399
+ // eslint-disable-next-line eqeqeq
400
+ plan.equal(s != streams[i], true)
401
+ plan.equal(s.stream, streams[i].stream)
402
+ plan.equal(s.level, 30)
403
+ })
404
+
405
+ const log = pino({
406
+ level: 'trace'
407
+ }, clone)
408
+
409
+ log.info('info stream')
410
+ log.debug('debug message not counted')
411
+ log.fatal('fatal stream')
412
+ plan.equal(messageCount, 8)
413
+
414
+ await plan
415
+ })
416
+
417
+ test('clone supports add, remove, and end methods correctly', async (t) => {
418
+ const plan = tspl(t, { plan: 5 })
419
+ const stream1 = writeStream(function (data, enc, cb) {
420
+ cb()
421
+ })
422
+ const stream2 = writeStream(function (data, enc, cb) {
423
+ cb()
424
+ })
425
+
426
+ const ms = multistream([{ stream: stream1 }])
427
+ const clone = ms.clone(30)
428
+
429
+ // Verify that adding a stream with a string level doesn't throw and returns the clone
430
+ const updatedClone = clone.add({ level: 'info', stream: stream2 })
431
+ plan.equal(updatedClone, clone)
432
+ plan.equal(clone.streams.length, 2)
433
+
434
+ // Verify remove returns the clone and works correctly
435
+ const stream2Entry = clone.streams.find(s => s.stream === stream2)
436
+ if (stream2Entry) {
437
+ const afterRemove = clone.remove(stream2Entry.id)
438
+ plan.equal(afterRemove, clone)
439
+ plan.equal(clone.streams.length, 1)
440
+ } else {
441
+ plan.fail('stream2 entry not found')
442
+ }
443
+
444
+ // Verify end method is present and can be called without errors
445
+ plan.equal(typeof clone.end, 'function')
446
+ clone.end()
447
+
448
+ await plan
449
+ })
450
+
451
+ test('one stream', async () => {
452
+ let messageCount = 0
453
+ const stream = writeStream(function (data, enc, cb) {
454
+ messageCount += 1
455
+ cb()
456
+ })
457
+ const log = pino({
458
+ level: 'trace'
459
+ }, multistream({ stream, level: 'fatal' }))
460
+ log.info('info stream')
461
+ log.debug('debug stream')
462
+ log.fatal('fatal stream')
463
+ assert.equal(messageCount, 1)
464
+ })
465
+
466
+ test('dedupe', async () => {
467
+ let messageCount = 0
468
+ const stream1 = writeStream(function (data, enc, cb) {
469
+ messageCount -= 1
470
+ cb()
471
+ })
472
+
473
+ const stream2 = writeStream(function (data, enc, cb) {
474
+ messageCount += 1
475
+ cb()
476
+ })
477
+
478
+ const streams = [
479
+ {
480
+ stream: stream1,
481
+ level: 'info'
482
+ },
483
+ {
484
+ stream: stream2,
485
+ level: 'fatal'
486
+ }
487
+ ]
488
+
489
+ const log = pino({
490
+ level: 'trace'
491
+ }, multistream(streams, { dedupe: true }))
492
+ log.info('info stream')
493
+ log.fatal('fatal stream')
494
+ log.fatal('fatal stream')
495
+ assert.equal(messageCount, 1)
496
+ })
497
+
498
+ test('dedupe when logs have different levels', async () => {
499
+ let messageCount = 0
500
+ const stream1 = writeStream(function (data, enc, cb) {
501
+ messageCount += 1
502
+ cb()
503
+ })
504
+
505
+ const stream2 = writeStream(function (data, enc, cb) {
506
+ messageCount += 2
507
+ cb()
508
+ })
509
+
510
+ const streams = [
511
+ {
512
+ stream: stream1,
513
+ level: 'info'
514
+ },
515
+ {
516
+ stream: stream2,
517
+ level: 'error'
518
+ }
519
+ ]
520
+
521
+ const log = pino({
522
+ level: 'trace'
523
+ }, multistream(streams, { dedupe: true }))
524
+
525
+ log.info('info stream')
526
+ log.warn('warn stream')
527
+ log.error('error streams')
528
+ log.fatal('fatal streams')
529
+ assert.equal(messageCount, 6)
530
+ })
531
+
532
+ test('dedupe when some streams has the same level', async () => {
533
+ let messageCount = 0
534
+ const stream1 = writeStream(function (data, enc, cb) {
535
+ messageCount -= 1
536
+ cb()
537
+ })
538
+
539
+ const stream2 = writeStream(function (data, enc, cb) {
540
+ messageCount += 1
541
+ cb()
542
+ })
543
+
544
+ const stream3 = writeStream(function (data, enc, cb) {
545
+ messageCount += 1
546
+ cb()
547
+ })
548
+
549
+ const streams = [
550
+ {
551
+ stream: stream1,
552
+ level: 'info'
553
+ },
554
+ {
555
+ stream: stream2,
556
+ level: 'fatal'
557
+ },
558
+ {
559
+ stream: stream3,
560
+ level: 'fatal'
561
+ }
562
+ ]
563
+
564
+ const log = pino({
565
+ level: 'trace'
566
+ }, multistream(streams, { dedupe: true }))
567
+ log.info('info stream')
568
+ log.fatal('fatal streams')
569
+ log.fatal('fatal streams')
570
+ assert.equal(messageCount, 3)
571
+ })
572
+
573
+ test('no stream', async () => {
574
+ const log = pino({
575
+ level: 'trace'
576
+ }, multistream())
577
+ log.info('info stream')
578
+ log.debug('debug stream')
579
+ log.fatal('fatal stream')
580
+ })
581
+
582
+ test('one stream', async () => {
583
+ let messageCount = 0
584
+ const stream = writeStream(function (data, enc, cb) {
585
+ messageCount += 1
586
+ cb()
587
+ })
588
+ const log = pino({
589
+ level: 'trace'
590
+ }, multistream(stream))
591
+ log.info('info stream')
592
+ log.debug('debug stream')
593
+ log.fatal('fatal stream')
594
+ assert.equal(messageCount, 2)
595
+ })
596
+
597
+ test('add a stream', async () => {
598
+ let messageCount = 0
599
+ const stream = writeStream(function (data, enc, cb) {
600
+ messageCount += 1
601
+ cb()
602
+ })
603
+
604
+ const log = pino({
605
+ level: 'trace'
606
+ }, multistream().add(stream))
607
+ log.info('info stream')
608
+ log.debug('debug stream')
609
+ log.fatal('fatal stream')
610
+ assert.equal(messageCount, 2)
611
+ })
612
+
613
+ test('remove a stream', async () => {
614
+ let messageCount1 = 0
615
+ let messageCount2 = 0
616
+ let messageCount3 = 0
617
+
618
+ const stream1 = writeStream(function (data, enc, cb) {
619
+ messageCount1 += 1
620
+ cb()
621
+ })
622
+
623
+ const stream2 = writeStream(function (data, enc, cb) {
624
+ messageCount2 += 1
625
+ cb()
626
+ })
627
+
628
+ const stream3 = writeStream(function (data, enc, cb) {
629
+ messageCount3 += 1
630
+ cb()
631
+ })
632
+
633
+ const multi = multistream()
634
+ const log = pino({ level: 'trace', sync: true }, multi)
635
+
636
+ multi.add(stream1)
637
+ const id1 = multi.lastId
638
+
639
+ multi.add(stream2)
640
+ const id2 = multi.lastId
641
+
642
+ multi.add(stream3)
643
+ const id3 = multi.lastId
644
+
645
+ log.info('line')
646
+ multi.remove(id1)
647
+
648
+ log.info('line')
649
+ multi.remove(id2)
650
+
651
+ log.info('line')
652
+ multi.remove(id3)
653
+
654
+ log.info('line')
655
+ multi.remove(Math.floor(Math.random() * 1000)) // non-existing id
656
+
657
+ assert.equal(messageCount1, 1)
658
+ assert.equal(messageCount2, 2)
659
+ assert.equal(messageCount3, 3)
660
+ })
661
+
662
+ test('multistream.add throws if not a stream', async () => {
663
+ try {
664
+ pino({
665
+ level: 'trace'
666
+ }, multistream().add({}))
667
+ } catch (_) {
668
+ }
669
+ })
670
+
671
+ test('multistream throws if not a stream', async () => {
672
+ try {
673
+ pino({
674
+ level: 'trace'
675
+ }, multistream({}))
676
+ } catch (_) {
677
+ }
678
+ })
679
+
680
+ test('multistream.write should not throw if one stream fails', async () => {
681
+ let messageCount = 0
682
+ const stream = writeStream(function (data, enc, cb) {
683
+ messageCount += 1
684
+ cb()
685
+ })
686
+ const noopStream = pino.transport({
687
+ target: join(__dirname, 'fixtures', 'noop-transport.js')
688
+ })
689
+ // eslint-disable-next-line
690
+ noopStream.on('error', function (err) {
691
+ // something went wrong while writing to noop stream, ignoring!
692
+ })
693
+ const log = pino({
694
+ level: 'trace'
695
+ },
696
+ multistream([
697
+ {
698
+ level: 'trace',
699
+ stream
700
+ },
701
+ {
702
+ level: 'debug',
703
+ stream: noopStream
704
+ }
705
+ ])
706
+ )
707
+ log.debug('0')
708
+ noopStream.end()
709
+ // noop stream is ending, should emit an error but not throw
710
+ log.debug('1')
711
+ log.debug('2')
712
+ assert.equal(messageCount, 3)
713
+ })
714
+
715
+ test('write routes correctly when the source sets a string lastLevel', async () => {
716
+ // A source that formats levels as labels (e.g. pino-abstract-transport
717
+ // relaying lines produced with a `formatters.level` option) assigns the
718
+ // string label to `lastLevel` via the metadata protocol. multistream must
719
+ // resolve that label to a numeric value before comparing against the
720
+ // per-stream levels, otherwise the log line is silently dropped.
721
+ const received = []
722
+ const mkStream = (name) => writeStream(function (data, enc, cb) {
723
+ received.push(name)
724
+ cb()
725
+ })
726
+ const streams = [
727
+ { level: 'debug', stream: mkStream('debug') },
728
+ { level: 'error', stream: mkStream('error') }
729
+ ]
730
+ const multi = multistream(streams, { levels: pino.levels.values })
731
+
732
+ // Emulate the metadata protocol used by pino / pino-abstract-transport,
733
+ // but with a level label string instead of a number.
734
+ multi.lastLevel = 'error'
735
+ multi.lastMsg = 'boom'
736
+ multi.lastObj = {}
737
+ multi.lastTime = Date.now()
738
+ multi.write('{"level":"error","msg":"boom"}\n')
739
+
740
+ // An error-level record must reach both the debug (<= error) and error
741
+ // streams, exactly as it would when lastLevel is the numeric 50.
742
+ assert.deepStrictEqual(received.sort(), ['debug', 'error'])
743
+ })
744
+
745
+ test('flushSync', async (t) => {
746
+ const plan = tspl(t, { plan: 2 })
747
+ const tmp = file()
748
+ const destination = pino.destination({ dest: tmp, sync: false, minLength: 4096 })
749
+ const stream = multistream([{ level: 'info', stream: destination }])
750
+ const log = pino({ level: 'info' }, stream)
751
+ destination.on('ready', () => {
752
+ log.info('foo')
753
+ log.info('bar')
754
+ stream.flushSync()
755
+ plan.equal(readFileSync(tmp, { encoding: 'utf-8' }).split('\n').length - 1, 2)
756
+ log.info('biz')
757
+ stream.flushSync()
758
+ plan.equal(readFileSync(tmp, { encoding: 'utf-8' }).split('\n').length - 1, 3)
759
+ })
760
+
761
+ await plan
762
+ })
763
+
764
+ test('ends all streams', async (t) => {
765
+ const plan = tspl(t, { plan: 7 })
766
+ const stream = writeStream(function (data, enc, cb) {
767
+ plan.ok('message')
768
+ cb()
769
+ })
770
+ stream.flushSync = function () {
771
+ plan.ok('flushSync')
772
+ }
773
+ // stream2 has no flushSync
774
+ const stream2 = writeStream(function (data, enc, cb) {
775
+ plan.ok('message2')
776
+ cb()
777
+ })
778
+ const streams = [
779
+ { stream },
780
+ { level: 'debug', stream },
781
+ { level: 'trace', stream: stream2 },
782
+ { level: 'fatal', stream },
783
+ { level: 'silent', stream }
784
+ ]
785
+ const multi = multistream(streams)
786
+ const log = pino({
787
+ level: 'trace'
788
+ }, multi)
789
+ log.info('info stream')
790
+ multi.end()
791
+
792
+ await plan
793
+ })