@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.
- package/.jsii +184 -45
- package/API.md +153 -37
- package/CHANGELOG.md +13 -0
- package/README.md +10 -3
- package/docs/D9-plumbing.md +189 -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.js +39 -30
- 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 +33 -0
- package/lib/cli/commands/save/env.js +109 -0
- package/lib/cli/commands/save/save-snapshot.d.ts +9 -0
- package/lib/cli/commands/save/save-snapshot.js +232 -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 +96 -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 +65 -25
- package/lib/cli/logger.d.ts +2 -0
- package/lib/cli/logger.js +10 -0
- package/lib/cli/plumbing-config.d.ts +11 -0
- package/lib/cli/plumbing-config.js +13 -0
- package/lib/index.d.ts +44 -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,265 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { describe, test } = require('node:test')
|
|
4
|
+
const filterLog = require('./filter-log')
|
|
5
|
+
|
|
6
|
+
const context = {
|
|
7
|
+
includeKeys: undefined,
|
|
8
|
+
ignoreKeys: undefined
|
|
9
|
+
}
|
|
10
|
+
const logData = {
|
|
11
|
+
level: 30,
|
|
12
|
+
time: 1522431328992,
|
|
13
|
+
data1: {
|
|
14
|
+
data2: { 'data-3': 'bar' },
|
|
15
|
+
error: new Error('test')
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const logData2 = Object.assign({
|
|
19
|
+
'logging.domain.corp/operation': {
|
|
20
|
+
id: 'foo',
|
|
21
|
+
producer: 'bar'
|
|
22
|
+
}
|
|
23
|
+
}, logData)
|
|
24
|
+
|
|
25
|
+
describe('#filterLog with an ignoreKeys option', () => {
|
|
26
|
+
test('filterLog removes single entry', t => {
|
|
27
|
+
const result = filterLog({
|
|
28
|
+
log: logData,
|
|
29
|
+
context: {
|
|
30
|
+
...context,
|
|
31
|
+
ignoreKeys: ['data1.data2.data-3']
|
|
32
|
+
}
|
|
33
|
+
})
|
|
34
|
+
t.assert.deepStrictEqual(result, { level: 30, time: 1522431328992, data1: { data2: { }, error: new Error('test') } })
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
test('filterLog removes multiple entries', t => {
|
|
38
|
+
const result = filterLog({
|
|
39
|
+
log: logData,
|
|
40
|
+
context: {
|
|
41
|
+
...context,
|
|
42
|
+
ignoreKeys: ['time', 'data1']
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
t.assert.deepStrictEqual(result, { level: 30 })
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
test('filterLog keeps error instance', t => {
|
|
49
|
+
const result = filterLog({
|
|
50
|
+
log: logData,
|
|
51
|
+
context: {
|
|
52
|
+
...context,
|
|
53
|
+
ignoreKeys: []
|
|
54
|
+
}
|
|
55
|
+
})
|
|
56
|
+
t.assert.strictEqual(logData.data1.error, result.data1.error)
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
test('filterLog removes entry with escape sequence', t => {
|
|
60
|
+
const result = filterLog({
|
|
61
|
+
log: logData2,
|
|
62
|
+
context: {
|
|
63
|
+
...context,
|
|
64
|
+
ignoreKeys: ['data1', 'logging\\.domain\\.corp/operation']
|
|
65
|
+
}
|
|
66
|
+
})
|
|
67
|
+
t.assert.deepStrictEqual(result, { level: 30, time: 1522431328992 })
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
test('filterLog removes entry with escape sequence nested', t => {
|
|
71
|
+
const result = filterLog({
|
|
72
|
+
log: logData2,
|
|
73
|
+
context: {
|
|
74
|
+
...context,
|
|
75
|
+
ignoreKeys: ['data1', 'logging\\.domain\\.corp/operation.producer']
|
|
76
|
+
}
|
|
77
|
+
})
|
|
78
|
+
t.assert.deepStrictEqual(result, { level: 30, time: 1522431328992, 'logging.domain.corp/operation': { id: 'foo' } })
|
|
79
|
+
})
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
for (const ignoreKeys of [
|
|
83
|
+
undefined,
|
|
84
|
+
['level'],
|
|
85
|
+
['level', 'data1.data2.data-3']
|
|
86
|
+
]) {
|
|
87
|
+
describe(`#filterLog with an includeKeys option when the ignoreKeys being ${ignoreKeys}`, () => {
|
|
88
|
+
test('filterLog include nothing', t => {
|
|
89
|
+
const result = filterLog({
|
|
90
|
+
log: logData,
|
|
91
|
+
context: {
|
|
92
|
+
...context,
|
|
93
|
+
ignoreKeys,
|
|
94
|
+
includeKeys: []
|
|
95
|
+
}
|
|
96
|
+
})
|
|
97
|
+
t.assert.deepStrictEqual(result, {})
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
test('filterLog include empty key is a no-op', t => {
|
|
101
|
+
const result = filterLog({
|
|
102
|
+
log: logData,
|
|
103
|
+
context: {
|
|
104
|
+
...context,
|
|
105
|
+
ignoreKeys,
|
|
106
|
+
includeKeys: ['']
|
|
107
|
+
}
|
|
108
|
+
})
|
|
109
|
+
t.assert.deepStrictEqual(result, {})
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
test('filterLog include single entry', t => {
|
|
113
|
+
const result = filterLog({
|
|
114
|
+
log: logData,
|
|
115
|
+
context: {
|
|
116
|
+
...context,
|
|
117
|
+
ignoreKeys,
|
|
118
|
+
includeKeys: ['time']
|
|
119
|
+
}
|
|
120
|
+
})
|
|
121
|
+
t.assert.deepStrictEqual(result, { time: 1522431328992 })
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
test('filterLog include multiple entries', t => {
|
|
125
|
+
const result = filterLog({
|
|
126
|
+
log: logData,
|
|
127
|
+
context: {
|
|
128
|
+
...context,
|
|
129
|
+
ignoreKeys,
|
|
130
|
+
includeKeys: ['time', 'data1']
|
|
131
|
+
}
|
|
132
|
+
})
|
|
133
|
+
t.assert.deepStrictEqual(result, {
|
|
134
|
+
time: 1522431328992,
|
|
135
|
+
data1: {
|
|
136
|
+
data2: { 'data-3': 'bar' },
|
|
137
|
+
error: new Error('test')
|
|
138
|
+
}
|
|
139
|
+
})
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
test('filterLog include nested entry', t => {
|
|
143
|
+
const result = filterLog({
|
|
144
|
+
log: logData,
|
|
145
|
+
context: {
|
|
146
|
+
...context,
|
|
147
|
+
ignoreKeys,
|
|
148
|
+
includeKeys: ['data1.data2.data-3']
|
|
149
|
+
}
|
|
150
|
+
})
|
|
151
|
+
t.assert.deepStrictEqual(result, { data1: { data2: { 'data-3': 'bar' } } })
|
|
152
|
+
})
|
|
153
|
+
|
|
154
|
+
test('filterLog include nested and top-level entries', t => {
|
|
155
|
+
const result = filterLog({
|
|
156
|
+
log: logData,
|
|
157
|
+
context: {
|
|
158
|
+
...context,
|
|
159
|
+
ignoreKeys,
|
|
160
|
+
includeKeys: ['time', 'data1.data2.data-3']
|
|
161
|
+
}
|
|
162
|
+
})
|
|
163
|
+
t.assert.deepStrictEqual(result, {
|
|
164
|
+
time: 1522431328992,
|
|
165
|
+
data1: { data2: { 'data-3': 'bar' } }
|
|
166
|
+
})
|
|
167
|
+
})
|
|
168
|
+
|
|
169
|
+
test('filterLog include missing nested entry', t => {
|
|
170
|
+
const result = filterLog({
|
|
171
|
+
log: logData,
|
|
172
|
+
context: {
|
|
173
|
+
...context,
|
|
174
|
+
ignoreKeys,
|
|
175
|
+
includeKeys: ['data1.missing']
|
|
176
|
+
}
|
|
177
|
+
})
|
|
178
|
+
t.assert.deepStrictEqual(result, {})
|
|
179
|
+
})
|
|
180
|
+
})
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
describe('#filterLog includeKeys with escaped nested keys', () => {
|
|
184
|
+
test('filterLog include escaped top-level key', t => {
|
|
185
|
+
const result = filterLog({
|
|
186
|
+
log: logData2,
|
|
187
|
+
context: {
|
|
188
|
+
...context,
|
|
189
|
+
includeKeys: ['logging\\.domain\\.corp/operation']
|
|
190
|
+
}
|
|
191
|
+
})
|
|
192
|
+
t.assert.deepStrictEqual(result, {
|
|
193
|
+
'logging.domain.corp/operation': {
|
|
194
|
+
id: 'foo',
|
|
195
|
+
producer: 'bar'
|
|
196
|
+
}
|
|
197
|
+
})
|
|
198
|
+
})
|
|
199
|
+
|
|
200
|
+
test('filterLog include escaped nested key', t => {
|
|
201
|
+
const result = filterLog({
|
|
202
|
+
log: logData2,
|
|
203
|
+
context: {
|
|
204
|
+
...context,
|
|
205
|
+
includeKeys: ['logging\\.domain\\.corp/operation.producer']
|
|
206
|
+
}
|
|
207
|
+
})
|
|
208
|
+
t.assert.deepStrictEqual(result, {
|
|
209
|
+
'logging.domain.corp/operation': { producer: 'bar' }
|
|
210
|
+
})
|
|
211
|
+
})
|
|
212
|
+
})
|
|
213
|
+
|
|
214
|
+
describe('#filterLog with circular references', () => {
|
|
215
|
+
const logData = {
|
|
216
|
+
level: 30,
|
|
217
|
+
time: 1522431328992,
|
|
218
|
+
data1: 'test'
|
|
219
|
+
}
|
|
220
|
+
logData.circular = logData
|
|
221
|
+
|
|
222
|
+
test('filterLog removes single entry', t => {
|
|
223
|
+
const result = filterLog({
|
|
224
|
+
log: logData,
|
|
225
|
+
context: {
|
|
226
|
+
...context,
|
|
227
|
+
ignoreKeys: ['data1']
|
|
228
|
+
}
|
|
229
|
+
})
|
|
230
|
+
|
|
231
|
+
t.assert.deepStrictEqual(result.circular.level, result.level)
|
|
232
|
+
t.assert.deepStrictEqual(result.circular.time, result.time)
|
|
233
|
+
|
|
234
|
+
delete result.circular
|
|
235
|
+
t.assert.deepStrictEqual(result, { level: 30, time: 1522431328992 })
|
|
236
|
+
})
|
|
237
|
+
|
|
238
|
+
test('filterLog includes single entry', t => {
|
|
239
|
+
const result = filterLog({
|
|
240
|
+
log: logData,
|
|
241
|
+
context: {
|
|
242
|
+
...context,
|
|
243
|
+
includeKeys: ['data1']
|
|
244
|
+
}
|
|
245
|
+
})
|
|
246
|
+
|
|
247
|
+
t.assert.deepStrictEqual(result, { data1: 'test' })
|
|
248
|
+
})
|
|
249
|
+
|
|
250
|
+
test('filterLog includes circular keys', t => {
|
|
251
|
+
const result = filterLog({
|
|
252
|
+
log: logData,
|
|
253
|
+
context: {
|
|
254
|
+
...context,
|
|
255
|
+
includeKeys: ['level', 'circular']
|
|
256
|
+
}
|
|
257
|
+
})
|
|
258
|
+
|
|
259
|
+
t.assert.deepStrictEqual(result.circular.level, logData.level)
|
|
260
|
+
t.assert.deepStrictEqual(result.circular.time, logData.time)
|
|
261
|
+
|
|
262
|
+
delete result.circular
|
|
263
|
+
t.assert.deepStrictEqual(result, { level: 30 })
|
|
264
|
+
})
|
|
265
|
+
})
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
module.exports = formatTime
|
|
4
|
+
|
|
5
|
+
const {
|
|
6
|
+
DATE_FORMAT,
|
|
7
|
+
DATE_FORMAT_SIMPLE
|
|
8
|
+
} = require('../constants')
|
|
9
|
+
|
|
10
|
+
const dateformat = require('dateformat')
|
|
11
|
+
const createDate = require('./create-date')
|
|
12
|
+
const isValidDate = require('./is-valid-date')
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Converts a given `epoch` to a desired display format.
|
|
16
|
+
*
|
|
17
|
+
* @param {number|string} epoch The time to convert. May be any value that is
|
|
18
|
+
* valid for `new Date()`.
|
|
19
|
+
* @param {boolean|string} [translateTime=false] When `false`, the given `epoch`
|
|
20
|
+
* will simply be returned. When `true`, the given `epoch` will be converted
|
|
21
|
+
* to a string at UTC using the `DATE_FORMAT_SIMPLE` constant. If `translateTime` is
|
|
22
|
+
* a string, the following rules are available:
|
|
23
|
+
*
|
|
24
|
+
* - `<format string>`: The string is a literal format string. This format
|
|
25
|
+
* string will be used to interpret the `epoch` and return a display string
|
|
26
|
+
* at UTC.
|
|
27
|
+
* - `SYS:STANDARD`: The returned display string will follow the `DATE_FORMAT`
|
|
28
|
+
* constant at the system's local timezone.
|
|
29
|
+
* - `SYS:<format string>`: The returned display string will follow the given
|
|
30
|
+
* `<format string>` at the system's local timezone.
|
|
31
|
+
* - `UTC:<format string>`: The returned display string will follow the given
|
|
32
|
+
* `<format string>` at UTC.
|
|
33
|
+
*
|
|
34
|
+
* @returns {number|string} The formatted time.
|
|
35
|
+
*/
|
|
36
|
+
function formatTime (epoch, translateTime = false) {
|
|
37
|
+
if (translateTime === false) {
|
|
38
|
+
return epoch
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const instant = createDate(epoch)
|
|
42
|
+
|
|
43
|
+
// If the Date is invalid, do not attempt to format
|
|
44
|
+
if (!isValidDate(instant)) {
|
|
45
|
+
return epoch
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (translateTime === true) {
|
|
49
|
+
return dateformat(instant, DATE_FORMAT_SIMPLE)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const upperFormat = translateTime.toUpperCase()
|
|
53
|
+
if (upperFormat === 'SYS:STANDARD') {
|
|
54
|
+
return dateformat(instant, DATE_FORMAT)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const prefix = upperFormat.substr(0, 4)
|
|
58
|
+
if (prefix === 'SYS:' || prefix === 'UTC:') {
|
|
59
|
+
if (prefix === 'UTC:') {
|
|
60
|
+
return dateformat(instant, translateTime)
|
|
61
|
+
}
|
|
62
|
+
return dateformat(instant, translateTime.slice(4))
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return dateformat(instant, `UTC:${translateTime}`)
|
|
66
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
process.env.TZ = 'UTC'
|
|
4
|
+
|
|
5
|
+
const { test } = require('node:test')
|
|
6
|
+
const formatTime = require('./format-time')
|
|
7
|
+
|
|
8
|
+
const dateStr = '2019-04-06T13:30:00.000-04:00'
|
|
9
|
+
const epoch = new Date(dateStr)
|
|
10
|
+
const epochMS = epoch.getTime()
|
|
11
|
+
|
|
12
|
+
test('passes through epoch if `translateTime` is `false`', t => {
|
|
13
|
+
const formattedTime = formatTime(epochMS)
|
|
14
|
+
t.assert.strictEqual(formattedTime, epochMS)
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
test('passes through epoch if date is invalid', t => {
|
|
18
|
+
const input = 'this is not a date'
|
|
19
|
+
const formattedTime = formatTime(input, true)
|
|
20
|
+
t.assert.strictEqual(formattedTime, input)
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
test('translates epoch milliseconds if `translateTime` is `true`', t => {
|
|
24
|
+
const formattedTime = formatTime(epochMS, true)
|
|
25
|
+
t.assert.strictEqual(formattedTime, '17:30:00.000')
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
test('translates epoch milliseconds to UTC string given format', t => {
|
|
29
|
+
const formattedTime = formatTime(epochMS, 'd mmm yyyy H:MM')
|
|
30
|
+
t.assert.strictEqual(formattedTime, '6 Apr 2019 17:30')
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
test('translates epoch milliseconds to SYS:STANDARD', t => {
|
|
34
|
+
const formattedTime = formatTime(epochMS, 'SYS:STANDARD')
|
|
35
|
+
t.assert.match(formattedTime, /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [-+]?\d{4}/)
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
test('translates epoch milliseconds to SYS:<FORMAT>', t => {
|
|
39
|
+
const formattedTime = formatTime(epochMS, 'SYS:d mmm yyyy H:MM')
|
|
40
|
+
t.assert.match(formattedTime, /\d{1} \w{3} \d{4} \d{1,2}:\d{2}/)
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
test('passes through date string if `translateTime` is `false`', t => {
|
|
44
|
+
const formattedTime = formatTime(dateStr)
|
|
45
|
+
t.assert.strictEqual(formattedTime, dateStr)
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
test('translates date string if `translateTime` is `true`', t => {
|
|
49
|
+
const formattedTime = formatTime(dateStr, true)
|
|
50
|
+
t.assert.strictEqual(formattedTime, '17:30:00.000')
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
test('translates date string to UTC string given format', t => {
|
|
54
|
+
const formattedTime = formatTime(dateStr, 'd mmm yyyy H:MM')
|
|
55
|
+
t.assert.strictEqual(formattedTime, '6 Apr 2019 17:30')
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
test('translates date string to SYS:STANDARD', t => {
|
|
59
|
+
const formattedTime = formatTime(dateStr, 'SYS:STANDARD')
|
|
60
|
+
t.assert.match(formattedTime, /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} [-+]?\d{4}/)
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
test('translates date string to UTC:<FORMAT>', t => {
|
|
64
|
+
const formattedTime = formatTime(dateStr, 'UTC:d mmm yyyy H:MM')
|
|
65
|
+
t.assert.strictEqual(formattedTime, '6 Apr 2019 17:30')
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
test('translates date string to SYS:<FORMAT>', t => {
|
|
69
|
+
const formattedTime = formatTime(dateStr, 'SYS:d mmm yyyy H:MM')
|
|
70
|
+
t.assert.match(formattedTime, /\d{1} \w{3} \d{4} \d{1,2}:\d{2}/)
|
|
71
|
+
})
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
module.exports = getLevelLabelData
|
|
4
|
+
const { LEVELS, LEVEL_NAMES } = require('../constants')
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Given initial settings for custom levels/names and use of only custom props
|
|
8
|
+
* get the level label that corresponds with a given level number
|
|
9
|
+
*
|
|
10
|
+
* @param {boolean} useOnlyCustomProps
|
|
11
|
+
* @param {object} customLevels
|
|
12
|
+
* @param {object} customLevelNames
|
|
13
|
+
*
|
|
14
|
+
* @returns {function} A function that takes a number level and returns the level's label string
|
|
15
|
+
*/
|
|
16
|
+
function getLevelLabelData (useOnlyCustomProps, customLevels, customLevelNames) {
|
|
17
|
+
const levels = useOnlyCustomProps ? customLevels || LEVELS : Object.assign({}, LEVELS, customLevels)
|
|
18
|
+
const levelNames = useOnlyCustomProps ? customLevelNames || LEVEL_NAMES : Object.assign({}, LEVEL_NAMES, customLevelNames)
|
|
19
|
+
return function (level) {
|
|
20
|
+
let levelNum = 'default'
|
|
21
|
+
if (Number.isInteger(+level)) {
|
|
22
|
+
levelNum = Object.prototype.hasOwnProperty.call(levels, level) ? level : levelNum
|
|
23
|
+
} else {
|
|
24
|
+
levelNum = Object.prototype.hasOwnProperty.call(levelNames, level.toLowerCase()) ? levelNames[level.toLowerCase()] : levelNum
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return [levels[levelNum], levelNum]
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
module.exports = getPropertyValue
|
|
4
|
+
|
|
5
|
+
const splitPropertyKey = require('./split-property-key')
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Gets a specified property from an object if it exists.
|
|
9
|
+
*
|
|
10
|
+
* @param {object} obj The object to be searched.
|
|
11
|
+
* @param {string|string[]} property A string, or an array of strings, identifying
|
|
12
|
+
* the property to be retrieved from the object.
|
|
13
|
+
* Accepts nested properties delimited by a `.`.
|
|
14
|
+
* Delimiter can be escaped to preserve property names that contain the delimiter.
|
|
15
|
+
* e.g. `'prop1.prop2'` or `'prop2\.domain\.corp.prop2'`.
|
|
16
|
+
*
|
|
17
|
+
* @returns {*}
|
|
18
|
+
*/
|
|
19
|
+
function getPropertyValue (obj, property) {
|
|
20
|
+
const props = Array.isArray(property) ? property : splitPropertyKey(property)
|
|
21
|
+
|
|
22
|
+
for (const prop of props) {
|
|
23
|
+
if (!Object.prototype.hasOwnProperty.call(obj, prop)) {
|
|
24
|
+
return
|
|
25
|
+
}
|
|
26
|
+
obj = obj[prop]
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return obj
|
|
30
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { test } = require('node:test')
|
|
4
|
+
const getPropertyValue = require('./get-property-value')
|
|
5
|
+
|
|
6
|
+
test('getPropertyValue returns the value of the property', t => {
|
|
7
|
+
const result = getPropertyValue({
|
|
8
|
+
foo: 'bar'
|
|
9
|
+
}, 'foo')
|
|
10
|
+
t.assert.strictEqual(result, 'bar')
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
test('getPropertyValue returns the value of the nested property', t => {
|
|
14
|
+
const result = getPropertyValue({ extra: { foo: { value: 'bar' } } }, 'extra.foo.value')
|
|
15
|
+
t.assert.strictEqual(result, 'bar')
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
test('getPropertyValue returns the value of the nested property using the array of nested property keys', t => {
|
|
19
|
+
const result = getPropertyValue({ extra: { foo: { value: 'bar' } } }, ['extra', 'foo', 'value'])
|
|
20
|
+
t.assert.strictEqual(result, 'bar')
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
test('getPropertyValue returns undefined for non-existing properties', t => {
|
|
24
|
+
const result = getPropertyValue({ extra: { foo: { value: 'bar' } } }, 'extra.foo.value-2')
|
|
25
|
+
t.assert.strictEqual(result, undefined)
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
test('getPropertyValue returns undefined for non-existing properties using the array of nested property keys', t => {
|
|
29
|
+
const result = getPropertyValue({ extra: { foo: { value: 'bar' } } }, ['extra', 'foo', 'value-2'])
|
|
30
|
+
t.assert.strictEqual(result, undefined)
|
|
31
|
+
})
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
module.exports = handleCustomLevelsNamesOpts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Parse a CSV string or options object that maps level
|
|
7
|
+
* labels to level values.
|
|
8
|
+
*
|
|
9
|
+
* @param {string|object} cLevels An object mapping level
|
|
10
|
+
* names to level values, e.g. `{ info: 30, debug: 65 }`, or a
|
|
11
|
+
* CSV string in the format `level_name:level_value`, e.g.
|
|
12
|
+
* `info:30,debug:65`.
|
|
13
|
+
*
|
|
14
|
+
* @returns {object} An object mapping levels names to level values
|
|
15
|
+
* e.g. `{ info: 30, debug: 65 }`.
|
|
16
|
+
*/
|
|
17
|
+
function handleCustomLevelsNamesOpts (cLevels) {
|
|
18
|
+
if (!cLevels) return {}
|
|
19
|
+
|
|
20
|
+
if (typeof cLevels === 'string') {
|
|
21
|
+
return cLevels
|
|
22
|
+
.split(',')
|
|
23
|
+
.reduce((agg, value, idx) => {
|
|
24
|
+
const [levelName, levelNum = idx] = value.split(':')
|
|
25
|
+
agg[levelName.toLowerCase()] = levelNum
|
|
26
|
+
return agg
|
|
27
|
+
}, {})
|
|
28
|
+
} else if (Object.prototype.toString.call(cLevels) === '[object Object]') {
|
|
29
|
+
return Object
|
|
30
|
+
.keys(cLevels)
|
|
31
|
+
.reduce((agg, levelName) => {
|
|
32
|
+
agg[levelName.toLowerCase()] = cLevels[levelName]
|
|
33
|
+
return agg
|
|
34
|
+
}, {})
|
|
35
|
+
} else {
|
|
36
|
+
return {}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { test } = require('node:test')
|
|
4
|
+
const match = require('@jsumners/assert-match')
|
|
5
|
+
const handleCustomLevelsNamesOpts = require('./handle-custom-levels-names-opts')
|
|
6
|
+
|
|
7
|
+
test('returns a empty object `{}` for undefined parameter', t => {
|
|
8
|
+
const handledCustomLevelNames = handleCustomLevelsNamesOpts()
|
|
9
|
+
t.assert.deepStrictEqual(handledCustomLevelNames, {})
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
test('returns a empty object `{}` for unknown parameter', t => {
|
|
13
|
+
const handledCustomLevelNames = handleCustomLevelsNamesOpts(123)
|
|
14
|
+
t.assert.deepStrictEqual(handledCustomLevelNames, {})
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
test('returns a filled object for string parameter', t => {
|
|
18
|
+
const handledCustomLevelNames = handleCustomLevelsNamesOpts('ok:10,warn:20,error:35')
|
|
19
|
+
match(handledCustomLevelNames, {
|
|
20
|
+
ok: 10,
|
|
21
|
+
warn: 20,
|
|
22
|
+
error: 35
|
|
23
|
+
}, t)
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
test('returns a filled object for object parameter', t => {
|
|
27
|
+
const handledCustomLevelNames = handleCustomLevelsNamesOpts({
|
|
28
|
+
ok: 10,
|
|
29
|
+
warn: 20,
|
|
30
|
+
error: 35
|
|
31
|
+
})
|
|
32
|
+
match(handledCustomLevelNames, {
|
|
33
|
+
ok: 10,
|
|
34
|
+
warn: 20,
|
|
35
|
+
error: 35
|
|
36
|
+
}, t)
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
test('defaults missing level num to first index', t => {
|
|
40
|
+
const result = handleCustomLevelsNamesOpts('ok:10,info')
|
|
41
|
+
match(result, {
|
|
42
|
+
ok: 10,
|
|
43
|
+
info: 1
|
|
44
|
+
}, t)
|
|
45
|
+
})
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
module.exports = handleCustomLevelsOpts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Parse a CSV string or options object that specifies
|
|
7
|
+
* configuration for custom levels.
|
|
8
|
+
*
|
|
9
|
+
* @param {string|object} cLevels An object mapping level
|
|
10
|
+
* names to values, e.g. `{ info: 30, debug: 65 }`, or a
|
|
11
|
+
* CSV string in the format `level_name:level_value`, e.g.
|
|
12
|
+
* `info:30,debug:65`.
|
|
13
|
+
*
|
|
14
|
+
* @returns {object} An object mapping levels to labels that
|
|
15
|
+
* appear in logs, e.g. `{ '30': 'INFO', '65': 'DEBUG' }`.
|
|
16
|
+
*/
|
|
17
|
+
function handleCustomLevelsOpts (cLevels) {
|
|
18
|
+
if (!cLevels) return {}
|
|
19
|
+
|
|
20
|
+
if (typeof cLevels === 'string') {
|
|
21
|
+
return cLevels
|
|
22
|
+
.split(',')
|
|
23
|
+
.reduce((agg, value, idx) => {
|
|
24
|
+
const [levelName, levelNum = idx] = value.split(':')
|
|
25
|
+
agg[levelNum] = levelName.toUpperCase()
|
|
26
|
+
return agg
|
|
27
|
+
},
|
|
28
|
+
{ default: 'USERLVL' })
|
|
29
|
+
} else if (Object.prototype.toString.call(cLevels) === '[object Object]') {
|
|
30
|
+
return Object
|
|
31
|
+
.keys(cLevels)
|
|
32
|
+
.reduce((agg, levelName) => {
|
|
33
|
+
agg[cLevels[levelName]] = levelName.toUpperCase()
|
|
34
|
+
return agg
|
|
35
|
+
}, { default: 'USERLVL' })
|
|
36
|
+
} else {
|
|
37
|
+
return {}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { test } = require('node:test')
|
|
4
|
+
const handleCustomLevelsOpts = require('./handle-custom-levels-opts')
|
|
5
|
+
|
|
6
|
+
test('returns a empty object `{}` for undefined parameter', t => {
|
|
7
|
+
const handledCustomLevel = handleCustomLevelsOpts()
|
|
8
|
+
t.assert.deepStrictEqual(handledCustomLevel, {})
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
test('returns a empty object `{}` for unknown parameter', t => {
|
|
12
|
+
const handledCustomLevel = handleCustomLevelsOpts(123)
|
|
13
|
+
t.assert.deepStrictEqual(handledCustomLevel, {})
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
test('returns a filled object for string parameter', t => {
|
|
17
|
+
const handledCustomLevel = handleCustomLevelsOpts('ok:10,warn:20,error:35')
|
|
18
|
+
t.assert.deepStrictEqual(handledCustomLevel, {
|
|
19
|
+
10: 'OK',
|
|
20
|
+
20: 'WARN',
|
|
21
|
+
35: 'ERROR',
|
|
22
|
+
default: 'USERLVL'
|
|
23
|
+
})
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
test('returns a filled object for object parameter', t => {
|
|
27
|
+
const handledCustomLevel = handleCustomLevelsOpts({
|
|
28
|
+
ok: 10,
|
|
29
|
+
warn: 20,
|
|
30
|
+
error: 35
|
|
31
|
+
})
|
|
32
|
+
t.assert.deepStrictEqual(handledCustomLevel, {
|
|
33
|
+
10: 'OK',
|
|
34
|
+
20: 'WARN',
|
|
35
|
+
35: 'ERROR',
|
|
36
|
+
default: 'USERLVL'
|
|
37
|
+
})
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
test('defaults missing level num to first index', t => {
|
|
41
|
+
const result = handleCustomLevelsOpts('ok:10,info')
|
|
42
|
+
t.assert.deepStrictEqual(result, {
|
|
43
|
+
10: 'OK',
|
|
44
|
+
1: 'INFO',
|
|
45
|
+
default: 'USERLVL'
|
|
46
|
+
})
|
|
47
|
+
})
|