@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.
- package/.jsii +202 -45
- package/API.md +167 -37
- package/CHANGELOG.md +19 -0
- package/README.md +10 -3
- package/docs/D9-plumbing.md +194 -0
- package/lib/cli/atlas.d.ts +10 -0
- package/lib/cli/atlas.js +65 -0
- package/lib/cli/commands/cedar/cedar-format.d.ts +7 -0
- package/lib/cli/commands/cedar/cedar-format.js +75 -0
- package/lib/cli/commands/cedar/cedar-to-d9-translations.d.ts +12 -0
- package/lib/cli/commands/cedar/cedar-to-d9-translations.js +130 -0
- package/lib/cli/commands/cedar/cedar-to-d9.d.ts +57 -0
- package/lib/cli/commands/cedar/cedar-to-d9.js +221 -0
- package/lib/cli/commands/cedar/cedar-translations.d.ts +9 -0
- package/lib/cli/commands/cedar/cedar-translations.js +213 -0
- package/lib/cli/commands/cedar/d9-permission.d.ts +27 -0
- package/lib/cli/commands/cedar/d9-permission.js +45 -0
- package/lib/cli/commands/cedar/d9-to-cedar.d.ts +33 -0
- package/lib/cli/commands/cedar/d9-to-cedar.js +157 -0
- package/lib/cli/commands/cedar/roles-table.d.ts +14 -0
- package/lib/cli/commands/cedar/roles-table.js +29 -0
- package/lib/cli/commands/save/apply-snapshot.d.ts +2 -7
- package/lib/cli/commands/save/apply-snapshot.js +41 -31
- package/lib/cli/commands/save/check-unsaved.d.ts +9 -0
- package/lib/cli/commands/save/check-unsaved.js +81 -0
- package/lib/cli/commands/save/env.d.ts +37 -0
- package/lib/cli/commands/save/env.js +111 -0
- package/lib/cli/commands/save/save-snapshot.d.ts +4 -0
- package/lib/cli/commands/save/save-snapshot.js +233 -0
- package/lib/cli/commands/save/sync-files.d.ts +5 -0
- package/lib/cli/commands/save/sync-files.js +46 -0
- package/lib/cli/commands/save/transfer.d.ts +18 -0
- package/lib/cli/commands/save/transfer.js +97 -0
- package/lib/cli/commands/save/utils.d.ts +5 -0
- package/lib/cli/commands/save/utils.js +33 -3
- package/lib/cli/commands/sync.js +4 -3
- package/lib/cli/index.js +67 -25
- package/lib/cli/logger.d.ts +2 -0
- package/lib/cli/logger.js +10 -0
- package/lib/cli/plumbing-config.d.ts +12 -0
- package/lib/cli/plumbing-config.js +13 -0
- package/lib/index.d.ts +49 -5
- package/lib/index.js +54 -41
- package/node_modules/@cedar-policy/cedar-wasm/README.md +181 -0
- package/node_modules/@cedar-policy/cedar-wasm/esm/README.md +181 -0
- package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm.d.ts +427 -0
- package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm.js +9 -0
- package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm_bg.js +434 -0
- package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm_bg.wasm +0 -0
- package/node_modules/@cedar-policy/cedar-wasm/esm/cedar_wasm_bg.wasm.d.ts +34 -0
- package/node_modules/@cedar-policy/cedar-wasm/esm/package.json +23 -0
- package/node_modules/@cedar-policy/cedar-wasm/nodejs/README.md +181 -0
- package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm.d.ts +427 -0
- package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm.js +463 -0
- package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm_bg.wasm +0 -0
- package/node_modules/@cedar-policy/cedar-wasm/nodejs/cedar_wasm_bg.wasm.d.ts +34 -0
- package/node_modules/@cedar-policy/cedar-wasm/nodejs/package.json +18 -0
- package/node_modules/@cedar-policy/cedar-wasm/package.json +53 -0
- package/node_modules/@cedar-policy/cedar-wasm/web/README.md +181 -0
- package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm.d.ts +486 -0
- package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm.js +534 -0
- package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm_bg.wasm +0 -0
- package/node_modules/@cedar-policy/cedar-wasm/web/cedar_wasm_bg.wasm.d.ts +34 -0
- package/node_modules/@cedar-policy/cedar-wasm/web/package.json +21 -0
- package/node_modules/@types/node/README.md +5 -6
- package/node_modules/@types/node/assert/strict.d.ts +111 -0
- package/node_modules/@types/node/assert.d.ts +1040 -79
- package/node_modules/@types/node/async_hooks.d.ts +476 -119
- package/node_modules/@types/node/buffer.buffer.d.ts +472 -0
- package/node_modules/@types/node/buffer.d.ts +1925 -13
- package/node_modules/@types/node/child_process.d.ts +1204 -235
- package/node_modules/@types/node/cluster.d.ts +455 -137
- package/node_modules/@types/node/compatibility/disposable.d.ts +14 -0
- package/node_modules/@types/node/compatibility/index.d.ts +9 -0
- package/node_modules/@types/node/compatibility/indexable.d.ts +20 -0
- package/node_modules/@types/node/compatibility/iterators.d.ts +20 -0
- package/node_modules/@types/node/console.d.ts +450 -1
- package/node_modules/@types/node/constants.d.ts +20 -447
- package/node_modules/@types/node/crypto.d.ts +3962 -600
- package/node_modules/@types/node/dgram.d.ts +515 -33
- package/node_modules/@types/node/diagnostics_channel.d.ts +578 -0
- package/node_modules/@types/node/dns/promises.d.ts +503 -0
- package/node_modules/@types/node/dns.d.ts +798 -247
- package/node_modules/@types/node/domain.d.ts +164 -10
- package/node_modules/@types/node/events.d.ts +954 -25
- package/node_modules/@types/node/fs/promises.d.ts +1295 -0
- package/node_modules/@types/node/fs.d.ts +3463 -1569
- package/node_modules/@types/node/globals.d.ts +98 -1277
- package/node_modules/@types/node/globals.typedarray.d.ts +38 -0
- package/node_modules/@types/node/http.d.ts +1933 -300
- package/node_modules/@types/node/http2.d.ts +1946 -254
- package/node_modules/@types/node/https.d.ts +557 -134
- package/node_modules/@types/node/index.d.ts +54 -48
- package/node_modules/@types/node/inspector.d.ts +227 -3014
- package/node_modules/@types/node/inspector.generated.d.ts +4052 -0
- package/node_modules/@types/node/module.d.ts +890 -2
- package/node_modules/@types/node/net.d.ts +872 -105
- package/node_modules/@types/node/os.d.ts +452 -209
- package/node_modules/@types/node/package.json +78 -128
- package/node_modules/@types/node/path.d.ts +196 -155
- package/node_modules/@types/node/perf_hooks.d.ts +829 -120
- package/node_modules/@types/node/process.d.ts +2072 -3
- package/node_modules/@types/node/punycode.d.ts +69 -27
- package/node_modules/@types/node/querystring.d.ts +132 -9
- package/node_modules/@types/node/readline/promises.d.ts +161 -0
- package/node_modules/@types/node/readline.d.ts +485 -49
- package/node_modules/@types/node/repl.d.ts +121 -83
- package/node_modules/@types/node/sea.d.ts +153 -0
- package/node_modules/@types/node/sqlite.d.ts +721 -0
- package/node_modules/@types/node/stream/consumers.d.ts +38 -0
- package/node_modules/@types/node/stream/promises.d.ts +90 -0
- package/node_modules/@types/node/stream/web.d.ts +622 -0
- package/node_modules/@types/node/stream.d.ts +1470 -140
- package/node_modules/@types/node/string_decoder.d.ts +64 -4
- package/node_modules/@types/node/test.d.ts +2163 -0
- package/node_modules/@types/node/timers/promises.d.ts +108 -0
- package/node_modules/@types/node/timers.d.ts +284 -13
- package/node_modules/@types/node/tls.d.ts +850 -244
- package/node_modules/@types/node/trace_events.d.ts +147 -11
- package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +468 -0
- package/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +34 -0
- package/node_modules/@types/node/ts5.6/index.d.ts +97 -0
- package/node_modules/@types/node/tty.d.ts +160 -18
- package/node_modules/@types/node/url.d.ts +890 -53
- package/node_modules/@types/node/util.d.ts +2566 -160
- package/node_modules/@types/node/v8.d.ts +806 -83
- package/node_modules/@types/node/vm.d.ts +932 -44
- package/node_modules/@types/node/wasi.d.ts +148 -22
- package/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
- package/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
- package/node_modules/@types/node/web-globals/events.d.ts +97 -0
- package/node_modules/@types/node/web-globals/fetch.d.ts +55 -0
- package/node_modules/@types/node/web-globals/navigator.d.ts +22 -0
- package/node_modules/@types/node/web-globals/storage.d.ts +24 -0
- package/node_modules/@types/node/worker_threads.d.ts +657 -80
- package/node_modules/@types/node/zlib.d.ts +510 -119
- package/node_modules/pino/.nojekyll +0 -0
- package/node_modules/pino/.prettierignore +1 -0
- package/node_modules/pino/CNAME +1 -0
- package/node_modules/pino/CONTRIBUTING.md +34 -0
- package/node_modules/pino/LICENSE +21 -0
- package/node_modules/pino/README.md +177 -0
- package/node_modules/pino/SECURITY.md +103 -0
- package/node_modules/pino/benchmarks/basic.bench.js +95 -0
- package/node_modules/pino/benchmarks/child-child.bench.js +52 -0
- package/node_modules/pino/benchmarks/child-creation.bench.js +73 -0
- package/node_modules/pino/benchmarks/child.bench.js +62 -0
- package/node_modules/pino/benchmarks/deep-object.bench.js +88 -0
- package/node_modules/pino/benchmarks/formatters.bench.js +50 -0
- package/node_modules/pino/benchmarks/internal/custom-levels.js +67 -0
- package/node_modules/pino/benchmarks/internal/just-pino-heavy.bench.js +76 -0
- package/node_modules/pino/benchmarks/internal/just-pino.bench.js +182 -0
- package/node_modules/pino/benchmarks/internal/parent-vs-child.bench.js +75 -0
- package/node_modules/pino/benchmarks/internal/redact.bench.js +86 -0
- package/node_modules/pino/benchmarks/long-string.bench.js +81 -0
- package/node_modules/pino/benchmarks/multi-arg.bench.js +193 -0
- package/node_modules/pino/benchmarks/multistream.js +98 -0
- package/node_modules/pino/benchmarks/object.bench.js +82 -0
- package/node_modules/pino/benchmarks/utils/generate-benchmark-doc.js +36 -0
- package/node_modules/pino/benchmarks/utils/runbench.js +138 -0
- package/node_modules/pino/benchmarks/utils/wrap-log-level.js +55 -0
- package/node_modules/pino/bin.js +6 -0
- package/node_modules/pino/browser.js +607 -0
- package/node_modules/pino/build/sync-version.js +25 -0
- package/node_modules/pino/docs/api.md +1664 -0
- package/node_modules/pino/docs/asynchronous.md +55 -0
- package/node_modules/pino/docs/benchmarks.md +55 -0
- package/node_modules/pino/docs/browser.md +341 -0
- package/node_modules/pino/docs/bundling.md +40 -0
- package/node_modules/pino/docs/child-loggers.md +116 -0
- package/node_modules/pino/docs/diagnostics.md +16 -0
- package/node_modules/pino/docs/ecosystem.md +87 -0
- package/node_modules/pino/docs/help.md +353 -0
- package/node_modules/pino/docs/lts.md +93 -0
- package/node_modules/pino/docs/pretty.md +38 -0
- package/node_modules/pino/docs/redaction.md +130 -0
- package/node_modules/pino/docs/transports.md +1447 -0
- package/node_modules/pino/docs/web.md +306 -0
- package/node_modules/pino/eslint.config.js +36 -0
- package/node_modules/pino/examples/basic.js +43 -0
- package/node_modules/pino/examples/transport.js +68 -0
- package/node_modules/pino/favicon.ico +0 -0
- package/node_modules/pino/file.js +12 -0
- package/node_modules/pino/inc-version.sh +42 -0
- package/node_modules/pino/index.html +55 -0
- package/node_modules/pino/lib/caller.js +40 -0
- package/node_modules/pino/lib/constants.js +28 -0
- package/node_modules/pino/lib/deprecations.js +8 -0
- package/node_modules/pino/lib/levels.js +241 -0
- package/node_modules/pino/lib/meta.js +3 -0
- package/node_modules/pino/lib/multistream.js +211 -0
- package/node_modules/pino/lib/proto.js +256 -0
- package/node_modules/pino/lib/redaction.js +119 -0
- package/node_modules/pino/lib/symbols.js +76 -0
- package/node_modules/pino/lib/time.js +39 -0
- package/node_modules/pino/lib/tools.js +427 -0
- package/node_modules/pino/lib/transport-stream.js +56 -0
- package/node_modules/pino/lib/transport.js +302 -0
- package/node_modules/pino/lib/worker.js +197 -0
- package/node_modules/pino/package.json +112 -0
- package/node_modules/pino/pino.d.ts +881 -0
- package/node_modules/pino/pino.js +259 -0
- package/node_modules/pino/test/basic.test.js +952 -0
- package/node_modules/pino/test/broken-pipe.test.js +59 -0
- package/node_modules/pino/test/browser-bindings.test.js +114 -0
- package/node_modules/pino/test/browser-child.test.js +132 -0
- package/node_modules/pino/test/browser-disabled.test.js +87 -0
- package/node_modules/pino/test/browser-early-console-freeze.test.js +12 -0
- package/node_modules/pino/test/browser-is-level-enabled.test.js +101 -0
- package/node_modules/pino/test/browser-levels.test.js +241 -0
- package/node_modules/pino/test/browser-redaction.test.js +264 -0
- package/node_modules/pino/test/browser-serializers.test.js +352 -0
- package/node_modules/pino/test/browser-set-bindings.test.js +99 -0
- package/node_modules/pino/test/browser-timestamp.test.js +88 -0
- package/node_modules/pino/test/browser-transmit.test.js +417 -0
- package/node_modules/pino/test/browser.test.js +698 -0
- package/node_modules/pino/test/caller.test.js +20 -0
- package/node_modules/pino/test/complex-objects.test.js +36 -0
- package/node_modules/pino/test/crlf.test.js +34 -0
- package/node_modules/pino/test/custom-levels.test.js +267 -0
- package/node_modules/pino/test/diagnostics.test.js +107 -0
- package/node_modules/pino/test/error-key.test.js +37 -0
- package/node_modules/pino/test/error.test.js +403 -0
- package/node_modules/pino/test/escaping.test.js +110 -0
- package/node_modules/pino/test/esm/esm.mjs +14 -0
- package/node_modules/pino/test/esm/index.test.js +21 -0
- package/node_modules/pino/test/esm/named-exports.mjs +29 -0
- package/node_modules/pino/test/exit.test.js +79 -0
- package/node_modules/pino/test/fixtures/broken-pipe/basic.js +9 -0
- package/node_modules/pino/test/fixtures/broken-pipe/destination.js +10 -0
- package/node_modules/pino/test/fixtures/broken-pipe/syncfalse.js +12 -0
- package/node_modules/pino/test/fixtures/caller-loop.js +6 -0
- package/node_modules/pino/test/fixtures/console-transport.js +13 -0
- package/node_modules/pino/test/fixtures/crashing-transport.js +13 -0
- package/node_modules/pino/test/fixtures/default-exit.js +8 -0
- package/node_modules/pino/test/fixtures/destination-exit.js +8 -0
- package/node_modules/pino/test/fixtures/eval/index.js +13 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/14-files.js +3 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/2-files.js +3 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file1.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file10.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file11.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file12.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file13.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file14.js +11 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file2.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file3.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file4.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file5.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file6.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file7.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file8.js +5 -0
- package/node_modules/pino/test/fixtures/eval/node_modules/file9.js +5 -0
- package/node_modules/pino/test/fixtures/noop-transport.js +10 -0
- package/node_modules/pino/test/fixtures/pretty/null-prototype.js +8 -0
- package/node_modules/pino/test/fixtures/stdout-hack-protection.js +11 -0
- package/node_modules/pino/test/fixtures/syncfalse-child.js +6 -0
- package/node_modules/pino/test/fixtures/syncfalse-exit.js +9 -0
- package/node_modules/pino/test/fixtures/syncfalse-flush-exit.js +10 -0
- package/node_modules/pino/test/fixtures/syncfalse.js +6 -0
- package/node_modules/pino/test/fixtures/syntax-error-esm.mjs +2 -0
- package/node_modules/pino/test/fixtures/to-file-transport-with-transform.js +20 -0
- package/node_modules/pino/test/fixtures/to-file-transport.js +13 -0
- package/node_modules/pino/test/fixtures/to-file-transport.mjs +8 -0
- package/node_modules/pino/test/fixtures/transport/index.js +12 -0
- package/node_modules/pino/test/fixtures/transport/package.json +5 -0
- package/node_modules/pino/test/fixtures/transport-exit-immediately-with-async-dest.js +16 -0
- package/node_modules/pino/test/fixtures/transport-exit-immediately.js +11 -0
- package/node_modules/pino/test/fixtures/transport-exit-on-ready.js +12 -0
- package/node_modules/pino/test/fixtures/transport-invalid-node-options.js +26 -0
- package/node_modules/pino/test/fixtures/transport-main.js +9 -0
- package/node_modules/pino/test/fixtures/transport-many-lines.js +29 -0
- package/node_modules/pino/test/fixtures/transport-preload-main.mjs +13 -0
- package/node_modules/pino/test/fixtures/transport-preload.mjs +13 -0
- package/node_modules/pino/test/fixtures/transport-string-stdout.js +9 -0
- package/node_modules/pino/test/fixtures/transport-transform.js +21 -0
- package/node_modules/pino/test/fixtures/transport-uses-pino-config.js +33 -0
- package/node_modules/pino/test/fixtures/transport-with-on-exit.js +12 -0
- package/node_modules/pino/test/fixtures/transport-worker-data.js +19 -0
- package/node_modules/pino/test/fixtures/transport-worker-name.js +24 -0
- package/node_modules/pino/test/fixtures/transport-worker.js +15 -0
- package/node_modules/pino/test/fixtures/transport-wrong-export-type.js +3 -0
- package/node_modules/pino/test/fixtures/ts/to-file-transport-native.mts +15 -0
- package/node_modules/pino/test/fixtures/ts/to-file-transport-with-transform.ts +18 -0
- package/node_modules/pino/test/fixtures/ts/to-file-transport.ts +11 -0
- package/node_modules/pino/test/fixtures/ts/transpile.cjs +36 -0
- package/node_modules/pino/test/fixtures/ts/transport-exit-immediately-with-async-dest.ts +15 -0
- package/node_modules/pino/test/fixtures/ts/transport-exit-immediately.ts +10 -0
- package/node_modules/pino/test/fixtures/ts/transport-exit-on-ready.ts +11 -0
- package/node_modules/pino/test/fixtures/ts/transport-main.ts +8 -0
- package/node_modules/pino/test/fixtures/ts/transport-string-stdout.ts +8 -0
- package/node_modules/pino/test/fixtures/ts/transport-worker.ts +14 -0
- package/node_modules/pino/test/formatters.test.js +364 -0
- package/node_modules/pino/test/helper.d.ts +4 -0
- package/node_modules/pino/test/helper.js +159 -0
- package/node_modules/pino/test/hooks.test.js +114 -0
- package/node_modules/pino/test/http.test.js +214 -0
- package/node_modules/pino/test/internals/version.test.js +17 -0
- package/node_modules/pino/test/is-level-enabled.test.js +179 -0
- package/node_modules/pino/test/jest/basic.spec.js +10 -0
- package/node_modules/pino/test/levels.test.js +810 -0
- package/node_modules/pino/test/metadata.test.js +120 -0
- package/node_modules/pino/test/mixin-merge-strategy.test.js +57 -0
- package/node_modules/pino/test/mixin.test.js +241 -0
- package/node_modules/pino/test/multistream.test.js +793 -0
- package/node_modules/pino/test/redact.test.js +923 -0
- package/node_modules/pino/test/serializers.test.js +257 -0
- package/node_modules/pino/test/smoke.js +59 -0
- package/node_modules/pino/test/stdout-protection.test.js +41 -0
- package/node_modules/pino/test/syncfalse.test.js +186 -0
- package/node_modules/pino/test/timestamp-nano.test.js +37 -0
- package/node_modules/pino/test/timestamp.test.js +124 -0
- package/node_modules/pino/test/transport/big.test.js +42 -0
- package/node_modules/pino/test/transport/bundlers-support.test.js +99 -0
- package/node_modules/pino/test/transport/caller.test.js +24 -0
- package/node_modules/pino/test/transport/core.test.js +818 -0
- package/node_modules/pino/test/transport/core.transpiled.test.ts +114 -0
- package/node_modules/pino/test/transport/crash.test.js +36 -0
- package/node_modules/pino/test/transport/module-link.test.js +241 -0
- package/node_modules/pino/test/transport/native-type-stripping.test.mjs +151 -0
- package/node_modules/pino/test/transport/node-options.test.js +116 -0
- package/node_modules/pino/test/transport/pipeline.test.js +137 -0
- package/node_modules/pino/test/transport/preload.test.js +54 -0
- package/node_modules/pino/test/transport/repl.test.js +15 -0
- package/node_modules/pino/test/transport/sync-false.test.js +79 -0
- package/node_modules/pino/test/transport/sync-true.test.js +57 -0
- package/node_modules/pino/test/transport/targets.test.js +48 -0
- package/node_modules/pino/test/transport/uses-pino-config.test.js +166 -0
- package/node_modules/pino/test/transport-stream.test.js +40 -0
- package/node_modules/pino/test/types/pino-import.tst.cts +30 -0
- package/node_modules/pino/test/types/pino-import.tst.js +73 -0
- package/node_modules/pino/test/types/pino-multistream.tst.ts +49 -0
- package/node_modules/pino/test/types/pino-top-export.tst.ts +32 -0
- package/node_modules/pino/test/types/pino-transport.tst.ts +171 -0
- package/node_modules/pino/test/types/pino-type-only.tst.ts +77 -0
- package/node_modules/pino/test/types/pino.ts +98 -0
- package/node_modules/pino/test/types/pino.tst.ts +681 -0
- package/node_modules/pino/test/types/tsconfig.json +10 -0
- package/node_modules/pino/tsconfig.json +14 -0
- package/node_modules/pino-pretty/.borp.yaml +6 -0
- package/node_modules/pino-pretty/.editorconfig +13 -0
- package/node_modules/pino-pretty/.github/dependabot.yml +13 -0
- package/node_modules/pino-pretty/.github/workflows/ci.yml +83 -0
- package/node_modules/pino-pretty/LICENSE +21 -0
- package/node_modules/pino-pretty/Readme.md +425 -0
- package/node_modules/pino-pretty/SECURITY.md +146 -0
- package/node_modules/pino-pretty/benchmark.js +105 -0
- package/node_modules/pino-pretty/bin.js +113 -0
- package/node_modules/pino-pretty/demo.png +0 -0
- package/node_modules/pino-pretty/docs/help.md +24 -0
- package/node_modules/pino-pretty/eslint.config.js +5 -0
- package/node_modules/pino-pretty/help/help.txt +68 -0
- package/node_modules/pino-pretty/index.d.ts +227 -0
- package/node_modules/pino-pretty/index.js +234 -0
- package/node_modules/pino-pretty/lib/colors.js +134 -0
- package/node_modules/pino-pretty/lib/colors.test.js +132 -0
- package/node_modules/pino-pretty/lib/constants.js +55 -0
- package/node_modules/pino-pretty/lib/pretty.js +171 -0
- package/node_modules/pino-pretty/lib/utils/build-safe-sonic-boom.js +69 -0
- package/node_modules/pino-pretty/lib/utils/build-safe-sonic-boom.test.js +84 -0
- package/node_modules/pino-pretty/lib/utils/create-date.js +26 -0
- package/node_modules/pino-pretty/lib/utils/create-date.test.js +20 -0
- package/node_modules/pino-pretty/lib/utils/delete-log-property.js +28 -0
- package/node_modules/pino-pretty/lib/utils/delete-log-property.test.js +31 -0
- package/node_modules/pino-pretty/lib/utils/filter-log.js +99 -0
- package/node_modules/pino-pretty/lib/utils/filter-log.test.js +265 -0
- package/node_modules/pino-pretty/lib/utils/format-time.js +66 -0
- package/node_modules/pino-pretty/lib/utils/format-time.test.js +71 -0
- package/node_modules/pino-pretty/lib/utils/get-level-label-data.js +29 -0
- package/node_modules/pino-pretty/lib/utils/get-property-value.js +30 -0
- package/node_modules/pino-pretty/lib/utils/get-property-value.test.js +31 -0
- package/node_modules/pino-pretty/lib/utils/handle-custom-levels-names-opts.js +38 -0
- package/node_modules/pino-pretty/lib/utils/handle-custom-levels-names-opts.test.js +45 -0
- package/node_modules/pino-pretty/lib/utils/handle-custom-levels-opts.js +39 -0
- package/node_modules/pino-pretty/lib/utils/handle-custom-levels-opts.test.js +47 -0
- package/node_modules/pino-pretty/lib/utils/index.js +108 -0
- package/node_modules/pino-pretty/lib/utils/index.test.js +37 -0
- package/node_modules/pino-pretty/lib/utils/interpret-conditionals.js +41 -0
- package/node_modules/pino-pretty/lib/utils/interpret-conditionals.test.js +84 -0
- package/node_modules/pino-pretty/lib/utils/is-object.js +7 -0
- package/node_modules/pino-pretty/lib/utils/is-object.test.js +10 -0
- package/node_modules/pino-pretty/lib/utils/is-valid-date.js +14 -0
- package/node_modules/pino-pretty/lib/utils/is-valid-date.test.js +16 -0
- package/node_modules/pino-pretty/lib/utils/join-lines-with-indentation.js +29 -0
- package/node_modules/pino-pretty/lib/utils/join-lines-with-indentation.test.js +16 -0
- package/node_modules/pino-pretty/lib/utils/noop.js +3 -0
- package/node_modules/pino-pretty/lib/utils/noop.test.js +12 -0
- package/node_modules/pino-pretty/lib/utils/parse-factory-options.js +171 -0
- package/node_modules/pino-pretty/lib/utils/prettify-error-log.js +76 -0
- package/node_modules/pino-pretty/lib/utils/prettify-error-log.test.js +143 -0
- package/node_modules/pino-pretty/lib/utils/prettify-error.js +54 -0
- package/node_modules/pino-pretty/lib/utils/prettify-error.test.js +25 -0
- package/node_modules/pino-pretty/lib/utils/prettify-level.js +41 -0
- package/node_modules/pino-pretty/lib/utils/prettify-level.test.js +70 -0
- package/node_modules/pino-pretty/lib/utils/prettify-message.js +65 -0
- package/node_modules/pino-pretty/lib/utils/prettify-message.test.js +287 -0
- package/node_modules/pino-pretty/lib/utils/prettify-metadata.js +75 -0
- package/node_modules/pino-pretty/lib/utils/prettify-metadata.test.js +170 -0
- package/node_modules/pino-pretty/lib/utils/prettify-object.js +115 -0
- package/node_modules/pino-pretty/lib/utils/prettify-object.test.js +217 -0
- package/node_modules/pino-pretty/lib/utils/prettify-time.js +43 -0
- package/node_modules/pino-pretty/lib/utils/prettify-time.test.js +264 -0
- package/node_modules/pino-pretty/lib/utils/split-property-key.js +49 -0
- package/node_modules/pino-pretty/lib/utils/split-property-key.test.js +29 -0
- package/node_modules/pino-pretty/lib/utils/strip-unsafe-control-chars.js +18 -0
- package/node_modules/pino-pretty/lib/utils/strip-unsafe-control-chars.test.js +9 -0
- package/node_modules/pino-pretty/package.json +64 -0
- package/node_modules/pino-pretty/test/basic.test.js +1305 -0
- package/node_modules/pino-pretty/test/boolean-options.test.js +228 -0
- package/node_modules/pino-pretty/test/cli-rc.test.js +275 -0
- package/node_modules/pino-pretty/test/cli.test.js +360 -0
- package/node_modules/pino-pretty/test/crlf.test.js +33 -0
- package/node_modules/pino-pretty/test/error-objects.test.js +494 -0
- package/node_modules/pino-pretty/test/example/example.js +33 -0
- package/node_modules/pino-pretty/test/helper.js +19 -0
- package/node_modules/pino-pretty/test/types/exports.tst.ts +15 -0
- package/node_modules/pino-pretty/test/types/pino-pretty.tst.ts +140 -0
- package/node_modules/pino-pretty/test/types/tsconfig.json +9 -0
- package/package.json +12 -5
- package/lib/cli/commands/init.d.ts +0 -1
- package/lib/cli/commands/init.js +0 -8
- package/node_modules/@types/node/globals.global.d.ts +0 -1
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
module.exports = {
|
|
4
|
+
buildSafeSonicBoom: require('./build-safe-sonic-boom.js'),
|
|
5
|
+
createDate: require('./create-date.js'),
|
|
6
|
+
deleteLogProperty: require('./delete-log-property.js'),
|
|
7
|
+
filterLog: require('./filter-log.js'),
|
|
8
|
+
formatTime: require('./format-time.js'),
|
|
9
|
+
getPropertyValue: require('./get-property-value.js'),
|
|
10
|
+
handleCustomLevelsNamesOpts: require('./handle-custom-levels-names-opts.js'),
|
|
11
|
+
handleCustomLevelsOpts: require('./handle-custom-levels-opts.js'),
|
|
12
|
+
interpretConditionals: require('./interpret-conditionals.js'),
|
|
13
|
+
isObject: require('./is-object.js'),
|
|
14
|
+
isValidDate: require('./is-valid-date.js'),
|
|
15
|
+
joinLinesWithIndentation: require('./join-lines-with-indentation.js'),
|
|
16
|
+
noop: require('./noop.js'),
|
|
17
|
+
parseFactoryOptions: require('./parse-factory-options.js'),
|
|
18
|
+
prettifyErrorLog: require('./prettify-error-log.js'),
|
|
19
|
+
prettifyError: require('./prettify-error.js'),
|
|
20
|
+
prettifyLevel: require('./prettify-level.js'),
|
|
21
|
+
prettifyMessage: require('./prettify-message.js'),
|
|
22
|
+
prettifyMetadata: require('./prettify-metadata.js'),
|
|
23
|
+
prettifyObject: require('./prettify-object.js'),
|
|
24
|
+
prettifyTime: require('./prettify-time.js'),
|
|
25
|
+
splitPropertyKey: require('./split-property-key.js'),
|
|
26
|
+
stripUnsafeControlChars: require('./strip-unsafe-control-chars.js'),
|
|
27
|
+
getLevelLabelData: require('./get-level-label-data')
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// The remainder of this file consists of jsdoc blocks that are difficult to
|
|
31
|
+
// determine a more appropriate "home" for. As an example, the blocks associated
|
|
32
|
+
// with custom prettifiers could live in either the `prettify-level`,
|
|
33
|
+
// `prettify-metadata`, or `prettify-time` files since they are the primary
|
|
34
|
+
// files where such code is used. But we want a central place to define common
|
|
35
|
+
// doc blocks, so we are picking this file as the answer.
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* A hash of log property names mapped to prettifier functions. When the
|
|
39
|
+
* incoming log data is being processed for prettification, any key on the log
|
|
40
|
+
* that matches a key in a custom prettifiers hash will be prettified using
|
|
41
|
+
* that matching custom prettifier. The value passed to the custom prettifier
|
|
42
|
+
* will the value associated with the corresponding log key.
|
|
43
|
+
*
|
|
44
|
+
* The hash may contain any arbitrary keys for arbitrary log properties, but it
|
|
45
|
+
* may also contain a set of predefined key names that map to well-known log
|
|
46
|
+
* properties. These keys are:
|
|
47
|
+
*
|
|
48
|
+
* + `time` (for the timestamp field)
|
|
49
|
+
* + `level` (for the level label field; value may be a level number instead
|
|
50
|
+
* of a level label)
|
|
51
|
+
* + `hostname`
|
|
52
|
+
* + `pid`
|
|
53
|
+
* + `name`
|
|
54
|
+
* + `caller`
|
|
55
|
+
*
|
|
56
|
+
* @typedef {Object.<string, CustomPrettifierFunc>} CustomPrettifiers
|
|
57
|
+
*/
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* A synchronous function to be used for prettifying a log property. It must
|
|
61
|
+
* return a string.
|
|
62
|
+
*
|
|
63
|
+
* @typedef {function} CustomPrettifierFunc
|
|
64
|
+
* @param {any} value The value to be prettified for the key associated with
|
|
65
|
+
* the prettifier.
|
|
66
|
+
* @returns {string}
|
|
67
|
+
*/
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* A tokenized string that indicates how the prettified log line should be
|
|
71
|
+
* formatted. Tokens are either log properties enclosed in curly braces, e.g.
|
|
72
|
+
* `{levelLabel}`, `{pid}`, or `{req.url}`, or conditional directives in curly
|
|
73
|
+
* braces. The only conditional directives supported are `if` and `end`, e.g.
|
|
74
|
+
* `{if pid}{pid}{end}`; every `if` must have a matching `end`. Nested
|
|
75
|
+
* conditions are not supported.
|
|
76
|
+
*
|
|
77
|
+
* @typedef {string} MessageFormatString
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* `{levelLabel} - {if pid}{pid} - {end}url:{req.url}`
|
|
81
|
+
*/
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* @typedef {object} PrettifyMessageExtras
|
|
85
|
+
* @property {object} colors Available color functions based on `useColor` (or `colorize`) context
|
|
86
|
+
* the options.
|
|
87
|
+
*/
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* A function that accepts a log object, name of the message key, and name of
|
|
91
|
+
* the level label key and returns a formatted log line.
|
|
92
|
+
*
|
|
93
|
+
* Note: this function must be synchronous.
|
|
94
|
+
*
|
|
95
|
+
* @typedef {function} MessageFormatFunction
|
|
96
|
+
* @param {object} log The log object to be processed.
|
|
97
|
+
* @param {string} messageKey The name of the key in the `log` object that
|
|
98
|
+
* contains the log message.
|
|
99
|
+
* @param {string} levelLabel The name of the key in the `log` object that
|
|
100
|
+
* contains the log level name.
|
|
101
|
+
* @param {PrettifyMessageExtras} extras Additional data available for message context
|
|
102
|
+
* @returns {string}
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* function (log, messageKey, levelLabel) {
|
|
106
|
+
* return `${log[levelLabel]} - ${log[messageKey]}`
|
|
107
|
+
* }
|
|
108
|
+
*/
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { test } = require('node:test')
|
|
4
|
+
const index = require('./index.js')
|
|
5
|
+
const { readdirSync } = require('node:fs')
|
|
6
|
+
const { basename } = require('node:path')
|
|
7
|
+
|
|
8
|
+
test(
|
|
9
|
+
'index exports exactly all non-test files excluding itself',
|
|
10
|
+
t => {
|
|
11
|
+
// Read all files in the `util` directory
|
|
12
|
+
const files = readdirSync(__dirname)
|
|
13
|
+
|
|
14
|
+
for (const file of files) {
|
|
15
|
+
const kebabName = basename(file, '.js')
|
|
16
|
+
const snakeName = kebabName.split('-').map((part, idx) => {
|
|
17
|
+
if (idx === 0) return part
|
|
18
|
+
return part[0].toUpperCase() + part.slice(1)
|
|
19
|
+
}).join('')
|
|
20
|
+
|
|
21
|
+
if (file.endsWith('.test.js') === false && file !== 'index.js') {
|
|
22
|
+
// We expect all files to be exported except…
|
|
23
|
+
t.assert.ok(index[snakeName], `exports ${snakeName}`)
|
|
24
|
+
} else {
|
|
25
|
+
// …test files and the index file itself – those must not be exported
|
|
26
|
+
t.assert.ok(!index[snakeName], `does not export ${snakeName}`)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Remove the exported file from the index object
|
|
30
|
+
delete index[snakeName]
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Now the index is expected to be empty, as nothing else should be
|
|
34
|
+
// exported from it
|
|
35
|
+
t.assert.deepStrictEqual(index, {}, 'does not export anything else')
|
|
36
|
+
}
|
|
37
|
+
)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
module.exports = interpretConditionals
|
|
4
|
+
|
|
5
|
+
const getPropertyValue = require('./get-property-value')
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Translates all conditional blocks from within the messageFormat. Translates
|
|
9
|
+
* any matching {if key}{key}{end} statements and returns everything between
|
|
10
|
+
* if and else blocks if the key provided was found in log.
|
|
11
|
+
*
|
|
12
|
+
* @param {MessageFormatString|MessageFormatFunction} messageFormat A format
|
|
13
|
+
* string or function that defines how the logged message should be
|
|
14
|
+
* conditionally formatted.
|
|
15
|
+
* @param {object} log The log object to be modified.
|
|
16
|
+
*
|
|
17
|
+
* @returns {string} The parsed messageFormat.
|
|
18
|
+
*/
|
|
19
|
+
function interpretConditionals (messageFormat, log) {
|
|
20
|
+
messageFormat = messageFormat.replace(/{if (.*?)}([\s\S]*?){end}/g, replacer)
|
|
21
|
+
|
|
22
|
+
// Remove non-terminated if blocks
|
|
23
|
+
messageFormat = messageFormat.replace(/{if (.*?)}/g, '')
|
|
24
|
+
// Remove floating end blocks
|
|
25
|
+
messageFormat = messageFormat.replace(/{end}/g, '')
|
|
26
|
+
|
|
27
|
+
// Collapse horizontal whitespace (spaces/tabs) without removing newlines
|
|
28
|
+
messageFormat = messageFormat.replace(/[^\S\r\n]+/g, ' ')
|
|
29
|
+
// Remove empty lines left over from removed conditional blocks
|
|
30
|
+
messageFormat = messageFormat.replace(/\n[^\S\r\n]*\n/g, '\n')
|
|
31
|
+
return messageFormat.trim()
|
|
32
|
+
|
|
33
|
+
function replacer (_, key, value) {
|
|
34
|
+
const propertyValue = getPropertyValue(log, key)
|
|
35
|
+
if (propertyValue && value.includes(key)) {
|
|
36
|
+
return value.replace(new RegExp('{' + key + '}', 'g'), propertyValue)
|
|
37
|
+
} else {
|
|
38
|
+
return ''
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { test } = require('node:test')
|
|
4
|
+
const { createCopier } = require('fast-copy')
|
|
5
|
+
const fastCopy = createCopier({})
|
|
6
|
+
const interpretConditionals = require('./interpret-conditionals')
|
|
7
|
+
|
|
8
|
+
const logData = {
|
|
9
|
+
level: 30,
|
|
10
|
+
data1: {
|
|
11
|
+
data2: 'bar'
|
|
12
|
+
},
|
|
13
|
+
msg: 'foo'
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
test('interpretConditionals translates if / else statement to found property value', t => {
|
|
17
|
+
const log = fastCopy(logData)
|
|
18
|
+
t.assert.strictEqual(interpretConditionals('{level} - {if data1.data2}{data1.data2}{end}', log), '{level} - bar')
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
test('interpretConditionals translates if / else statement to found property value and leave unmatched property key untouched', t => {
|
|
22
|
+
const log = fastCopy(logData)
|
|
23
|
+
t.assert.strictEqual(interpretConditionals('{level} - {if data1.data2}{data1.data2} ({msg}){end}', log), '{level} - bar ({msg})')
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
test('interpretConditionals removes non-terminated if statements', t => {
|
|
27
|
+
const log = fastCopy(logData)
|
|
28
|
+
t.assert.strictEqual(interpretConditionals('{level} - {if data1.data2}{data1.data2}', log), '{level} - {data1.data2}')
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
test('interpretConditionals removes floating end statements', t => {
|
|
32
|
+
const log = fastCopy(logData)
|
|
33
|
+
t.assert.strictEqual(interpretConditionals('{level} - {data1.data2}{end}', log), '{level} - {data1.data2}')
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
test('interpretConditionals removes floating end statements within translated if / end statements', t => {
|
|
37
|
+
const log = fastCopy(logData)
|
|
38
|
+
t.assert.strictEqual(interpretConditionals('{level} - {if msg}({msg}){end}{end}', log), '{level} - (foo)')
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
test('interpretConditionals removes if / end blocks if existent condition key does not match existent property key', t => {
|
|
42
|
+
const log = fastCopy(logData)
|
|
43
|
+
t.assert.strictEqual(interpretConditionals('{level}{if msg}{data1.data2}{end}', log), '{level}')
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
test('interpretConditionals removes if / end blocks if non-existent condition key does not match existent property key', t => {
|
|
47
|
+
const log = fastCopy(logData)
|
|
48
|
+
t.assert.strictEqual(interpretConditionals('{level}{if foo}{msg}{end}', log), '{level}')
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
test('interpretConditionals removes if / end blocks if existent condition key does not match non-existent property key', t => {
|
|
52
|
+
const log = fastCopy(logData)
|
|
53
|
+
t.assert.strictEqual(interpretConditionals('{level}{if msg}{foo}{end}', log), '{level}')
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
test('interpretConditionals removes if / end blocks if non-existent condition key does not match non-existent property key', t => {
|
|
57
|
+
const log = fastCopy(logData)
|
|
58
|
+
t.assert.strictEqual(interpretConditionals('{level}{if foo}{bar}{end}', log), '{level}')
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
test('interpretConditionals removes if / end blocks if nested condition key does not match property key', t => {
|
|
62
|
+
const log = fastCopy(logData)
|
|
63
|
+
t.assert.strictEqual(interpretConditionals('{level}{if data1.msg}{data1.data2}{end}', log), '{level}')
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
test('interpretConditionals removes nested if / end statement blocks', t => {
|
|
67
|
+
const log = fastCopy(logData)
|
|
68
|
+
t.assert.strictEqual(interpretConditionals('{if msg}{if data1.data2}{msg}{data1.data2}{end}{end}', log), 'foo{data1.data2}')
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
test('interpretConditionals preserves newlines in messageFormat', t => {
|
|
72
|
+
const log = fastCopy(logData)
|
|
73
|
+
t.assert.strictEqual(interpretConditionals('{msg}\n{level}', log), '{msg}\n{level}')
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
test('interpretConditionals preserves newlines with conditionals', t => {
|
|
77
|
+
const log = fastCopy(logData)
|
|
78
|
+
t.assert.strictEqual(interpretConditionals('{msg}{if data1.data2}\n{data1.data2}{end}', log), '{msg}\nbar')
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
test('interpretConditionals removes empty lines from removed conditionals', t => {
|
|
82
|
+
const log = fastCopy(logData)
|
|
83
|
+
t.assert.strictEqual(interpretConditionals('{msg}\n{if foo}{foo}{end}\n{level}', log), '{msg}\n{level}')
|
|
84
|
+
})
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { test } = require('node:test')
|
|
4
|
+
const isObject = require('./is-object')
|
|
5
|
+
|
|
6
|
+
test('returns correct answer', t => {
|
|
7
|
+
t.assert.strictEqual(isObject({}), true)
|
|
8
|
+
t.assert.strictEqual(isObject([]), false)
|
|
9
|
+
t.assert.strictEqual(isObject(42), false)
|
|
10
|
+
})
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
module.exports = isValidDate
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Checks if the argument is a JS Date and not 'Invalid Date'.
|
|
7
|
+
*
|
|
8
|
+
* @param {Date} date The date to check.
|
|
9
|
+
*
|
|
10
|
+
* @returns {boolean} true if the argument is a JS Date and not 'Invalid Date'.
|
|
11
|
+
*/
|
|
12
|
+
function isValidDate (date) {
|
|
13
|
+
return date instanceof Date && !Number.isNaN(date.getTime())
|
|
14
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
process.env.TZ = 'UTC'
|
|
4
|
+
|
|
5
|
+
const { test } = require('node:test')
|
|
6
|
+
const isValidDate = require('./is-valid-date')
|
|
7
|
+
|
|
8
|
+
test('returns true for valid dates', t => {
|
|
9
|
+
t.assert.strictEqual(isValidDate(new Date()), true)
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
test('returns false for non-dates and invalid dates', t => {
|
|
13
|
+
t.plan(2)
|
|
14
|
+
t.assert.strictEqual(isValidDate('20210621'), false)
|
|
15
|
+
t.assert.strictEqual(isValidDate(new Date('2021-41-99')), false)
|
|
16
|
+
})
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
module.exports = joinLinesWithIndentation
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {object} JoinLinesWithIndentationParams
|
|
7
|
+
* @property {string} input The string to split and reformat.
|
|
8
|
+
* @property {string} [ident] The indentation string. Default: ` ` (4 spaces).
|
|
9
|
+
* @property {string} [eol] The end of line sequence to use when rejoining
|
|
10
|
+
* the lines. Default: `'\n'`.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Given a string with line separators, either `\r\n` or `\n`, add indentation
|
|
15
|
+
* to all lines subsequent to the first line and rejoin the lines using an
|
|
16
|
+
* end of line sequence.
|
|
17
|
+
*
|
|
18
|
+
* @param {JoinLinesWithIndentationParams} input
|
|
19
|
+
*
|
|
20
|
+
* @returns {string} A string with lines subsequent to the first indented
|
|
21
|
+
* with the given indentation sequence.
|
|
22
|
+
*/
|
|
23
|
+
function joinLinesWithIndentation ({ input, ident = ' ', eol = '\n' }) {
|
|
24
|
+
const lines = input.split(/\r?\n/)
|
|
25
|
+
for (let i = 1; i < lines.length; i += 1) {
|
|
26
|
+
lines[i] = ident + lines[i]
|
|
27
|
+
}
|
|
28
|
+
return lines.join(eol)
|
|
29
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { test } = require('node:test')
|
|
4
|
+
const joinLinesWithIndentation = require('./join-lines-with-indentation')
|
|
5
|
+
|
|
6
|
+
test('joinLinesWithIndentation adds indentation to beginning of subsequent lines', t => {
|
|
7
|
+
const input = 'foo\nbar\nbaz'
|
|
8
|
+
const result = joinLinesWithIndentation({ input })
|
|
9
|
+
t.assert.strictEqual(result, 'foo\n bar\n baz')
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
test('joinLinesWithIndentation accepts custom indentation, line breaks, and eol', t => {
|
|
13
|
+
const input = 'foo\nbar\r\nbaz'
|
|
14
|
+
const result = joinLinesWithIndentation({ input, ident: ' ', eol: '^' })
|
|
15
|
+
t.assert.strictEqual(result, 'foo^ bar^ baz')
|
|
16
|
+
})
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { test } = require('node:test')
|
|
4
|
+
const noop = require('./noop')
|
|
5
|
+
|
|
6
|
+
test('is a function', t => {
|
|
7
|
+
t.assert.strictEqual(typeof noop, 'function')
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
test('does nothing', t => {
|
|
11
|
+
t.assert.strictEqual(noop('stuff'), undefined)
|
|
12
|
+
})
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
module.exports = parseFactoryOptions
|
|
4
|
+
|
|
5
|
+
const {
|
|
6
|
+
LEVEL_NAMES
|
|
7
|
+
} = require('../constants')
|
|
8
|
+
const colors = require('../colors')
|
|
9
|
+
const handleCustomLevelsOpts = require('./handle-custom-levels-opts')
|
|
10
|
+
const handleCustomLevelsNamesOpts = require('./handle-custom-levels-names-opts')
|
|
11
|
+
const handleLevelLabelData = require('./get-level-label-data')
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* A `PrettyContext` is an object to be used by the various functions that
|
|
15
|
+
* process log data. It is derived from the provided {@link PinoPrettyOptions}.
|
|
16
|
+
* It may be used as a `this` context.
|
|
17
|
+
*
|
|
18
|
+
* @typedef {object} PrettyContext
|
|
19
|
+
* @property {string} EOL The escape sequence chosen as the line terminator.
|
|
20
|
+
* @property {string} IDENT The string to use as the indentation sequence.
|
|
21
|
+
* @property {ColorizerFunc} colorizer A configured colorizer function.
|
|
22
|
+
* @property {Array[Array<number, string>]} customColors A set of custom color
|
|
23
|
+
* names associated with level numbers.
|
|
24
|
+
* @property {object} customLevelNames A hash of level numbers to level names,
|
|
25
|
+
* e.g. `{ 30: "info" }`.
|
|
26
|
+
* @property {object} customLevels A hash of level names to level numbers,
|
|
27
|
+
* e.g. `{ info: 30 }`.
|
|
28
|
+
* @property {CustomPrettifiers} customPrettifiers A hash of custom prettifier
|
|
29
|
+
* functions.
|
|
30
|
+
* @property {object} customProperties Comprised of `customLevels` and
|
|
31
|
+
* `customLevelNames` if such options are provided.
|
|
32
|
+
* @property {string[]} errorLikeObjectKeys The key names in the log data that
|
|
33
|
+
* should be considered as holding error objects.
|
|
34
|
+
* @property {string[]} errorProps A list of error object keys that should be
|
|
35
|
+
* included in the output.
|
|
36
|
+
* @property {function} getLevelLabelData Pass a numeric level to return [levelLabelString,levelNum]
|
|
37
|
+
* @property {boolean} hideObject Indicates the prettifier should omit objects
|
|
38
|
+
* in the output.
|
|
39
|
+
* @property {string[]} ignoreKeys Set of log data keys to omit.
|
|
40
|
+
* @property {string[]} includeKeys Opposite of `ignoreKeys`.
|
|
41
|
+
* @property {boolean} levelFirst Indicates the level should be printed first.
|
|
42
|
+
* @property {string} levelKey Name of the key in the log data that contains
|
|
43
|
+
* the message.
|
|
44
|
+
* @property {string} levelLabel Format token to represent the position of the
|
|
45
|
+
* level name in the output string.
|
|
46
|
+
* @property {MessageFormatString|MessageFormatFunction} messageFormat
|
|
47
|
+
* @property {string} messageKey Name of the key in the log data that contains
|
|
48
|
+
* the message.
|
|
49
|
+
* @property {string|number} minimumLevel The minimum log level to process
|
|
50
|
+
* and output.
|
|
51
|
+
* @property {ColorizerFunc} objectColorizer
|
|
52
|
+
* @property {boolean} singleLine Indicates objects should be printed on a
|
|
53
|
+
* single output line.
|
|
54
|
+
* @property {string} timestampKey The name of the key in the log data that
|
|
55
|
+
* contains the log timestamp.
|
|
56
|
+
* @property {boolean} translateTime Indicates if timestamps should be
|
|
57
|
+
* translated to a human-readable string.
|
|
58
|
+
* @property {boolean} useOnlyCustomProps
|
|
59
|
+
*/
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @param {PinoPrettyOptions} options The user supplied object of options.
|
|
63
|
+
*
|
|
64
|
+
* @returns {PrettyContext}
|
|
65
|
+
*/
|
|
66
|
+
function parseFactoryOptions (options) {
|
|
67
|
+
const EOL = options.crlf ? '\r\n' : '\n'
|
|
68
|
+
const IDENT = ' '
|
|
69
|
+
const {
|
|
70
|
+
customPrettifiers,
|
|
71
|
+
errorLikeObjectKeys,
|
|
72
|
+
hideObject,
|
|
73
|
+
levelFirst,
|
|
74
|
+
levelKey,
|
|
75
|
+
levelLabel,
|
|
76
|
+
messageFormat,
|
|
77
|
+
messageKey,
|
|
78
|
+
minimumLevel,
|
|
79
|
+
singleLine,
|
|
80
|
+
timestampKey,
|
|
81
|
+
translateTime
|
|
82
|
+
} = options
|
|
83
|
+
const errorProps = options.errorProps.split(',')
|
|
84
|
+
const useOnlyCustomProps = options.useOnlyCustomProps
|
|
85
|
+
const customLevels = handleCustomLevelsOpts(options.customLevels)
|
|
86
|
+
const customLevelNames = handleCustomLevelsNamesOpts(options.customLevels)
|
|
87
|
+
const getLevelLabelData = handleLevelLabelData(useOnlyCustomProps, customLevels, customLevelNames)
|
|
88
|
+
|
|
89
|
+
let customColors
|
|
90
|
+
if (options.customColors) {
|
|
91
|
+
if (typeof options.customColors === 'string') {
|
|
92
|
+
customColors = options.customColors.split(',').reduce((agg, value) => {
|
|
93
|
+
const [level, color] = value.split(':')
|
|
94
|
+
const condition = useOnlyCustomProps
|
|
95
|
+
? options.customLevels
|
|
96
|
+
: customLevelNames[level] !== undefined
|
|
97
|
+
const levelNum = condition
|
|
98
|
+
? customLevelNames[level]
|
|
99
|
+
: LEVEL_NAMES[level]
|
|
100
|
+
const colorIdx = levelNum !== undefined
|
|
101
|
+
? levelNum
|
|
102
|
+
: level
|
|
103
|
+
agg.push([colorIdx, color])
|
|
104
|
+
return agg
|
|
105
|
+
}, [])
|
|
106
|
+
} else if (typeof options.customColors === 'object') {
|
|
107
|
+
customColors = Object.keys(options.customColors).reduce((agg, value) => {
|
|
108
|
+
const [level, color] = [value, options.customColors[value]]
|
|
109
|
+
const condition = useOnlyCustomProps
|
|
110
|
+
? options.customLevels
|
|
111
|
+
: customLevelNames[level] !== undefined
|
|
112
|
+
const levelNum = condition
|
|
113
|
+
? customLevelNames[level]
|
|
114
|
+
: LEVEL_NAMES[level]
|
|
115
|
+
const colorIdx = levelNum !== undefined
|
|
116
|
+
? levelNum
|
|
117
|
+
: level
|
|
118
|
+
agg.push([colorIdx, color])
|
|
119
|
+
return agg
|
|
120
|
+
}, [])
|
|
121
|
+
} else {
|
|
122
|
+
throw new Error('options.customColors must be of type string or object.')
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const customProperties = { customLevels, customLevelNames }
|
|
127
|
+
if (useOnlyCustomProps === true && !options.customLevels) {
|
|
128
|
+
customProperties.customLevels = undefined
|
|
129
|
+
customProperties.customLevelNames = undefined
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const includeKeys = options.include !== undefined
|
|
133
|
+
? new Set(options.include.split(','))
|
|
134
|
+
: undefined
|
|
135
|
+
const ignoreKeys = (!includeKeys && options.ignore)
|
|
136
|
+
? new Set(options.ignore.split(','))
|
|
137
|
+
: undefined
|
|
138
|
+
|
|
139
|
+
const colorizer = colors(options.colorize, customColors, useOnlyCustomProps)
|
|
140
|
+
const objectColorizer = options.colorizeObjects
|
|
141
|
+
? colorizer
|
|
142
|
+
: colors(false, [], false)
|
|
143
|
+
|
|
144
|
+
return {
|
|
145
|
+
EOL,
|
|
146
|
+
IDENT,
|
|
147
|
+
colorizer,
|
|
148
|
+
customColors,
|
|
149
|
+
customLevelNames,
|
|
150
|
+
customLevels,
|
|
151
|
+
customPrettifiers,
|
|
152
|
+
customProperties,
|
|
153
|
+
errorLikeObjectKeys,
|
|
154
|
+
errorProps,
|
|
155
|
+
getLevelLabelData,
|
|
156
|
+
hideObject,
|
|
157
|
+
ignoreKeys,
|
|
158
|
+
includeKeys,
|
|
159
|
+
levelFirst,
|
|
160
|
+
levelKey,
|
|
161
|
+
levelLabel,
|
|
162
|
+
messageFormat,
|
|
163
|
+
messageKey,
|
|
164
|
+
minimumLevel,
|
|
165
|
+
objectColorizer,
|
|
166
|
+
singleLine,
|
|
167
|
+
timestampKey,
|
|
168
|
+
translateTime,
|
|
169
|
+
useOnlyCustomProps
|
|
170
|
+
}
|
|
171
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
module.exports = prettifyErrorLog
|
|
4
|
+
|
|
5
|
+
const {
|
|
6
|
+
LOGGER_KEYS
|
|
7
|
+
} = require('../constants')
|
|
8
|
+
|
|
9
|
+
const isObject = require('./is-object')
|
|
10
|
+
const joinLinesWithIndentation = require('./join-lines-with-indentation')
|
|
11
|
+
const prettifyObject = require('./prettify-object')
|
|
12
|
+
const stripUnsafeControlChars = require('./strip-unsafe-control-chars')
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @typedef {object} PrettifyErrorLogParams
|
|
16
|
+
* @property {object} log The error log to prettify.
|
|
17
|
+
* @property {PrettyContext} context The context object built from parsing
|
|
18
|
+
* the options.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Given a log object that has a `type: 'Error'` key, prettify the object and
|
|
23
|
+
* return the result. In other
|
|
24
|
+
*
|
|
25
|
+
* @param {PrettifyErrorLogParams} input
|
|
26
|
+
*
|
|
27
|
+
* @returns {string} A string that represents the prettified error log.
|
|
28
|
+
*/
|
|
29
|
+
function prettifyErrorLog ({ log, context }) {
|
|
30
|
+
const {
|
|
31
|
+
EOL: eol,
|
|
32
|
+
IDENT: ident,
|
|
33
|
+
errorProps: errorProperties,
|
|
34
|
+
messageKey
|
|
35
|
+
} = context
|
|
36
|
+
const stack = stripUnsafeControlChars(log.stack)
|
|
37
|
+
const joinedLines = joinLinesWithIndentation({ input: stack, ident, eol })
|
|
38
|
+
let result = `${ident}${joinedLines}${eol}`
|
|
39
|
+
|
|
40
|
+
if (errorProperties.length > 0) {
|
|
41
|
+
const excludeProperties = LOGGER_KEYS.concat(messageKey, 'type', 'stack')
|
|
42
|
+
let propertiesToPrint
|
|
43
|
+
if (errorProperties[0] === '*') {
|
|
44
|
+
// Print all sibling properties except for the standard exclusions.
|
|
45
|
+
propertiesToPrint = Object.keys(log).filter(k => excludeProperties.includes(k) === false)
|
|
46
|
+
} else {
|
|
47
|
+
// Print only specified properties unless the property is a standard exclusion.
|
|
48
|
+
propertiesToPrint = errorProperties.filter(k => excludeProperties.includes(k) === false)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
for (let i = 0; i < propertiesToPrint.length; i += 1) {
|
|
52
|
+
const key = propertiesToPrint[i]
|
|
53
|
+
if (key in log === false) continue
|
|
54
|
+
const safeKey = stripUnsafeControlChars(key)
|
|
55
|
+
if (isObject(log[key])) {
|
|
56
|
+
// The nested object may have "logger" type keys but since they are not
|
|
57
|
+
// at the root level of the object being processed, we want to print them.
|
|
58
|
+
// Thus, we invoke with `excludeLoggerKeys: false`.
|
|
59
|
+
const prettifiedObject = prettifyObject({
|
|
60
|
+
log: log[key],
|
|
61
|
+
excludeLoggerKeys: false,
|
|
62
|
+
context: {
|
|
63
|
+
...context,
|
|
64
|
+
IDENT: ident + ident
|
|
65
|
+
}
|
|
66
|
+
})
|
|
67
|
+
result = `${result}${ident}${safeKey}: {${eol}${prettifiedObject}${ident}}${eol}`
|
|
68
|
+
continue
|
|
69
|
+
}
|
|
70
|
+
const value = stripUnsafeControlChars(log[key])
|
|
71
|
+
result = `${result}${ident}${safeKey}: ${value}${eol}`
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return result
|
|
76
|
+
}
|