@contrail/cli 3.4.5 → 3.4.6-alpha.cffb28e
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/README.md +1 -1
- package/dist/commands/groups/import.js +4 -1
- package/dist/commands/load-local/index.js +25 -30
- package/dist/helpers/pipeline/formatters.d.ts +2 -3
- package/dist/helpers/pipeline/formatters.js +63 -63
- package/node_modules/@contrail/entity-compare/CHANGELOG.md +13 -0
- package/node_modules/@contrail/entity-compare/README.md +0 -0
- package/node_modules/@contrail/entity-compare/lib/entity-compare/entity-compare.client.d.ts +36 -0
- package/node_modules/@contrail/entity-compare/lib/entity-compare/entity-compare.client.js +118 -0
- package/node_modules/@contrail/entity-compare/lib/entity-compare/index.d.ts +1 -0
- package/node_modules/@contrail/entity-compare/lib/entity-compare/index.js +17 -0
- package/node_modules/@contrail/entity-compare/lib/entity-compare/mockData.d.ts +11 -0
- package/node_modules/@contrail/entity-compare/lib/entity-compare/mockData.js +99 -0
- package/node_modules/@contrail/entity-compare/lib/index.d.ts +1 -0
- package/node_modules/@contrail/entity-compare/lib/index.js +17 -0
- package/node_modules/@contrail/entity-compare/package.json +45 -0
- package/node_modules/@contrail/loader/lib/__mocks__/@contrail/cache.d.ts +2 -0
- package/node_modules/@contrail/loader/lib/__mocks__/@contrail/cache.js +18 -0
- package/node_modules/@contrail/loader/lib/base-processor.d.ts +17 -0
- package/node_modules/@contrail/loader/lib/base-processor.js +26 -0
- package/node_modules/@contrail/loader/lib/color-processor.d.ts +19 -0
- package/node_modules/@contrail/loader/lib/color-processor.js +76 -0
- package/node_modules/@contrail/loader/lib/color-processor.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/color-processor.spec.js +307 -0
- package/node_modules/@contrail/loader/lib/common/conditional-columns.d.ts +16 -0
- package/node_modules/@contrail/loader/lib/common/conditional-columns.js +84 -0
- package/node_modules/@contrail/loader/lib/common/conditional-columns.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/conditional-columns.spec.js +644 -0
- package/node_modules/@contrail/loader/lib/common/constants.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/constants.js +4 -0
- package/node_modules/@contrail/loader/lib/common/csv-file-helper.d.ts +6 -0
- package/node_modules/@contrail/loader/lib/common/csv-file-helper.js +66 -0
- package/node_modules/@contrail/loader/lib/common/csv-file-helper.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/csv-file-helper.spec.js +34 -0
- package/node_modules/@contrail/loader/lib/common/data-transformer-functions.d.ts +32 -0
- package/node_modules/@contrail/loader/lib/common/data-transformer-functions.js +309 -0
- package/node_modules/@contrail/loader/lib/common/data-transformer.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/data-transformer.spec.js +744 -0
- package/node_modules/@contrail/loader/lib/common/entities-helper.d.ts +33 -0
- package/node_modules/@contrail/loader/lib/common/entities-helper.js +300 -0
- package/node_modules/@contrail/loader/lib/common/entities-helper.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/entities-helper.spec.js +287 -0
- package/node_modules/@contrail/loader/lib/common/entity-builder-helpers.d.ts +6 -0
- package/node_modules/@contrail/loader/lib/common/entity-builder-helpers.js +114 -0
- package/node_modules/@contrail/loader/lib/common/entity-builder-helpers.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/entity-builder-helpers.spec.js +137 -0
- package/node_modules/@contrail/loader/lib/common/file-helper.d.ts +3 -0
- package/node_modules/@contrail/loader/lib/common/file-helper.js +37 -0
- package/node_modules/@contrail/loader/lib/common/file-helper.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/file-helper.spec.js +65 -0
- package/node_modules/@contrail/loader/lib/common/size-range-helpers.d.ts +42 -0
- package/node_modules/@contrail/loader/lib/common/size-range-helpers.js +162 -0
- package/node_modules/@contrail/loader/lib/common/size-range-helpers.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/size-range-helpers.spec.js +320 -0
- package/node_modules/@contrail/loader/lib/common/type-helper.d.ts +18 -0
- package/node_modules/@contrail/loader/lib/common/type-helper.js +232 -0
- package/node_modules/@contrail/loader/lib/common/type-helper.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/type-helper.spec.js +110 -0
- package/node_modules/@contrail/loader/lib/common/util.d.ts +11 -0
- package/node_modules/@contrail/loader/lib/common/util.js +85 -0
- package/node_modules/@contrail/loader/lib/common/util.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/common/util.spec.js +109 -0
- package/node_modules/@contrail/loader/lib/constants.d.ts +29 -0
- package/node_modules/@contrail/loader/lib/constants.js +32 -0
- package/node_modules/@contrail/loader/lib/custom-entity-processor.d.ts +20 -0
- package/node_modules/@contrail/loader/lib/custom-entity-processor.js +59 -0
- package/node_modules/@contrail/loader/lib/custom-entity-processor.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/custom-entity-processor.spec.js +161 -0
- package/node_modules/@contrail/loader/lib/entities-v2/base-processor-v2.d.ts +27 -0
- package/node_modules/@contrail/loader/lib/entities-v2/base-processor-v2.js +55 -0
- package/node_modules/@contrail/loader/lib/entities-v2/colors-v2/color-processor-v2.d.ts +19 -0
- package/node_modules/@contrail/loader/lib/entities-v2/colors-v2/color-processor-v2.js +92 -0
- package/node_modules/@contrail/loader/lib/entities-v2/colors-v2/color-processor-v2.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/colors-v2/color-processor-v2.spec.js +456 -0
- package/node_modules/@contrail/loader/lib/entities-v2/custom-entities-v2/custom-entity-processor-v2.d.ts +20 -0
- package/node_modules/@contrail/loader/lib/entities-v2/custom-entities-v2/custom-entity-processor-v2.js +75 -0
- package/node_modules/@contrail/loader/lib/entities-v2/custom-entities-v2/custom-entity-processor-v2.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/custom-entities-v2/custom-entity-processor-v2.spec.js +211 -0
- package/node_modules/@contrail/loader/lib/entities-v2/entities-helper.d.ts +33 -0
- package/node_modules/@contrail/loader/lib/entities-v2/entities-helper.js +298 -0
- package/node_modules/@contrail/loader/lib/entities-v2/entities-helper.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/entities-helper.spec.js +137 -0
- package/node_modules/@contrail/loader/lib/entities-v2/entity-processor-v2.d.ts +36 -0
- package/node_modules/@contrail/loader/lib/entities-v2/entity-processor-v2.js +316 -0
- package/node_modules/@contrail/loader/lib/entities-v2/entity-processor-v2.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/entity-processor-v2.spec.js +973 -0
- package/node_modules/@contrail/loader/lib/entities-v2/file-preprocessor-v2.d.ts +40 -0
- package/node_modules/@contrail/loader/lib/entities-v2/file-preprocessor-v2.js +276 -0
- package/node_modules/@contrail/loader/lib/entities-v2/file-preprocessor-v2.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/file-preprocessor-v2.spec.js +161 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/assortment-processor.d.ts +49 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/assortment-processor.js +388 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/assortment-processor.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/assortment-processor.spec.js +411 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/item-helper.d.ts +20 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/item-helper.js +193 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/item-helper.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/item-helper.spec.js +190 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/item-processor.d.ts +37 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/item-processor.js +271 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/item-processor.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/item-processor.spec.js +654 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/partial-assortment-processor.d.ts +35 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/partial-assortment-processor.js +242 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/partial-assortment-processor.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/partial-assortment-processor.spec.js +167 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/project-item-processor.d.ts +20 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/project-item-processor.js +104 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/project-item-processor.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entities-v2/linesheet-v2/project-item-processor.spec.js +172 -0
- package/node_modules/@contrail/loader/lib/entity-processor.d.ts +34 -0
- package/node_modules/@contrail/loader/lib/entity-processor.js +214 -0
- package/node_modules/@contrail/loader/lib/entity-processor.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/entity-processor.spec.js +693 -0
- package/node_modules/@contrail/loader/lib/file-preprocessor.d.ts +31 -0
- package/node_modules/@contrail/loader/lib/file-preprocessor.js +212 -0
- package/node_modules/@contrail/loader/lib/file-preprocessor.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/file-preprocessor.spec.js +151 -0
- package/node_modules/@contrail/loader/lib/index.d.ts +9 -941
- package/node_modules/@contrail/loader/lib/index.js +25 -12492
- package/node_modules/@contrail/loader/lib/mockData.d.ts +36 -0
- package/node_modules/@contrail/loader/lib/mockData.js +209 -0
- package/node_modules/@contrail/loader/lib/pipeline/assortment-execute-helpers.d.ts +9 -0
- package/node_modules/@contrail/loader/lib/pipeline/assortment-execute-helpers.js +226 -0
- package/node_modules/@contrail/loader/lib/pipeline/assortment-execute-helpers.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/pipeline/assortment-execute-helpers.spec.js +305 -0
- package/node_modules/@contrail/loader/lib/pipeline/coerce-values-by-type.d.ts +7 -0
- package/node_modules/@contrail/loader/lib/pipeline/coerce-values-by-type.js +133 -0
- package/node_modules/@contrail/loader/lib/pipeline/execute-multi-type.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/pipeline/execute-multi-type.spec.js +454 -0
- package/node_modules/@contrail/loader/lib/pipeline/execute.d.ts +3 -0
- package/node_modules/@contrail/loader/lib/pipeline/execute.js +271 -0
- package/node_modules/@contrail/loader/lib/pipeline/execute.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/pipeline/execute.spec.js +186 -0
- package/node_modules/@contrail/loader/lib/pipeline/index.d.ts +7 -0
- package/node_modules/@contrail/loader/lib/pipeline/index.js +29 -0
- package/node_modules/@contrail/loader/lib/pipeline/item-execute-helpers.d.ts +38 -0
- package/node_modules/@contrail/loader/lib/pipeline/item-execute-helpers.js +517 -0
- package/node_modules/@contrail/loader/lib/pipeline/item-execute-helpers.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/pipeline/item-execute-helpers.spec.js +170 -0
- package/node_modules/@contrail/loader/lib/pipeline/loader-pipeline.d.ts +10 -0
- package/node_modules/@contrail/loader/lib/pipeline/loader-pipeline.js +26 -0
- package/node_modules/@contrail/loader/lib/pipeline/loader-pipeline.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/pipeline/loader-pipeline.spec.js +125 -0
- package/node_modules/@contrail/loader/lib/pipeline/preview.d.ts +3 -0
- package/node_modules/@contrail/loader/lib/pipeline/preview.js +219 -0
- package/node_modules/@contrail/loader/lib/pipeline/preview.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/pipeline/preview.spec.js +155 -0
- package/node_modules/@contrail/loader/lib/pipeline/project-item-execute-helpers.d.ts +5 -0
- package/node_modules/@contrail/loader/lib/pipeline/project-item-execute-helpers.js +580 -0
- package/node_modules/@contrail/loader/lib/pipeline/transform.d.ts +3 -0
- package/node_modules/@contrail/loader/lib/pipeline/transform.js +356 -0
- package/node_modules/@contrail/loader/lib/pipeline/transform.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/pipeline/transform.spec.js +442 -0
- package/node_modules/@contrail/loader/lib/pipeline/types.d.ts +251 -0
- package/node_modules/@contrail/loader/lib/pipeline/types.js +140 -0
- package/node_modules/@contrail/loader/lib/pipeline/validate.d.ts +2 -0
- package/node_modules/@contrail/loader/lib/pipeline/validate.js +1217 -0
- package/node_modules/@contrail/loader/lib/pipeline/validate.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/pipeline/validate.spec.js +1214 -0
- package/node_modules/@contrail/loader/lib/processor-registry.d.ts +3 -0
- package/node_modules/@contrail/loader/lib/processor-registry.js +53 -0
- package/node_modules/@contrail/loader/lib/processor-registry.spec.d.ts +1 -0
- package/node_modules/@contrail/loader/lib/processor-registry.spec.js +8 -0
- package/node_modules/@contrail/loader/package.json +9 -11
- package/node_modules/@contrail/telemetry/CHANGELOG.md +24 -0
- package/node_modules/@contrail/telemetry/README.md +1 -0
- package/node_modules/@contrail/telemetry/lib/index.d.ts +1 -0
- package/node_modules/@contrail/telemetry/lib/index.js +17 -0
- package/node_modules/@contrail/telemetry/lib/logger/index.d.ts +3 -0
- package/node_modules/@contrail/telemetry/lib/logger/index.js +30 -0
- package/node_modules/@contrail/telemetry/package.json +44 -0
- package/node_modules/@pinojs/redact/.github/dependabot.yml +13 -0
- package/node_modules/@pinojs/redact/.github/workflows/ci.yml +48 -0
- package/node_modules/@pinojs/redact/.github/workflows/publish-release.yml +43 -0
- package/node_modules/@pinojs/redact/LICENSE +21 -0
- package/node_modules/@pinojs/redact/README.md +350 -0
- package/node_modules/@pinojs/redact/benchmarks/basic.js +184 -0
- package/node_modules/@pinojs/redact/eslint.config.js +1 -0
- package/node_modules/@pinojs/redact/index.d.ts +52 -0
- package/node_modules/@pinojs/redact/index.js +529 -0
- package/node_modules/@pinojs/redact/index.test-d.ts +22 -0
- package/node_modules/@pinojs/redact/package.json +37 -0
- package/node_modules/@pinojs/redact/scripts/sync-version.mjs +20 -0
- package/node_modules/@pinojs/redact/test/actual-redact-comparison.test.js +211 -0
- package/node_modules/@pinojs/redact/test/index.test.js +824 -0
- package/node_modules/@pinojs/redact/test/integration.test.js +390 -0
- package/node_modules/@pinojs/redact/test/multiple-wildcards.test.js +227 -0
- package/node_modules/@pinojs/redact/test/prototype-pollution.test.js +223 -0
- package/node_modules/@pinojs/redact/test/selective-clone.test.js +115 -0
- package/node_modules/@pinojs/redact/tsconfig.json +19 -0
- package/node_modules/atomic-sleep/.travis.yml +11 -0
- package/node_modules/atomic-sleep/LICENSE +22 -0
- package/node_modules/atomic-sleep/index.js +38 -0
- package/node_modules/atomic-sleep/package.json +37 -0
- package/node_modules/atomic-sleep/readme.md +58 -0
- package/node_modules/atomic-sleep/test.js +47 -0
- package/node_modules/on-exit-leak-free/.github/dependabot.yml +12 -0
- package/node_modules/on-exit-leak-free/.github/workflows/ci.yml +46 -0
- package/node_modules/on-exit-leak-free/LICENSE +21 -0
- package/node_modules/on-exit-leak-free/README.md +54 -0
- package/node_modules/on-exit-leak-free/index.js +108 -0
- package/node_modules/on-exit-leak-free/package.json +37 -0
- package/node_modules/on-exit-leak-free/test/base.test.js +30 -0
- package/node_modules/on-exit-leak-free/test/event-emitter-leak.test.js +23 -0
- package/node_modules/on-exit-leak-free/test/fixtures/beforeExit.js +33 -0
- package/node_modules/on-exit-leak-free/test/fixtures/close.js +21 -0
- package/node_modules/on-exit-leak-free/test/fixtures/gc-not-close.js +24 -0
- package/node_modules/on-exit-leak-free/test/fixtures/unregister.js +24 -0
- 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 +30 -0
- package/node_modules/pino/LICENSE +21 -0
- package/node_modules/pino/README.md +177 -0
- package/node_modules/pino/SECURITY.md +87 -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 +547 -0
- package/node_modules/pino/build/sync-version.js +25 -0
- package/node_modules/pino/docs/api.md +1593 -0
- package/node_modules/pino/docs/asynchronous.md +40 -0
- package/node_modules/pino/docs/benchmarks.md +55 -0
- package/node_modules/pino/docs/browser.md +278 -0
- package/node_modules/pino/docs/bundling.md +40 -0
- package/node_modules/pino/docs/child-loggers.md +95 -0
- package/node_modules/pino/docs/diagnostics.md +16 -0
- package/node_modules/pino/docs/ecosystem.md +86 -0
- package/node_modules/pino/docs/help.md +345 -0
- package/node_modules/pino/docs/lts.md +64 -0
- package/node_modules/pino/docs/pretty.md +35 -0
- package/node_modules/pino/docs/redaction.md +135 -0
- package/node_modules/pino/docs/transports.md +1376 -0
- package/node_modules/pino/docs/web.md +309 -0
- package/node_modules/pino/eslint.config.js +28 -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 +30 -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 +203 -0
- package/node_modules/pino/lib/proto.js +256 -0
- package/node_modules/pino/lib/redaction.js +114 -0
- package/node_modules/pino/lib/symbols.js +74 -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 +289 -0
- package/node_modules/pino/lib/worker.js +194 -0
- package/node_modules/pino/package.json +120 -0
- package/node_modules/pino/pino.d.ts +908 -0
- package/node_modules/pino/pino.js +234 -0
- package/node_modules/pino/test/basic.test.js +886 -0
- package/node_modules/pino/test/broken-pipe.test.js +59 -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-serializers.test.js +352 -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/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 +93 -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/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 +155 -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 +729 -0
- package/node_modules/pino/test/redact.test.js +893 -0
- package/node_modules/pino/test/serializers.test.js +257 -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 +733 -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 +67 -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.test-d.cts +30 -0
- package/node_modules/pino/test/types/pino-multistream.test-d.ts +28 -0
- package/node_modules/pino/test/types/pino-top-export.test-d.ts +34 -0
- package/node_modules/pino/test/types/pino-transport.test-d.ts +156 -0
- package/node_modules/pino/test/types/pino-type-only.test-d.ts +75 -0
- package/node_modules/pino/test/types/pino.test-d.ts +683 -0
- package/node_modules/pino/test/types/pino.ts +91 -0
- package/node_modules/pino/tsconfig.json +14 -0
- package/node_modules/pino-abstract-transport/.github/dependabot.yml +13 -0
- package/node_modules/pino-abstract-transport/.github/workflows/ci.yml +80 -0
- package/node_modules/pino-abstract-transport/.husky/pre-commit +4 -0
- package/node_modules/pino-abstract-transport/LICENSE +21 -0
- package/node_modules/pino-abstract-transport/README.md +171 -0
- package/node_modules/pino-abstract-transport/index.d.ts +122 -0
- package/node_modules/pino-abstract-transport/index.js +128 -0
- package/node_modules/pino-abstract-transport/package.json +41 -0
- package/node_modules/pino-abstract-transport/test/base.test.js +473 -0
- package/node_modules/pino-abstract-transport/test/fixtures/transport-async-iteration.js +22 -0
- package/node_modules/pino-abstract-transport/test/fixtures/transport-on-data.js +22 -0
- package/node_modules/pino-abstract-transport/test/fixtures/transport-transform.js +24 -0
- package/node_modules/pino-abstract-transport/test/fixtures/worker-pipeline.js +15 -0
- package/node_modules/pino-abstract-transport/test/match.js +24 -0
- package/node_modules/pino-abstract-transport/test/types/index.test-d.ts +31 -0
- package/node_modules/pino-abstract-transport/test/worker.test.js +372 -0
- package/node_modules/pino-std-serializers/.editorconfig +13 -0
- package/node_modules/pino-std-serializers/.github/dependabot.yml +13 -0
- package/node_modules/pino-std-serializers/.github/workflows/ci.yml +81 -0
- package/node_modules/pino-std-serializers/LICENSE +7 -0
- package/node_modules/pino-std-serializers/Readme.md +182 -0
- package/node_modules/pino-std-serializers/eslint.config.js +7 -0
- package/node_modules/pino-std-serializers/index.d.ts +145 -0
- package/node_modules/pino-std-serializers/index.js +36 -0
- package/node_modules/pino-std-serializers/lib/err-helpers.js +118 -0
- package/node_modules/pino-std-serializers/lib/err-proto.js +48 -0
- package/node_modules/pino-std-serializers/lib/err-with-cause.js +48 -0
- package/node_modules/pino-std-serializers/lib/err.js +45 -0
- package/node_modules/pino-std-serializers/lib/req.js +100 -0
- package/node_modules/pino-std-serializers/lib/res.js +47 -0
- package/node_modules/pino-std-serializers/package.json +42 -0
- package/node_modules/pino-std-serializers/test/err-with-cause.test.js +187 -0
- package/node_modules/pino-std-serializers/test/err.test.js +200 -0
- package/node_modules/pino-std-serializers/test/req.test.js +477 -0
- package/node_modules/pino-std-serializers/test/res.test.js +120 -0
- package/node_modules/pino-std-serializers/test/types/index.test-d.ts +71 -0
- package/node_modules/pino-std-serializers/tsconfig.json +13 -0
- package/node_modules/process-warning/.gitattributes +2 -0
- package/node_modules/process-warning/.github/dependabot.yml +13 -0
- package/node_modules/process-warning/.github/workflows/ci.yml +22 -0
- package/node_modules/process-warning/LICENSE +21 -0
- package/node_modules/process-warning/README.md +118 -0
- package/node_modules/process-warning/benchmarks/warn.js +25 -0
- package/node_modules/process-warning/eslint.config.js +6 -0
- package/node_modules/process-warning/examples/example.js +11 -0
- package/node_modules/process-warning/index.js +124 -0
- package/node_modules/process-warning/package.json +73 -0
- package/node_modules/process-warning/test/emit-interpolated-string.test.js +34 -0
- package/node_modules/process-warning/test/emit-once-only.test.js +33 -0
- package/node_modules/process-warning/test/emit-reset.test.js +40 -0
- package/node_modules/process-warning/test/emit-set.test.js +35 -0
- package/node_modules/process-warning/test/emit-unlimited.test.js +42 -0
- package/node_modules/process-warning/test/index.test.js +99 -0
- package/node_modules/process-warning/test/issue-88.test.js +38 -0
- package/node_modules/process-warning/test/jest.test.js +24 -0
- package/node_modules/process-warning/test/no-warnings.test.js +80 -0
- package/node_modules/process-warning/test/promise.js +10 -0
- package/node_modules/process-warning/types/index.d.ts +37 -0
- package/node_modules/process-warning/types/index.test-d.ts +36 -0
- package/node_modules/quick-format-unescaped/.github/workflows/ci.yml +21 -0
- package/node_modules/quick-format-unescaped/LICENSE +21 -0
- package/node_modules/quick-format-unescaped/benchmark.js +24 -0
- package/node_modules/quick-format-unescaped/index.js +109 -0
- package/node_modules/quick-format-unescaped/package.json +29 -0
- package/node_modules/quick-format-unescaped/readme.md +66 -0
- package/node_modules/quick-format-unescaped/test/index.js +136 -0
- package/node_modules/real-require/LICENSE.md +21 -0
- package/node_modules/real-require/README.md +51 -0
- package/node_modules/real-require/package.json +49 -0
- package/node_modules/real-require/src/index.js +14 -0
- package/node_modules/safe-stable-stringify/LICENSE +21 -0
- package/node_modules/safe-stable-stringify/esm/package.json +4 -0
- package/node_modules/safe-stable-stringify/esm/wrapper.d.ts +4 -0
- package/node_modules/safe-stable-stringify/esm/wrapper.js +6 -0
- package/node_modules/safe-stable-stringify/index.d.ts +22 -0
- package/node_modules/safe-stable-stringify/index.js +612 -0
- package/node_modules/safe-stable-stringify/package.json +65 -0
- package/node_modules/safe-stable-stringify/readme.md +177 -0
- package/node_modules/sonic-boom/.eslintignore +2 -0
- package/node_modules/sonic-boom/.taprc +3 -0
- package/node_modules/sonic-boom/LICENSE +21 -0
- package/node_modules/sonic-boom/README.md +153 -0
- package/node_modules/sonic-boom/bench.js +98 -0
- package/node_modules/sonic-boom/check.js +18 -0
- package/node_modules/sonic-boom/example.js +8 -0
- package/node_modules/sonic-boom/fixtures/firehose.js +22 -0
- package/node_modules/sonic-boom/index.js +733 -0
- package/node_modules/sonic-boom/package.json +52 -0
- package/node_modules/sonic-boom/test/destroy.test.js +49 -0
- package/node_modules/sonic-boom/test/end.test.js +98 -0
- package/node_modules/sonic-boom/test/flush-sync.test.js +140 -0
- package/node_modules/sonic-boom/test/flush.test.js +419 -0
- package/node_modules/sonic-boom/test/fsync.test.js +63 -0
- package/node_modules/sonic-boom/test/helper.js +42 -0
- package/node_modules/sonic-boom/test/minlength.test.js +35 -0
- package/node_modules/sonic-boom/test/mode.test.js +116 -0
- package/node_modules/sonic-boom/test/periodicflush.test.js +61 -0
- package/node_modules/sonic-boom/test/reopen.test.js +239 -0
- package/node_modules/sonic-boom/test/retry.test.js +414 -0
- package/node_modules/sonic-boom/test/sync.test.js +261 -0
- package/node_modules/sonic-boom/test/write.test.js +515 -0
- package/node_modules/sonic-boom/types/index.d.ts +63 -0
- package/node_modules/sonic-boom/types/tests/test.ts +4 -0
- package/node_modules/split2/LICENSE +13 -0
- package/node_modules/split2/README.md +85 -0
- package/node_modules/split2/bench.js +27 -0
- package/node_modules/split2/index.js +141 -0
- package/node_modules/split2/package.json +39 -0
- package/node_modules/split2/test.js +409 -0
- package/node_modules/thread-stream/.github/dependabot.yml +13 -0
- package/node_modules/thread-stream/.github/workflows/ci.yml +74 -0
- package/node_modules/thread-stream/.husky/pre-commit +4 -0
- package/node_modules/thread-stream/CLAUDE.md +53 -0
- package/node_modules/thread-stream/LICENSE +21 -0
- package/node_modules/thread-stream/README.md +135 -0
- package/node_modules/thread-stream/bench.js +85 -0
- package/node_modules/thread-stream/eslint.config.js +10 -0
- package/node_modules/thread-stream/index.d.ts +92 -0
- package/node_modules/thread-stream/index.js +541 -0
- package/node_modules/thread-stream/lib/indexes.js +9 -0
- package/node_modules/thread-stream/lib/wait.js +68 -0
- package/node_modules/thread-stream/lib/worker.js +179 -0
- package/node_modules/thread-stream/package.json +52 -0
- package/node_modules/thread-stream/test/base.test.js +259 -0
- package/node_modules/thread-stream/test/bench.test.js +38 -0
- package/node_modules/thread-stream/test/bundlers.test.js +59 -0
- package/node_modules/thread-stream/test/close-on-gc.js +37 -0
- package/node_modules/thread-stream/test/commonjs-fallback.test.js +75 -0
- package/node_modules/thread-stream/test/context.test.js +21 -0
- package/node_modules/thread-stream/test/create-and-exit.js +16 -0
- package/node_modules/thread-stream/test/custom-worker.js +9 -0
- package/node_modules/thread-stream/test/dir with spaces/test-package.zip +0 -0
- package/node_modules/thread-stream/test/emit-event.js +22 -0
- package/node_modules/thread-stream/test/end.test.js +56 -0
- package/node_modules/thread-stream/test/error.js +14 -0
- package/node_modules/thread-stream/test/esm.test.mjs +46 -0
- package/node_modules/thread-stream/test/event.test.js +24 -0
- package/node_modules/thread-stream/test/exit.js +14 -0
- package/node_modules/thread-stream/test/get-context.js +22 -0
- package/node_modules/thread-stream/test/helper.d.ts +1 -0
- package/node_modules/thread-stream/test/helper.js +26 -0
- package/node_modules/thread-stream/test/indexes.test.js +11 -0
- package/node_modules/thread-stream/test/multibyte-chars.test.mjs +75 -0
- package/node_modules/thread-stream/test/on-message.js +18 -0
- package/node_modules/thread-stream/test/pkg/index.js +37 -0
- package/node_modules/thread-stream/test/pkg/pkg.config.json +14 -0
- package/node_modules/thread-stream/test/pkg/pkg.test.js +45 -0
- package/node_modules/thread-stream/test/port.js +16 -0
- package/node_modules/thread-stream/test/post-message.test.js +23 -0
- package/node_modules/thread-stream/test/string-limit-2.test.js +35 -0
- package/node_modules/thread-stream/test/string-limit.test.js +37 -0
- package/node_modules/thread-stream/test/syntax-error.mjs +2 -0
- package/node_modules/thread-stream/test/thread-management.test.js +138 -0
- package/node_modules/thread-stream/test/to-file-on-destroy.js +23 -0
- package/node_modules/thread-stream/test/to-file-on-final.js +24 -0
- package/node_modules/thread-stream/test/to-file.js +12 -0
- package/node_modules/thread-stream/test/to-file.mjs +8 -0
- package/node_modules/thread-stream/test/to-next.js +9 -0
- package/node_modules/thread-stream/test/transpiled.test.js +29 -0
- package/node_modules/thread-stream/test/ts/to-file.ts +10 -0
- package/node_modules/thread-stream/test/ts/transpile.sh +19 -0
- package/node_modules/thread-stream/test/ts-commonjs-default-export.zip +0 -0
- package/node_modules/thread-stream/test/ts-native.test.mjs +35 -0
- package/node_modules/thread-stream/test/ts-node-fallback.test.js +35 -0
- package/node_modules/thread-stream/test/uncaughtException.js +21 -0
- package/node_modules/thread-stream/test/unhandledRejection.js +21 -0
- package/node_modules/thread-stream/test/yarnrc.yml +7 -0
- package/node_modules/thread-stream/tsconfig.json +8 -0
- package/oclif.manifest.json +6 -7
- package/package.json +11 -3
- package/node_modules/@contrail/loader/lib/index.js.map +0 -1
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
const { test } = require('node:test')
|
|
2
|
+
const { strict: assert } = require('node:assert')
|
|
3
|
+
const slowRedact = require('../index.js')
|
|
4
|
+
|
|
5
|
+
/* eslint-disable no-proto */
|
|
6
|
+
|
|
7
|
+
test('prototype pollution: __proto__ path should not pollute Object prototype', () => {
|
|
8
|
+
const obj = {
|
|
9
|
+
user: { name: 'john' },
|
|
10
|
+
__proto__: { isAdmin: true }
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const redact = slowRedact({
|
|
14
|
+
paths: ['__proto__.isAdmin'],
|
|
15
|
+
serialize: false
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
const result = redact(obj)
|
|
19
|
+
|
|
20
|
+
// Should not pollute Object.prototype
|
|
21
|
+
assert.strictEqual(Object.prototype.isAdmin, undefined)
|
|
22
|
+
assert.strictEqual({}.isAdmin, undefined)
|
|
23
|
+
|
|
24
|
+
// Should redact the __proto__ property if it exists as a regular property
|
|
25
|
+
assert.strictEqual(result.__proto__.isAdmin, '[REDACTED]')
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
test('prototype pollution: constructor.prototype path should not pollute', () => {
|
|
29
|
+
const obj = {
|
|
30
|
+
user: { name: 'john' },
|
|
31
|
+
constructor: {
|
|
32
|
+
prototype: { isAdmin: true }
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const redact = slowRedact({
|
|
37
|
+
paths: ['constructor.prototype.isAdmin'],
|
|
38
|
+
serialize: false
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
const result = redact(obj)
|
|
42
|
+
|
|
43
|
+
// Should not pollute Object.prototype
|
|
44
|
+
assert.strictEqual(Object.prototype.isAdmin, undefined)
|
|
45
|
+
assert.strictEqual({}.isAdmin, undefined)
|
|
46
|
+
|
|
47
|
+
// Should redact the constructor.prototype property if it exists as a regular property
|
|
48
|
+
assert.strictEqual(result.constructor.prototype.isAdmin, '[REDACTED]')
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
test('prototype pollution: nested __proto__ should not pollute', () => {
|
|
52
|
+
const obj = {
|
|
53
|
+
user: {
|
|
54
|
+
settings: {
|
|
55
|
+
__proto__: { isAdmin: true }
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const redact = slowRedact({
|
|
61
|
+
paths: ['user.settings.__proto__.isAdmin'],
|
|
62
|
+
serialize: false
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
const result = redact(obj)
|
|
66
|
+
|
|
67
|
+
// Should not pollute Object.prototype
|
|
68
|
+
assert.strictEqual(Object.prototype.isAdmin, undefined)
|
|
69
|
+
assert.strictEqual({}.isAdmin, undefined)
|
|
70
|
+
|
|
71
|
+
// Should redact the nested __proto__ property
|
|
72
|
+
assert.strictEqual(result.user.settings.__proto__.isAdmin, '[REDACTED]')
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
test('prototype pollution: bracket notation __proto__ should not pollute', () => {
|
|
76
|
+
const obj = {
|
|
77
|
+
user: { name: 'john' },
|
|
78
|
+
__proto__: { isAdmin: true }
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const redact = slowRedact({
|
|
82
|
+
paths: ['["__proto__"]["isAdmin"]'],
|
|
83
|
+
serialize: false
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
const result = redact(obj)
|
|
87
|
+
|
|
88
|
+
// Should not pollute Object.prototype
|
|
89
|
+
assert.strictEqual(Object.prototype.isAdmin, undefined)
|
|
90
|
+
assert.strictEqual({}.isAdmin, undefined)
|
|
91
|
+
|
|
92
|
+
// Should redact the __proto__ property when accessed via bracket notation
|
|
93
|
+
assert.strictEqual(result.__proto__.isAdmin, '[REDACTED]')
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
test('prototype pollution: wildcard with __proto__ should not pollute', () => {
|
|
97
|
+
const obj = {
|
|
98
|
+
users: {
|
|
99
|
+
__proto__: { isAdmin: true },
|
|
100
|
+
user1: { name: 'john' },
|
|
101
|
+
user2: { name: 'jane' }
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const redact = slowRedact({
|
|
106
|
+
paths: ['users.*'],
|
|
107
|
+
serialize: false
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
const result = redact(obj)
|
|
111
|
+
|
|
112
|
+
// Should not pollute Object.prototype
|
|
113
|
+
assert.strictEqual(Object.prototype.isAdmin, undefined)
|
|
114
|
+
assert.strictEqual({}.isAdmin, undefined)
|
|
115
|
+
|
|
116
|
+
// Should redact only own properties
|
|
117
|
+
assert.strictEqual(result.users.user1, '[REDACTED]')
|
|
118
|
+
assert.strictEqual(result.users.user2, '[REDACTED]')
|
|
119
|
+
|
|
120
|
+
// __proto__ should only be redacted if it's an own property, not inherited
|
|
121
|
+
if (Object.prototype.hasOwnProperty.call(obj.users, '__proto__')) {
|
|
122
|
+
assert.strictEqual(result.users.__proto__, '[REDACTED]')
|
|
123
|
+
}
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
test('prototype pollution: malicious JSON payload should not pollute', () => {
|
|
127
|
+
// Simulate a malicious payload that might come from JSON.parse
|
|
128
|
+
const maliciousObj = JSON.parse('{"user": {"name": "john"}, "__proto__": {"isAdmin": true}}')
|
|
129
|
+
|
|
130
|
+
const redact = slowRedact({
|
|
131
|
+
paths: ['__proto__.isAdmin'],
|
|
132
|
+
serialize: false
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
const result = redact(maliciousObj)
|
|
136
|
+
|
|
137
|
+
// Should not pollute Object.prototype
|
|
138
|
+
assert.strictEqual(Object.prototype.isAdmin, undefined)
|
|
139
|
+
assert.strictEqual({}.isAdmin, undefined)
|
|
140
|
+
|
|
141
|
+
// The malicious payload should have been redacted
|
|
142
|
+
assert.strictEqual(result.__proto__.isAdmin, '[REDACTED]')
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
test('prototype pollution: verify prototype chain is preserved', () => {
|
|
146
|
+
function CustomClass () {
|
|
147
|
+
this.data = 'test'
|
|
148
|
+
}
|
|
149
|
+
CustomClass.prototype.method = function () { return 'original' }
|
|
150
|
+
|
|
151
|
+
const obj = new CustomClass()
|
|
152
|
+
|
|
153
|
+
const redact = slowRedact({
|
|
154
|
+
paths: ['data'],
|
|
155
|
+
serialize: false
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
const result = redact(obj)
|
|
159
|
+
|
|
160
|
+
// Should redact the data property
|
|
161
|
+
assert.strictEqual(result.data, '[REDACTED]')
|
|
162
|
+
|
|
163
|
+
// Should preserve the original prototype chain
|
|
164
|
+
assert.strictEqual(result.method(), 'original')
|
|
165
|
+
assert.strictEqual(Object.getPrototypeOf(result), CustomClass.prototype)
|
|
166
|
+
})
|
|
167
|
+
|
|
168
|
+
test('prototype pollution: setValue should not create prototype pollution', () => {
|
|
169
|
+
const obj = { user: { name: 'john' } }
|
|
170
|
+
|
|
171
|
+
// Try to pollute via non-existent path that could create __proto__
|
|
172
|
+
const redact = slowRedact({
|
|
173
|
+
paths: ['__proto__.isAdmin'],
|
|
174
|
+
serialize: false
|
|
175
|
+
})
|
|
176
|
+
|
|
177
|
+
const result = redact(obj)
|
|
178
|
+
|
|
179
|
+
// Should not pollute Object.prototype
|
|
180
|
+
assert.strictEqual(Object.prototype.isAdmin, undefined)
|
|
181
|
+
assert.strictEqual({}.isAdmin, undefined)
|
|
182
|
+
|
|
183
|
+
// Should not create the path if it doesn't exist
|
|
184
|
+
// The __proto__ property may exist due to Object.create, but should not contain our redacted value
|
|
185
|
+
if (result.__proto__) {
|
|
186
|
+
assert.strictEqual(result.__proto__.isAdmin, undefined)
|
|
187
|
+
}
|
|
188
|
+
})
|
|
189
|
+
|
|
190
|
+
test('prototype pollution: deep nested prototype properties should not pollute', () => {
|
|
191
|
+
const obj = {
|
|
192
|
+
level1: {
|
|
193
|
+
level2: {
|
|
194
|
+
level3: {
|
|
195
|
+
__proto__: { isAdmin: true },
|
|
196
|
+
constructor: {
|
|
197
|
+
prototype: { isEvil: true }
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
const redact = slowRedact({
|
|
205
|
+
paths: [
|
|
206
|
+
'level1.level2.level3.__proto__.isAdmin',
|
|
207
|
+
'level1.level2.level3.constructor.prototype.isEvil'
|
|
208
|
+
],
|
|
209
|
+
serialize: false
|
|
210
|
+
})
|
|
211
|
+
|
|
212
|
+
const result = redact(obj)
|
|
213
|
+
|
|
214
|
+
// Should not pollute Object.prototype
|
|
215
|
+
assert.strictEqual(Object.prototype.isAdmin, undefined)
|
|
216
|
+
assert.strictEqual(Object.prototype.isEvil, undefined)
|
|
217
|
+
assert.strictEqual({}.isAdmin, undefined)
|
|
218
|
+
assert.strictEqual({}.isEvil, undefined)
|
|
219
|
+
|
|
220
|
+
// Should redact the deep nested properties
|
|
221
|
+
assert.strictEqual(result.level1.level2.level3.__proto__.isAdmin, '[REDACTED]')
|
|
222
|
+
assert.strictEqual(result.level1.level2.level3.constructor.prototype.isEvil, '[REDACTED]')
|
|
223
|
+
})
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
const { test } = require('node:test')
|
|
2
|
+
const { strict: assert } = require('node:assert')
|
|
3
|
+
const slowRedact = require('../index.js')
|
|
4
|
+
|
|
5
|
+
test('selective cloning shares references for non-redacted paths', () => {
|
|
6
|
+
const sharedObject = { unchanged: 'data' }
|
|
7
|
+
const obj = {
|
|
8
|
+
toRedact: 'secret',
|
|
9
|
+
shared: sharedObject,
|
|
10
|
+
nested: {
|
|
11
|
+
toRedact: 'secret2',
|
|
12
|
+
shared: sharedObject
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const redact = slowRedact({
|
|
17
|
+
paths: ['toRedact', 'nested.toRedact'],
|
|
18
|
+
serialize: false
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
const result = redact(obj)
|
|
22
|
+
|
|
23
|
+
// Redacted values should be different
|
|
24
|
+
assert.strictEqual(result.toRedact, '[REDACTED]')
|
|
25
|
+
assert.strictEqual(result.nested.toRedact, '[REDACTED]')
|
|
26
|
+
|
|
27
|
+
// Non-redacted references should be shared (same object reference)
|
|
28
|
+
assert.strictEqual(result.shared, obj.shared)
|
|
29
|
+
assert.strictEqual(result.nested.shared, obj.nested.shared)
|
|
30
|
+
|
|
31
|
+
// The shared object should be the exact same reference
|
|
32
|
+
assert.strictEqual(result.shared, sharedObject)
|
|
33
|
+
assert.strictEqual(result.nested.shared, sharedObject)
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
test('selective cloning works with arrays', () => {
|
|
37
|
+
const sharedItem = { unchanged: 'data' }
|
|
38
|
+
const obj = {
|
|
39
|
+
items: [
|
|
40
|
+
{ secret: 'hidden1', shared: sharedItem },
|
|
41
|
+
{ secret: 'hidden2', shared: sharedItem },
|
|
42
|
+
sharedItem
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const redact = slowRedact({
|
|
47
|
+
paths: ['items.*.secret'],
|
|
48
|
+
serialize: false
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
const result = redact(obj)
|
|
52
|
+
|
|
53
|
+
// Secrets should be redacted
|
|
54
|
+
assert.strictEqual(result.items[0].secret, '[REDACTED]')
|
|
55
|
+
assert.strictEqual(result.items[1].secret, '[REDACTED]')
|
|
56
|
+
|
|
57
|
+
// Shared references should be preserved where possible
|
|
58
|
+
// Note: array items with secrets will be cloned, but their shared properties should still reference the original
|
|
59
|
+
assert.strictEqual(result.items[0].shared, sharedItem)
|
|
60
|
+
assert.strictEqual(result.items[1].shared, sharedItem)
|
|
61
|
+
|
|
62
|
+
// The third item gets cloned due to wildcard, but should have the same content
|
|
63
|
+
assert.deepStrictEqual(result.items[2], sharedItem)
|
|
64
|
+
// Note: Due to wildcard '*', all array items are cloned, even if they don't need redaction
|
|
65
|
+
// This is still a significant optimization for object properties that aren't in wildcard paths
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
test('selective cloning with no paths returns original object', () => {
|
|
69
|
+
const obj = { data: 'unchanged' }
|
|
70
|
+
const redact = slowRedact({
|
|
71
|
+
paths: [],
|
|
72
|
+
serialize: false
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
const result = redact(obj)
|
|
76
|
+
|
|
77
|
+
// Should return the exact same object reference
|
|
78
|
+
assert.strictEqual(result, obj)
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
test('selective cloning performance - large objects with minimal redaction', () => {
|
|
82
|
+
// Create a large object with mostly shared data
|
|
83
|
+
const sharedData = { large: 'data'.repeat(1000) }
|
|
84
|
+
const obj = {
|
|
85
|
+
secret: 'hidden',
|
|
86
|
+
shared1: sharedData,
|
|
87
|
+
shared2: sharedData,
|
|
88
|
+
nested: {
|
|
89
|
+
secret: 'hidden2',
|
|
90
|
+
shared3: sharedData,
|
|
91
|
+
deep: {
|
|
92
|
+
shared4: sharedData,
|
|
93
|
+
moreShared: sharedData
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const redact = slowRedact({
|
|
99
|
+
paths: ['secret', 'nested.secret'],
|
|
100
|
+
serialize: false
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
const result = redact(obj)
|
|
104
|
+
|
|
105
|
+
// Verify redaction worked
|
|
106
|
+
assert.strictEqual(result.secret, '[REDACTED]')
|
|
107
|
+
assert.strictEqual(result.nested.secret, '[REDACTED]')
|
|
108
|
+
|
|
109
|
+
// Verify shared references are preserved
|
|
110
|
+
assert.strictEqual(result.shared1, sharedData)
|
|
111
|
+
assert.strictEqual(result.shared2, sharedData)
|
|
112
|
+
assert.strictEqual(result.nested.shared3, sharedData)
|
|
113
|
+
assert.strictEqual(result.nested.deep.shared4, sharedData)
|
|
114
|
+
assert.strictEqual(result.nested.deep.moreShared, sharedData)
|
|
115
|
+
})
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"module": "commonjs",
|
|
4
|
+
"lib": [
|
|
5
|
+
"es6"
|
|
6
|
+
],
|
|
7
|
+
"noImplicitAny": true,
|
|
8
|
+
"noImplicitThis": true,
|
|
9
|
+
"strictFunctionTypes": true,
|
|
10
|
+
"strictNullChecks": true,
|
|
11
|
+
"types": [],
|
|
12
|
+
"noEmit": true,
|
|
13
|
+
"forceConsistentCasingInFileNames": true
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"index.d.ts",
|
|
17
|
+
"index.test-d.ts"
|
|
18
|
+
]
|
|
19
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
Copyright (c) 2020 David Mark Clements
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
18
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
19
|
+
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
20
|
+
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
|
|
21
|
+
OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
/* global SharedArrayBuffer, Atomics */
|
|
4
|
+
|
|
5
|
+
if (typeof SharedArrayBuffer !== 'undefined' && typeof Atomics !== 'undefined') {
|
|
6
|
+
const nil = new Int32Array(new SharedArrayBuffer(4))
|
|
7
|
+
|
|
8
|
+
function sleep (ms) {
|
|
9
|
+
// also filters out NaN, non-number types, including empty strings, but allows bigints
|
|
10
|
+
const valid = ms > 0 && ms < Infinity
|
|
11
|
+
if (valid === false) {
|
|
12
|
+
if (typeof ms !== 'number' && typeof ms !== 'bigint') {
|
|
13
|
+
throw TypeError('sleep: ms must be a number')
|
|
14
|
+
}
|
|
15
|
+
throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
Atomics.wait(nil, 0, 0, Number(ms))
|
|
19
|
+
}
|
|
20
|
+
module.exports = sleep
|
|
21
|
+
} else {
|
|
22
|
+
|
|
23
|
+
function sleep (ms) {
|
|
24
|
+
// also filters out NaN, non-number types, including empty strings, but allows bigints
|
|
25
|
+
const valid = ms > 0 && ms < Infinity
|
|
26
|
+
if (valid === false) {
|
|
27
|
+
if (typeof ms !== 'number' && typeof ms !== 'bigint') {
|
|
28
|
+
throw TypeError('sleep: ms must be a number')
|
|
29
|
+
}
|
|
30
|
+
throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')
|
|
31
|
+
}
|
|
32
|
+
const target = Date.now() + Number(ms)
|
|
33
|
+
while (target > Date.now()){}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
module.exports = sleep
|
|
37
|
+
|
|
38
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "atomic-sleep",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Zero CPU overhead, zero dependency, true event-loop blocking sleep",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test": "tap -R classic- -j1 test",
|
|
8
|
+
"lint": "standard",
|
|
9
|
+
"ci": "npm run lint && npm test"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"sleep",
|
|
13
|
+
"pause",
|
|
14
|
+
"wait",
|
|
15
|
+
"performance",
|
|
16
|
+
"atomics"
|
|
17
|
+
],
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=8.0.0"
|
|
20
|
+
},
|
|
21
|
+
"author": "David Mark Clements (@davidmarkclem)",
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"standard": "^14.3.1",
|
|
25
|
+
"tap": "^14.10.6",
|
|
26
|
+
"tape": "^4.13.2"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {},
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "git+https://github.com/davidmarkclements/atomic-sleep.git"
|
|
32
|
+
},
|
|
33
|
+
"bugs": {
|
|
34
|
+
"url": "https://github.com/davidmarkclements/atomic-sleep/issues"
|
|
35
|
+
},
|
|
36
|
+
"homepage": "https://github.com/davidmarkclements/atomic-sleep#readme"
|
|
37
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
<h1 align="center">Welcome to atomic-sleep ⏱️</h1>
|
|
2
|
+
<p>
|
|
3
|
+
<img alt="Version" src="https://img.shields.io/badge/version-1.0.0-blue.svg?cacheSeconds=2592000" />
|
|
4
|
+
<a href="#" target="_blank">
|
|
5
|
+
<img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-yellow.svg" />
|
|
6
|
+
</a>
|
|
7
|
+
<a href="https://twitter.com/davidmarkclem" target="_blank">
|
|
8
|
+
<img alt="Twitter: davidmarkclem" src="https://img.shields.io/twitter/follow/davidmarkclem.svg?style=social" />
|
|
9
|
+
</a>
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
> Zero CPU overhead, zero dependency, true event-loop blocking sleep
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
```js
|
|
17
|
+
const sleep = require('atomic-sleep')
|
|
18
|
+
|
|
19
|
+
console.time('sleep')
|
|
20
|
+
setTimeout(() => { console.timeEnd('sleep') }, 100)
|
|
21
|
+
sleep(1000)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
The `console.time` will report a time of just over 1000ms despite the `setTimeout`
|
|
25
|
+
being 100ms. This is because the event loop is paused for 1000ms and the setTimeout
|
|
26
|
+
fires immediately after the event loop is no longer blocked (as more than 100ms have passed).
|
|
27
|
+
|
|
28
|
+
## Install
|
|
29
|
+
|
|
30
|
+
```sh
|
|
31
|
+
npm install
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Run tests
|
|
35
|
+
|
|
36
|
+
```sh
|
|
37
|
+
npm test
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Support
|
|
41
|
+
|
|
42
|
+
Node and Browser versions that support both `SharedArrayBuffer` and `Atomics` will have (virtually) zero CPU overhead sleep.
|
|
43
|
+
|
|
44
|
+
For Node, Atomic Sleep can provide zero CPU overhead sleep from Node 8 and up.
|
|
45
|
+
|
|
46
|
+
For browser support see https://caniuse.com/#feat=sharedarraybuffer and https://caniuse.com/#feat=mdn-javascript_builtins_atomics.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
For older Node versions and olders browsers we fall back to blocking the event loop in a way that will cause a CPU spike.
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
## Author
|
|
54
|
+
|
|
55
|
+
👤 **David Mark Clements (@davidmarkclem)**
|
|
56
|
+
|
|
57
|
+
* Twitter: [@davidmarkclem](https://twitter.com/davidmarkclem)
|
|
58
|
+
* Github: [@davidmarkclements](https://github.com/davidmarkclements)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
const test = require('tape')
|
|
3
|
+
const sleep = require('.')
|
|
4
|
+
|
|
5
|
+
test('blocks event loop for given amount of milliseconds', ({ is, end }) => {
|
|
6
|
+
const now = Date.now()
|
|
7
|
+
setTimeout(() => {
|
|
8
|
+
const delta = Date.now() - now
|
|
9
|
+
const fuzzyDelta = Math.floor(delta / 10) * 10 // allow up to 10ms of execution lag
|
|
10
|
+
is(fuzzyDelta, 1000)
|
|
11
|
+
end()
|
|
12
|
+
}, 100)
|
|
13
|
+
sleep(1000)
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
if (typeof BigInt !== 'undefined') {
|
|
17
|
+
|
|
18
|
+
test('allows ms to be supplied as a BigInt number', ({ is, end }) => {
|
|
19
|
+
const now = Date.now()
|
|
20
|
+
setTimeout(() => {
|
|
21
|
+
const delta = Date.now() - now
|
|
22
|
+
const fuzzyDelta = Math.floor(delta / 10) * 10 // allow up to 10ms of execution lag
|
|
23
|
+
is(fuzzyDelta, 1000)
|
|
24
|
+
end()
|
|
25
|
+
}, 100)
|
|
26
|
+
sleep(BigInt(1000)) // avoiding n notation as this will error on legacy node/browsers
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
test('throws range error if ms less than 0', ({ throws, end }) => {
|
|
32
|
+
throws(() => sleep(-1), RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity'))
|
|
33
|
+
end()
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
test('throws range error if ms is Infinity', ({ throws, end }) => {
|
|
37
|
+
throws(() => sleep(Infinity), RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity'))
|
|
38
|
+
end()
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
test('throws range error if ms is not a number or bigint', ({ throws, end }) => {
|
|
42
|
+
throws(() => sleep('Infinity'), TypeError('sleep: ms must be a number'))
|
|
43
|
+
throws(() => sleep('foo'), TypeError('sleep: ms must be a number'))
|
|
44
|
+
throws(() => sleep({a: 1}), TypeError('sleep: ms must be a number'))
|
|
45
|
+
throws(() => sleep([1,2,3]), TypeError('sleep: ms must be a number'))
|
|
46
|
+
end()
|
|
47
|
+
})
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
paths-ignore:
|
|
5
|
+
- 'docs/**'
|
|
6
|
+
- '*.md'
|
|
7
|
+
pull_request:
|
|
8
|
+
paths-ignore:
|
|
9
|
+
- 'docs/**'
|
|
10
|
+
- '*.md'
|
|
11
|
+
jobs:
|
|
12
|
+
test:
|
|
13
|
+
runs-on: ${{ matrix.os }}
|
|
14
|
+
|
|
15
|
+
strategy:
|
|
16
|
+
matrix:
|
|
17
|
+
node-version: [14, 16, 18, 20]
|
|
18
|
+
os: [macos-latest, ubuntu-latest, windows-latest]
|
|
19
|
+
exclude:
|
|
20
|
+
- node-version: 14
|
|
21
|
+
os: windows-latest
|
|
22
|
+
|
|
23
|
+
steps:
|
|
24
|
+
|
|
25
|
+
- uses: actions/checkout@v4
|
|
26
|
+
|
|
27
|
+
- name: Use Node.js
|
|
28
|
+
uses: actions/setup-node@v3
|
|
29
|
+
with:
|
|
30
|
+
node-version: ${{ matrix.node-version }}
|
|
31
|
+
|
|
32
|
+
- name: Install
|
|
33
|
+
run: |
|
|
34
|
+
npm install --ignore-scripts
|
|
35
|
+
|
|
36
|
+
- name: Run tests
|
|
37
|
+
run: |
|
|
38
|
+
npm run test
|
|
39
|
+
|
|
40
|
+
automerge:
|
|
41
|
+
needs: test
|
|
42
|
+
runs-on: ubuntu-latest
|
|
43
|
+
steps:
|
|
44
|
+
- uses: fastify/github-action-merge-dependabot@v3.9
|
|
45
|
+
with:
|
|
46
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021 Matteo Collina
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|