pipework 0.8.2 → 0.8.4
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/CHANGELOG.md +10 -0
- package/dist/async/jobs/execute.d.ts +2 -0
- package/dist/async/jobs/execute.d.ts.map +1 -1
- package/dist/async/jobs/execute.js +17 -2
- package/dist/async/jobs/execute.js.map +1 -1
- package/dist/audit/query/cursor.d.ts +7 -0
- package/dist/audit/query/cursor.d.ts.map +1 -0
- package/dist/audit/query/cursor.js +25 -0
- package/dist/audit/query/cursor.js.map +1 -0
- package/dist/audit/query/index.d.ts +5 -0
- package/dist/audit/query/index.d.ts.map +1 -0
- package/dist/audit/query/index.js +3 -0
- package/dist/audit/query/index.js.map +1 -0
- package/dist/audit/query/query.d.ts +49 -0
- package/dist/audit/query/query.d.ts.map +1 -0
- package/dist/audit/query/query.js +119 -0
- package/dist/audit/query/query.js.map +1 -0
- package/dist/audit/schema/audit-record-fields.d.ts +15 -0
- package/dist/audit/schema/audit-record-fields.d.ts.map +1 -0
- package/dist/audit/schema/audit-record-fields.js +50 -0
- package/dist/audit/schema/audit-record-fields.js.map +1 -0
- package/dist/audit/schema/audit-record.d.ts +15 -0
- package/dist/audit/schema/audit-record.d.ts.map +1 -0
- package/dist/audit/schema/audit-record.js +12 -0
- package/dist/audit/schema/audit-record.js.map +1 -0
- package/dist/auth/tenant/scope.js +1 -1
- package/dist/auth/tenant/scope.js.map +1 -1
- package/dist/auth/tenant/scoped-db.d.ts.map +1 -1
- package/dist/auth/tenant/scoped-db.js +1 -2
- package/dist/auth/tenant/scoped-db.js.map +1 -1
- package/dist/cli/commands/check.d.ts +4 -0
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +181 -14
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/codemod.d.ts +6 -0
- package/dist/cli/commands/codemod.d.ts.map +1 -0
- package/dist/cli/commands/codemod.js +63 -0
- package/dist/cli/commands/codemod.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +9 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/config/load.d.ts +23 -0
- package/dist/core/config/load.d.ts.map +1 -1
- package/dist/core/config/load.js +8 -0
- package/dist/core/config/load.js.map +1 -1
- package/dist/core/config/namespace.d.ts +19 -0
- package/dist/core/config/namespace.d.ts.map +1 -1
- package/dist/core/config/schema.d.ts +41 -0
- package/dist/core/config/schema.d.ts.map +1 -1
- package/dist/core/config/schema.js +27 -0
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/logging/logger.d.ts +3 -1
- package/dist/core/logging/logger.d.ts.map +1 -1
- package/dist/core/logging/logger.js +2 -2
- package/dist/core/logging/logger.js.map +1 -1
- package/dist/core/pipework.d.ts +2 -2
- package/dist/core/pipework.d.ts.map +1 -1
- package/dist/data/db/bulk-set.js +1 -1
- package/dist/data/db/bulk-set.js.map +1 -1
- package/dist/data/db/composed.js +1 -1
- package/dist/data/db/composed.js.map +1 -1
- package/dist/data/db/db.d.ts +10 -0
- package/dist/data/db/db.d.ts.map +1 -1
- package/dist/data/db/db.js +12 -0
- package/dist/data/db/db.js.map +1 -1
- package/dist/data/db/filter.d.ts +42 -43
- package/dist/data/db/filter.d.ts.map +1 -1
- package/dist/data/db/filter.js +7 -6
- package/dist/data/db/filter.js.map +1 -1
- package/dist/data/db/namespace.d.ts +90 -82
- package/dist/data/db/namespace.d.ts.map +1 -1
- package/dist/data/db/namespace.js +21 -5
- package/dist/data/db/namespace.js.map +1 -1
- package/dist/data/migrate/post-process.d.ts +2 -1
- package/dist/data/migrate/post-process.d.ts.map +1 -1
- package/dist/data/migrate/post-process.js +2 -1
- package/dist/data/migrate/post-process.js.map +1 -1
- package/dist/data/temporal/definition-queries.js +1 -1
- package/dist/data/temporal/definition-queries.js.map +1 -1
- package/dist/data/temporal/query.js +1 -1
- package/dist/data/temporal/query.js.map +1 -1
- package/dist/data/temporal/resolve.js +1 -1
- package/dist/data/temporal/resolve.js.map +1 -1
- package/dist/data/write/audit/actor.d.ts +3 -0
- package/dist/data/write/audit/actor.d.ts.map +1 -0
- package/dist/data/write/audit/actor.js +15 -0
- package/dist/data/write/audit/actor.js.map +1 -0
- package/dist/data/write/audit/audit-columns.d.ts +6 -0
- package/dist/data/write/audit/audit-columns.d.ts.map +1 -0
- package/dist/data/write/audit/audit-columns.js +15 -0
- package/dist/data/write/audit/audit-columns.js.map +1 -0
- package/dist/data/write/audit/audit-select.d.ts +28 -0
- package/dist/data/write/audit/audit-select.d.ts.map +1 -0
- package/dist/data/write/audit/audit-select.js +49 -0
- package/dist/data/write/audit/audit-select.js.map +1 -0
- package/dist/data/write/audit/cte-compile.d.ts +7 -0
- package/dist/data/write/audit/cte-compile.d.ts.map +1 -0
- package/dist/data/write/audit/cte-compile.js +23 -0
- package/dist/data/write/audit/cte-compile.js.map +1 -0
- package/dist/data/write/audit/final-select.d.ts +4 -0
- package/dist/data/write/audit/final-select.d.ts.map +1 -0
- package/dist/data/write/audit/final-select.js +28 -0
- package/dist/data/write/audit/final-select.js.map +1 -0
- package/dist/data/write/audit/primary-key.d.ts +7 -0
- package/dist/data/write/audit/primary-key.d.ts.map +1 -0
- package/dist/data/write/audit/primary-key.js +32 -0
- package/dist/data/write/audit/primary-key.js.map +1 -0
- package/dist/data/write/audit/projection.d.ts +11 -0
- package/dist/data/write/audit/projection.d.ts.map +1 -0
- package/dist/data/write/audit/projection.js +37 -0
- package/dist/data/write/audit/projection.js.map +1 -0
- package/dist/data/write/audit/read-touches.d.ts +10 -0
- package/dist/data/write/audit/read-touches.d.ts.map +1 -0
- package/dist/data/write/audit/read-touches.js +63 -0
- package/dist/data/write/audit/read-touches.js.map +1 -0
- package/dist/data/write/audit/verb-delete.d.ts +7 -0
- package/dist/data/write/audit/verb-delete.d.ts.map +1 -0
- package/dist/data/write/audit/verb-delete.js +53 -0
- package/dist/data/write/audit/verb-delete.js.map +1 -0
- package/dist/data/write/audit/verb-insert.d.ts +7 -0
- package/dist/data/write/audit/verb-insert.d.ts.map +1 -0
- package/dist/data/write/audit/verb-insert.js +28 -0
- package/dist/data/write/audit/verb-insert.js.map +1 -0
- package/dist/data/write/audit/verb-update.d.ts +7 -0
- package/dist/data/write/audit/verb-update.d.ts.map +1 -0
- package/dist/data/write/audit/verb-update.js +52 -0
- package/dist/data/write/audit/verb-update.js.map +1 -0
- package/dist/data/write/audit/verb-upsert.d.ts +7 -0
- package/dist/data/write/audit/verb-upsert.d.ts.map +1 -0
- package/dist/data/write/audit/verb-upsert.js +81 -0
- package/dist/data/write/audit/verb-upsert.js.map +1 -0
- package/dist/data/write/delete.d.ts +15 -0
- package/dist/data/write/delete.d.ts.map +1 -0
- package/dist/data/write/delete.js +25 -0
- package/dist/data/write/delete.js.map +1 -0
- package/dist/data/write/execute.d.ts +3 -0
- package/dist/data/write/execute.d.ts.map +1 -0
- package/dist/data/write/execute.js +162 -0
- package/dist/data/write/execute.js.map +1 -0
- package/dist/data/write/index.d.ts +6 -0
- package/dist/data/write/index.d.ts.map +1 -0
- package/dist/data/write/index.js +10 -0
- package/dist/data/write/index.js.map +1 -0
- package/dist/data/write/insert.d.ts +18 -0
- package/dist/data/write/insert.d.ts.map +1 -0
- package/dist/data/write/insert.js +29 -0
- package/dist/data/write/insert.js.map +1 -0
- package/dist/data/write/state.d.ts +29 -0
- package/dist/data/write/state.d.ts.map +1 -0
- package/dist/data/write/state.js +9 -0
- package/dist/data/write/state.js.map +1 -0
- package/dist/data/write/update.d.ts +17 -0
- package/dist/data/write/update.d.ts.map +1 -0
- package/dist/data/write/update.js +39 -0
- package/dist/data/write/update.js.map +1 -0
- package/dist/data/write/upsert.d.ts +21 -0
- package/dist/data/write/upsert.d.ts.map +1 -0
- package/dist/data/write/upsert.js +42 -0
- package/dist/data/write/upsert.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/infra/audit/namespace.d.ts +3 -0
- package/dist/infra/audit/namespace.d.ts.map +1 -1
- package/dist/infra/audit/namespace.js +3 -0
- package/dist/infra/audit/namespace.js.map +1 -1
- package/dist/lint/config.d.ts +4 -2
- package/dist/lint/config.d.ts.map +1 -1
- package/dist/lint/config.js +9 -5
- package/dist/lint/config.js.map +1 -1
- package/dist/lint/index.d.ts +2 -1
- package/dist/lint/index.d.ts.map +1 -1
- package/dist/lint/index.js +1 -0
- package/dist/lint/index.js.map +1 -1
- package/dist/lint/resolver.d.ts +16 -0
- package/dist/lint/resolver.d.ts.map +1 -0
- package/dist/lint/resolver.js +61 -0
- package/dist/lint/resolver.js.map +1 -0
- package/dist/request/context/create.d.ts +4 -0
- package/dist/request/context/create.d.ts.map +1 -1
- package/dist/request/context/create.js +3 -0
- package/dist/request/context/create.js.map +1 -1
- package/dist/request/context/types.d.ts +3 -0
- package/dist/request/context/types.d.ts.map +1 -1
- package/dist/request/http/middleware.d.ts.map +1 -1
- package/dist/request/http/middleware.js +30 -0
- package/dist/request/http/middleware.js.map +1 -1
- package/dist/request/http/server.d.ts.map +1 -1
- package/dist/request/http/server.js +6 -1
- package/dist/request/http/server.js.map +1 -1
- package/dist/test/context.d.ts.map +1 -1
- package/dist/test/context.js +43 -2
- package/dist/test/context.js.map +1 -1
- package/dist/test/index.d.ts +1 -1
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +1 -1
- package/dist/test/index.js.map +1 -1
- package/dist/test/vitest-workspace.d.ts +15 -2
- package/dist/test/vitest-workspace.d.ts.map +1 -1
- package/dist/test/vitest-workspace.js +60 -7
- package/dist/test/vitest-workspace.js.map +1 -1
- package/dist/trace/cardinality/analyze.d.ts +26 -0
- package/dist/trace/cardinality/analyze.d.ts.map +1 -0
- package/dist/trace/cardinality/analyze.js +129 -0
- package/dist/trace/cardinality/analyze.js.map +1 -0
- package/dist/trace/cardinality/branch-context.d.ts +13 -0
- package/dist/trace/cardinality/branch-context.d.ts.map +1 -0
- package/dist/trace/cardinality/branch-context.js +182 -0
- package/dist/trace/cardinality/branch-context.js.map +1 -0
- package/dist/trace/cardinality/check.d.ts +4 -0
- package/dist/trace/cardinality/check.d.ts.map +1 -0
- package/dist/trace/cardinality/check.js +29 -0
- package/dist/trace/cardinality/check.js.map +1 -0
- package/dist/trace/cardinality/classify-edge.d.ts +31 -0
- package/dist/trace/cardinality/classify-edge.d.ts.map +1 -0
- package/dist/trace/cardinality/classify-edge.js +27 -0
- package/dist/trace/cardinality/classify-edge.js.map +1 -0
- package/dist/trace/cardinality/structural-max.d.ts +14 -0
- package/dist/trace/cardinality/structural-max.d.ts.map +1 -0
- package/dist/trace/cardinality/structural-max.js +83 -0
- package/dist/trace/cardinality/structural-max.js.map +1 -0
- package/dist/trace/check/coverage-check.d.ts +20 -0
- package/dist/trace/check/coverage-check.d.ts.map +1 -0
- package/dist/trace/check/coverage-check.js +146 -0
- package/dist/trace/check/coverage-check.js.map +1 -0
- package/dist/trace/check/flow-check.d.ts +13 -0
- package/dist/trace/check/flow-check.d.ts.map +1 -0
- package/dist/trace/check/flow-check.js +82 -0
- package/dist/trace/check/flow-check.js.map +1 -0
- package/dist/trace/check/flow-step-site.d.ts +62 -0
- package/dist/trace/check/flow-step-site.d.ts.map +1 -0
- package/dist/trace/check/flow-step-site.js +142 -0
- package/dist/trace/check/flow-step-site.js.map +1 -0
- package/dist/trace/check/io-pattern.d.ts +14 -0
- package/dist/trace/check/io-pattern.d.ts.map +1 -0
- package/dist/trace/check/io-pattern.js +113 -0
- package/dist/trace/check/io-pattern.js.map +1 -0
- package/dist/trace/codemod/add-cardinality.d.ts +38 -0
- package/dist/trace/codemod/add-cardinality.d.ts.map +1 -0
- package/dist/trace/codemod/add-cardinality.js +106 -0
- package/dist/trace/codemod/add-cardinality.js.map +1 -0
- package/dist/trace/codemod/run.d.ts +25 -0
- package/dist/trace/codemod/run.d.ts.map +1 -0
- package/dist/trace/codemod/run.js +47 -0
- package/dist/trace/codemod/run.js.map +1 -0
- package/dist/trace/entry/close-trace.d.ts +7 -0
- package/dist/trace/entry/close-trace.d.ts.map +1 -0
- package/dist/trace/entry/close-trace.js +54 -0
- package/dist/trace/entry/close-trace.js.map +1 -0
- package/dist/trace/entry/finalize-trace.d.ts +5 -0
- package/dist/trace/entry/finalize-trace.d.ts.map +1 -0
- package/dist/trace/entry/finalize-trace.js +23 -0
- package/dist/trace/entry/finalize-trace.js.map +1 -0
- package/dist/trace/entry/open-trace.d.ts +26 -0
- package/dist/trace/entry/open-trace.d.ts.map +1 -0
- package/dist/trace/entry/open-trace.js +75 -0
- package/dist/trace/entry/open-trace.js.map +1 -0
- package/dist/trace/entry/parent-trace.d.ts +4 -0
- package/dist/trace/entry/parent-trace.d.ts.map +1 -0
- package/dist/trace/entry/parent-trace.js +10 -0
- package/dist/trace/entry/parent-trace.js.map +1 -0
- package/dist/trace/entry/parse-traceparent.d.ts +8 -0
- package/dist/trace/entry/parse-traceparent.d.ts.map +1 -0
- package/dist/trace/entry/parse-traceparent.js +37 -0
- package/dist/trace/entry/parse-traceparent.js.map +1 -0
- package/dist/trace/entry/trace-context.d.ts +19 -0
- package/dist/trace/entry/trace-context.d.ts.map +1 -0
- package/dist/trace/entry/trace-context.js +5 -0
- package/dist/trace/entry/trace-context.js.map +1 -0
- package/dist/trace/entry/tracing-enabled.d.ts +4 -0
- package/dist/trace/entry/tracing-enabled.d.ts.map +1 -0
- package/dist/trace/entry/tracing-enabled.js +8 -0
- package/dist/trace/entry/tracing-enabled.js.map +1 -0
- package/dist/trace/partition/plan.d.ts +2 -0
- package/dist/trace/partition/plan.d.ts.map +1 -1
- package/dist/trace/partition/plan.js +8 -1
- package/dist/trace/partition/plan.js.map +1 -1
- package/dist/trace/partition/schedule.d.ts.map +1 -1
- package/dist/trace/partition/schedule.js +6 -4
- package/dist/trace/partition/schedule.js.map +1 -1
- package/dist/trace/partition/startup-hook.d.ts.map +1 -1
- package/dist/trace/partition/startup-hook.js +6 -2
- package/dist/trace/partition/startup-hook.js.map +1 -1
- package/dist/trace/partition/tables.d.ts +1 -1
- package/dist/trace/partition/tables.d.ts.map +1 -1
- package/dist/trace/partition/tables.js +13 -5
- package/dist/trace/partition/tables.js.map +1 -1
- package/dist/trace/runtime/expire-stale-traces.d.ts +10 -0
- package/dist/trace/runtime/expire-stale-traces.d.ts.map +1 -0
- package/dist/trace/runtime/expire-stale-traces.js +36 -0
- package/dist/trace/runtime/expire-stale-traces.js.map +1 -0
- package/dist/trace/runtime/flow-step.d.ts +6 -0
- package/dist/trace/runtime/flow-step.d.ts.map +1 -0
- package/dist/trace/runtime/flow-step.js +122 -0
- package/dist/trace/runtime/flow-step.js.map +1 -0
- package/dist/trace/runtime/flush-steps.d.ts +5 -0
- package/dist/trace/runtime/flush-steps.d.ts.map +1 -0
- package/dist/trace/runtime/flush-steps.js +23 -0
- package/dist/trace/runtime/flush-steps.js.map +1 -0
- package/dist/trace/runtime/step-buffer.d.ts +139 -0
- package/dist/trace/runtime/step-buffer.d.ts.map +1 -0
- package/dist/trace/runtime/step-buffer.js +140 -0
- package/dist/trace/runtime/step-buffer.js.map +1 -0
- package/dist/trace/runtime/step-error.d.ts +8 -0
- package/dist/trace/runtime/step-error.d.ts.map +1 -0
- package/dist/trace/runtime/step-error.js +13 -0
- package/dist/trace/runtime/step-error.js.map +1 -0
- package/dist/trace/runtime/step-meta.d.ts +48 -0
- package/dist/trace/runtime/step-meta.d.ts.map +1 -0
- package/dist/trace/runtime/step-meta.js +6 -0
- package/dist/trace/runtime/step-meta.js.map +1 -0
- package/dist/trace/runtime/thenable.d.ts +3 -0
- package/dist/trace/runtime/thenable.d.ts.map +1 -0
- package/dist/trace/runtime/thenable.js +12 -0
- package/dist/trace/runtime/thenable.js.map +1 -0
- package/dist/trace/runtime/truncate-trace.d.ts +5 -0
- package/dist/trace/runtime/truncate-trace.d.ts.map +1 -0
- package/dist/trace/runtime/truncate-trace.js +44 -0
- package/dist/trace/runtime/truncate-trace.js.map +1 -0
- package/dist/trace/schema/trace-fields.d.ts +1 -1
- package/dist/trace/schema/trace-retained.d.ts +1 -1
- package/dist/trace/schema/trace.d.ts +1 -1
- package/dist/trace/transformer/build-meta-literal.d.ts +3 -0
- package/dist/trace/transformer/build-meta-literal.d.ts.map +1 -0
- package/dist/trace/transformer/build-meta-literal.js +8 -0
- package/dist/trace/transformer/build-meta-literal.js.map +1 -0
- package/dist/trace/transformer/find-flow-step-sites.d.ts +24 -0
- package/dist/trace/transformer/find-flow-step-sites.d.ts.map +1 -0
- package/dist/trace/transformer/find-flow-step-sites.js +69 -0
- package/dist/trace/transformer/find-flow-step-sites.js.map +1 -0
- package/dist/trace/transformer/inject-flow-step-import.d.ts +3 -0
- package/dist/trace/transformer/inject-flow-step-import.d.ts.map +1 -0
- package/dist/trace/transformer/inject-flow-step-import.js +28 -0
- package/dist/trace/transformer/inject-flow-step-import.js.map +1 -0
- package/dist/trace/transformer/transform-error.d.ts +8 -0
- package/dist/trace/transformer/transform-error.d.ts.map +1 -0
- package/dist/trace/transformer/transform-error.js +5 -0
- package/dist/trace/transformer/transform-error.js.map +1 -0
- package/dist/trace/transformer/transform-flow-steps.d.ts +12 -0
- package/dist/trace/transformer/transform-flow-steps.d.ts.map +1 -0
- package/dist/trace/transformer/transform-flow-steps.js +85 -0
- package/dist/trace/transformer/transform-flow-steps.js.map +1 -0
- package/dist/trace/transformer/wrap-function-declaration.d.ts +3 -0
- package/dist/trace/transformer/wrap-function-declaration.d.ts.map +1 -0
- package/dist/trace/transformer/wrap-function-declaration.js +28 -0
- package/dist/trace/transformer/wrap-function-declaration.js.map +1 -0
- package/dist/trace/transformer/wrap-variable-declaration.d.ts +3 -0
- package/dist/trace/transformer/wrap-variable-declaration.d.ts.map +1 -0
- package/dist/trace/transformer/wrap-variable-declaration.js +30 -0
- package/dist/trace/transformer/wrap-variable-declaration.js.map +1 -0
- package/dist/workspace/generate.d.ts.map +1 -1
- package/dist/workspace/generate.js +5 -8
- package/dist/workspace/generate.js.map +1 -1
- package/package.json +21 -6
|
@@ -6,12 +6,25 @@ import { resolveModules } from '../workspace/discover.js';
|
|
|
6
6
|
import { pipework as pipeworkPlugin } from './vitest-plugin.js';
|
|
7
7
|
const DEFAULT_TEST_TIMEOUT = 30_000;
|
|
8
8
|
const DEFAULT_HOOK_TIMEOUT = 60_000;
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Build the full vitest UserConfig from pipework.config.ts.
|
|
11
|
+
*
|
|
12
|
+
* The generated `vitest.config.ts` is a single line: `defineConfig(await resolveVitestConfig())`.
|
|
13
|
+
* Everything that would normally live in `vitest.config.ts` — projects, reporters, sequencer,
|
|
14
|
+
* outer-level Vite options — flows through `pipework.config.ts` so pipework remains the single
|
|
15
|
+
* source of truth and the generated file stays byte-stable for `pipework check`.
|
|
16
|
+
*
|
|
17
|
+
* Shape:
|
|
18
|
+
* - `vitest.extra.test.*` → spread into `test` (reporters, sequence, cache, bail, ...)
|
|
19
|
+
* - `vitest.extra.*` (anything outside `test`) → spread at the top level (resolve, plugins, ...)
|
|
20
|
+
* - `test.projects` is owned by pipework — defining it in `extra` throws.
|
|
21
|
+
*/
|
|
22
|
+
export async function resolveVitestConfig(cwd) {
|
|
10
23
|
const start = cwd ?? process.cwd();
|
|
11
24
|
const configPath = findConfig(start);
|
|
12
25
|
if (configPath === null) {
|
|
13
26
|
throw new Error(`[pipework] No pipework.config.ts found in ${start} or any parent directory.\n\n` +
|
|
14
|
-
' The vitest
|
|
27
|
+
' The vitest config resolver needs pipework.config.ts to discover modules.\n' +
|
|
15
28
|
' Create one with `pipework init`.\n');
|
|
16
29
|
}
|
|
17
30
|
const configDir = dirname(configPath);
|
|
@@ -29,18 +42,58 @@ export async function resolveVitestWorkspace(cwd) {
|
|
|
29
42
|
}
|
|
30
43
|
catch (err) {
|
|
31
44
|
const message = err instanceof Error ? err.message : String(err);
|
|
32
|
-
throw new Error(`[pipework] Failed to load pipework.config.ts for vitest
|
|
45
|
+
throw new Error(`[pipework] Failed to load pipework.config.ts for vitest config resolution.\n\n` +
|
|
33
46
|
` ${message}\n\n` +
|
|
34
47
|
' This usually means database environment variables are missing.\n' +
|
|
35
48
|
' Ensure your .env file exists and contains DATABASE_URL (or equivalent).\n\n' +
|
|
36
|
-
' The vitest
|
|
49
|
+
' The vitest config resolver imports your config to read module definitions.\n' +
|
|
37
50
|
' It does not connect to any database.\n');
|
|
38
51
|
}
|
|
39
52
|
const blueprint = manifold.config.raw;
|
|
40
|
-
if (blueprint.vitest === undefined)
|
|
41
|
-
return [];
|
|
53
|
+
if (blueprint.vitest === undefined) {
|
|
54
|
+
return { test: { projects: [] } };
|
|
55
|
+
}
|
|
42
56
|
const resolvedModules = resolveModules(blueprint.modules, configDir);
|
|
43
|
-
|
|
57
|
+
const projects = resolveVitestModules(blueprint.vitest, resolvedModules, configDir);
|
|
58
|
+
return mergeExtraWithProjects(blueprint.vitest.extra, projects);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Merge consumer-supplied top-level vitest config (from `vitest.extra`) with the
|
|
62
|
+
* pipework-controlled `test.projects`. Splits `extra` into outer-level keys (Vite-level:
|
|
63
|
+
* `resolve`, `plugins`, ...) and `test`-level keys (`reporters`, `sequence`, ...),
|
|
64
|
+
* spreading each at the right depth. Throws if the consumer tries to override `projects`.
|
|
65
|
+
*/
|
|
66
|
+
function mergeExtraWithProjects(extra, projects) {
|
|
67
|
+
if (extra === undefined) {
|
|
68
|
+
return { test: { projects } };
|
|
69
|
+
}
|
|
70
|
+
const { test: extraTest, ...extraOuter } = extra;
|
|
71
|
+
if (extraTest !== undefined && (typeof extraTest !== 'object' || extraTest === null || Array.isArray(extraTest))) {
|
|
72
|
+
throw new Error(`[pipework] vitest.extra.test must be an object — got ${describe(extraTest)}.\n\n` +
|
|
73
|
+
' vitest.extra mirrors the shape of `defineConfig({...})`:\n' +
|
|
74
|
+
' - test-level keys (reporters, sequence, ...) go under `extra.test`\n' +
|
|
75
|
+
' - outer Vite keys (resolve, plugins, ...) go at the top of `extra`\n');
|
|
76
|
+
}
|
|
77
|
+
const testRecord = (extraTest ?? {});
|
|
78
|
+
if ('projects' in testRecord) {
|
|
79
|
+
throw new Error(`[pipework] vitest.extra.test.projects is owned by pipework — \n` +
|
|
80
|
+
' define modules in `vitest.modules` (in pipework.config.ts) instead.\n' +
|
|
81
|
+
' The generated vitest.config.ts wires `projects` through `resolveVitestConfig()`.\n');
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
...extraOuter,
|
|
85
|
+
test: {
|
|
86
|
+
...testRecord,
|
|
87
|
+
projects,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function describe(v) {
|
|
92
|
+
if (v === null)
|
|
93
|
+
return 'null';
|
|
94
|
+
if (Array.isArray(v))
|
|
95
|
+
return 'array';
|
|
96
|
+
return typeof v;
|
|
44
97
|
}
|
|
45
98
|
export function resolveVitestModules(vitestConfig, resolvedModules, configDir) {
|
|
46
99
|
// A repo with no declared modules is a single-package project: the repo root
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest-workspace.js","sourceRoot":"","sources":["../../src/test/vitest-workspace.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vitest-workspace.js","sourceRoot":"","sources":["../../src/test/vitest-workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { FlowStepSite } from '../check/flow-step-site.js';
|
|
2
|
+
import { type EdgeClassification } from './classify-edge.js';
|
|
3
|
+
/** A `@flow_step` site paired with the source path it was found in. */
|
|
4
|
+
export interface AnalyzerEntry {
|
|
5
|
+
/** Source path relative to `cwd` — the node-id prefix and the diagnostic file. */
|
|
6
|
+
readonly file: string;
|
|
7
|
+
readonly site: FlowStepSite;
|
|
8
|
+
}
|
|
9
|
+
export interface CardinalityViolation {
|
|
10
|
+
readonly rule: string;
|
|
11
|
+
readonly file: string;
|
|
12
|
+
readonly line: number;
|
|
13
|
+
readonly message: string;
|
|
14
|
+
}
|
|
15
|
+
export interface CardinalityResult {
|
|
16
|
+
/** Structural verdict for every `@downstream` edge across the input. */
|
|
17
|
+
readonly classifications: readonly EdgeClassification[];
|
|
18
|
+
readonly violations: readonly CardinalityViolation[];
|
|
19
|
+
/** The Q7 step cap: longest chain of `step` edges through the flow graph. */
|
|
20
|
+
readonly structuralMax: number;
|
|
21
|
+
/** Count of flow-step sites the analyzer classified. */
|
|
22
|
+
readonly analyzed: number;
|
|
23
|
+
}
|
|
24
|
+
/** Classifies every `@downstream` edge across `entries` and derives the step cap. */
|
|
25
|
+
export declare function analyzeCardinality(entries: readonly AnalyzerEntry[]): CardinalityResult;
|
|
26
|
+
//# sourceMappingURL=analyze.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/trace/cardinality/analyze.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAI1E,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC5B,kFAAkF;IAClF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,wEAAwE;IACxE,QAAQ,CAAC,eAAe,EAAE,SAAS,kBAAkB,EAAE,CAAA;IACvD,QAAQ,CAAC,UAAU,EAAE,SAAS,oBAAoB,EAAE,CAAA;IACpD,6EAA6E;IAC7E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAOD,qFAAqF;AACrF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,GAAG,iBAAiB,CA4CvF"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// The cardinality analyzer. Given the `@flow_step` sites of a source set, it
|
|
2
|
+
// classifies every `@downstream` edge structurally (classify-edge.ts), reports
|
|
3
|
+
// the edges whose declared cardinality disagrees with the structure or whose
|
|
4
|
+
// cardinality could not be resolved, and derives the Q7 `structuralMax` step
|
|
5
|
+
// cap from the resulting graph. Pure over its inputs — file I/O lives in
|
|
6
|
+
// check.ts. See PLAN.tracing.md, component 3.
|
|
7
|
+
import { classifyEdge } from './classify-edge.js';
|
|
8
|
+
import { computeStructuralMax } from './structural-max.js';
|
|
9
|
+
/** The `path:symbol` flow-graph node id — the single place ids are composed. */
|
|
10
|
+
function nodeId(path, symbol) {
|
|
11
|
+
return `${path}:${symbol}`;
|
|
12
|
+
}
|
|
13
|
+
/** Classifies every `@downstream` edge across `entries` and derives the step cap. */
|
|
14
|
+
export function analyzeCardinality(entries) {
|
|
15
|
+
const classifications = [];
|
|
16
|
+
const violations = [];
|
|
17
|
+
const nodeIds = [];
|
|
18
|
+
const stepEdges = [];
|
|
19
|
+
// Keyed `${from}\n${target}` so a `step`-cycle violation can recover the
|
|
20
|
+
// exact classification of the edge that closes the ring.
|
|
21
|
+
const stepEdgeIndex = new Map();
|
|
22
|
+
for (const { file, site } of entries) {
|
|
23
|
+
// An orphan annotation documents no function, and an invalid one never
|
|
24
|
+
// parsed into edges — both are the `flow` check's diagnostics, not this
|
|
25
|
+
// one's. Nothing here to classify.
|
|
26
|
+
if (site.subject.node === null)
|
|
27
|
+
continue;
|
|
28
|
+
if (site.annotation.kind !== 'annotation')
|
|
29
|
+
continue;
|
|
30
|
+
const from = nodeId(file, site.subject.name);
|
|
31
|
+
nodeIds.push(from);
|
|
32
|
+
for (const edge of site.annotation.annotation.downstream) {
|
|
33
|
+
const classification = classifyEdge(file, site, edge);
|
|
34
|
+
classifications.push(classification);
|
|
35
|
+
const violation = violationFor(classification, site);
|
|
36
|
+
if (violation !== null)
|
|
37
|
+
violations.push(violation);
|
|
38
|
+
if (classification.structural === 'step') {
|
|
39
|
+
const to = nodeId(edge.path, edge.symbol);
|
|
40
|
+
stepEdges.push({ from, to });
|
|
41
|
+
stepEdgeIndex.set(`${from}\n${to}`, classification);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const { value, cycles } = computeStructuralMax(nodeIds, stepEdges);
|
|
46
|
+
for (const cycle of cycles) {
|
|
47
|
+
violations.push(cycleViolation(cycle, stepEdgeIndex));
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
classifications,
|
|
51
|
+
violations,
|
|
52
|
+
structuralMax: value,
|
|
53
|
+
analyzed: nodeIds.length,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/** The violation a single classified edge raises, or `null` when it is sound. */
|
|
57
|
+
function violationFor(classification, site) {
|
|
58
|
+
const { edge, structural, branchKind } = classification;
|
|
59
|
+
const target = nodeId(edge.path, edge.symbol);
|
|
60
|
+
const file = classification.file;
|
|
61
|
+
const line = classification.line ?? site.commentLine;
|
|
62
|
+
if (edge.cardinality === null) {
|
|
63
|
+
// A missing cardinality the analyzer *can* resolve is the `flow` check's
|
|
64
|
+
// `missing-cardinality` warning, and the classification is what the codemod
|
|
65
|
+
// consumes to fill it in. Only an unresolved one is this check's to raise.
|
|
66
|
+
if (structural !== 'ambiguous')
|
|
67
|
+
return null;
|
|
68
|
+
return {
|
|
69
|
+
rule: 'cardinality/unannotated-ambiguity',
|
|
70
|
+
file,
|
|
71
|
+
line,
|
|
72
|
+
message: `@downstream ${target} has no cardinality and the analyzer cannot locate the call — `
|
|
73
|
+
+ `${edge.symbol} is reached through indirection (a bare callback, dynamic dispatch). `
|
|
74
|
+
+ `Declare it explicitly: "@downstream ${target} step" or "@downstream ${target} branch".`,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
// The author declared a cardinality the analyzer could not verify — the
|
|
78
|
+
// annotation is the source of truth for indirection it cannot follow.
|
|
79
|
+
if (structural === 'ambiguous')
|
|
80
|
+
return null;
|
|
81
|
+
if (structural === edge.cardinality)
|
|
82
|
+
return null;
|
|
83
|
+
if (structural === 'branch') {
|
|
84
|
+
const phrase = branchPhrase(branchKind);
|
|
85
|
+
return {
|
|
86
|
+
rule: 'cardinality/mismatch',
|
|
87
|
+
file,
|
|
88
|
+
line,
|
|
89
|
+
message: `@downstream ${target} is declared "step" but ${edge.symbol} is called inside `
|
|
90
|
+
+ `${phrase} — that call site is traversed more than once, which is a `
|
|
91
|
+
+ `branch. Change the cardinality to "branch", or hoist the call out of ${phrase}.`,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
rule: 'cardinality/mismatch',
|
|
96
|
+
file,
|
|
97
|
+
line,
|
|
98
|
+
message: `@downstream ${target} is declared "branch" but every located call to ${edge.symbol} is `
|
|
99
|
+
+ `linear — it is traversed at most once, which is a step. Change the cardinality to "step".`,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/** The violation for one `step`-edge cycle, attributed to the edge that opens it. */
|
|
103
|
+
function cycleViolation(cycle, stepEdgeIndex) {
|
|
104
|
+
// A `step`-edge cycle has at least two nodes — a self `step` edge is
|
|
105
|
+
// impossible, since a self-call is always classified `recursion` (a branch).
|
|
106
|
+
const source = cycle[0];
|
|
107
|
+
const target = cycle[1];
|
|
108
|
+
// Every node in a `step`-edge cycle is the `from` of a `step` edge in the
|
|
109
|
+
// ring, so the closing edge is always indexed.
|
|
110
|
+
const edge = stepEdgeIndex.get(`${source}\n${target}`);
|
|
111
|
+
const ring = [...cycle, source].join(' → ');
|
|
112
|
+
return {
|
|
113
|
+
rule: 'cardinality/step-cycle',
|
|
114
|
+
file: edge.file,
|
|
115
|
+
line: edge.line,
|
|
116
|
+
message: `@downstream forms a cycle of "step" edges: ${ring}. A step edge that loops back makes the `
|
|
117
|
+
+ `per-trace step count unbounded — one edge in this ring is a branch (mutual recursion is a `
|
|
118
|
+
+ `branch). Re-classify the edge that closes the loop.`,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
function branchPhrase(kind) {
|
|
122
|
+
switch (kind) {
|
|
123
|
+
case 'loop': return 'a loop';
|
|
124
|
+
case 'iteration-method': return 'an iteration callback (.map, .forEach, …)';
|
|
125
|
+
case 'fan-out': return 'a Promise combinator (Promise.all, …)';
|
|
126
|
+
case 'recursion': return 'a recursive call';
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=analyze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/trace/cardinality/analyze.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type AstNode } from '../check/flow-step-site.js';
|
|
2
|
+
/** The construct that makes a call site traversed more than once. */
|
|
3
|
+
export type BranchKind = 'loop' | 'iteration-method' | 'fan-out' | 'recursion';
|
|
4
|
+
/** One located call to the target symbol, with its traversal context. */
|
|
5
|
+
export interface CallSite {
|
|
6
|
+
/** 1-based file line of the call. */
|
|
7
|
+
readonly line: number;
|
|
8
|
+
/** The branching construct enclosing the call, or `null` when the call is linear. */
|
|
9
|
+
readonly branchKind: BranchKind | null;
|
|
10
|
+
}
|
|
11
|
+
/** Every call to `target` inside `body`, each tagged with its traversal context. */
|
|
12
|
+
export declare function findCallSites(body: AstNode, ownName: string, target: string): CallSite[];
|
|
13
|
+
//# sourceMappingURL=branch-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch-context.d.ts","sourceRoot":"","sources":["../../../src/trace/cardinality/branch-context.ts"],"names":[],"mappings":"AAQA,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEjE,qEAAqE;AACrE,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,kBAAkB,GAAG,SAAS,GAAG,WAAW,CAAA;AAE9E,yEAAyE;AACzE,MAAM,WAAW,QAAQ;IACvB,qCAAqC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,qFAAqF;IACrF,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAA;CACvC;AA+BD,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,CAIxF"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
// Locates every call to a target symbol inside a flow-step function body and
|
|
2
|
+
// classifies each call's traversal context. A call reached through a loop, an
|
|
3
|
+
// iteration method, a Promise-combinator fan-out, or a self-recursive edge is
|
|
4
|
+
// "branching" — the single call site is traversed more than once per execution
|
|
5
|
+
// of the parent. Anything else is linear. This is the structural half of the
|
|
6
|
+
// cardinality analyzer: it reads AST shape only, never runtime behaviour, and
|
|
7
|
+
// never resolves imports or types. See PLAN.tracing.md, Q1.
|
|
8
|
+
import { isNode } from '../check/flow-step-site.js';
|
|
9
|
+
// Array methods whose callback argument is invoked once per element — a
|
|
10
|
+
// downstream call inside the callback is traversed more than once. Lexical:
|
|
11
|
+
// `.map` on a non-array still reads as iteration, by design (Q1).
|
|
12
|
+
const ITERATION_METHODS = new Set([
|
|
13
|
+
'map', 'forEach', 'flatMap', 'filter',
|
|
14
|
+
'reduce', 'reduceRight',
|
|
15
|
+
'some', 'every',
|
|
16
|
+
'find', 'findIndex', 'findLast', 'findLastIndex',
|
|
17
|
+
]);
|
|
18
|
+
// Promise combinators that run their arguments as concurrent siblings.
|
|
19
|
+
const PROMISE_COMBINATORS = new Set(['all', 'allSettled', 'race', 'any']);
|
|
20
|
+
const FUNCTION_TYPES = new Set([
|
|
21
|
+
'FunctionDeclaration', 'FunctionExpression', 'ArrowFunctionExpression',
|
|
22
|
+
]);
|
|
23
|
+
const SKIP_KEYS = new Set(['loc', 'range', 'parent']);
|
|
24
|
+
/** Every call to `target` inside `body`, each tagged with its traversal context. */
|
|
25
|
+
export function findCallSites(body, ownName, target) {
|
|
26
|
+
const out = [];
|
|
27
|
+
visit(body, { ownName, target, branchKind: null, out });
|
|
28
|
+
return out;
|
|
29
|
+
}
|
|
30
|
+
function visit(node, ctx) {
|
|
31
|
+
// A nested closure reached by ordinary descent is indirection the analyzer
|
|
32
|
+
// does not follow. Iteration-method callbacks are the one exception, and
|
|
33
|
+
// those are entered explicitly from `visitCall`.
|
|
34
|
+
if (FUNCTION_TYPES.has(node.type))
|
|
35
|
+
return;
|
|
36
|
+
switch (node.type) {
|
|
37
|
+
case 'CallExpression':
|
|
38
|
+
visitCall(node, ctx);
|
|
39
|
+
return;
|
|
40
|
+
case 'ForStatement':
|
|
41
|
+
visitForStatement(node, ctx);
|
|
42
|
+
return;
|
|
43
|
+
case 'ForOfStatement':
|
|
44
|
+
case 'ForInStatement':
|
|
45
|
+
visitForInOf(node, ctx);
|
|
46
|
+
return;
|
|
47
|
+
case 'WhileStatement':
|
|
48
|
+
case 'DoWhileStatement':
|
|
49
|
+
visitWhile(node, ctx);
|
|
50
|
+
return;
|
|
51
|
+
default:
|
|
52
|
+
for (const child of childNodes(node))
|
|
53
|
+
visit(child, ctx);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function visitCall(node, ctx) {
|
|
57
|
+
const callee = node['callee'];
|
|
58
|
+
const name = calleeName(callee);
|
|
59
|
+
if (name === ctx.target) {
|
|
60
|
+
ctx.out.push({
|
|
61
|
+
line: node.loc.start.line,
|
|
62
|
+
branchKind: name === ctx.ownName ? 'recursion' : ctx.branchKind,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
const args = nodeArray(node['arguments']);
|
|
66
|
+
if (isPromiseCombinator(callee)) {
|
|
67
|
+
// Each argument runs as a concurrent sibling — a fan-out.
|
|
68
|
+
for (const arg of args)
|
|
69
|
+
visit(arg, branched(ctx, 'fan-out'));
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (isIterationMethod(callee)) {
|
|
73
|
+
// The receiver is evaluated once; the callback runs once per element.
|
|
74
|
+
if (isNode(callee))
|
|
75
|
+
visitChild(callee['object'], ctx);
|
|
76
|
+
for (const arg of args)
|
|
77
|
+
visitIterationArg(arg, ctx);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
// An ordinary call: callee and arguments stay at the current depth.
|
|
81
|
+
visitChild(callee, ctx);
|
|
82
|
+
for (const arg of args)
|
|
83
|
+
visit(arg, ctx);
|
|
84
|
+
}
|
|
85
|
+
function visitIterationArg(arg, ctx) {
|
|
86
|
+
if (arg.type === 'Identifier' && arg['name'] === ctx.target) {
|
|
87
|
+
// `items.map(downstream)` — the symbol is itself the per-element callback.
|
|
88
|
+
ctx.out.push({
|
|
89
|
+
line: arg.loc.start.line,
|
|
90
|
+
branchKind: arg['name'] === ctx.ownName ? 'recursion' : 'iteration-method',
|
|
91
|
+
});
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (FUNCTION_TYPES.has(arg.type)) {
|
|
95
|
+
visitChild(arg['body'], branched(ctx, 'iteration-method'));
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
// A non-callback argument (e.g. `reduce`'s seed) runs at the current depth.
|
|
99
|
+
visit(arg, ctx);
|
|
100
|
+
}
|
|
101
|
+
function visitForStatement(node, ctx) {
|
|
102
|
+
// `init` runs once; `test`, `update`, and `body` run every iteration.
|
|
103
|
+
visitChild(node['init'], ctx);
|
|
104
|
+
const looped = branched(ctx, 'loop');
|
|
105
|
+
visitChild(node['test'], looped);
|
|
106
|
+
visitChild(node['update'], looped);
|
|
107
|
+
visitChild(node['body'], looped);
|
|
108
|
+
}
|
|
109
|
+
function visitForInOf(node, ctx) {
|
|
110
|
+
// `right` (the iterable) is evaluated once; `body` runs once per element.
|
|
111
|
+
visitChild(node['right'], ctx);
|
|
112
|
+
visitChild(node['body'], branched(ctx, 'loop'));
|
|
113
|
+
}
|
|
114
|
+
function visitWhile(node, ctx) {
|
|
115
|
+
// Both `test` and `body` run every iteration.
|
|
116
|
+
const looped = branched(ctx, 'loop');
|
|
117
|
+
visitChild(node['test'], looped);
|
|
118
|
+
visitChild(node['body'], looped);
|
|
119
|
+
}
|
|
120
|
+
/** Enters `branchKind` scope, keeping the outermost construct already in scope. */
|
|
121
|
+
function branched(ctx, kind) {
|
|
122
|
+
return { ...ctx, branchKind: ctx.branchKind ?? kind };
|
|
123
|
+
}
|
|
124
|
+
function visitChild(value, ctx) {
|
|
125
|
+
if (isNode(value))
|
|
126
|
+
visit(value, ctx);
|
|
127
|
+
}
|
|
128
|
+
function calleeName(callee) {
|
|
129
|
+
if (!isNode(callee))
|
|
130
|
+
return null;
|
|
131
|
+
if (callee.type === 'Identifier') {
|
|
132
|
+
const name = callee['name'];
|
|
133
|
+
return typeof name === 'string' ? name : null;
|
|
134
|
+
}
|
|
135
|
+
if (callee.type === 'MemberExpression' && callee['computed'] === false) {
|
|
136
|
+
const prop = callee['property'];
|
|
137
|
+
if (isNode(prop) && prop.type === 'Identifier' && typeof prop['name'] === 'string') {
|
|
138
|
+
return prop['name'];
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
function isPromiseCombinator(callee) {
|
|
144
|
+
if (!isNode(callee) || callee.type !== 'MemberExpression' || callee['computed'] !== false) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
const obj = callee['object'];
|
|
148
|
+
const prop = callee['property'];
|
|
149
|
+
return isNode(obj) && obj.type === 'Identifier' && obj['name'] === 'Promise'
|
|
150
|
+
&& isNode(prop) && prop.type === 'Identifier'
|
|
151
|
+
&& typeof prop['name'] === 'string' && PROMISE_COMBINATORS.has(prop['name']);
|
|
152
|
+
}
|
|
153
|
+
function isIterationMethod(callee) {
|
|
154
|
+
if (!isNode(callee) || callee.type !== 'MemberExpression' || callee['computed'] !== false) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
const prop = callee['property'];
|
|
158
|
+
return isNode(prop) && prop.type === 'Identifier'
|
|
159
|
+
&& typeof prop['name'] === 'string' && ITERATION_METHODS.has(prop['name']);
|
|
160
|
+
}
|
|
161
|
+
function nodeArray(value) {
|
|
162
|
+
if (!Array.isArray(value))
|
|
163
|
+
return [];
|
|
164
|
+
return value.filter(isNode);
|
|
165
|
+
}
|
|
166
|
+
function* childNodes(node) {
|
|
167
|
+
for (const key of Object.keys(node)) {
|
|
168
|
+
if (SKIP_KEYS.has(key))
|
|
169
|
+
continue;
|
|
170
|
+
const value = node[key];
|
|
171
|
+
if (Array.isArray(value)) {
|
|
172
|
+
for (const item of value) {
|
|
173
|
+
if (isNode(item))
|
|
174
|
+
yield item;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
else if (isNode(value)) {
|
|
178
|
+
yield value;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=branch-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch-context.js","sourceRoot":"","sources":["../../../src/trace/cardinality/branch-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type CardinalityResult } from './analyze.js';
|
|
2
|
+
/** Analyzes `@downstream` cardinality across `sourceFiles` (paths relative to `cwd`). */
|
|
3
|
+
export declare function checkCardinality(cwd: string, sourceFiles: readonly string[]): CardinalityResult;
|
|
4
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/trace/cardinality/check.ts"],"names":[],"mappings":"AAQA,OAAO,EAA0C,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAE7F,yFAAyF;AACzF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,iBAAiB,CAqB/F"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// File-scanning wrapper around the cardinality analyzer: reads each source
|
|
2
|
+
// file, collects its `@flow_step` sites, and runs `analyzeCardinality` over
|
|
3
|
+
// the lot. Mirrors flow-check.ts — the analyzer itself is pure (analyze.ts);
|
|
4
|
+
// this is the only part of the cardinality check that touches the filesystem.
|
|
5
|
+
import { readFileSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { collectFlowStepSites } from '../check/flow-step-site.js';
|
|
8
|
+
import { analyzeCardinality } from './analyze.js';
|
|
9
|
+
/** Analyzes `@downstream` cardinality across `sourceFiles` (paths relative to `cwd`). */
|
|
10
|
+
export function checkCardinality(cwd, sourceFiles) {
|
|
11
|
+
const entries = [];
|
|
12
|
+
for (const file of sourceFiles) {
|
|
13
|
+
const abs = join(cwd, file);
|
|
14
|
+
let sites;
|
|
15
|
+
try {
|
|
16
|
+
sites = collectFlowStepSites(readFileSync(abs, 'utf-8'));
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// Missing or unparseable file — nothing to analyze; a syntax error is
|
|
20
|
+
// the type checker's diagnostic, not this check's.
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
for (const site of sites) {
|
|
24
|
+
entries.push({ file, site });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return analyzeCardinality(entries);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/trace/cardinality/check.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,4EAA4E;AAC5E,6EAA6E;AAC7E,8EAA8E;AAE9E,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAA8C,MAAM,cAAc,CAAA;AAE7F,yFAAyF;AACzF,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,WAA8B;IAC1E,MAAM,OAAO,GAAoB,EAAE,CAAA;IAEnC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAE3B,IAAI,KAAK,CAAA;QACT,IAAI,CAAC;YACH,KAAK,GAAG,oBAAoB,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;QAC1D,CAAC;QAAC,MAAM,CAAC;YACP,sEAAsE;YACtE,mDAAmD;YACnD,SAAQ;QACV,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAA;AACpC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { DownstreamEdge } from '@pipework/flow-step-parser';
|
|
2
|
+
import type { FlowStepSite } from '../check/flow-step-site.js';
|
|
3
|
+
import { type BranchKind } from './branch-context.js';
|
|
4
|
+
/**
|
|
5
|
+
* The analyzer's structural verdict for a `@downstream` edge.
|
|
6
|
+
*
|
|
7
|
+
* - `step` — every located call site is linear; traversed at most once.
|
|
8
|
+
* - `branch` — at least one call site is reached through a loop, an iteration
|
|
9
|
+
* method, a Promise-combinator fan-out, or recursion.
|
|
10
|
+
* - `ambiguous` — no call site could be located. The edge is reached through
|
|
11
|
+
* indirection the analyzer does not follow (a bare callback, dynamic
|
|
12
|
+
* dispatch), so its cardinality must be declared by hand. See Q1.
|
|
13
|
+
*/
|
|
14
|
+
export type StructuralCardinality = 'step' | 'branch' | 'ambiguous';
|
|
15
|
+
export interface EdgeClassification {
|
|
16
|
+
/** Source path of the flow step the edge is declared on, relative to `cwd`. */
|
|
17
|
+
readonly file: string;
|
|
18
|
+
/** Name of the flow step the edge is declared on. */
|
|
19
|
+
readonly from: string;
|
|
20
|
+
/** The declared edge, verbatim from the annotation. */
|
|
21
|
+
readonly edge: DownstreamEdge;
|
|
22
|
+
/** The analyzer's structural verdict. */
|
|
23
|
+
readonly structural: StructuralCardinality;
|
|
24
|
+
/** The branching construct, when `structural` is `branch`; otherwise `null`. */
|
|
25
|
+
readonly branchKind: BranchKind | null;
|
|
26
|
+
/** 1-based file line of the call site driving the verdict; `null` when none was located. */
|
|
27
|
+
readonly line: number | null;
|
|
28
|
+
}
|
|
29
|
+
/** Classifies one `@downstream` edge of `site` against the flow-step body. */
|
|
30
|
+
export declare function classifyEdge(file: string, site: FlowStepSite, edge: DownstreamEdge): EdgeClassification;
|
|
31
|
+
//# sourceMappingURL=classify-edge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify-edge.d.ts","sourceRoot":"","sources":["../../../src/trace/cardinality/classify-edge.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEpE;;;;;;;;;GASG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEnE,MAAM,WAAW,kBAAkB;IACjC,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,uDAAuD;IACvD,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAA;IAC7B,yCAAyC;IACzC,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAA;IAC1C,gFAAgF;IAChF,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAA;IACtC,4FAA4F;IAC5F,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,cAAc,GACnB,kBAAkB,CAqBpB"}
|