@ddd-ts-kit/testing 0.0.0-stage → 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/README.md +549 -2
- package/dist/builders/buildable.d.ts +7 -0
- package/dist/builders/buildable.d.ts.map +1 -0
- package/dist/builders/buildable.js +2 -0
- package/dist/builders/buildable.js.map +1 -0
- package/dist/builders/builder.d.ts +33 -0
- package/dist/builders/builder.d.ts.map +1 -0
- package/dist/builders/builder.js +66 -0
- package/dist/builders/builder.js.map +1 -0
- package/dist/builders/defaults.d.ts +6 -0
- package/dist/builders/defaults.d.ts.map +1 -0
- package/dist/builders/defaults.js +2 -0
- package/dist/builders/defaults.js.map +1 -0
- package/dist/builders/define-builder.d.ts +14 -0
- package/dist/builders/define-builder.d.ts.map +1 -0
- package/dist/builders/define-builder.js +10 -0
- package/dist/builders/define-builder.js.map +1 -0
- package/dist/builders/generic-builder.d.ts +16 -0
- package/dist/builders/generic-builder.d.ts.map +1 -0
- package/dist/builders/generic-builder.js +23 -0
- package/dist/builders/generic-builder.js.map +1 -0
- package/dist/builders/is-resolvable.d.ts +3 -0
- package/dist/builders/is-resolvable.d.ts.map +1 -0
- package/dist/builders/is-resolvable.js +5 -0
- package/dist/builders/is-resolvable.js.map +1 -0
- package/dist/builders/lazy.d.ts +4 -0
- package/dist/builders/lazy.d.ts.map +1 -0
- package/dist/builders/lazy.js +15 -0
- package/dist/builders/lazy.js.map +1 -0
- package/dist/builders/resolvable.d.ts +6 -0
- package/dist/builders/resolvable.d.ts.map +1 -0
- package/dist/builders/resolvable.js +2 -0
- package/dist/builders/resolvable.js.map +1 -0
- package/dist/builders/resolve.d.ts +4 -0
- package/dist/builders/resolve.d.ts.map +1 -0
- package/dist/builders/resolve.js +7 -0
- package/dist/builders/resolve.js.map +1 -0
- package/dist/builders/sequence.d.ts +10 -0
- package/dist/builders/sequence.d.ts.map +1 -0
- package/dist/builders/sequence.js +14 -0
- package/dist/builders/sequence.js.map +1 -0
- package/dist/contracts/awaitable.d.ts +2 -0
- package/dist/contracts/awaitable.d.ts.map +1 -0
- package/dist/contracts/awaitable.js +2 -0
- package/dist/contracts/awaitable.js.map +1 -0
- package/dist/contracts/cache-contract.d.ts +13 -0
- package/dist/contracts/cache-contract.d.ts.map +1 -0
- package/dist/contracts/cache-contract.js +81 -0
- package/dist/contracts/cache-contract.js.map +1 -0
- package/dist/contracts/contract-runner.d.ts +16 -0
- package/dist/contracts/contract-runner.d.ts.map +1 -0
- package/dist/contracts/contract-runner.js +2 -0
- package/dist/contracts/contract-runner.js.map +1 -0
- package/dist/contracts/contract-suite.d.ts +23 -0
- package/dist/contracts/contract-suite.d.ts.map +1 -0
- package/dist/contracts/contract-suite.js +39 -0
- package/dist/contracts/contract-suite.js.map +1 -0
- package/dist/contracts/criteria/criteria-case.d.ts +11 -0
- package/dist/contracts/criteria/criteria-case.d.ts.map +1 -0
- package/dist/contracts/criteria/criteria-case.js +2 -0
- package/dist/contracts/criteria/criteria-case.js.map +1 -0
- package/dist/contracts/criteria/criteria-contract-definition.d.ts +5 -0
- package/dist/contracts/criteria/criteria-contract-definition.d.ts.map +1 -0
- package/dist/contracts/criteria/criteria-contract-definition.js +20 -0
- package/dist/contracts/criteria/criteria-contract-definition.js.map +1 -0
- package/dist/contracts/criteria/criteria-contract-row.d.ts +15 -0
- package/dist/contracts/criteria/criteria-contract-row.d.ts.map +1 -0
- package/dist/contracts/criteria/criteria-contract-row.js +2 -0
- package/dist/contracts/criteria/criteria-contract-row.js.map +1 -0
- package/dist/contracts/criteria/criteria-contract-rows.d.ts +9 -0
- package/dist/contracts/criteria/criteria-contract-rows.d.ts.map +1 -0
- package/dist/contracts/criteria/criteria-contract-rows.js +55 -0
- package/dist/contracts/criteria/criteria-contract-rows.js.map +1 -0
- package/dist/contracts/criteria/group-cases.d.ts +4 -0
- package/dist/contracts/criteria/group-cases.d.ts.map +1 -0
- package/dist/contracts/criteria/group-cases.js +96 -0
- package/dist/contracts/criteria/group-cases.js.map +1 -0
- package/dist/contracts/criteria/operator-cases.d.ts +4 -0
- package/dist/contracts/criteria/operator-cases.d.ts.map +1 -0
- package/dist/contracts/criteria/operator-cases.js +122 -0
- package/dist/contracts/criteria/operator-cases.js.map +1 -0
- package/dist/contracts/criteria/scope-cases.d.ts +4 -0
- package/dist/contracts/criteria/scope-cases.d.ts.map +1 -0
- package/dist/contracts/criteria/scope-cases.js +73 -0
- package/dist/contracts/criteria/scope-cases.js.map +1 -0
- package/dist/contracts/criteria/sort-cases.d.ts +4 -0
- package/dist/contracts/criteria/sort-cases.d.ts.map +1 -0
- package/dist/contracts/criteria/sort-cases.js +54 -0
- package/dist/contracts/criteria/sort-cases.js.map +1 -0
- package/dist/contracts/criteria-contract.d.ts +20 -0
- package/dist/contracts/criteria-contract.d.ts.map +1 -0
- package/dist/contracts/criteria-contract.js +94 -0
- package/dist/contracts/criteria-contract.js.map +1 -0
- package/dist/contracts/event-bus-contract.d.ts +23 -0
- package/dist/contracts/event-bus-contract.d.ts.map +1 -0
- package/dist/contracts/event-bus-contract.js +122 -0
- package/dist/contracts/event-bus-contract.js.map +1 -0
- package/dist/contracts/failure-of.d.ts +3 -0
- package/dist/contracts/failure-of.d.ts.map +1 -0
- package/dist/contracts/failure-of.js +12 -0
- package/dist/contracts/failure-of.js.map +1 -0
- package/dist/contracts/full-envelope.d.ts +4 -0
- package/dist/contracts/full-envelope.d.ts.map +1 -0
- package/dist/contracts/full-envelope.js +12 -0
- package/dist/contracts/full-envelope.js.map +1 -0
- package/dist/contracts/job-scheduler-contract.d.ts +21 -0
- package/dist/contracts/job-scheduler-contract.d.ts.map +1 -0
- package/dist/contracts/job-scheduler-contract.js +181 -0
- package/dist/contracts/job-scheduler-contract.js.map +1 -0
- package/dist/contracts/lock-contract.d.ts +13 -0
- package/dist/contracts/lock-contract.d.ts.map +1 -0
- package/dist/contracts/lock-contract.js +90 -0
- package/dist/contracts/lock-contract.js.map +1 -0
- package/dist/contracts/logger/create-logger.d.ts +6 -0
- package/dist/contracts/logger/create-logger.d.ts.map +1 -0
- package/dist/contracts/logger/create-logger.js +2 -0
- package/dist/contracts/logger/create-logger.js.map +1 -0
- package/dist/contracts/logger/error-outline-of.d.ts +12 -0
- package/dist/contracts/logger/error-outline-of.d.ts.map +1 -0
- package/dist/contracts/logger/error-outline-of.js +27 -0
- package/dist/contracts/logger/error-outline-of.js.map +1 -0
- package/dist/contracts/logger/logged-line.d.ts +9 -0
- package/dist/contracts/logger/logged-line.d.ts.map +1 -0
- package/dist/contracts/logger/logged-line.js +2 -0
- package/dist/contracts/logger/logged-line.js.map +1 -0
- package/dist/contracts/logger/logger-contract-setup.d.ts +11 -0
- package/dist/contracts/logger/logger-contract-setup.d.ts.map +1 -0
- package/dist/contracts/logger/logger-contract-setup.js +2 -0
- package/dist/contracts/logger/logger-contract-setup.js.map +1 -0
- package/dist/contracts/logger/logger-entries-suite.d.ts +19 -0
- package/dist/contracts/logger/logger-entries-suite.d.ts.map +1 -0
- package/dist/contracts/logger/logger-entries-suite.js +177 -0
- package/dist/contracts/logger/logger-entries-suite.js.map +1 -0
- package/dist/contracts/logger/logger-shutdown-suite.d.ts +15 -0
- package/dist/contracts/logger/logger-shutdown-suite.d.ts.map +1 -0
- package/dist/contracts/logger/logger-shutdown-suite.js +98 -0
- package/dist/contracts/logger/logger-shutdown-suite.js.map +1 -0
- package/dist/contracts/logger/logger-under-contract.d.ts +9 -0
- package/dist/contracts/logger/logger-under-contract.d.ts.map +1 -0
- package/dist/contracts/logger/logger-under-contract.js +2 -0
- package/dist/contracts/logger/logger-under-contract.js.map +1 -0
- package/dist/contracts/logger/unreadable-total.d.ts +5 -0
- package/dist/contracts/logger/unreadable-total.d.ts.map +1 -0
- package/dist/contracts/logger/unreadable-total.js +9 -0
- package/dist/contracts/logger/unreadable-total.js.map +1 -0
- package/dist/contracts/logger-contract.d.ts +14 -0
- package/dist/contracts/logger-contract.d.ts.map +1 -0
- package/dist/contracts/logger-contract.js +12 -0
- package/dist/contracts/logger-contract.js.map +1 -0
- package/dist/contracts/outbox-store-contract.d.ts +36 -0
- package/dist/contracts/outbox-store-contract.d.ts.map +1 -0
- package/dist/contracts/outbox-store-contract.js +148 -0
- package/dist/contracts/outbox-store-contract.js.map +1 -0
- package/dist/contracts/processed-event-store-contract.d.ts +11 -0
- package/dist/contracts/processed-event-store-contract.d.ts.map +1 -0
- package/dist/contracts/processed-event-store-contract.js +40 -0
- package/dist/contracts/processed-event-store-contract.js.map +1 -0
- package/dist/contracts/rate-limiter-contract.d.ts +13 -0
- package/dist/contracts/rate-limiter-contract.d.ts.map +1 -0
- package/dist/contracts/rate-limiter-contract.js +86 -0
- package/dist/contracts/rate-limiter-contract.js.map +1 -0
- package/dist/contracts/read-model/everything.d.ts +5 -0
- package/dist/contracts/read-model/everything.d.ts.map +1 -0
- package/dist/contracts/read-model/everything.js +3 -0
- package/dist/contracts/read-model/everything.js.map +1 -0
- package/dist/contracts/read-model/read-model-store-suite.d.ts +14 -0
- package/dist/contracts/read-model/read-model-store-suite.d.ts.map +1 -0
- package/dist/contracts/read-model/read-model-store-suite.js +23 -0
- package/dist/contracts/read-model/read-model-store-suite.js.map +1 -0
- package/dist/contracts/read-model/read-model-store-under-contract.d.ts +11 -0
- package/dist/contracts/read-model/read-model-store-under-contract.d.ts.map +1 -0
- package/dist/contracts/read-model/read-model-store-under-contract.js +2 -0
- package/dist/contracts/read-model/read-model-store-under-contract.js.map +1 -0
- package/dist/contracts/read-model/rebuild-suite.d.ts +14 -0
- package/dist/contracts/read-model/rebuild-suite.d.ts.map +1 -0
- package/dist/contracts/read-model/rebuild-suite.js +116 -0
- package/dist/contracts/read-model/rebuild-suite.js.map +1 -0
- package/dist/contracts/read-model/row-of.d.ts +4 -0
- package/dist/contracts/read-model/row-of.d.ts.map +1 -0
- package/dist/contracts/read-model/row-of.js +10 -0
- package/dist/contracts/read-model/row-of.js.map +1 -0
- package/dist/contracts/read-model/rows-suite.d.ts +11 -0
- package/dist/contracts/read-model/rows-suite.d.ts.map +1 -0
- package/dist/contracts/read-model/rows-suite.js +122 -0
- package/dist/contracts/read-model/rows-suite.js.map +1 -0
- package/dist/contracts/read-model/source-of-truth.d.ts +17 -0
- package/dist/contracts/read-model/source-of-truth.d.ts.map +1 -0
- package/dist/contracts/read-model/source-of-truth.js +36 -0
- package/dist/contracts/read-model/source-of-truth.js.map +1 -0
- package/dist/contracts/read-model/stamped-at.d.ts +4 -0
- package/dist/contracts/read-model/stamped-at.d.ts.map +1 -0
- package/dist/contracts/read-model/stamped-at.js +5 -0
- package/dist/contracts/read-model/stamped-at.js.map +1 -0
- package/dist/contracts/read-model-store-contract.d.ts +15 -0
- package/dist/contracts/read-model-store-contract.d.ts.map +1 -0
- package/dist/contracts/read-model-store-contract.js +13 -0
- package/dist/contracts/read-model-store-contract.js.map +1 -0
- package/dist/contracts/repository-contract.d.ts +18 -0
- package/dist/contracts/repository-contract.d.ts.map +1 -0
- package/dist/contracts/repository-contract.js +103 -0
- package/dist/contracts/repository-contract.js.map +1 -0
- package/dist/contracts/unit-of-work/after-commit-suite.d.ts +12 -0
- package/dist/contracts/unit-of-work/after-commit-suite.d.ts.map +1 -0
- package/dist/contracts/unit-of-work/after-commit-suite.js +79 -0
- package/dist/contracts/unit-of-work/after-commit-suite.js.map +1 -0
- package/dist/contracts/unit-of-work/dispatch-suite.d.ts +14 -0
- package/dist/contracts/unit-of-work/dispatch-suite.d.ts.map +1 -0
- package/dist/contracts/unit-of-work/dispatch-suite.js +171 -0
- package/dist/contracts/unit-of-work/dispatch-suite.js.map +1 -0
- package/dist/contracts/unit-of-work/failure-suite.d.ts +17 -0
- package/dist/contracts/unit-of-work/failure-suite.d.ts.map +1 -0
- package/dist/contracts/unit-of-work/failure-suite.js +114 -0
- package/dist/contracts/unit-of-work/failure-suite.js.map +1 -0
- package/dist/contracts/unit-of-work/parcel.d.ts +11 -0
- package/dist/contracts/unit-of-work/parcel.d.ts.map +1 -0
- package/dist/contracts/unit-of-work/parcel.js +22 -0
- package/dist/contracts/unit-of-work/parcel.js.map +1 -0
- package/dist/contracts/unit-of-work/parcels.d.ts +10 -0
- package/dist/contracts/unit-of-work/parcels.d.ts.map +1 -0
- package/dist/contracts/unit-of-work/parcels.js +14 -0
- package/dist/contracts/unit-of-work/parcels.js.map +1 -0
- package/dist/contracts/unit-of-work/shipping-bench.d.ts +25 -0
- package/dist/contracts/unit-of-work/shipping-bench.d.ts.map +1 -0
- package/dist/contracts/unit-of-work/shipping-bench.js +58 -0
- package/dist/contracts/unit-of-work/shipping-bench.js.map +1 -0
- package/dist/contracts/unit-of-work/unit-of-work-under-contract.d.ts +22 -0
- package/dist/contracts/unit-of-work/unit-of-work-under-contract.d.ts.map +1 -0
- package/dist/contracts/unit-of-work/unit-of-work-under-contract.js +2 -0
- package/dist/contracts/unit-of-work/unit-of-work-under-contract.js.map +1 -0
- package/dist/contracts/unit-of-work-contract.d.ts +19 -0
- package/dist/contracts/unit-of-work-contract.d.ts.map +1 -0
- package/dist/contracts/unit-of-work-contract.js +19 -0
- package/dist/contracts/unit-of-work-contract.js.map +1 -0
- package/dist/contracts.d.ts +27 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +17 -0
- package/dist/contracts.js.map +1 -0
- package/dist/coverage/coverage-layer.d.ts +4 -0
- package/dist/coverage/coverage-layer.d.ts.map +1 -0
- package/dist/coverage/coverage-layer.js +2 -0
- package/dist/coverage/coverage-layer.js.map +1 -0
- package/dist/coverage/coverage-rates.d.ts +8 -0
- package/dist/coverage/coverage-rates.d.ts.map +1 -0
- package/dist/coverage/coverage-rates.js +2 -0
- package/dist/coverage/coverage-rates.js.map +1 -0
- package/dist/coverage/governed-coverage.d.ts +22 -0
- package/dist/coverage/governed-coverage.d.ts.map +1 -0
- package/dist/coverage/governed-coverage.js +25 -0
- package/dist/coverage/governed-coverage.js.map +1 -0
- package/dist/coverage/governed-jest-coverage.d.ts +18 -0
- package/dist/coverage/governed-jest-coverage.d.ts.map +1 -0
- package/dist/coverage/governed-jest-coverage.js +22 -0
- package/dist/coverage/governed-jest-coverage.js.map +1 -0
- package/dist/coverage/governed-settings.d.ts +13 -0
- package/dist/coverage/governed-settings.d.ts.map +1 -0
- package/dist/coverage/governed-settings.js +49 -0
- package/dist/coverage/governed-settings.js.map +1 -0
- package/dist/coverage/held-layers.d.ts +15 -0
- package/dist/coverage/held-layers.d.ts.map +1 -0
- package/dist/coverage/held-layers.js +33 -0
- package/dist/coverage/held-layers.js.map +1 -0
- package/dist/coverage/measured-layers.d.ts +8 -0
- package/dist/coverage/measured-layers.d.ts.map +1 -0
- package/dist/coverage/measured-layers.js +14 -0
- package/dist/coverage/measured-layers.js.map +1 -0
- package/dist/coverage/reference-coverage.d.ts +33 -0
- package/dist/coverage/reference-coverage.d.ts.map +1 -0
- package/dist/coverage/reference-coverage.js +13 -0
- package/dist/coverage/reference-coverage.js.map +1 -0
- package/dist/coverage.d.ts +6 -0
- package/dist/coverage.d.ts.map +1 -0
- package/dist/coverage.js +4 -0
- package/dist/coverage.js.map +1 -0
- package/dist/e2e/collect-events.d.ts +9 -0
- package/dist/e2e/collect-events.d.ts.map +1 -0
- package/dist/e2e/collect-events.js +9 -0
- package/dist/e2e/collect-events.js.map +1 -0
- package/dist/e2e/create-http-client.d.ts +4 -0
- package/dist/e2e/create-http-client.d.ts.map +1 -0
- package/dist/e2e/create-http-client.js +7 -0
- package/dist/e2e/create-http-client.js.map +1 -0
- package/dist/e2e/database-reset.d.ts +8 -0
- package/dist/e2e/database-reset.d.ts.map +1 -0
- package/dist/e2e/database-reset.js +2 -0
- package/dist/e2e/database-reset.js.map +1 -0
- package/dist/e2e/event-recorder.d.ts +12 -0
- package/dist/e2e/event-recorder.d.ts.map +1 -0
- package/dist/e2e/event-recorder.js +2 -0
- package/dist/e2e/event-recorder.js.map +1 -0
- package/dist/e2e/event-type.d.ts +5 -0
- package/dist/e2e/event-type.d.ts.map +1 -0
- package/dist/e2e/event-type.js +2 -0
- package/dist/e2e/event-type.js.map +1 -0
- package/dist/e2e/eventually.d.ts +13 -0
- package/dist/e2e/eventually.d.ts.map +1 -0
- package/dist/e2e/eventually.js +27 -0
- package/dist/e2e/eventually.js.map +1 -0
- package/dist/e2e/expect-problem.d.ts +13 -0
- package/dist/e2e/expect-problem.d.ts.map +1 -0
- package/dist/e2e/expect-problem.js +27 -0
- package/dist/e2e/expect-problem.js.map +1 -0
- package/dist/e2e/expect-status.d.ts +7 -0
- package/dist/e2e/expect-status.d.ts.map +1 -0
- package/dist/e2e/expect-status.js +18 -0
- package/dist/e2e/expect-status.js.map +1 -0
- package/dist/e2e/fetch-client.d.ts +18 -0
- package/dist/e2e/fetch-client.d.ts.map +1 -0
- package/dist/e2e/fetch-client.js +56 -0
- package/dist/e2e/fetch-client.js.map +1 -0
- package/dist/e2e/http-client.d.ts +17 -0
- package/dist/e2e/http-client.d.ts.map +1 -0
- package/dist/e2e/http-client.js +2 -0
- package/dist/e2e/http-client.js.map +1 -0
- package/dist/e2e/http-headers.d.ts +2 -0
- package/dist/e2e/http-headers.d.ts.map +1 -0
- package/dist/e2e/http-headers.js +2 -0
- package/dist/e2e/http-headers.js.map +1 -0
- package/dist/e2e/http-response.d.ts +9 -0
- package/dist/e2e/http-response.d.ts.map +1 -0
- package/dist/e2e/http-response.js +2 -0
- package/dist/e2e/http-response.js.map +1 -0
- package/dist/e2e/listen-on-random-port.d.ts +13 -0
- package/dist/e2e/listen-on-random-port.d.ts.map +1 -0
- package/dist/e2e/listen-on-random-port.js +21 -0
- package/dist/e2e/listen-on-random-port.js.map +1 -0
- package/dist/e2e/lower-cased.d.ts +3 -0
- package/dist/e2e/lower-cased.d.ts.map +1 -0
- package/dist/e2e/lower-cased.js +6 -0
- package/dist/e2e/lower-cased.js.map +1 -0
- package/dist/e2e/request-options.d.ts +6 -0
- package/dist/e2e/request-options.d.ts.map +1 -0
- package/dist/e2e/request-options.js +2 -0
- package/dist/e2e/request-options.js.map +1 -0
- package/dist/e2e/running-server.d.ts +6 -0
- package/dist/e2e/running-server.d.ts.map +1 -0
- package/dist/e2e/running-server.js +2 -0
- package/dist/e2e/running-server.js.map +1 -0
- package/dist/e2e/start-test-server.d.ts +18 -0
- package/dist/e2e/start-test-server.d.ts.map +1 -0
- package/dist/e2e/start-test-server.js +14 -0
- package/dist/e2e/start-test-server.js.map +1 -0
- package/dist/e2e/subscribed-recorder.d.ts +17 -0
- package/dist/e2e/subscribed-recorder.d.ts.map +1 -0
- package/dist/e2e/subscribed-recorder.js +45 -0
- package/dist/e2e/subscribed-recorder.js.map +1 -0
- package/dist/e2e/without-trailing-slashes.d.ts +3 -0
- package/dist/e2e/without-trailing-slashes.d.ts.map +1 -0
- package/dist/e2e/without-trailing-slashes.js +9 -0
- package/dist/e2e/without-trailing-slashes.js.map +1 -0
- package/dist/e2e.d.ts +16 -0
- package/dist/e2e.d.ts.map +1 -0
- package/dist/e2e.js +8 -0
- package/dist/e2e.js.map +1 -0
- package/dist/execution/a-session.d.ts +4 -0
- package/dist/execution/a-session.d.ts.map +1 -0
- package/dist/execution/a-session.js +7 -0
- package/dist/execution/a-session.js.map +1 -0
- package/dist/execution/a-test-user.d.ts +4 -0
- package/dist/execution/a-test-user.d.ts.map +1 -0
- package/dist/execution/a-test-user.js +9 -0
- package/dist/execution/a-test-user.js.map +1 -0
- package/dist/execution/an-execution-context.d.ts +4 -0
- package/dist/execution/an-execution-context.d.ts.map +1 -0
- package/dist/execution/an-execution-context.js +7 -0
- package/dist/execution/an-execution-context.js.map +1 -0
- package/dist/execution/execution-context-builder.d.ts +37 -0
- package/dist/execution/execution-context-builder.d.ts.map +1 -0
- package/dist/execution/execution-context-builder.js +67 -0
- package/dist/execution/execution-context-builder.js.map +1 -0
- package/dist/execution/scoped.d.ts +8 -0
- package/dist/execution/scoped.d.ts.map +1 -0
- package/dist/execution/scoped.js +9 -0
- package/dist/execution/scoped.js.map +1 -0
- package/dist/execution/session-builder.d.ts +37 -0
- package/dist/execution/session-builder.d.ts.map +1 -0
- package/dist/execution/session-builder.js +71 -0
- package/dist/execution/session-builder.js.map +1 -0
- package/dist/faker/create-data-generator.d.ts +15 -0
- package/dist/faker/create-data-generator.d.ts.map +1 -0
- package/dist/faker/create-data-generator.js +24 -0
- package/dist/faker/create-data-generator.js.map +1 -0
- package/dist/faker/current-data-generator.d.ts +9 -0
- package/dist/faker/current-data-generator.d.ts.map +1 -0
- package/dist/faker/current-data-generator.js +16 -0
- package/dist/faker/current-data-generator.js.map +1 -0
- package/dist/faker/data-generator.d.ts +9 -0
- package/dist/faker/data-generator.d.ts.map +1 -0
- package/dist/faker/data-generator.js +2 -0
- package/dist/faker/data-generator.js.map +1 -0
- package/dist/faker/generated.d.ts +8 -0
- package/dist/faker/generated.d.ts.map +1 -0
- package/dist/faker/generated.js +10 -0
- package/dist/faker/generated.js.map +1 -0
- package/dist/faker/replay-hint.d.ts +2 -0
- package/dist/faker/replay-hint.d.ts.map +1 -0
- package/dist/faker/replay-hint.js +4 -0
- package/dist/faker/replay-hint.js.map +1 -0
- package/dist/faker/report-seed-on-failure.d.ts +11 -0
- package/dist/faker/report-seed-on-failure.d.ts.map +1 -0
- package/dist/faker/report-seed-on-failure.js +12 -0
- package/dist/faker/report-seed-on-failure.js.map +1 -0
- package/dist/faker.d.ts +7 -0
- package/dist/faker.d.ts.map +1 -0
- package/dist/faker.js +6 -0
- package/dist/faker.js.map +1 -0
- package/dist/harness/create-test-buses.d.ts +49 -0
- package/dist/harness/create-test-buses.d.ts.map +1 -0
- package/dist/harness/create-test-buses.js +35 -0
- package/dist/harness/create-test-buses.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/repositories/in-memory-repository.d.ts +30 -0
- package/dist/repositories/in-memory-repository.d.ts.map +1 -0
- package/dist/repositories/in-memory-repository.js +58 -0
- package/dist/repositories/in-memory-repository.js.map +1 -0
- package/dist/repositories/snapshot-codec.d.ts +6 -0
- package/dist/repositories/snapshot-codec.d.ts.map +1 -0
- package/dist/repositories/snapshot-codec.js +2 -0
- package/dist/repositories/snapshot-codec.js.map +1 -0
- package/dist/repositories/snapshots.d.ts +5 -0
- package/dist/repositories/snapshots.d.ts.map +1 -0
- package/dist/repositories/snapshots.js +9 -0
- package/dist/repositories/snapshots.js.map +1 -0
- package/dist/scenarios/act.d.ts +5 -0
- package/dist/scenarios/act.d.ts.map +1 -0
- package/dist/scenarios/act.js +21 -0
- package/dist/scenarios/act.js.map +1 -0
- package/dist/scenarios/async-outcome.d.ts +5 -0
- package/dist/scenarios/async-outcome.d.ts.map +1 -0
- package/dist/scenarios/async-outcome.js +2 -0
- package/dist/scenarios/async-outcome.js.map +1 -0
- package/dist/scenarios/async-scenario.d.ts +5 -0
- package/dist/scenarios/async-scenario.d.ts.map +1 -0
- package/dist/scenarios/async-scenario.js +2 -0
- package/dist/scenarios/async-scenario.js.map +1 -0
- package/dist/scenarios/deferred-outcome.d.ts +18 -0
- package/dist/scenarios/deferred-outcome.d.ts.map +1 -0
- package/dist/scenarios/deferred-outcome.js +34 -0
- package/dist/scenarios/deferred-outcome.js.map +1 -0
- package/dist/scenarios/describe-event.d.ts +3 -0
- package/dist/scenarios/describe-event.d.ts.map +1 -0
- package/dist/scenarios/describe-event.js +6 -0
- package/dist/scenarios/describe-event.js.map +1 -0
- package/dist/scenarios/error-class.d.ts +2 -0
- package/dist/scenarios/error-class.d.ts.map +1 -0
- package/dist/scenarios/error-class.js +2 -0
- package/dist/scenarios/error-class.js.map +1 -0
- package/dist/scenarios/event-matcher.d.ts +11 -0
- package/dist/scenarios/event-matcher.d.ts.map +1 -0
- package/dist/scenarios/event-matcher.js +2 -0
- package/dist/scenarios/event-matcher.js.map +1 -0
- package/dist/scenarios/event-mismatches.d.ts +5 -0
- package/dist/scenarios/event-mismatches.d.ts.map +1 -0
- package/dist/scenarios/event-mismatches.js +33 -0
- package/dist/scenarios/event-mismatches.js.map +1 -0
- package/dist/scenarios/event-source.d.ts +6 -0
- package/dist/scenarios/event-source.d.ts.map +1 -0
- package/dist/scenarios/event-source.js +2 -0
- package/dist/scenarios/event-source.js.map +1 -0
- package/dist/scenarios/given.d.ts +9 -0
- package/dist/scenarios/given.d.ts.map +1 -0
- package/dist/scenarios/given.js +10 -0
- package/dist/scenarios/given.js.map +1 -0
- package/dist/scenarios/immediate-outcome.d.ts +18 -0
- package/dist/scenarios/immediate-outcome.d.ts.map +1 -0
- package/dist/scenarios/immediate-outcome.js +147 -0
- package/dist/scenarios/immediate-outcome.js.map +1 -0
- package/dist/scenarios/is-promise-like.d.ts +2 -0
- package/dist/scenarios/is-promise-like.d.ts.map +1 -0
- package/dist/scenarios/is-promise-like.js +4 -0
- package/dist/scenarios/is-promise-like.js.map +1 -0
- package/dist/scenarios/outcome.d.ts +17 -0
- package/dist/scenarios/outcome.d.ts.map +1 -0
- package/dist/scenarios/outcome.js +2 -0
- package/dist/scenarios/outcome.js.map +1 -0
- package/dist/scenarios/recorded.d.ts +10 -0
- package/dist/scenarios/recorded.d.ts.map +1 -0
- package/dist/scenarios/recorded.js +2 -0
- package/dist/scenarios/recorded.js.map +1 -0
- package/dist/scenarios/scenario.d.ts +18 -0
- package/dist/scenarios/scenario.d.ts.map +1 -0
- package/dist/scenarios/scenario.js +17 -0
- package/dist/scenarios/scenario.js.map +1 -0
- package/dist/scenarios/show.d.ts +3 -0
- package/dist/scenarios/show.d.ts.map +1 -0
- package/dist/scenarios/show.js +6 -0
- package/dist/scenarios/show.js.map +1 -0
- package/dist/secrecy/expect-no-secret.d.ts +9 -0
- package/dist/secrecy/expect-no-secret.d.ts.map +1 -0
- package/dist/secrecy/expect-no-secret.js +55 -0
- package/dist/secrecy/expect-no-secret.js.map +1 -0
- package/dist/vitest/compiler-script.d.ts +3 -0
- package/dist/vitest/compiler-script.d.ts.map +1 -0
- package/dist/vitest/compiler-script.js +18 -0
- package/dist/vitest/compiler-script.js.map +1 -0
- package/dist/vitest/decorator-compiler.d.ts +21 -0
- package/dist/vitest/decorator-compiler.d.ts.map +1 -0
- package/dist/vitest/decorator-compiler.js +112 -0
- package/dist/vitest/decorator-compiler.js.map +1 -0
- package/dist/vitest/decorator-coverage.d.ts +27 -0
- package/dist/vitest/decorator-coverage.d.ts.map +1 -0
- package/dist/vitest/decorator-coverage.js +41 -0
- package/dist/vitest/decorator-coverage.js.map +1 -0
- package/dist/vitest/decorators.d.ts +41 -0
- package/dist/vitest/decorators.d.ts.map +1 -0
- package/dist/vitest/decorators.js +49 -0
- package/dist/vitest/decorators.js.map +1 -0
- package/dist/vitest/is-record.d.ts +2 -0
- package/dist/vitest/is-record.d.ts.map +1 -0
- package/dist/vitest/is-record.js +4 -0
- package/dist/vitest/is-record.js.map +1 -0
- package/dist/vitest/project-options.d.ts +3 -0
- package/dist/vitest/project-options.d.ts.map +1 -0
- package/dist/vitest/project-options.js +2 -0
- package/dist/vitest/project-options.js.map +1 -0
- package/dist/vitest/single-file-project.d.ts +3 -0
- package/dist/vitest/single-file-project.d.ts.map +1 -0
- package/dist/vitest/single-file-project.js +26 -0
- package/dist/vitest/single-file-project.js.map +1 -0
- package/dist/vitest/source-map-of.d.ts +3 -0
- package/dist/vitest/source-map-of.d.ts.map +1 -0
- package/dist/vitest/source-map-of.js +14 -0
- package/dist/vitest/source-map-of.js.map +1 -0
- package/dist/vitest.d.ts +3 -0
- package/dist/vitest.d.ts.map +1 -0
- package/dist/vitest.js +3 -0
- package/dist/vitest.js.map +1 -0
- package/package.json +62 -4
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** `value` without the slashes it ends with. */
|
|
2
|
+
export function withoutTrailingSlashes(value) {
|
|
3
|
+
let end = value.length;
|
|
4
|
+
while (end > 0 && value[end - 1] === '/') {
|
|
5
|
+
end -= 1;
|
|
6
|
+
}
|
|
7
|
+
return value.slice(0, end);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=without-trailing-slashes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"without-trailing-slashes.js","sourceRoot":"","sources":["../../src/e2e/without-trailing-slashes.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IAEvB,OAAO,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACzC,GAAG,IAAI,CAAC,CAAC;IACX,CAAC;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7B,CAAC"}
|
package/dist/e2e.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { collectEvents } from './e2e/collect-events.js';
|
|
2
|
+
export { createHttpClient } from './e2e/create-http-client.js';
|
|
3
|
+
export type { DatabaseReset } from './e2e/database-reset.js';
|
|
4
|
+
export type { EventRecorder } from './e2e/event-recorder.js';
|
|
5
|
+
export type { EventType } from './e2e/event-type.js';
|
|
6
|
+
export { eventually, type EventuallyOptions } from './e2e/eventually.js';
|
|
7
|
+
export { expectProblem, type ExpectedProblem, type ProblemDetails } from './e2e/expect-problem.js';
|
|
8
|
+
export { expectStatus } from './e2e/expect-status.js';
|
|
9
|
+
export type { HttpClient } from './e2e/http-client.js';
|
|
10
|
+
export type { HttpHeaders } from './e2e/http-headers.js';
|
|
11
|
+
export type { HttpResponse } from './e2e/http-response.js';
|
|
12
|
+
export { listenOnRandomPort, type NodeServer } from './e2e/listen-on-random-port.js';
|
|
13
|
+
export type { RequestOptions } from './e2e/request-options.js';
|
|
14
|
+
export type { RunningServer } from './e2e/running-server.js';
|
|
15
|
+
export { startTestServer, type TestServer, type TestServerOptions } from './e2e/start-test-server.js';
|
|
16
|
+
//# sourceMappingURL=e2e.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"e2e.d.ts","sourceRoot":"","sources":["../src/e2e.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,KAAK,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACrF,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC"}
|
package/dist/e2e.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { collectEvents } from './e2e/collect-events.js';
|
|
2
|
+
export { createHttpClient } from './e2e/create-http-client.js';
|
|
3
|
+
export { eventually } from './e2e/eventually.js';
|
|
4
|
+
export { expectProblem } from './e2e/expect-problem.js';
|
|
5
|
+
export { expectStatus } from './e2e/expect-status.js';
|
|
6
|
+
export { listenOnRandomPort } from './e2e/listen-on-random-port.js';
|
|
7
|
+
export { startTestServer } from './e2e/start-test-server.js';
|
|
8
|
+
//# sourceMappingURL=e2e.js.map
|
package/dist/e2e.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"e2e.js","sourceRoot":"","sources":["../src/e2e.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAI/D,OAAO,EAAE,UAAU,EAA0B,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,aAAa,EAA6C,MAAM,yBAAyB,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,OAAO,EAAE,kBAAkB,EAAmB,MAAM,gCAAgC,CAAC;AAGrF,OAAO,EAAE,eAAe,EAA2C,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a-session.d.ts","sourceRoot":"","sources":["../../src/execution/a-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD,mFAAmF;AACnF,wBAAgB,QAAQ,IAAI,cAAc,CAEzC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SessionBuilder } from './session-builder.js';
|
|
2
|
+
const sessionBuilder = new SessionBuilder();
|
|
3
|
+
/** `aSession().of(ada).impersonatedBy('support-7').expiringAt(tonight).build()` */
|
|
4
|
+
export function aSession() {
|
|
5
|
+
return sessionBuilder;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=a-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a-session.js","sourceRoot":"","sources":["../../src/execution/a-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;AAE5C,mFAAmF;AACnF,MAAM,UAAU,QAAQ;IACtB,OAAO,cAAc,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a-test-user.d.ts","sourceRoot":"","sources":["../../src/execution/a-test-user.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAGhD,gGAAgG;AAChG,eAAO,MAAM,SAAS,yCAQrB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { sequence } from '../builders/sequence.js';
|
|
2
|
+
/** A user of its own at each build, without tenant, role or attribute: `user-1`, `user-2`... */
|
|
3
|
+
export const aTestUser = sequence('user', (n) => ({
|
|
4
|
+
id: `user-${String(n)}`,
|
|
5
|
+
type: 'user',
|
|
6
|
+
roles: [],
|
|
7
|
+
attributes: {},
|
|
8
|
+
}));
|
|
9
|
+
//# sourceMappingURL=a-test-user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a-test-user.js","sourceRoot":"","sources":["../../src/execution/a-test-user.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,gGAAgG;AAChG,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAC/B,MAAM,EACN,CAAC,CAAC,EAAS,EAAE,CAAC,CAAC;IACb,EAAE,EAAE,QAAQ,MAAM,CAAC,CAAC,CAAC,EAAE;IACvB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,EAAE;IACT,UAAU,EAAE,EAAE;CACf,CAAC,CACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ExecutionContextBuilder } from './execution-context-builder.js';
|
|
2
|
+
/** `anExecutionContext().as(ada).ofTenant('acme').from('http').build()` */
|
|
3
|
+
export declare function anExecutionContext(): ExecutionContextBuilder;
|
|
4
|
+
//# sourceMappingURL=an-execution-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"an-execution-context.d.ts","sourceRoot":"","sources":["../../src/execution/an-execution-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAIzE,2EAA2E;AAC3E,wBAAgB,kBAAkB,IAAI,uBAAuB,CAE5D"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ExecutionContextBuilder } from './execution-context-builder.js';
|
|
2
|
+
const executionContextBuilder = new ExecutionContextBuilder();
|
|
3
|
+
/** `anExecutionContext().as(ada).ofTenant('acme').from('http').build()` */
|
|
4
|
+
export function anExecutionContext() {
|
|
5
|
+
return executionContextBuilder;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=an-execution-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"an-execution-context.js","sourceRoot":"","sources":["../../src/execution/an-execution-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,MAAM,uBAAuB,GAAG,IAAI,uBAAuB,EAAE,CAAC;AAE9D,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB;IAChC,OAAO,uBAAuB,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type Actor, type ExecutionContext, type ExecutionContextExtensionValues, type ExecutionOrigin, type Session } from '@ddd-ts-kit/kernel';
|
|
2
|
+
import type { Buildable } from '../builders/buildable.js';
|
|
3
|
+
import { Builder } from '../builders/builder.js';
|
|
4
|
+
import type { Defaults } from '../builders/defaults.js';
|
|
5
|
+
interface ExecutionContextProps {
|
|
6
|
+
correlationId: string;
|
|
7
|
+
causationId: string | undefined;
|
|
8
|
+
actor: Actor | undefined;
|
|
9
|
+
session: Session | undefined;
|
|
10
|
+
tenantId: string | undefined;
|
|
11
|
+
locale: string | undefined;
|
|
12
|
+
deadline: Date | undefined;
|
|
13
|
+
origin: ExecutionOrigin;
|
|
14
|
+
extensions: ExecutionContextExtensionValues;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* By default the work of a user of its own, of origin `test`, with a correlation id of its
|
|
18
|
+
* own: `correlation-1`, `correlation-2`... Built with `executionContext`, so the tenant is
|
|
19
|
+
* that of the actor unless said otherwise.
|
|
20
|
+
*/
|
|
21
|
+
export declare class ExecutionContextBuilder extends Builder<ExecutionContextProps, ExecutionContext> {
|
|
22
|
+
correlatedBy(correlationId: string): this;
|
|
23
|
+
causedBy(causationId: string): this;
|
|
24
|
+
/** The actor of the work. The session, if one was set, goes: it was another actor's. */
|
|
25
|
+
as(actor: Buildable<Actor>): this;
|
|
26
|
+
/** The session of the work, and its actor as the actor of the work. */
|
|
27
|
+
inSession(session: Buildable<Session>): this;
|
|
28
|
+
ofTenant(tenantId: string): this;
|
|
29
|
+
from(origin: ExecutionOrigin): this;
|
|
30
|
+
dueBy(deadline: Date): this;
|
|
31
|
+
inLocale(locale: string): this;
|
|
32
|
+
withExtensions(extensions: ExecutionContextExtensionValues): this;
|
|
33
|
+
protected defaults(): Defaults<ExecutionContextProps>;
|
|
34
|
+
protected construct(props: ExecutionContextProps): ExecutionContext;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=execution-context-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-context-builder.d.ts","sourceRoot":"","sources":["../../src/execution/execution-context-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,KAAK,EACV,KAAK,gBAAgB,EACrB,KAAK,+BAA+B,EACpC,KAAK,eAAe,EACpB,KAAK,OAAO,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAKxD,UAAU,qBAAqB;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,EAAE,IAAI,GAAG,SAAS,CAAC;IAC3B,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,EAAE,+BAA+B,CAAC;CAC7C;AAED;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,OAAO,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;IAC3F,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAExC;IAED,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAElC;IAED,wFAAwF;IACxF,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAEhC;IAED,uEAAuE;IACvE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAE3C;IAED,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE/B;IAED,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAElC;IAED,KAAK,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAE1B;IAED,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE7B;IAED,cAAc,CAAC,UAAU,EAAE,+BAA+B,GAAG,IAAI,CAEhE;IAED,SAAS,CAAC,QAAQ,IAAI,QAAQ,CAAC,qBAAqB,CAAC,CAYpD;IAED,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,qBAAqB,GAAG,gBAAgB,CAYlE;CACF"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { executionContext, } from '@ddd-ts-kit/kernel';
|
|
2
|
+
import { Builder } from '../builders/builder.js';
|
|
3
|
+
import { resolve } from '../builders/resolve.js';
|
|
4
|
+
import { sequence } from '../builders/sequence.js';
|
|
5
|
+
import { aTestUser } from './a-test-user.js';
|
|
6
|
+
/**
|
|
7
|
+
* By default the work of a user of its own, of origin `test`, with a correlation id of its
|
|
8
|
+
* own: `correlation-1`, `correlation-2`... Built with `executionContext`, so the tenant is
|
|
9
|
+
* that of the actor unless said otherwise.
|
|
10
|
+
*/
|
|
11
|
+
export class ExecutionContextBuilder extends Builder {
|
|
12
|
+
correlatedBy(correlationId) {
|
|
13
|
+
return this.with('correlationId', correlationId);
|
|
14
|
+
}
|
|
15
|
+
causedBy(causationId) {
|
|
16
|
+
return this.with('causationId', causationId);
|
|
17
|
+
}
|
|
18
|
+
/** The actor of the work. The session, if one was set, goes: it was another actor's. */
|
|
19
|
+
as(actor) {
|
|
20
|
+
return this.withMany({ actor, session: undefined });
|
|
21
|
+
}
|
|
22
|
+
/** The session of the work, and its actor as the actor of the work. */
|
|
23
|
+
inSession(session) {
|
|
24
|
+
return this.withMany({ session, actor: undefined });
|
|
25
|
+
}
|
|
26
|
+
ofTenant(tenantId) {
|
|
27
|
+
return this.with('tenantId', tenantId);
|
|
28
|
+
}
|
|
29
|
+
from(origin) {
|
|
30
|
+
return this.with('origin', origin);
|
|
31
|
+
}
|
|
32
|
+
dueBy(deadline) {
|
|
33
|
+
return this.with('deadline', deadline);
|
|
34
|
+
}
|
|
35
|
+
inLocale(locale) {
|
|
36
|
+
return this.with('locale', locale);
|
|
37
|
+
}
|
|
38
|
+
withExtensions(extensions) {
|
|
39
|
+
return this.with('extensions', extensions);
|
|
40
|
+
}
|
|
41
|
+
defaults() {
|
|
42
|
+
return {
|
|
43
|
+
correlationId: sequence('correlation'),
|
|
44
|
+
causationId: undefined,
|
|
45
|
+
actor: undefined,
|
|
46
|
+
session: undefined,
|
|
47
|
+
tenantId: undefined,
|
|
48
|
+
locale: undefined,
|
|
49
|
+
deadline: undefined,
|
|
50
|
+
origin: 'test',
|
|
51
|
+
extensions: {},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
construct(props) {
|
|
55
|
+
const { causationId, actor, session, tenantId, locale, deadline, ...required } = props;
|
|
56
|
+
return executionContext({
|
|
57
|
+
...required,
|
|
58
|
+
actor: actor ?? session?.actor ?? resolve(aTestUser),
|
|
59
|
+
...(causationId === undefined ? {} : { causationId }),
|
|
60
|
+
...(session === undefined ? {} : { session }),
|
|
61
|
+
...(tenantId === undefined ? {} : { tenantId }),
|
|
62
|
+
...(locale === undefined ? {} : { locale }),
|
|
63
|
+
...(deadline === undefined ? {} : { deadline }),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=execution-context-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-context-builder.js","sourceRoot":"","sources":["../../src/execution/execution-context-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ExecutionContext, ExecutionScope } from '@ddd-ts-kit/kernel';
|
|
2
|
+
import type { Resolvable } from '../builders/resolvable.js';
|
|
3
|
+
/**
|
|
4
|
+
* Runs a block inside an execution context, given as a value or as a builder:
|
|
5
|
+
* `await scoped(scope, anExecutionContext().as(ada), () => repository.save(order))`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function scoped<T>(scope: ExecutionScope, context: ExecutionContext | Resolvable<ExecutionContext>, work: () => T): T;
|
|
8
|
+
//# sourceMappingURL=scoped.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoped.d.ts","sourceRoot":"","sources":["../../src/execution/scoped.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAG5D;;;GAGG;AACH,wBAAgB,MAAM,CAAC,CAAC,EACtB,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,CAAC,EACxD,IAAI,EAAE,MAAM,CAAC,GACZ,CAAC,CAEH"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { resolve } from '../builders/resolve.js';
|
|
2
|
+
/**
|
|
3
|
+
* Runs a block inside an execution context, given as a value or as a builder:
|
|
4
|
+
* `await scoped(scope, anExecutionContext().as(ada), () => repository.save(order))`.
|
|
5
|
+
*/
|
|
6
|
+
export function scoped(scope, context, work) {
|
|
7
|
+
return scope.run(resolve(context), work);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=scoped.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoped.js","sourceRoot":"","sources":["../../src/execution/scoped.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD;;;GAGG;AACH,MAAM,UAAU,MAAM,CACpB,KAAqB,EACrB,OAAwD,EACxD,IAAa;IAEb,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Actor, AuthenticationMethod, AuthenticationStrength, Session, SessionExtensionValues } from '@ddd-ts-kit/kernel';
|
|
2
|
+
import type { Buildable } from '../builders/buildable.js';
|
|
3
|
+
import { Builder } from '../builders/builder.js';
|
|
4
|
+
import type { Defaults } from '../builders/defaults.js';
|
|
5
|
+
interface SessionProps {
|
|
6
|
+
id: string;
|
|
7
|
+
actor: Actor;
|
|
8
|
+
issuedAt: Date;
|
|
9
|
+
expiresAt: Date | undefined;
|
|
10
|
+
authenticationMethod: AuthenticationMethod;
|
|
11
|
+
authenticationStrength: AuthenticationStrength | undefined;
|
|
12
|
+
impersonatedBy: string | undefined;
|
|
13
|
+
locale: string | undefined;
|
|
14
|
+
timeZone: string | undefined;
|
|
15
|
+
extensions: SessionExtensionValues;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* By default the session of a user of its own (`user-1`, `user-2`...), opened with a password
|
|
19
|
+
* at the test epoch, never expiring, with an id of its own: `session-1`, `session-2`...
|
|
20
|
+
*/
|
|
21
|
+
export declare class SessionBuilder extends Builder<SessionProps, Session> {
|
|
22
|
+
of(actor: Buildable<Actor>): this;
|
|
23
|
+
identifiedBy(id: string): this;
|
|
24
|
+
issuedAt(instant: Date): this;
|
|
25
|
+
expiringAt(instant: Date): this;
|
|
26
|
+
authenticatedBy(method: AuthenticationMethod): this;
|
|
27
|
+
withSecondFactor(assuranceLevel?: string): this;
|
|
28
|
+
/** Support staff acting as the actor of the session. */
|
|
29
|
+
impersonatedBy(impersonatorId: string): this;
|
|
30
|
+
inLocale(locale: string): this;
|
|
31
|
+
inTimeZone(timeZone: string): this;
|
|
32
|
+
withExtensions(extensions: SessionExtensionValues): this;
|
|
33
|
+
protected defaults(): Defaults<SessionProps>;
|
|
34
|
+
protected construct(props: SessionProps): Session;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=session-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-builder.d.ts","sourceRoot":"","sources":["../../src/execution/session-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,oBAAoB,EACpB,sBAAsB,EACtB,OAAO,EACP,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAOxD,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,IAAI,CAAC;IACf,SAAS,EAAE,IAAI,GAAG,SAAS,CAAC;IAC5B,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,sBAAsB,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAC3D,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,UAAU,EAAE,sBAAsB,CAAC;CACpC;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC;IAChE,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAEhC;IAED,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAE7B;IAED,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,CAE5B;IAED,UAAU,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,CAE9B;IAED,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAElD;IAED,gBAAgB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAK9C;IAED,wDAAwD;IACxD,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAE3C;IAED,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE7B;IAED,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEjC;IAED,cAAc,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAEvD;IAED,SAAS,CAAC,QAAQ,IAAI,QAAQ,CAAC,YAAY,CAAC,CAa3C;IAED,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAWhD;CACF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Builder } from '../builders/builder.js';
|
|
2
|
+
import { sequence } from '../builders/sequence.js';
|
|
3
|
+
import { aTestUser } from './a-test-user.js';
|
|
4
|
+
/** The instant sessions are dated from by default, the one `createTestBuses` freezes its clock at. */
|
|
5
|
+
const TEST_EPOCH = new Date('2026-01-01T00:00:00.000Z');
|
|
6
|
+
/**
|
|
7
|
+
* By default the session of a user of its own (`user-1`, `user-2`...), opened with a password
|
|
8
|
+
* at the test epoch, never expiring, with an id of its own: `session-1`, `session-2`...
|
|
9
|
+
*/
|
|
10
|
+
export class SessionBuilder extends Builder {
|
|
11
|
+
of(actor) {
|
|
12
|
+
return this.with('actor', actor);
|
|
13
|
+
}
|
|
14
|
+
identifiedBy(id) {
|
|
15
|
+
return this.with('id', id);
|
|
16
|
+
}
|
|
17
|
+
issuedAt(instant) {
|
|
18
|
+
return this.with('issuedAt', instant);
|
|
19
|
+
}
|
|
20
|
+
expiringAt(instant) {
|
|
21
|
+
return this.with('expiresAt', instant);
|
|
22
|
+
}
|
|
23
|
+
authenticatedBy(method) {
|
|
24
|
+
return this.with('authenticationMethod', method);
|
|
25
|
+
}
|
|
26
|
+
withSecondFactor(assuranceLevel) {
|
|
27
|
+
return this.with('authenticationStrength', {
|
|
28
|
+
mfa: true,
|
|
29
|
+
...(assuranceLevel === undefined ? {} : { assuranceLevel }),
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/** Support staff acting as the actor of the session. */
|
|
33
|
+
impersonatedBy(impersonatorId) {
|
|
34
|
+
return this.with('impersonatedBy', impersonatorId);
|
|
35
|
+
}
|
|
36
|
+
inLocale(locale) {
|
|
37
|
+
return this.with('locale', locale);
|
|
38
|
+
}
|
|
39
|
+
inTimeZone(timeZone) {
|
|
40
|
+
return this.with('timeZone', timeZone);
|
|
41
|
+
}
|
|
42
|
+
withExtensions(extensions) {
|
|
43
|
+
return this.with('extensions', extensions);
|
|
44
|
+
}
|
|
45
|
+
defaults() {
|
|
46
|
+
return {
|
|
47
|
+
id: sequence('session'),
|
|
48
|
+
actor: aTestUser,
|
|
49
|
+
issuedAt: TEST_EPOCH,
|
|
50
|
+
expiresAt: undefined,
|
|
51
|
+
authenticationMethod: 'password',
|
|
52
|
+
authenticationStrength: undefined,
|
|
53
|
+
impersonatedBy: undefined,
|
|
54
|
+
locale: undefined,
|
|
55
|
+
timeZone: undefined,
|
|
56
|
+
extensions: {},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
construct(props) {
|
|
60
|
+
const { expiresAt, authenticationStrength, impersonatedBy, locale, timeZone, ...required } = props;
|
|
61
|
+
return {
|
|
62
|
+
...required,
|
|
63
|
+
...(expiresAt === undefined ? {} : { expiresAt }),
|
|
64
|
+
...(authenticationStrength === undefined ? {} : { authenticationStrength }),
|
|
65
|
+
...(impersonatedBy === undefined ? {} : { impersonatedBy }),
|
|
66
|
+
...(locale === undefined ? {} : { locale }),
|
|
67
|
+
...(timeZone === undefined ? {} : { timeZone }),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=session-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-builder.js","sourceRoot":"","sources":["../../src/execution/session-builder.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,sGAAsG;AACtG,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;AAexD;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,OAA8B;IAChE,EAAE,CAAC,KAAuB;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,YAAY,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,QAAQ,CAAC,OAAa;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,UAAU,CAAC,OAAa;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,eAAe,CAAC,MAA4B;QAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IAED,gBAAgB,CAAC,cAAuB;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;YACzC,GAAG,EAAE,IAAI;YACT,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC;SAC5D,CAAC,CAAC;IACL,CAAC;IAED,wDAAwD;IACxD,cAAc,CAAC,cAAsB;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;IACrD,CAAC;IAED,QAAQ,CAAC,MAAc;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,UAAU,CAAC,QAAgB;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,cAAc,CAAC,UAAkC;QAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAC7C,CAAC;IAES,QAAQ;QAChB,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,SAAS,CAAC;YACvB,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,SAAS;YACpB,oBAAoB,EAAE,UAAU;YAChC,sBAAsB,EAAE,SAAS;YACjC,cAAc,EAAE,SAAS;YACzB,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,EAAE;SACf,CAAC;IACJ,CAAC;IAES,SAAS,CAAC,KAAmB;QACrC,MAAM,EAAE,SAAS,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC;QAEnG,OAAO;YACL,GAAG,QAAQ;YACX,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;YACjD,GAAG,CAAC,sBAAsB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,CAAC;YAC3E,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC;YAC3D,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;YAC3C,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;SAChD,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type LocaleDefinition } from '@faker-js/faker';
|
|
2
|
+
import type { DataGenerator } from './data-generator.js';
|
|
3
|
+
export interface DataGeneratorOptions {
|
|
4
|
+
/** Default: the `TEST_SEED` environment variable, else a random seed. */
|
|
5
|
+
readonly seed?: number;
|
|
6
|
+
/** Locales by decreasing priority. Default: English. */
|
|
7
|
+
readonly locales?: readonly LocaleDefinition[];
|
|
8
|
+
/**
|
|
9
|
+
* The instant relative dates (`faker.date.recent()`) are computed from. Fixed by default,
|
|
10
|
+
* at 2026-01-01T00:00:00.000Z, so that a seed replays the dates too.
|
|
11
|
+
*/
|
|
12
|
+
readonly referenceDate?: Date;
|
|
13
|
+
}
|
|
14
|
+
export declare function createDataGenerator(options?: DataGeneratorOptions): DataGenerator;
|
|
15
|
+
//# sourceMappingURL=create-data-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-data-generator.d.ts","sourceRoot":"","sources":["../../src/faker/create-data-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC/C;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC;CAC/B;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB,GAAG,aAAa,CAQrF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Faker, base, en } from '@faker-js/faker';
|
|
2
|
+
export function createDataGenerator(options = {}) {
|
|
3
|
+
const seed = options.seed ?? seedFromEnvironment() ?? randomSeed();
|
|
4
|
+
const faker = new Faker({ locale: [...(options.locales ?? [en, base])] });
|
|
5
|
+
faker.setDefaultRefDate(options.referenceDate ?? DEFAULT_REFERENCE_DATE);
|
|
6
|
+
faker.seed(seed);
|
|
7
|
+
return { seed, faker, restart: () => void faker.seed(seed) };
|
|
8
|
+
}
|
|
9
|
+
const DEFAULT_REFERENCE_DATE = new Date('2026-01-01T00:00:00.000Z');
|
|
10
|
+
function seedFromEnvironment() {
|
|
11
|
+
const raw = process.env.TEST_SEED;
|
|
12
|
+
if (raw === undefined || raw === '') {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
const seed = Number(raw);
|
|
16
|
+
if (!Number.isSafeInteger(seed)) {
|
|
17
|
+
throw new TypeError(`TEST_SEED must be an integer, got "${raw}"`);
|
|
18
|
+
}
|
|
19
|
+
return seed;
|
|
20
|
+
}
|
|
21
|
+
function randomSeed() {
|
|
22
|
+
return Math.floor(Math.random() * 2 ** 31);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=create-data-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-data-generator.js","sourceRoot":"","sources":["../../src/faker/create-data-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAyB,MAAM,iBAAiB,CAAC;AAezE,MAAM,UAAU,mBAAmB,CAAC,OAAO,GAAyB,EAAE;IACpE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,mBAAmB,EAAE,IAAI,UAAU,EAAE,CAAC;IACnE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAE1E,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,aAAa,IAAI,sBAAsB,CAAC,CAAC;IACzE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,sBAAsB,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;AAEpE,SAAS,mBAAmB;IAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IAElC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAEzB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,SAAS,CAAC,sCAAsC,GAAG,GAAG,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DataGenerator } from './data-generator.js';
|
|
2
|
+
/**
|
|
3
|
+
* The generator every `generated` value is drawn from, so that one seed replays a whole test
|
|
4
|
+
* file. Created on first use, from `TEST_SEED` or a random seed.
|
|
5
|
+
*/
|
|
6
|
+
export declare function dataGenerator(): DataGenerator;
|
|
7
|
+
/** Makes `generated` draw from this generator from now on. */
|
|
8
|
+
export declare function useDataGenerator(generator: DataGenerator): DataGenerator;
|
|
9
|
+
//# sourceMappingURL=current-data-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"current-data-generator.d.ts","sourceRoot":"","sources":["../../src/faker/current-data-generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD;;;GAGG;AACH,wBAAgB,aAAa,IAAI,aAAa,CAI7C;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,aAAa,GAAG,aAAa,CAIxE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createDataGenerator } from './create-data-generator.js';
|
|
2
|
+
let current;
|
|
3
|
+
/**
|
|
4
|
+
* The generator every `generated` value is drawn from, so that one seed replays a whole test
|
|
5
|
+
* file. Created on first use, from `TEST_SEED` or a random seed.
|
|
6
|
+
*/
|
|
7
|
+
export function dataGenerator() {
|
|
8
|
+
current ??= createDataGenerator();
|
|
9
|
+
return current;
|
|
10
|
+
}
|
|
11
|
+
/** Makes `generated` draw from this generator from now on. */
|
|
12
|
+
export function useDataGenerator(generator) {
|
|
13
|
+
current = generator;
|
|
14
|
+
return generator;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=current-data-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"current-data-generator.js","sourceRoot":"","sources":["../../src/faker/current-data-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,IAAI,OAAkC,CAAC;AAEvC;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,KAAK,mBAAmB,EAAE,CAAC;IAElC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,gBAAgB,CAAC,SAAwB;IACvD,OAAO,GAAG,SAAS,CAAC;IAEpB,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Faker } from '@faker-js/faker';
|
|
2
|
+
export interface DataGenerator {
|
|
3
|
+
/** Always known, also when it was drawn at random: print it when a test fails. */
|
|
4
|
+
readonly seed: number;
|
|
5
|
+
readonly faker: Faker;
|
|
6
|
+
/** Starts the sequence again from the seed. */
|
|
7
|
+
restart(): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-generator.d.ts","sourceRoot":"","sources":["../../src/faker/data-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,WAAW,aAAa;IAC5B,kFAAkF;IAClF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,+CAA+C;IAC/C,OAAO,IAAI,IAAI,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-generator.js","sourceRoot":"","sources":["../../src/faker/data-generator.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Faker } from '@faker-js/faker';
|
|
2
|
+
import type { Resolvable } from '../builders/resolvable.js';
|
|
3
|
+
/**
|
|
4
|
+
* A builder default, or a `with` value, generated at each build:
|
|
5
|
+
* `email: generated((faker) => faker.internet.email())`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function generated<T>(produce: (faker: Faker) => T): Resolvable<T>;
|
|
8
|
+
//# sourceMappingURL=generated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../../src/faker/generated.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAG5D;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAExE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { lazy } from '../builders/lazy.js';
|
|
2
|
+
import { dataGenerator } from './current-data-generator.js';
|
|
3
|
+
/**
|
|
4
|
+
* A builder default, or a `with` value, generated at each build:
|
|
5
|
+
* `email: generated((faker) => faker.internet.email())`.
|
|
6
|
+
*/
|
|
7
|
+
export function generated(produce) {
|
|
8
|
+
return lazy(() => produce(dataGenerator().faker));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=generated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated.js","sourceRoot":"","sources":["../../src/faker/generated.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAI,OAA4B;IACvD,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay-hint.d.ts","sourceRoot":"","sources":["../../src/faker/replay-hint.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay-hint.js","sourceRoot":"","sources":["../../src/faker/replay-hint.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,wBAAwB,IAAI,qCAAqC,IAAI,GAAG,CAAC;AAClF,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** What `reportSeedOnFailure` needs from the runner; `beforeEach` and `onTestFailed` of vitest fit. */
|
|
2
|
+
export interface FailureReportingRunner {
|
|
3
|
+
beforeEach(setup: () => void): unknown;
|
|
4
|
+
onTestFailed(report: () => void): unknown;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Prints the seed under every failed test of the file, with the way to replay it:
|
|
8
|
+
* `reportSeedOnFailure({ beforeEach, onTestFailed })`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function reportSeedOnFailure(runner: FailureReportingRunner, log?: (message: string) => void): void;
|
|
11
|
+
//# sourceMappingURL=report-seed-on-failure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-seed-on-failure.d.ts","sourceRoot":"","sources":["../../src/faker/report-seed-on-failure.ts"],"names":[],"mappings":"AAGA,uGAAuG;AACvG,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,KAAK,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;IACvC,YAAY,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;CAC3C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,sBAAsB,EAC9B,GAAG,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAoB,GAC7C,IAAI,CAIN"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { dataGenerator } from './current-data-generator.js';
|
|
2
|
+
import { replayHint } from './replay-hint.js';
|
|
3
|
+
/**
|
|
4
|
+
* Prints the seed under every failed test of the file, with the way to replay it:
|
|
5
|
+
* `reportSeedOnFailure({ beforeEach, onTestFailed })`.
|
|
6
|
+
*/
|
|
7
|
+
export function reportSeedOnFailure(runner, log = console.error) {
|
|
8
|
+
runner.beforeEach(() => {
|
|
9
|
+
runner.onTestFailed(() => log(replayHint(dataGenerator().seed)));
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=report-seed-on-failure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-seed-on-failure.js","sourceRoot":"","sources":["../../src/faker/report-seed-on-failure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAQ9C;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAA8B,EAC9B,GAAG,GAA8B,OAAO,CAAC,KAAK;IAE9C,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;QACrB,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/faker.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { createDataGenerator, type DataGeneratorOptions } from './faker/create-data-generator.js';
|
|
2
|
+
export { dataGenerator, useDataGenerator } from './faker/current-data-generator.js';
|
|
3
|
+
export type { DataGenerator } from './faker/data-generator.js';
|
|
4
|
+
export { generated } from './faker/generated.js';
|
|
5
|
+
export { replayHint } from './faker/replay-hint.js';
|
|
6
|
+
export { reportSeedOnFailure, type FailureReportingRunner } from './faker/report-seed-on-failure.js';
|
|
7
|
+
//# sourceMappingURL=faker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faker.d.ts","sourceRoot":"","sources":["../src/faker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAClG,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACpF,YAAY,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,KAAK,sBAAsB,EAAE,MAAM,mCAAmC,CAAC"}
|
package/dist/faker.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { createDataGenerator } from './faker/create-data-generator.js';
|
|
2
|
+
export { dataGenerator, useDataGenerator } from './faker/current-data-generator.js';
|
|
3
|
+
export { generated } from './faker/generated.js';
|
|
4
|
+
export { replayHint } from './faker/replay-hint.js';
|
|
5
|
+
export { reportSeedOnFailure } from './faker/report-seed-on-failure.js';
|
|
6
|
+
//# sourceMappingURL=faker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faker.js","sourceRoot":"","sources":["../src/faker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAA6B,MAAM,kCAAkC,CAAC;AAClG,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAEpF,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAA+B,MAAM,mCAAmC,CAAC"}
|