@wbce/projen-d9 0.0.28 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/.jsii +184 -45
  2. package/API.md +153 -37
  3. package/CHANGELOG.md +13 -0
  4. package/README.md +10 -3
  5. package/docs/D9-plumbing.md +189 -0
  6. package/lib/cli/atlas.d.ts +10 -0
  7. package/lib/cli/atlas.js +65 -0
  8. package/lib/cli/commands/cedar/cedar-format.d.ts +7 -0
  9. package/lib/cli/commands/cedar/cedar-format.js +75 -0
  10. package/lib/cli/commands/cedar/cedar-to-d9-translations.d.ts +12 -0
  11. package/lib/cli/commands/cedar/cedar-to-d9-translations.js +130 -0
  12. package/lib/cli/commands/cedar/cedar-to-d9.d.ts +57 -0
  13. package/lib/cli/commands/cedar/cedar-to-d9.js +221 -0
  14. package/lib/cli/commands/cedar/cedar-translations.d.ts +9 -0
  15. package/lib/cli/commands/cedar/cedar-translations.js +213 -0
  16. package/lib/cli/commands/cedar/d9-permission.d.ts +27 -0
  17. package/lib/cli/commands/cedar/d9-permission.js +45 -0
  18. package/lib/cli/commands/cedar/d9-to-cedar.d.ts +33 -0
  19. package/lib/cli/commands/cedar/d9-to-cedar.js +157 -0
  20. package/lib/cli/commands/cedar/roles-table.d.ts +14 -0
  21. package/lib/cli/commands/cedar/roles-table.js +29 -0
  22. package/lib/cli/commands/save/apply-snapshot.js +39 -30
  23. package/lib/cli/commands/save/check-unsaved.d.ts +9 -0
  24. package/lib/cli/commands/save/check-unsaved.js +81 -0
  25. package/lib/cli/commands/save/env.d.ts +33 -0
  26. package/lib/cli/commands/save/env.js +109 -0
  27. package/lib/cli/commands/save/save-snapshot.d.ts +9 -0
  28. package/lib/cli/commands/save/save-snapshot.js +232 -0
  29. package/lib/cli/commands/save/sync-files.d.ts +5 -0
  30. package/lib/cli/commands/save/sync-files.js +46 -0
  31. package/lib/cli/commands/save/transfer.d.ts +18 -0
  32. package/lib/cli/commands/save/transfer.js +96 -0
  33. package/lib/cli/commands/save/utils.d.ts +5 -0
  34. package/lib/cli/commands/save/utils.js +33 -3
  35. package/lib/cli/commands/sync.js +4 -3
  36. package/lib/cli/index.js +65 -25
  37. package/lib/cli/logger.d.ts +2 -0
  38. package/lib/cli/logger.js +10 -0
  39. package/lib/cli/plumbing-config.d.ts +11 -0
  40. package/lib/cli/plumbing-config.js +13 -0
  41. package/lib/index.d.ts +44 -5
  42. package/lib/index.js +54 -41
  43. package/node_modules/@cedar-policy/cedar-wasm/README.md +181 -0
  44. package/node_modules/@cedar-policy/cedar-wasm/esm/README.md +181 -0
  45. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm.d.ts +427 -0
  46. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm.js +9 -0
  47. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm_bg.js +434 -0
  48. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm_bg.wasm +0 -0
  49. package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm_bg.wasm.d.ts +34 -0
  50. package/node_modules/@cedar-policy/cedar-wasm/esm/package.json +23 -0
  51. package/node_modules/@cedar-policy/cedar-wasm/nodejs/README.md +181 -0
  52. package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm.d.ts +427 -0
  53. package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm.js +463 -0
  54. package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm_bg.wasm +0 -0
  55. package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm_bg.wasm.d.ts +34 -0
  56. package/node_modules/@cedar-policy/cedar-wasm/nodejs/package.json +18 -0
  57. package/node_modules/@cedar-policy/cedar-wasm/package.json +53 -0
  58. package/node_modules/@cedar-policy/cedar-wasm/web/README.md +181 -0
  59. package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm.d.ts +486 -0
  60. package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm.js +534 -0
  61. package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm_bg.wasm +0 -0
  62. package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm_bg.wasm.d.ts +34 -0
  63. package/node_modules/@cedar-policy/cedar-wasm/web/package.json +21 -0
  64. package/node_modules/@types/node/README.md +5 -6
  65. package/node_modules/@types/node/assert/strict.d.ts +111 -0
  66. package/node_modules/@types/node/assert.d.ts +1040 -79
  67. package/node_modules/@types/node/async_hooks.d.ts +476 -119
  68. package/node_modules/@types/node/buffer.buffer.d.ts +472 -0
  69. package/node_modules/@types/node/buffer.d.ts +1925 -13
  70. package/node_modules/@types/node/child_process.d.ts +1204 -235
  71. package/node_modules/@types/node/cluster.d.ts +455 -137
  72. package/node_modules/@types/node/compatibility/disposable.d.ts +14 -0
  73. package/node_modules/@types/node/compatibility/index.d.ts +9 -0
  74. package/node_modules/@types/node/compatibility/indexable.d.ts +20 -0
  75. package/node_modules/@types/node/compatibility/iterators.d.ts +20 -0
  76. package/node_modules/@types/node/console.d.ts +450 -1
  77. package/node_modules/@types/node/constants.d.ts +20 -447
  78. package/node_modules/@types/node/crypto.d.ts +3962 -600
  79. package/node_modules/@types/node/dgram.d.ts +515 -33
  80. package/node_modules/@types/node/diagnostics_channel.d.ts +578 -0
  81. package/node_modules/@types/node/dns/promises.d.ts +503 -0
  82. package/node_modules/@types/node/dns.d.ts +798 -247
  83. package/node_modules/@types/node/domain.d.ts +164 -10
  84. package/node_modules/@types/node/events.d.ts +954 -25
  85. package/node_modules/@types/node/fs/promises.d.ts +1295 -0
  86. package/node_modules/@types/node/fs.d.ts +3463 -1569
  87. package/node_modules/@types/node/globals.d.ts +98 -1277
  88. package/node_modules/@types/node/globals.typedarray.d.ts +38 -0
  89. package/node_modules/@types/node/http.d.ts +1933 -300
  90. package/node_modules/@types/node/http2.d.ts +1946 -254
  91. package/node_modules/@types/node/https.d.ts +557 -134
  92. package/node_modules/@types/node/index.d.ts +54 -48
  93. package/node_modules/@types/node/inspector.d.ts +227 -3014
  94. package/node_modules/@types/node/inspector.generated.d.ts +4052 -0
  95. package/node_modules/@types/node/module.d.ts +890 -2
  96. package/node_modules/@types/node/net.d.ts +872 -105
  97. package/node_modules/@types/node/os.d.ts +452 -209
  98. package/node_modules/@types/node/package.json +78 -128
  99. package/node_modules/@types/node/path.d.ts +196 -155
  100. package/node_modules/@types/node/perf_hooks.d.ts +829 -120
  101. package/node_modules/@types/node/process.d.ts +2072 -3
  102. package/node_modules/@types/node/punycode.d.ts +69 -27
  103. package/node_modules/@types/node/querystring.d.ts +132 -9
  104. package/node_modules/@types/node/readline/promises.d.ts +161 -0
  105. package/node_modules/@types/node/readline.d.ts +485 -49
  106. package/node_modules/@types/node/repl.d.ts +121 -83
  107. package/node_modules/@types/node/sea.d.ts +153 -0
  108. package/node_modules/@types/node/sqlite.d.ts +721 -0
  109. package/node_modules/@types/node/stream/consumers.d.ts +38 -0
  110. package/node_modules/@types/node/stream/promises.d.ts +90 -0
  111. package/node_modules/@types/node/stream/web.d.ts +622 -0
  112. package/node_modules/@types/node/stream.d.ts +1470 -140
  113. package/node_modules/@types/node/string_decoder.d.ts +64 -4
  114. package/node_modules/@types/node/test.d.ts +2163 -0
  115. package/node_modules/@types/node/timers/promises.d.ts +108 -0
  116. package/node_modules/@types/node/timers.d.ts +284 -13
  117. package/node_modules/@types/node/tls.d.ts +850 -244
  118. package/node_modules/@types/node/trace_events.d.ts +147 -11
  119. package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +468 -0
  120. package/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +34 -0
  121. package/node_modules/@types/node/ts5.6/index.d.ts +97 -0
  122. package/node_modules/@types/node/tty.d.ts +160 -18
  123. package/node_modules/@types/node/url.d.ts +890 -53
  124. package/node_modules/@types/node/util.d.ts +2566 -160
  125. package/node_modules/@types/node/v8.d.ts +806 -83
  126. package/node_modules/@types/node/vm.d.ts +932 -44
  127. package/node_modules/@types/node/wasi.d.ts +148 -22
  128. package/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
  129. package/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  130. package/node_modules/@types/node/web-globals/events.d.ts +97 -0
  131. package/node_modules/@types/node/web-globals/fetch.d.ts +55 -0
  132. package/node_modules/@types/node/web-globals/navigator.d.ts +22 -0
  133. package/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  134. package/node_modules/@types/node/worker_threads.d.ts +657 -80
  135. package/node_modules/@types/node/zlib.d.ts +510 -119
  136. package/node_modules/pino/.nojekyll +0 -0
  137. package/node_modules/pino/.prettierignore +1 -0
  138. package/node_modules/pino/CNAME +1 -0
  139. package/node_modules/pino/CONTRIBUTING.md +34 -0
  140. package/node_modules/pino/LICENSE +21 -0
  141. package/node_modules/pino/README.md +177 -0
  142. package/node_modules/pino/SECURITY.md +103 -0
  143. package/node_modules/pino/benchmarks/basic.bench.js +95 -0
  144. package/node_modules/pino/benchmarks/child-child.bench.js +52 -0
  145. package/node_modules/pino/benchmarks/child-creation.bench.js +73 -0
  146. package/node_modules/pino/benchmarks/child.bench.js +62 -0
  147. package/node_modules/pino/benchmarks/deep-object.bench.js +88 -0
  148. package/node_modules/pino/benchmarks/formatters.bench.js +50 -0
  149. package/node_modules/pino/benchmarks/internal/custom-levels.js +67 -0
  150. package/node_modules/pino/benchmarks/internal/just-pino-heavy.bench.js +76 -0
  151. package/node_modules/pino/benchmarks/internal/just-pino.bench.js +182 -0
  152. package/node_modules/pino/benchmarks/internal/parent-vs-child.bench.js +75 -0
  153. package/node_modules/pino/benchmarks/internal/redact.bench.js +86 -0
  154. package/node_modules/pino/benchmarks/long-string.bench.js +81 -0
  155. package/node_modules/pino/benchmarks/multi-arg.bench.js +193 -0
  156. package/node_modules/pino/benchmarks/multistream.js +98 -0
  157. package/node_modules/pino/benchmarks/object.bench.js +82 -0
  158. package/node_modules/pino/benchmarks/utils/generate-benchmark-doc.js +36 -0
  159. package/node_modules/pino/benchmarks/utils/runbench.js +138 -0
  160. package/node_modules/pino/benchmarks/utils/wrap-log-level.js +55 -0
  161. package/node_modules/pino/bin.js +6 -0
  162. package/node_modules/pino/browser.js +607 -0
  163. package/node_modules/pino/build/sync-version.js +25 -0
  164. package/node_modules/pino/docs/api.md +1664 -0
  165. package/node_modules/pino/docs/asynchronous.md +55 -0
  166. package/node_modules/pino/docs/benchmarks.md +55 -0
  167. package/node_modules/pino/docs/browser.md +341 -0
  168. package/node_modules/pino/docs/bundling.md +40 -0
  169. package/node_modules/pino/docs/child-loggers.md +116 -0
  170. package/node_modules/pino/docs/diagnostics.md +16 -0
  171. package/node_modules/pino/docs/ecosystem.md +87 -0
  172. package/node_modules/pino/docs/help.md +353 -0
  173. package/node_modules/pino/docs/lts.md +93 -0
  174. package/node_modules/pino/docs/pretty.md +38 -0
  175. package/node_modules/pino/docs/redaction.md +130 -0
  176. package/node_modules/pino/docs/transports.md +1447 -0
  177. package/node_modules/pino/docs/web.md +306 -0
  178. package/node_modules/pino/eslint.config.js +36 -0
  179. package/node_modules/pino/examples/basic.js +43 -0
  180. package/node_modules/pino/examples/transport.js +68 -0
  181. package/node_modules/pino/favicon.ico +0 -0
  182. package/node_modules/pino/file.js +12 -0
  183. package/node_modules/pino/inc-version.sh +42 -0
  184. package/node_modules/pino/index.html +55 -0
  185. package/node_modules/pino/lib/caller.js +40 -0
  186. package/node_modules/pino/lib/constants.js +28 -0
  187. package/node_modules/pino/lib/deprecations.js +8 -0
  188. package/node_modules/pino/lib/levels.js +241 -0
  189. package/node_modules/pino/lib/meta.js +3 -0
  190. package/node_modules/pino/lib/multistream.js +211 -0
  191. package/node_modules/pino/lib/proto.js +256 -0
  192. package/node_modules/pino/lib/redaction.js +119 -0
  193. package/node_modules/pino/lib/symbols.js +76 -0
  194. package/node_modules/pino/lib/time.js +39 -0
  195. package/node_modules/pino/lib/tools.js +427 -0
  196. package/node_modules/pino/lib/transport-stream.js +56 -0
  197. package/node_modules/pino/lib/transport.js +302 -0
  198. package/node_modules/pino/lib/worker.js +197 -0
  199. package/node_modules/pino/package.json +112 -0
  200. package/node_modules/pino/pino.d.ts +881 -0
  201. package/node_modules/pino/pino.js +259 -0
  202. package/node_modules/pino/test/basic.test.js +952 -0
  203. package/node_modules/pino/test/broken-pipe.test.js +59 -0
  204. package/node_modules/pino/test/browser-bindings.test.js +114 -0
  205. package/node_modules/pino/test/browser-child.test.js +132 -0
  206. package/node_modules/pino/test/browser-disabled.test.js +87 -0
  207. package/node_modules/pino/test/browser-early-console-freeze.test.js +12 -0
  208. package/node_modules/pino/test/browser-is-level-enabled.test.js +101 -0
  209. package/node_modules/pino/test/browser-levels.test.js +241 -0
  210. package/node_modules/pino/test/browser-redaction.test.js +264 -0
  211. package/node_modules/pino/test/browser-serializers.test.js +352 -0
  212. package/node_modules/pino/test/browser-set-bindings.test.js +99 -0
  213. package/node_modules/pino/test/browser-timestamp.test.js +88 -0
  214. package/node_modules/pino/test/browser-transmit.test.js +417 -0
  215. package/node_modules/pino/test/browser.test.js +698 -0
  216. package/node_modules/pino/test/caller.test.js +20 -0
  217. package/node_modules/pino/test/complex-objects.test.js +36 -0
  218. package/node_modules/pino/test/crlf.test.js +34 -0
  219. package/node_modules/pino/test/custom-levels.test.js +267 -0
  220. package/node_modules/pino/test/diagnostics.test.js +107 -0
  221. package/node_modules/pino/test/error-key.test.js +37 -0
  222. package/node_modules/pino/test/error.test.js +403 -0
  223. package/node_modules/pino/test/escaping.test.js +110 -0
  224. package/node_modules/pino/test/esm/esm.mjs +14 -0
  225. package/node_modules/pino/test/esm/index.test.js +21 -0
  226. package/node_modules/pino/test/esm/named-exports.mjs +29 -0
  227. package/node_modules/pino/test/exit.test.js +79 -0
  228. package/node_modules/pino/test/fixtures/broken-pipe/basic.js +9 -0
  229. package/node_modules/pino/test/fixtures/broken-pipe/destination.js +10 -0
  230. package/node_modules/pino/test/fixtures/broken-pipe/syncfalse.js +12 -0
  231. package/node_modules/pino/test/fixtures/caller-loop.js +6 -0
  232. package/node_modules/pino/test/fixtures/console-transport.js +13 -0
  233. package/node_modules/pino/test/fixtures/crashing-transport.js +13 -0
  234. package/node_modules/pino/test/fixtures/default-exit.js +8 -0
  235. package/node_modules/pino/test/fixtures/destination-exit.js +8 -0
  236. package/node_modules/pino/test/fixtures/eval/index.js +13 -0
  237. package/node_modules/pino/test/fixtures/eval/node_modules/14-files.js +3 -0
  238. package/node_modules/pino/test/fixtures/eval/node_modules/2-files.js +3 -0
  239. package/node_modules/pino/test/fixtures/eval/node_modules/file1.js +5 -0
  240. package/node_modules/pino/test/fixtures/eval/node_modules/file10.js +5 -0
  241. package/node_modules/pino/test/fixtures/eval/node_modules/file11.js +5 -0
  242. package/node_modules/pino/test/fixtures/eval/node_modules/file12.js +5 -0
  243. package/node_modules/pino/test/fixtures/eval/node_modules/file13.js +5 -0
  244. package/node_modules/pino/test/fixtures/eval/node_modules/file14.js +11 -0
  245. package/node_modules/pino/test/fixtures/eval/node_modules/file2.js +5 -0
  246. package/node_modules/pino/test/fixtures/eval/node_modules/file3.js +5 -0
  247. package/node_modules/pino/test/fixtures/eval/node_modules/file4.js +5 -0
  248. package/node_modules/pino/test/fixtures/eval/node_modules/file5.js +5 -0
  249. package/node_modules/pino/test/fixtures/eval/node_modules/file6.js +5 -0
  250. package/node_modules/pino/test/fixtures/eval/node_modules/file7.js +5 -0
  251. package/node_modules/pino/test/fixtures/eval/node_modules/file8.js +5 -0
  252. package/node_modules/pino/test/fixtures/eval/node_modules/file9.js +5 -0
  253. package/node_modules/pino/test/fixtures/noop-transport.js +10 -0
  254. package/node_modules/pino/test/fixtures/pretty/null-prototype.js +8 -0
  255. package/node_modules/pino/test/fixtures/stdout-hack-protection.js +11 -0
  256. package/node_modules/pino/test/fixtures/syncfalse-child.js +6 -0
  257. package/node_modules/pino/test/fixtures/syncfalse-exit.js +9 -0
  258. package/node_modules/pino/test/fixtures/syncfalse-flush-exit.js +10 -0
  259. package/node_modules/pino/test/fixtures/syncfalse.js +6 -0
  260. package/node_modules/pino/test/fixtures/syntax-error-esm.mjs +2 -0
  261. package/node_modules/pino/test/fixtures/to-file-transport-with-transform.js +20 -0
  262. package/node_modules/pino/test/fixtures/to-file-transport.js +13 -0
  263. package/node_modules/pino/test/fixtures/to-file-transport.mjs +8 -0
  264. package/node_modules/pino/test/fixtures/transport/index.js +12 -0
  265. package/node_modules/pino/test/fixtures/transport/package.json +5 -0
  266. package/node_modules/pino/test/fixtures/transport-exit-immediately-with-async-dest.js +16 -0
  267. package/node_modules/pino/test/fixtures/transport-exit-immediately.js +11 -0
  268. package/node_modules/pino/test/fixtures/transport-exit-on-ready.js +12 -0
  269. package/node_modules/pino/test/fixtures/transport-invalid-node-options.js +26 -0
  270. package/node_modules/pino/test/fixtures/transport-main.js +9 -0
  271. package/node_modules/pino/test/fixtures/transport-many-lines.js +29 -0
  272. package/node_modules/pino/test/fixtures/transport-preload-main.mjs +13 -0
  273. package/node_modules/pino/test/fixtures/transport-preload.mjs +13 -0
  274. package/node_modules/pino/test/fixtures/transport-string-stdout.js +9 -0
  275. package/node_modules/pino/test/fixtures/transport-transform.js +21 -0
  276. package/node_modules/pino/test/fixtures/transport-uses-pino-config.js +33 -0
  277. package/node_modules/pino/test/fixtures/transport-with-on-exit.js +12 -0
  278. package/node_modules/pino/test/fixtures/transport-worker-data.js +19 -0
  279. package/node_modules/pino/test/fixtures/transport-worker-name.js +24 -0
  280. package/node_modules/pino/test/fixtures/transport-worker.js +15 -0
  281. package/node_modules/pino/test/fixtures/transport-wrong-export-type.js +3 -0
  282. package/node_modules/pino/test/fixtures/ts/to-file-transport-native.mts +15 -0
  283. package/node_modules/pino/test/fixtures/ts/to-file-transport-with-transform.ts +18 -0
  284. package/node_modules/pino/test/fixtures/ts/to-file-transport.ts +11 -0
  285. package/node_modules/pino/test/fixtures/ts/transpile.cjs +36 -0
  286. package/node_modules/pino/test/fixtures/ts/transport-exit-immediately-with-async-dest.ts +15 -0
  287. package/node_modules/pino/test/fixtures/ts/transport-exit-immediately.ts +10 -0
  288. package/node_modules/pino/test/fixtures/ts/transport-exit-on-ready.ts +11 -0
  289. package/node_modules/pino/test/fixtures/ts/transport-main.ts +8 -0
  290. package/node_modules/pino/test/fixtures/ts/transport-string-stdout.ts +8 -0
  291. package/node_modules/pino/test/fixtures/ts/transport-worker.ts +14 -0
  292. package/node_modules/pino/test/formatters.test.js +364 -0
  293. package/node_modules/pino/test/helper.d.ts +4 -0
  294. package/node_modules/pino/test/helper.js +159 -0
  295. package/node_modules/pino/test/hooks.test.js +114 -0
  296. package/node_modules/pino/test/http.test.js +214 -0
  297. package/node_modules/pino/test/internals/version.test.js +17 -0
  298. package/node_modules/pino/test/is-level-enabled.test.js +179 -0
  299. package/node_modules/pino/test/jest/basic.spec.js +10 -0
  300. package/node_modules/pino/test/levels.test.js +810 -0
  301. package/node_modules/pino/test/metadata.test.js +120 -0
  302. package/node_modules/pino/test/mixin-merge-strategy.test.js +57 -0
  303. package/node_modules/pino/test/mixin.test.js +241 -0
  304. package/node_modules/pino/test/multistream.test.js +793 -0
  305. package/node_modules/pino/test/redact.test.js +923 -0
  306. package/node_modules/pino/test/serializers.test.js +257 -0
  307. package/node_modules/pino/test/smoke.js +59 -0
  308. package/node_modules/pino/test/stdout-protection.test.js +41 -0
  309. package/node_modules/pino/test/syncfalse.test.js +186 -0
  310. package/node_modules/pino/test/timestamp-nano.test.js +37 -0
  311. package/node_modules/pino/test/timestamp.test.js +124 -0
  312. package/node_modules/pino/test/transport/big.test.js +42 -0
  313. package/node_modules/pino/test/transport/bundlers-support.test.js +99 -0
  314. package/node_modules/pino/test/transport/caller.test.js +24 -0
  315. package/node_modules/pino/test/transport/core.test.js +818 -0
  316. package/node_modules/pino/test/transport/core.transpiled.test.ts +114 -0
  317. package/node_modules/pino/test/transport/crash.test.js +36 -0
  318. package/node_modules/pino/test/transport/module-link.test.js +241 -0
  319. package/node_modules/pino/test/transport/native-type-stripping.test.mjs +151 -0
  320. package/node_modules/pino/test/transport/node-options.test.js +116 -0
  321. package/node_modules/pino/test/transport/pipeline.test.js +137 -0
  322. package/node_modules/pino/test/transport/preload.test.js +54 -0
  323. package/node_modules/pino/test/transport/repl.test.js +15 -0
  324. package/node_modules/pino/test/transport/sync-false.test.js +79 -0
  325. package/node_modules/pino/test/transport/sync-true.test.js +57 -0
  326. package/node_modules/pino/test/transport/targets.test.js +48 -0
  327. package/node_modules/pino/test/transport/uses-pino-config.test.js +166 -0
  328. package/node_modules/pino/test/transport-stream.test.js +40 -0
  329. package/node_modules/pino/test/types/pino-import.tst.cts +30 -0
  330. package/node_modules/pino/test/types/pino-import.tst.js +73 -0
  331. package/node_modules/pino/test/types/pino-multistream.tst.ts +49 -0
  332. package/node_modules/pino/test/types/pino-top-export.tst.ts +32 -0
  333. package/node_modules/pino/test/types/pino-transport.tst.ts +171 -0
  334. package/node_modules/pino/test/types/pino-type-only.tst.ts +77 -0
  335. package/node_modules/pino/test/types/pino.ts +98 -0
  336. package/node_modules/pino/test/types/pino.tst.ts +681 -0
  337. package/node_modules/pino/test/types/tsconfig.json +10 -0
  338. package/node_modules/pino/tsconfig.json +14 -0
  339. package/node_modules/pino-pretty/.borp.yaml +6 -0
  340. package/node_modules/pino-pretty/.editorconfig +13 -0
  341. package/node_modules/pino-pretty/.github/dependabot.yml +13 -0
  342. package/node_modules/pino-pretty/.github/workflows/ci.yml +83 -0
  343. package/node_modules/pino-pretty/LICENSE +21 -0
  344. package/node_modules/pino-pretty/Readme.md +425 -0
  345. package/node_modules/pino-pretty/SECURITY.md +146 -0
  346. package/node_modules/pino-pretty/benchmark.js +105 -0
  347. package/node_modules/pino-pretty/bin.js +113 -0
  348. package/node_modules/pino-pretty/demo.png +0 -0
  349. package/node_modules/pino-pretty/docs/help.md +24 -0
  350. package/node_modules/pino-pretty/eslint.config.js +5 -0
  351. package/node_modules/pino-pretty/help/help.txt +68 -0
  352. package/node_modules/pino-pretty/index.d.ts +227 -0
  353. package/node_modules/pino-pretty/index.js +234 -0
  354. package/node_modules/pino-pretty/lib/colors.js +134 -0
  355. package/node_modules/pino-pretty/lib/colors.test.js +132 -0
  356. package/node_modules/pino-pretty/lib/constants.js +55 -0
  357. package/node_modules/pino-pretty/lib/pretty.js +171 -0
  358. package/node_modules/pino-pretty/lib/utils/build-safe-sonic-boom.js +69 -0
  359. package/node_modules/pino-pretty/lib/utils/build-safe-sonic-boom.test.js +84 -0
  360. package/node_modules/pino-pretty/lib/utils/create-date.js +26 -0
  361. package/node_modules/pino-pretty/lib/utils/create-date.test.js +20 -0
  362. package/node_modules/pino-pretty/lib/utils/delete-log-property.js +28 -0
  363. package/node_modules/pino-pretty/lib/utils/delete-log-property.test.js +31 -0
  364. package/node_modules/pino-pretty/lib/utils/filter-log.js +99 -0
  365. package/node_modules/pino-pretty/lib/utils/filter-log.test.js +265 -0
  366. package/node_modules/pino-pretty/lib/utils/format-time.js +66 -0
  367. package/node_modules/pino-pretty/lib/utils/format-time.test.js +71 -0
  368. package/node_modules/pino-pretty/lib/utils/get-level-label-data.js +29 -0
  369. package/node_modules/pino-pretty/lib/utils/get-property-value.js +30 -0
  370. package/node_modules/pino-pretty/lib/utils/get-property-value.test.js +31 -0
  371. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-names-opts.js +38 -0
  372. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-names-opts.test.js +45 -0
  373. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-opts.js +39 -0
  374. package/node_modules/pino-pretty/lib/utils/handle-custom-levels-opts.test.js +47 -0
  375. package/node_modules/pino-pretty/lib/utils/index.js +108 -0
  376. package/node_modules/pino-pretty/lib/utils/index.test.js +37 -0
  377. package/node_modules/pino-pretty/lib/utils/interpret-conditionals.js +41 -0
  378. package/node_modules/pino-pretty/lib/utils/interpret-conditionals.test.js +84 -0
  379. package/node_modules/pino-pretty/lib/utils/is-object.js +7 -0
  380. package/node_modules/pino-pretty/lib/utils/is-object.test.js +10 -0
  381. package/node_modules/pino-pretty/lib/utils/is-valid-date.js +14 -0
  382. package/node_modules/pino-pretty/lib/utils/is-valid-date.test.js +16 -0
  383. package/node_modules/pino-pretty/lib/utils/join-lines-with-indentation.js +29 -0
  384. package/node_modules/pino-pretty/lib/utils/join-lines-with-indentation.test.js +16 -0
  385. package/node_modules/pino-pretty/lib/utils/noop.js +3 -0
  386. package/node_modules/pino-pretty/lib/utils/noop.test.js +12 -0
  387. package/node_modules/pino-pretty/lib/utils/parse-factory-options.js +171 -0
  388. package/node_modules/pino-pretty/lib/utils/prettify-error-log.js +76 -0
  389. package/node_modules/pino-pretty/lib/utils/prettify-error-log.test.js +143 -0
  390. package/node_modules/pino-pretty/lib/utils/prettify-error.js +54 -0
  391. package/node_modules/pino-pretty/lib/utils/prettify-error.test.js +25 -0
  392. package/node_modules/pino-pretty/lib/utils/prettify-level.js +41 -0
  393. package/node_modules/pino-pretty/lib/utils/prettify-level.test.js +70 -0
  394. package/node_modules/pino-pretty/lib/utils/prettify-message.js +65 -0
  395. package/node_modules/pino-pretty/lib/utils/prettify-message.test.js +287 -0
  396. package/node_modules/pino-pretty/lib/utils/prettify-metadata.js +75 -0
  397. package/node_modules/pino-pretty/lib/utils/prettify-metadata.test.js +170 -0
  398. package/node_modules/pino-pretty/lib/utils/prettify-object.js +115 -0
  399. package/node_modules/pino-pretty/lib/utils/prettify-object.test.js +217 -0
  400. package/node_modules/pino-pretty/lib/utils/prettify-time.js +43 -0
  401. package/node_modules/pino-pretty/lib/utils/prettify-time.test.js +264 -0
  402. package/node_modules/pino-pretty/lib/utils/split-property-key.js +49 -0
  403. package/node_modules/pino-pretty/lib/utils/split-property-key.test.js +29 -0
  404. package/node_modules/pino-pretty/lib/utils/strip-unsafe-control-chars.js +18 -0
  405. package/node_modules/pino-pretty/lib/utils/strip-unsafe-control-chars.test.js +9 -0
  406. package/node_modules/pino-pretty/package.json +64 -0
  407. package/node_modules/pino-pretty/test/basic.test.js +1305 -0
  408. package/node_modules/pino-pretty/test/boolean-options.test.js +228 -0
  409. package/node_modules/pino-pretty/test/cli-rc.test.js +275 -0
  410. package/node_modules/pino-pretty/test/cli.test.js +360 -0
  411. package/node_modules/pino-pretty/test/crlf.test.js +33 -0
  412. package/node_modules/pino-pretty/test/error-objects.test.js +494 -0
  413. package/node_modules/pino-pretty/test/example/example.js +33 -0
  414. package/node_modules/pino-pretty/test/helper.js +19 -0
  415. package/node_modules/pino-pretty/test/types/exports.tst.ts +15 -0
  416. package/node_modules/pino-pretty/test/types/pino-pretty.tst.ts +140 -0
  417. package/node_modules/pino-pretty/test/types/tsconfig.json +9 -0
  418. package/package.json +12 -5
  419. package/lib/cli/commands/init.d.ts +0 -1
  420. package/lib/cli/commands/init.js +0 -8
  421. package/node_modules/@types/node/globals.global.d.ts +0 -1
@@ -0,0 +1,55 @@
1
+ # Asynchronous Logging
2
+
3
+ Asynchronous logging enables the minimum overhead of Pino.
4
+ Asynchronous logging works by buffering log messages and writing them in larger chunks.
5
+
6
+ ```js
7
+ const pino = require('pino')
8
+ const logger = pino(pino.destination({
9
+ dest: './my-file', // omit for stdout
10
+ minLength: 4096, // Buffer before writing
11
+ sync: false // Asynchronous logging
12
+ }))
13
+ ```
14
+
15
+ It's always possible to turn on synchronous logging by passing `sync: true`.
16
+ In this mode of operation, log messages are directly written to the
17
+ output stream as the messages are generated with a _blocking_ operation.
18
+
19
+ * See [`pino.destination`](/docs/api.md#pino-destination)
20
+ * `pino.destination` is implemented on [`sonic-boom` ⇗](https://github.com/mcollina/sonic-boom).
21
+
22
+ ### AWS Lambda
23
+
24
+ Asynchronous logging in AWS Lambda functions will tend to cause delayed
25
+ or lost log messages, as logs may not be written to the destination
26
+ before the runtime is frozen.
27
+
28
+ For Lambda deployments, it's recommended to always use a destination
29
+ with `sync: true`.
30
+
31
+ ## Caveats
32
+
33
+ Asynchronous logging has a couple of important caveats:
34
+
35
+ * As opposed to the synchronous mode, there is not a one-to-one relationship between
36
+ calls to logging methods (e.g. `logger.info`) and writes to a log file
37
+ * There is a possibility of the most recently buffered log messages being lost
38
+ in case of a system failure, e.g. a power cut.
39
+
40
+ ### Flush Limitations with `pino-pretty`
41
+
42
+ `logger.flush()` does not flush the output of `pino-pretty` because:
43
+
44
+ 1. **Transport Architecture**: `pino-pretty` runs in a separate worker thread via the transport mechanism.
45
+
46
+ 2. **Cross-Thread Flush**: `logger.flush(cb)` does reach the worker. Since [thread-stream#198](https://github.com/pinojs/thread-stream/pull/198) the worker waits for the shared buffer to be drained, then looks for a flush primitive on the destination the transport returned: `flush`, `flushSync`, or a pending `drain`.
47
+
48
+ 3. **No Flush Primitive**: The stream `pino-pretty` returns exposes none of those. Its buffered `SonicBoom` is reachable only through the internal `pump`, so the worker has nothing to call and acknowledges the flush right away.
49
+
50
+ This means that even with `logger.flush()`, your formatted logs may not appear immediately. The flush only guarantees that the main thread buffer was written and that the worker drained the shared buffer, not that `pino-pretty` has written its formatted output.
51
+
52
+ See also:
53
+
54
+ * [`pino.destination` API](/docs/api.md#pino-destination)
55
+ * [`destination` parameter](/docs/api.md#destination)
@@ -0,0 +1,55 @@
1
+
2
+ # Benchmarks
3
+
4
+ `pino.info('hello world')`:
5
+
6
+ ```
7
+
8
+ BASIC benchmark averages
9
+ Bunyan average: 377.434ms
10
+ Winston average: 270.249ms
11
+ Bole average: 172.690ms
12
+ Debug average: 220.527ms
13
+ LogLevel average: 222.802ms
14
+ Pino average: 114.801ms
15
+ PinoMinLength average: 70.968ms
16
+ PinoNodeStream average: 159.192ms
17
+
18
+ ```
19
+
20
+ `pino.info({'hello': 'world'})`:
21
+
22
+ ```
23
+
24
+ OBJECT benchmark averages
25
+ BunyanObj average: 410.379ms
26
+ WinstonObj average: 273.120ms
27
+ BoleObj average: 185.069ms
28
+ LogLevelObject average: 433.425ms
29
+ PinoObj average: 119.315ms
30
+ PinoMinLengthObj average: 76.968ms
31
+ PinoNodeStreamObj average: 164.268ms
32
+
33
+ ```
34
+
35
+ `pino.info(aBigDeeplyNestedObject)`:
36
+
37
+ ```
38
+
39
+ DEEP-OBJECT benchmark averages
40
+ BunyanDeepObj average: 1.839ms
41
+ WinstonDeepObj average: 5.604ms
42
+ BoleDeepObj average: 3.422ms
43
+ LogLevelDeepObj average: 11.716ms
44
+ PinoDeepObj average: 2.256ms
45
+ PinoMinLengthDeepObj average: 2.240ms
46
+ PinoNodeStreamDeepObj average: 2.595ms
47
+
48
+ ```
49
+
50
+ `pino.info('hello %s %j %d', 'world', {obj: true}, 4, {another: 'obj'})`:
51
+
52
+ For a fair comparison, [LogLevel](http://npm.im/loglevel) was extended
53
+ to include a timestamp and [bole](http://npm.im/bole) had
54
+ `fastTime` mode switched on.
55
+
@@ -0,0 +1,341 @@
1
+ # Browser API
2
+
3
+ Pino is compatible with [`browserify`](https://npm.im/browserify) for browser-side usage:
4
+
5
+ This can be useful with isomorphic/universal JavaScript code.
6
+
7
+ By default, in the browser,
8
+ `pino` uses corresponding [Log4j](https://en.wikipedia.org/wiki/Log4j) `console` methods (`console.error`, `console.warn`, `console.info`, `console.debug`, `console.trace`) and uses `console.error` for any `fatal` level logs.
9
+
10
+ <a id="nodejs-only-apis"></a>
11
+ ## Node.js-only APIs
12
+
13
+ The browser build (`browser.js`, selected through the `browser` field in
14
+ `package.json`) does not implement the parts of the API that depend on the file
15
+ system or on worker threads. Accessing them in the browser throws a
16
+ `TypeError`, because the export is simply absent:
17
+
18
+ ```js
19
+ const pino = require('pino')
20
+ pino.destination('./my-file') // TypeError: pino.destination is not a function
21
+ ```
22
+
23
+ The following statics are available in Node.js only:
24
+
25
+ | Static | Why it is Node.js only |
26
+ | --- | --- |
27
+ | [`pino.destination()`](/docs/api.md#pino-destination) | Returns a [`SonicBoom`](https://github.com/pinojs/sonic-boom) instance writing to a file descriptor. |
28
+ | [`pino.transport()`](/docs/api.md#pino-transport) | Runs a [transport](/docs/transports.md) on a worker thread. |
29
+ | [`pino.multistream()`](/docs/api.md#pino-multistream) | Fans out to multiple destination streams. |
30
+
31
+ `pino.levels`, `pino.stdSerializers` and `pino.stdTimeFunctions` are available in
32
+ both environments.
33
+
34
+ ### Methods that are no-ops in the browser
35
+
36
+ These exist on a browser logger, so calling them is safe, but they do nothing:
37
+
38
+ * [`logger.flush([cb])`](/docs/api.md#flush) — there is no write buffer
39
+ to flush. Note that a callback passed to it is **not** invoked.
40
+ * Every `EventEmitter` method (`on`, `once`, `emit`, `removeListener`,
41
+ `listeners`, ...). As a consequence the
42
+ [`level-change`](/docs/api.md#level-change) event never fires in the
43
+ browser.
44
+
45
+ ### Writing isomorphic code
46
+
47
+ Code shared between a server and a browser bundle should not call the Node.js
48
+ only statics unconditionally. Guard the call rather than the environment, so the
49
+ same branch works under any bundler:
50
+
51
+ ```js
52
+ const pino = require('pino')
53
+
54
+ const logger = pino.destination
55
+ ? pino(pino.destination('./my-file')) // Node.js
56
+ : pino({ browser: { asObject: true } }) // browser
57
+ ```
58
+
59
+ Note that the browser build's `pino()` accepts the options object only. A second
60
+ `destination` argument is accepted but ignored, so a logger constructed with one
61
+ still writes to the console rather than failing:
62
+
63
+ ```js
64
+ // in the browser the second argument is ignored, not honoured
65
+ const logger = pino({ level: 'info' }, someDestination)
66
+ logger.info('still goes to the console')
67
+ ```
68
+
69
+ Assigning a no-op shim onto the `pino` export (`pino.destination = () => {}`)
70
+ works too, but it mutates a module object shared with every other importer in the
71
+ bundle; guarding the call site keeps the change local.
72
+
73
+ ## Options
74
+
75
+ Pino can be passed a `browser` object in the options object,
76
+ which can have the following properties:
77
+
78
+ ### `asObject` (Boolean)
79
+
80
+ ```js
81
+ const pino = require('pino')({browser: {asObject: true}})
82
+ ```
83
+
84
+ The `asObject` option will create a pino-like log object instead of
85
+ passing all arguments to a console method, for instance:
86
+
87
+ ```js
88
+ pino.info('hi') // creates and logs {msg: 'hi', level: 30, time: <ts>}
89
+ ```
90
+
91
+ When `write` is set, `asObject` will always be `true`.
92
+
93
+ ### `asObjectBindingsOnly` (Boolean)
94
+
95
+ ```js
96
+ const pino = require('pino')({browser: {asObjectBindingsOnly: true}})
97
+ ```
98
+
99
+ The `asObjectBindingsOnly` option is similar to `asObject` but will keep the message
100
+ and arguments unformatted. This allows to defer formatting the message to the
101
+ actual call to `console` methods, where browsers then have richer formatting in
102
+ their devtools than when pino will format the message to a string first.
103
+
104
+ ```js
105
+ pino.info('hello %s', 'world') // creates and logs {level: 30, time: <ts>}, 'hello %s', 'world'
106
+ ```
107
+
108
+ ### `formatters` (Object)
109
+
110
+ An object containing functions for formatting the shape of the log lines. When provided, it enables the logger to produce a pino-like log object with customized formatting. Currently, it supports formatting for the `level` object only.
111
+
112
+ ##### `level`
113
+
114
+ Changes the shape of the log level. The default shape is `{ level: number }`.
115
+ The function takes two arguments, the label of the level (e.g. `'info'`)
116
+ and the numeric value (e.g. `30`).
117
+
118
+ ```js
119
+ const formatters = {
120
+ level (label, number) {
121
+ return { level: number }
122
+ }
123
+ }
124
+ ```
125
+
126
+
127
+ ### `reportCaller` (Boolean)
128
+
129
+ Attempts to capture and include the originating callsite (file:line:column) for each log call in the browser logger.
130
+
131
+ - When used together with `asObject` (or when `formatters` are provided), the callsite is added as a `caller` string property on the emitted log object.
132
+ - In the default mode (non‑object), the callsite string is appended as the last argument passed to the corresponding `console` method. This makes the location visible in the console output even though the console’s clickable header still points to Pino internals.
133
+
134
+ ```js
135
+ // Object mode: adds `caller` to the log object
136
+ const pino = require('pino')({
137
+ browser: {
138
+ asObject: true,
139
+ reportCaller: true
140
+ }
141
+ })
142
+
143
+ pino.info('hello')
144
+ // -> { level: 30, msg: 'hello', time: <ts>, caller: '/path/to/file.js:10:15' }
145
+
146
+ // Default mode: appends the caller string as the last console argument
147
+ const pino2 = require('pino')({
148
+ browser: {
149
+ reportCaller: true
150
+ }
151
+ })
152
+
153
+ pino2.info('hello')
154
+ // -> console receives: 'hello', '/path/to/file.js:10:15'
155
+ ```
156
+
157
+ Notes:
158
+
159
+ - This is a best‑effort feature that parses the JavaScript Error stack. Stack formats vary across engines.
160
+ - The clickable link shown by devtools for a console message is determined by where `console.*` is invoked and cannot be changed by libraries; `reportCaller` surfaces the user callsite alongside the log message.
161
+
162
+
163
+ ### `write` (Function | Object)
164
+
165
+ Instead of passing log messages to `console.log` they can be passed to
166
+ a supplied function.
167
+
168
+ If `write` is set to a single function, all logging objects are passed
169
+ to this function.
170
+
171
+ ```js
172
+ const pino = require('pino')({
173
+ browser: {
174
+ write: (o) => {
175
+ // do something with o
176
+ }
177
+ }
178
+ })
179
+ ```
180
+
181
+ If `write` is an object, it can have methods that correspond to the
182
+ levels. When a message is logged at a given level, the corresponding
183
+ method is called. If a method isn't present, the logging falls back
184
+ to using the `console`.
185
+
186
+
187
+ ```js
188
+ const pino = require('pino')({
189
+ browser: {
190
+ write: {
191
+ info: function (o) {
192
+ //process info log object
193
+ },
194
+ error: function (o) {
195
+ //process error log object
196
+ }
197
+ }
198
+ }
199
+ })
200
+ ```
201
+
202
+ ### `serialize`: (Boolean | Array)
203
+
204
+ The serializers provided to `pino` are ignored by default in the browser, including
205
+ the standard serializers provided with Pino. Since the default destination for log
206
+ messages is the console, values such as `Error` objects are enhanced for inspection,
207
+ which they otherwise wouldn't be if the Error serializer was enabled.
208
+
209
+ We can turn all serializers on,
210
+
211
+ ```js
212
+ const pino = require('pino')({
213
+ browser: {
214
+ serialize: true
215
+ }
216
+ })
217
+ ```
218
+
219
+ Or we can selectively enable them via an array:
220
+
221
+ ```js
222
+ const pino = require('pino')({
223
+ serializers: {
224
+ custom: myCustomSerializer,
225
+ another: anotherSerializer
226
+ },
227
+ browser: {
228
+ serialize: ['custom']
229
+ }
230
+ })
231
+ // following will apply myCustomSerializer to the custom property,
232
+ // but will not apply anotherSerializer to another key
233
+ pino.info({custom: 'a', another: 'b'})
234
+ ```
235
+
236
+ When `serialize` is `true` the standard error serializer is also enabled (see https://github.com/pinojs/pino/blob/master/docs/api.md#stdSerializers).
237
+ This is a global serializer, which will apply to any `Error` objects passed to the logger methods.
238
+
239
+ If `serialize` is an array the standard error serializer is also automatically enabled, it can
240
+ be explicitly disabled by including a string in the serialize array: `!stdSerializers.err`, like so:
241
+
242
+ ```js
243
+ const pino = require('pino')({
244
+ serializers: {
245
+ custom: myCustomSerializer,
246
+ another: anotherSerializer
247
+ },
248
+ browser: {
249
+ serialize: ['!stdSerializers.err', 'custom'] //will not serialize Errors, will serialize `custom` keys
250
+ }
251
+ })
252
+ ```
253
+
254
+ The `serialize` array also applies to any child logger serializers (see https://github.com/pinojs/pino/blob/master/docs/api.md#discussion-2
255
+ for how to set child-bound serializers).
256
+
257
+ Unlike server pino the serializers apply to every object passed to the logger method,
258
+ if the `asObject` option is `true`, this results in the serializers applying to the
259
+ first object (as in server pino).
260
+
261
+ For more info on serializers see https://github.com/pinojs/pino/blob/master/docs/api.md#mergingobject.
262
+
263
+ ### `transmit` (Object)
264
+
265
+ An object with `send` and `level` properties.
266
+
267
+ The `transmit.level` property specifies the minimum level (inclusive) of when the `send` function
268
+ should be called, if not supplied the `send` function be called based on the main logging `level`
269
+ (set via `options.level`, defaulting to `info`).
270
+
271
+ The `transmit` object must have a `send` function which will be called after
272
+ writing the log message. The `send` function is passed the level of the log
273
+ message and a `logEvent` object.
274
+
275
+ The `logEvent` object is a data structure representing a log message, it represents
276
+ the arguments passed to a logger statement, the level
277
+ at which they were logged, and the hierarchy of child bindings.
278
+
279
+ The `logEvent` format is structured like so:
280
+
281
+ ```js
282
+ {
283
+ ts = Number,
284
+ messages = Array,
285
+ bindings = Array,
286
+ level: { label = String, value = Number}
287
+ }
288
+ ```
289
+
290
+ The `ts` property is a Unix epoch timestamp in milliseconds, the time is taken from the moment the
291
+ logger method is called.
292
+
293
+ The `messages` array is all arguments passed to logger method, (for instance `logger.info('a', 'b', 'c')`
294
+ would result in `messages` array `['a', 'b', 'c']`).
295
+
296
+ The `bindings` array represents each child logger (if any), and the relevant bindings.
297
+ For instance, given `logger.child({a: 1}).child({b: 2}).info({c: 3})`, the bindings array
298
+ would hold `[{a: 1}, {b: 2}]` and the `messages` array would be `[{c: 3}]`. The `bindings`
299
+ are ordered according to their position in the child logger hierarchy, with the lowest index
300
+ being the top of the hierarchy.
301
+
302
+ By default, serializers are not applied to log output in the browser, but they will *always* be
303
+ applied to `messages` and `bindings` in the `logEvent` object. This allows us to ensure a consistent
304
+ format for all values between server and client.
305
+
306
+ The `level` holds the label (for instance `info`), and the corresponding numerical value
307
+ (for instance `30`). This could be important in cases where client-side level values and
308
+ labels differ from server-side.
309
+
310
+ The point of the `send` function is to remotely record log messages:
311
+
312
+ ```js
313
+ const pino = require('pino')({
314
+ browser: {
315
+ transmit: {
316
+ level: 'warn',
317
+ send: function (level, logEvent) {
318
+ if (level === 'warn') {
319
+ // maybe send the logEvent to a separate endpoint
320
+ // or maybe analyze the messages further before sending
321
+ }
322
+ // we could also use the `logEvent.level.value` property to determine
323
+ // numerical value
324
+ if (logEvent.level.value >= 50) { // covers error and fatal
325
+
326
+ // send the logEvent somewhere
327
+ }
328
+ }
329
+ }
330
+ }
331
+ })
332
+ ```
333
+
334
+ ### `disabled` (Boolean)
335
+
336
+ ```js
337
+ const pino = require('pino')({browser: {disabled: true}})
338
+ ```
339
+
340
+ The `disabled` option will disable logging in browser if set
341
+ to `true`, by default it is set to `false`.
@@ -0,0 +1,40 @@
1
+ # Bundling
2
+
3
+ Due to its internal architecture based on Worker Threads, it is not possible to bundle Pino *without* generating additional files.
4
+
5
+ In particular, a bundler must ensure that the following files are also bundled separately:
6
+
7
+ * `lib/worker.js` from the `thread-stream` dependency
8
+ * `file.js`
9
+ * `lib/worker.js`
10
+ * Any transport used by the user (like `pino-pretty`)
11
+
12
+ Once the files above have been generated, the bundler must also add information about the files above by injecting a code that sets `__bundlerPathsOverrides` in the `globalThis` object.
13
+
14
+ The variable is an object whose keys are an identifier for the files and the values are the paths of files relative to the currently bundle files.
15
+
16
+ Example:
17
+
18
+ ```javascript
19
+ // Inject this using your bundle plugin
20
+ globalThis.__bundlerPathsOverrides = {
21
+ 'thread-stream-worker': pinoWebpackAbsolutePath('./thread-stream-worker.js')
22
+ 'pino/file': pinoWebpackAbsolutePath('./pino-file.js'),
23
+ 'pino-worker': pinoWebpackAbsolutePath('./pino-worker.js'),
24
+ 'pino-pretty': pinoWebpackAbsolutePath('./pino-pretty.js'),
25
+ };
26
+ ```
27
+
28
+ Note that `pino/file`, `pino-worker` and `thread-stream-worker` are required identifiers. Other identifiers are possible based on the user configuration.
29
+
30
+ ## Webpack Plugin
31
+
32
+ If you are a Webpack user, you can achieve this with [pino-webpack-plugin](https://github.com/pinojs/pino-webpack-plugin) without manual configuration of `__bundlerPathsOverrides`; however, you still need to configure it manually if you are using other bundlers.
33
+
34
+ ## Esbuild Plugin
35
+
36
+ [esbuild-plugin-pino](https://github.com/davipon/esbuild-plugin-pino) is the esbuild plugin to generate extra pino files for bundling.
37
+
38
+ ## Bun Plugin
39
+
40
+ [bun-plugin-pino](https://github.com/vktrl/bun-plugin-pino) is the Bun plugin to generate extra pino files for bundling.
@@ -0,0 +1,116 @@
1
+ # Child loggers
2
+
3
+ Let's assume we want to have `"module":"foo"` added to every log within a
4
+ module `foo.js`.
5
+
6
+ To accomplish this, simply use a child logger:
7
+
8
+ ```js
9
+ 'use strict'
10
+ // imports a pino logger instance of `require('pino')()`
11
+ const parentLogger = require('./lib/logger')
12
+ const log = parentLogger.child({module: 'foo'})
13
+
14
+ function doSomething () {
15
+ log.info('doSomething invoked')
16
+ }
17
+
18
+ module.exports = {
19
+ doSomething
20
+ }
21
+ ```
22
+
23
+ Child logger bindings are top-level fields on every log line emitted by the
24
+ child logger. Do not create child loggers from externally supplied objects or
25
+ user-controlled binding names, because those keys can conflict with Pino fields
26
+ such as `level`, `time`, or `msg`, as well as application or security fields.
27
+ If untrusted data must be associated with logs, place it under an
28
+ application-controlled key:
29
+
30
+ ```js
31
+ // Avoid: user-controlled keys become top-level fields on every child log line
32
+ const child = logger.child(untrustedObject)
33
+
34
+ // Prefer: user-controlled keys are contained under a trusted namespace
35
+ const child = logger.child({ untrusted: untrustedObject })
36
+ ```
37
+
38
+ As a matter of good security hygiene, prefer not to log untrusted data at all
39
+ unless it is necessary. When it is necessary, sanitize and redact it first.
40
+ See also [`logger.child()` in the API documentation](/docs/api.md#child) and
41
+ [`mergingObject`](/docs/api.md#mergingobject).
42
+
43
+ ## Cost of child logging
44
+
45
+ Child logger creation is fast:
46
+
47
+ ```
48
+ benchBunyanCreation*10000: 564.514ms
49
+ benchBoleCreation*10000: 283.276ms
50
+ benchPinoCreation*10000: 258.745ms
51
+ benchPinoExtremeCreation*10000: 150.506ms
52
+ ```
53
+
54
+ Logging through a child logger has little performance penalty:
55
+
56
+ ```
57
+ benchBunyanChild*10000: 556.275ms
58
+ benchBoleChild*10000: 288.124ms
59
+ benchPinoChild*10000: 231.695ms
60
+ benchPinoExtremeChild*10000: 122.117ms
61
+ ```
62
+
63
+ Logging via the child logger of a child logger also has negligible overhead:
64
+
65
+ ```
66
+ benchBunyanChildChild*10000: 559.082ms
67
+ benchPinoChildChild*10000: 229.264ms
68
+ benchPinoExtremeChildChild*10000: 127.753ms
69
+ ```
70
+
71
+ ## Duplicate keys caveat
72
+
73
+ Naming conflicts can arise between child loggers and
74
+ children of child loggers.
75
+
76
+ This isn't as bad as it sounds, even if the same keys between
77
+ parent and child loggers are used, Pino resolves the conflict in the sanest way.
78
+
79
+ For example, consider the following:
80
+
81
+ ```js
82
+ const pino = require('pino')
83
+ pino(pino.destination('./my-log'))
84
+ .child({a: 'property'})
85
+ .child({a: 'prop'})
86
+ .info('howdy')
87
+ ```
88
+
89
+ ```sh
90
+ $ cat my-log
91
+ {"pid":95469,"hostname":"MacBook-Pro-3.home","level":30,"msg":"howdy","time":1459534114473,"a":"property","a":"prop"}
92
+ ```
93
+
94
+ Notice how there are two keys named `a` in the JSON output. The sub-child's properties
95
+ appear after the parent child properties.
96
+
97
+ At some point, the logs will most likely be processed (for instance with a [transport](transports.md)),
98
+ and this generally involves parsing. `JSON.parse` will return an object where the conflicting
99
+ namespace holds the final value assigned to it:
100
+
101
+ ```sh
102
+ $ cat my-log | node -e "process.stdin.once('data', (line) => console.log(JSON.stringify(JSON.parse(line))))"
103
+ {"pid":95469,"hostname":"MacBook-Pro-3.home","level":30,"msg":"howdy","time":"2016-04-01T18:08:34.473Z","a":"prop"}
104
+ ```
105
+
106
+ Ultimately the conflict is resolved by taking the last value, which aligns with Bunyan's child logging
107
+ behavior.
108
+
109
+ There may be cases where this edge case becomes problematic if a JSON parser with alternative behavior
110
+ is used to process the logs. It's recommended to be conscious of namespace conflicts with child loggers,
111
+ in light of an expected log processing approach. This is especially important for untrusted data: do not
112
+ allow externally supplied objects or user-controlled key names to become child logger bindings.
113
+
114
+ One of Pino's performance tricks is to avoid building objects and stringifying
115
+ them, so we're building strings instead. This is why duplicate keys between
116
+ parents and children will end up in the log output.
@@ -0,0 +1,16 @@
1
+ # Diagnostics
2
+
3
+ Pino provides [tracing channel](tc) events that allow insight into the
4
+ internal workings of the library. The currently supported events are:
5
+
6
+ + `tracing:pino_asJson:start`: emitted when the final serialization process
7
+ of logs is started. The emitted event payload has the following fields:
8
+ - `instance`: the Pino instance associated with the function
9
+ - `arguments`: the arguments passed to the function
10
+ + `tracing:pino_asJson:end`: emitted at the end of the final serialization
11
+ process. The emitted event payload has the following fields:
12
+ - `instance`: the Pino instance associated with the function
13
+ - `arguments`: the arguments passed to the function
14
+ - `result`: the finalized, newline delimited, log line as a string
15
+
16
+ [tc]: https://nodejs.org/docs/latest/api/diagnostics_channel.html#tracingchannel-channels