vouchington-tooling 0.34.0 → 0.36.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.
Files changed (542) hide show
  1. package/README.md +24 -221
  2. package/dist/agent-blackboard/feedback-audit-source.mjs +2 -2
  3. package/dist/agent-blackboard/feedback-canonical.mjs +1 -1
  4. package/dist/agent-blackboard/feedback-codec.mjs +3 -3
  5. package/dist/agent-blackboard/feedback-compose.mjs +5 -5
  6. package/dist/agent-blackboard/feedback-deadline.mjs +1 -1
  7. package/dist/agent-blackboard/feedback-delivery.mjs +6 -6
  8. package/dist/agent-blackboard/feedback-fields.mjs +1 -1
  9. package/dist/agent-blackboard/feedback-identity.mjs +3 -3
  10. package/dist/agent-blackboard/feedback-journal-audit.mjs +4 -4
  11. package/dist/agent-blackboard/feedback-journal-sandbox.mjs +1 -1
  12. package/dist/agent-blackboard/feedback-online-error.mjs +1 -1
  13. package/dist/agent-blackboard/feedback-online.mjs +7 -7
  14. package/dist/agent-blackboard/feedback-outbox-counts.mjs +2 -2
  15. package/dist/agent-blackboard/feedback-outbox.mjs +7 -7
  16. package/dist/agent-blackboard/index.mjs +13 -13
  17. package/dist/agent-blackboard/journal.mjs +3 -3
  18. package/dist/agent-blackboard/session-tools.mjs +4 -4
  19. package/dist/agent-blackboard/snapshot-cleanup-directory.mjs +3 -3
  20. package/dist/agent-blackboard/snapshot-cleanup-receipt.mjs +1 -1
  21. package/dist/agent-blackboard/snapshot-cleanup-resume.mjs +2 -2
  22. package/dist/agent-blackboard/snapshot-partition-cleanup.mjs +3 -3
  23. package/dist/agent-blackboard/snapshot-partition-format.mjs +3 -3
  24. package/dist/agent-blackboard/snapshot-partition-predicates.mjs +2 -2
  25. package/dist/agent-blackboard/snapshot-partition-read.mjs +2 -2
  26. package/dist/agent-blackboard/snapshot-partition-validate.mjs +2 -2
  27. package/dist/agent-blackboard/snapshot-partition-write.mjs +2 -2
  28. package/dist/agent-blackboard/snapshot-partitions.mjs +4 -4
  29. package/dist/agent-blackboard/snapshot.mjs +2 -2
  30. package/dist/agent-harness-identity/index.d.mts +1 -1
  31. package/dist/api-fixtures/fixture-contract-validation.mjs +1 -1
  32. package/dist/api-fixtures/index.mjs +3 -3
  33. package/dist/ast-grep-examples/companion-parity.mjs +1 -1
  34. package/dist/ast-grep-examples/index.mjs +1 -1
  35. package/dist/basic-auth-doc-sync/index.mjs +2 -2
  36. package/dist/basic-auth-doc-sync/runbook.mjs +4 -4
  37. package/dist/basic-auth-doc-sync/source.mjs +2 -2
  38. package/dist/browser-session-runner/attempt.mjs +5 -5
  39. package/dist/browser-session-runner/index.mjs +4 -4
  40. package/dist/browser-session-runner/output.mjs +1 -1
  41. package/dist/ci-local/index.mjs +2 -2
  42. package/dist/cli/commands/agent-blackboard-flags.mjs +1 -1
  43. package/dist/cli/commands/agent-blackboard.mjs +3 -3
  44. package/dist/cli/commands/ast-grep-examples.mjs +1 -1
  45. package/dist/cli/commands/ast-grep-pack.mjs +1 -1
  46. package/dist/cli/commands/gha-artifacts-cleanup.mjs +1 -1
  47. package/dist/cli/commands/gha-runtime-audit.mjs +1 -1
  48. package/dist/cli/commands/gha-workspace-policy.mjs +2 -2
  49. package/dist/cli/commands/http-origin.mjs +1 -1
  50. package/dist/cli/commands/link-skill.mjs +1 -1
  51. package/dist/cli/commands/mcp.mjs +2 -2
  52. package/dist/cli/commands/nuget-central-version.mjs +1 -1
  53. package/dist/cli/commands/pnpm-install.mjs +1 -1
  54. package/dist/cli/commands/prepare-vitest-reports.mjs +1 -1
  55. package/dist/cli/commands/require-up-to-date.mjs +1 -1
  56. package/dist/cli/commands/retrospective-facts.mjs +1 -1
  57. package/dist/cli/commands/retrospective-transcript.mjs +1 -1
  58. package/dist/cli/commands/runner-port-policy.mjs +1 -1
  59. package/dist/cli/commands/vitest-blob-manifest.mjs +1 -1
  60. package/dist/cli/commands/vitest-report-attempt.mjs +1 -1
  61. package/dist/cli/index.mjs +27 -27
  62. package/dist/cli/installed-version.mjs +1 -1
  63. package/dist/cli/parse-gha-runtime-audit.mjs +1 -1
  64. package/dist/cli/parse-options.mjs +2 -2
  65. package/dist/cli/parse.mjs +5 -5
  66. package/dist/compiler-build/index.mjs +3 -3
  67. package/dist/compiler-build/program.mjs +3 -3
  68. package/dist/config-inventory/collect.mjs +5 -5
  69. package/dist/config-inventory/dynamic-configs.mjs +1 -1
  70. package/dist/config-inventory/env-expression-readers.mjs +1 -1
  71. package/dist/config-inventory/env-prefix-readers.mjs +2 -2
  72. package/dist/config-inventory/env-var-accumulator.mjs +1 -1
  73. package/dist/config-inventory/env-vars.mjs +5 -5
  74. package/dist/config-inventory/index.mjs +2 -2
  75. package/dist/contract-schema/contract-schema-bounded-array.mjs +2 -2
  76. package/dist/contract-schema/contract-schema-extractor.mjs +3 -3
  77. package/dist/contract-schema/contract-schema-object-tuple.mjs +2 -2
  78. package/dist/contract-schema/contract-schema-type-extractor.mjs +5 -5
  79. package/dist/contract-schema/contract-schema-type-utils.mjs +2 -2
  80. package/dist/contract-schema/contract-schema-validator.mjs +1 -1
  81. package/dist/contract-schema/index.mjs +7 -7
  82. package/dist/contract-schema/type-query-call.mjs +3 -3
  83. package/dist/contract-schema/type-query.mjs +2 -2
  84. package/dist/contract-schema/virtual-program.mjs +1 -1
  85. package/dist/coverage-transport/control-v2-parse-object.mjs +2 -2
  86. package/dist/coverage-transport/control-v2.mjs +4 -4
  87. package/dist/coverage-transport/control.mjs +2 -2
  88. package/dist/coverage-transport/discovery.mjs +4 -4
  89. package/dist/coverage-transport/http.mjs +1 -1
  90. package/dist/coverage-transport/index.mjs +10 -10
  91. package/dist/coverage-transport/keys.mjs +1 -1
  92. package/dist/coverage-transport/lib.mjs +6 -6
  93. package/dist/coverage-transport/prefix-transfer.mjs +4 -4
  94. package/dist/coverage-transport/prefix.mjs +3 -3
  95. package/dist/coverage-transport/presign.mjs +1 -1
  96. package/dist/coverage-transport/vitest-blob-transport.mjs +2 -2
  97. package/dist/dependency-license-policy/collect.mjs +5 -5
  98. package/dist/dependency-license-policy/index.mjs +3 -3
  99. package/dist/dependency-license-policy/policy.mjs +1 -1
  100. package/dist/dependency-license-policy/workspace.mjs +1 -1
  101. package/dist/dockerfile-parse/index.mjs +2 -2
  102. package/dist/dockerfile-parse/prewarm-ports.mjs +1 -1
  103. package/dist/dockerfile-parse/runtime-cmd.mjs +2 -2
  104. package/dist/finite-enum-ripple/check.mjs +3 -3
  105. package/dist/finite-enum-ripple/compare.mjs +3 -5
  106. package/dist/finite-enum-ripple/component-paths.mjs +2 -2
  107. package/dist/finite-enum-ripple/configured-object-mutations.mjs +1 -1
  108. package/dist/finite-enum-ripple/create-page-jsx.mjs +1 -1
  109. package/dist/finite-enum-ripple/create-page-literals.mjs +4 -4
  110. package/dist/finite-enum-ripple/create-page-object-visitor.mjs +2 -2
  111. package/dist/finite-enum-ripple/create-page-properties.mjs +1 -1
  112. package/dist/finite-enum-ripple/index.mjs +1 -1
  113. package/dist/finite-enum-ripple/model.d.mts +4 -0
  114. package/dist/finite-enum-ripple/parser-support.mjs +16 -3
  115. package/dist/finite-enum-ripple/parsers.mjs +5 -3
  116. package/dist/finite-enum-ripple/structured-route-check.mjs +5 -5
  117. package/dist/finite-enum-ripple/types.mjs +3 -3
  118. package/dist/finite-enum-ripple/union-factory-check.mjs +2 -2
  119. package/dist/finite-enum-ripple/union-types.mjs +5 -5
  120. package/dist/gh-api-shell-quoting/index.mjs +2 -2
  121. package/dist/gh-api-shell-quoting/logical-line.mjs +1 -1
  122. package/dist/gh-api-shell-quoting/scan.mjs +1 -1
  123. package/dist/gh-api-shell-quoting/yaml.mjs +1 -1
  124. package/dist/gh-cli/index.mjs +4 -4
  125. package/dist/gha-artifacts-cleanup/commands.mjs +2 -2
  126. package/dist/gha-artifacts-cleanup/index.mjs +4 -4
  127. package/dist/gha-check-run/cli.mjs +2 -2
  128. package/dist/gha-check-run/index.mjs +2 -2
  129. package/dist/gha-claude-post-review/index.mjs +2 -2
  130. package/dist/gha-post-review/claude-token.d.mts +2 -2
  131. package/dist/gha-post-review/claude-token.mjs +1 -1
  132. package/dist/gha-post-review/cli.mjs +1 -1
  133. package/dist/gha-post-review/github.mjs +7 -7
  134. package/dist/gha-post-review/index.mjs +6 -6
  135. package/dist/gha-post-review/post.mjs +2 -2
  136. package/dist/gha-post-review/pull-io.mjs +1 -1
  137. package/dist/gha-post-review/token.mjs +1 -1
  138. package/dist/gha-pr-checkpoint/index.mjs +3 -3
  139. package/dist/gha-pr-checkpoint/resume.mjs +1 -1
  140. package/dist/gha-pr-checkpoint/update.mjs +1 -1
  141. package/dist/gha-review-payload/cli.mjs +2 -2
  142. package/dist/gha-review-payload/file.mjs +1 -1
  143. package/dist/gha-review-payload/index.mjs +4 -4
  144. package/dist/gha-review-payload/remap.mjs +1 -1
  145. package/dist/gha-runtime-audit/audit.mjs +4 -4
  146. package/dist/gha-runtime-audit/index.mjs +3 -3
  147. package/dist/gha-workspace-policy/docker-options.mjs +1 -1
  148. package/dist/gha-workspace-policy/docker-workspace-user.mjs +2 -2
  149. package/dist/gha-workspace-policy/index.mjs +3 -3
  150. package/dist/gha-workspace-policy/shell-tokens.mjs +1 -1
  151. package/dist/gha-workspace-policy/sparse-checkout.mjs +1 -1
  152. package/dist/github-projects/index.mjs +2 -2
  153. package/dist/github-projects/project-audit.mjs +1 -1
  154. package/dist/index.mjs +55 -55
  155. package/dist/markdown/content-facts.mjs +1 -1
  156. package/dist/markdown/document-sections.mjs +2 -2
  157. package/dist/markdown/html-blocks.mjs +1 -1
  158. package/dist/markdown/index.mjs +10 -10
  159. package/dist/markdown/sections.mjs +2 -2
  160. package/dist/markdown/tables.mjs +2 -2
  161. package/dist/markdown/tasks.mjs +1 -1
  162. package/dist/mcp-server/context.mjs +2 -2
  163. package/dist/mcp-server/dispatch.mjs +8 -8
  164. package/dist/mcp-server/git-fixture.test-helpers.mjs +1 -1
  165. package/dist/mcp-server/handlers-journal.mjs +4 -4
  166. package/dist/mcp-server/handlers-outbox.mjs +2 -2
  167. package/dist/mcp-server/handlers-session.mjs +3 -3
  168. package/dist/mcp-server/harness.test-helpers.mjs +4 -4
  169. package/dist/mcp-server/main.mjs +1 -1
  170. package/dist/mcp-server/run.mjs +3 -3
  171. package/dist/mcp-server/sdk.mjs +1 -1
  172. package/dist/mcp-server/server.mjs +2 -2
  173. package/dist/mcp-server/worktree.mjs +2 -2
  174. package/dist/nuget-central-version/cli.mjs +1 -1
  175. package/dist/openapi-document/build-openapi-catalog-sse.mjs +1 -1
  176. package/dist/openapi-document/build-openapi-document.mjs +8 -8
  177. package/dist/openapi-document/build-openapi-request.mjs +1 -1
  178. package/dist/openapi-document/build-openapi-response.mjs +3 -3
  179. package/dist/openapi-document/build-openapi-sse-events.mjs +1 -1
  180. package/dist/openapi-document/component-registry.mjs +1 -1
  181. package/dist/openapi-document/contract-schema-intersection-merge.mjs +1 -1
  182. package/dist/openapi-document/contract-schema-to-openapi.mjs +1 -1
  183. package/dist/openapi-document/index.mjs +12 -12
  184. package/dist/openapi-document/openapi-route-helpers.mjs +1 -1
  185. package/dist/pg-schema-snapshot/build-snapshot.mjs +3 -3
  186. package/dist/pg-schema-snapshot/catalog-objects.mjs +1 -1
  187. package/dist/pg-schema-snapshot/catalog-queries.mjs +4 -4
  188. package/dist/pg-schema-snapshot/catalog-table-constraints.mjs +1 -1
  189. package/dist/pg-schema-snapshot/catalog-table-indexes.mjs +1 -1
  190. package/dist/pg-schema-snapshot/catalog-tables.mjs +1 -1
  191. package/dist/pg-schema-snapshot/generate.mjs +5 -5
  192. package/dist/pg-schema-snapshot/index.mjs +6 -6
  193. package/dist/pg-schema-snapshot/markdown-files.mjs +1 -1
  194. package/dist/pg-schema-snapshot/render-markdown.mjs +1 -1
  195. package/dist/pg-schema-snapshot/table-snapshot-constraints.mjs +1 -1
  196. package/dist/pg-schema-snapshot/table-snapshot.mjs +3 -3
  197. package/dist/pnpm-deploy/index.mjs +3 -3
  198. package/dist/pnpm-deploy/restore.mjs +1 -1
  199. package/dist/pnpm-install/exec.mjs +1 -1
  200. package/dist/pnpm-install/index.mjs +8 -8
  201. package/dist/pnpm-install/install-operations.mjs +6 -6
  202. package/dist/pnpm-install/metadata-legacy.mjs +1 -1
  203. package/dist/pnpm-install/metadata.d.mts +1 -1
  204. package/dist/pnpm-install/metadata.mjs +2 -2
  205. package/dist/pnpm-install/native-health.mjs +2 -2
  206. package/dist/pnpm-install/pnpm-install-fixture.test-helpers.mjs +2 -2
  207. package/dist/pnpm-install/runner.mjs +7 -7
  208. package/dist/post-publication-inventory/index.d.mts +6 -0
  209. package/dist/post-publication-inventory/index.mjs +6 -2
  210. package/dist/post-publication-inventory/readers/compose-appends.d.mts +7 -0
  211. package/dist/post-publication-inventory/readers/compose-appends.mjs +38 -0
  212. package/dist/post-publication-inventory/readers/composes.d.mts +2 -0
  213. package/dist/post-publication-inventory/readers/composes.mjs +79 -0
  214. package/dist/post-publication-inventory/readers/composition.d.mts +2 -0
  215. package/dist/post-publication-inventory/readers/composition.mjs +62 -0
  216. package/dist/post-publication-inventory/readers/public-boundary-ast.d.mts +5 -0
  217. package/dist/post-publication-inventory/readers/public-boundary-ast.mjs +33 -0
  218. package/dist/post-publication-inventory/readers/public-boundary-consumed.d.mts +3 -0
  219. package/dist/post-publication-inventory/readers/public-boundary-consumed.mjs +39 -0
  220. package/dist/post-publication-inventory/readers/public-boundary-dataflow.d.mts +3 -0
  221. package/dist/post-publication-inventory/readers/public-boundary-dataflow.mjs +61 -0
  222. package/dist/post-publication-inventory/readers/public-boundary-then.d.mts +9 -0
  223. package/dist/post-publication-inventory/readers/public-boundary-then.mjs +31 -0
  224. package/dist/post-publication-inventory/readers/public-boundary.d.mts +3 -0
  225. package/dist/post-publication-inventory/readers/public-boundary.mjs +71 -0
  226. package/dist/post-publication-inventory/readers/public-view-ast.d.mts +6 -0
  227. package/dist/post-publication-inventory/readers/public-view-ast.mjs +67 -0
  228. package/dist/post-publication-inventory/readers/public-view-options.d.mts +8 -0
  229. package/dist/post-publication-inventory/readers/public-view-protection.d.mts +2 -0
  230. package/dist/post-publication-inventory/readers/public-view-protection.mjs +83 -0
  231. package/dist/post-publication-inventory/readers/public-view.d.mts +2 -0
  232. package/dist/post-publication-inventory/readers/public-view.mjs +117 -0
  233. package/dist/post-publication-inventory/readers/source-ast.d.mts +30 -0
  234. package/dist/post-publication-inventory/readers/source-ast.mjs +52 -0
  235. package/dist/post-publication-inventory/readers/source-executors.d.mts +4 -0
  236. package/dist/post-publication-inventory/readers/source-executors.mjs +38 -0
  237. package/dist/post-publication-inventory/readers/source-helpers.d.mts +16 -0
  238. package/dist/post-publication-inventory/readers/source-helpers.mjs +72 -0
  239. package/dist/post-publication-inventory/readers/source-options.d.mts +8 -0
  240. package/dist/post-publication-inventory/readers/source-sql.d.mts +3 -0
  241. package/dist/post-publication-inventory/readers/source-sql.mjs +17 -0
  242. package/dist/post-publication-inventory/readers/sql-executors.mjs +2 -2
  243. package/dist/post-publication-inventory/readers/sql-source.mjs +3 -3
  244. package/dist/post-publication-inventory/readers/sql-template.mjs +1 -1
  245. package/dist/post-publication-inventory/writers/source.mjs +1 -1
  246. package/dist/retrospective-facts/coverage.mjs +1 -1
  247. package/dist/retrospective-facts/foreign.mjs +3 -3
  248. package/dist/retrospective-facts/index.mjs +4 -4
  249. package/dist/retrospective-facts/local.mjs +4 -4
  250. package/dist/retrospective-transcript/claude-blocks.mjs +1 -1
  251. package/dist/retrospective-transcript/claude.mjs +2 -2
  252. package/dist/retrospective-transcript/codex-messages.mjs +1 -1
  253. package/dist/retrospective-transcript/codex-payload.mjs +2 -2
  254. package/dist/retrospective-transcript/codex-records.mjs +3 -3
  255. package/dist/retrospective-transcript/codex-segment.mjs +1 -1
  256. package/dist/retrospective-transcript/codex.mjs +2 -2
  257. package/dist/retrospective-transcript/index.mjs +9 -9
  258. package/dist/retrospective-transcript/resolve-transcript-file.mjs +2 -2
  259. package/dist/scc-complexity/baseline.mjs +2 -2
  260. package/dist/scc-complexity/index.mjs +8 -8
  261. package/dist/scc-complexity/parser.mjs +1 -1
  262. package/dist/scc-complexity/scope-config.mjs +1 -1
  263. package/dist/session-friction/audit-block.mjs +1 -1
  264. package/dist/session-friction/ci-failures.mjs +2 -2
  265. package/dist/session-friction/classify.mjs +2 -2
  266. package/dist/session-friction/coverage-ledger.mjs +1 -1
  267. package/dist/session-friction/index.mjs +5 -5
  268. package/dist/session-friction/log-file.mjs +2 -2
  269. package/dist/session-friction/log.mjs +7 -7
  270. package/dist/session-friction/normalize.mjs +1 -1
  271. package/dist/session-friction/report.mjs +5 -5
  272. package/dist/session-friction/sandbox.mjs +1 -1
  273. package/dist/session-friction/session-id.mjs +1 -1
  274. package/dist/shared-context/index.mjs +1 -1
  275. package/dist/skill-discovery/index.mjs +3 -3
  276. package/dist/sql-ast/add-column.mjs +1 -1
  277. package/dist/sql-ast/constraint-do-block.mjs +2 -2
  278. package/dist/sql-ast/constraint-shared.mjs +1 -1
  279. package/dist/sql-ast/constraint.mjs +4 -4
  280. package/dist/sql-ast/create-table.mjs +2 -2
  281. package/dist/sql-ast/drop-index.mjs +2 -2
  282. package/dist/sql-ast/implicit-indexes.mjs +1 -1
  283. package/dist/sql-ast/index-metadata.mjs +3 -3
  284. package/dist/sql-ast/index.mjs +8 -8
  285. package/dist/sql-scanner/comments.mjs +1 -1
  286. package/dist/sql-scanner/index.mjs +3 -3
  287. package/dist/sql-scanner/literals.mjs +1 -1
  288. package/dist/swift-semantic-equal/cli.mjs +1 -1
  289. package/dist/swift-semantic-equal/index.mjs +1 -1
  290. package/dist/transient-retry/index.mjs +2 -2
  291. package/dist/vitest-blob-manifest/cli.mjs +2 -2
  292. package/dist/vitest-blob-manifest/index.mjs +4 -4
  293. package/dist/vitest-blob-manifest/report-attempt-cli.mjs +2 -2
  294. package/dist/vitest-blob-manifest/report-attempt.mjs +1 -1
  295. package/dist/vitest-blob-manifest/reports-cli.mjs +3 -3
  296. package/dist/vitest-blob-manifest/reports-source.mjs +2 -2
  297. package/dist/vitest-blob-manifest/reports.mjs +2 -2
  298. package/dist/vitest-diagnostics/index.mjs +8 -8
  299. package/dist/vitest-diagnostics/vitest-fork-exit-records.mjs +1 -1
  300. package/dist/vitest-diagnostics/vitest-fork-exit-sentinel.mjs +2 -2
  301. package/dist/vitest-diagnostics/vitest-fork-leak-detection.mjs +2 -2
  302. package/dist/vitest-diagnostics/vitest-worker-exit-diagnostics-reporter.mjs +2 -2
  303. package/dist/workflow-policy/condition-entailment.mjs +1 -1
  304. package/dist/workflow-policy/index.d.mts +1 -3
  305. package/dist/workflow-policy/index.mjs +4 -6
  306. package/dist/workflow-policy/permission-inheritance.mjs +1 -1
  307. package/dist/workflow-policy/permission-mismatches.mjs +2 -2
  308. package/dist/workflow-policy/secret-readiness.mjs +2 -2
  309. package/dist/workflow-policy/types.d.mts +2 -28
  310. package/dist/workspace-gates/first-party-graph.mjs +2 -2
  311. package/dist/workspace-gates/index.mjs +1 -1
  312. package/dist/workspace-gates/manifest-version-assertions.mjs +2 -2
  313. package/dist/workspace-gates/manifest-version-parser.mjs +1 -1
  314. package/dist/workspace-gates/options.mjs +1 -1
  315. package/dist/workspace-gates/policy.mjs +7 -7
  316. package/dist/workspace-gates/test-helpers.d.mts +2 -2
  317. package/docs/workflow-and-compiler.md +7 -16
  318. package/package.json +3 -6
  319. package/dist/api-contract-discovery/header-contract-parser.d.mts +0 -3
  320. package/dist/api-contract-discovery/header-contract-parser.mjs +0 -93
  321. package/dist/api-contract-discovery/header-contract-registry.d.mts +0 -3
  322. package/dist/api-contract-discovery/header-contract-registry.mjs +0 -40
  323. package/dist/api-contract-discovery/header-contract-types.d.mts +0 -19
  324. package/dist/api-contract-discovery/index.d.mts +0 -34
  325. package/dist/api-contract-discovery/index.mjs +0 -27
  326. package/dist/api-contract-discovery/protocol-analysis-cache.d.mts +0 -21
  327. package/dist/api-contract-discovery/protocol-analysis-cache.mjs +0 -7
  328. package/dist/api-contract-discovery/protocol-body-status.d.mts +0 -2
  329. package/dist/api-contract-discovery/protocol-body-status.mjs +0 -4
  330. package/dist/api-contract-discovery/protocol-callback-argument-bindings.d.mts +0 -7
  331. package/dist/api-contract-discovery/protocol-callback-argument-bindings.mjs +0 -33
  332. package/dist/api-contract-discovery/protocol-callback-invocation.d.mts +0 -6
  333. package/dist/api-contract-discovery/protocol-callback-invocation.mjs +0 -111
  334. package/dist/api-contract-discovery/protocol-callback-mutations.d.mts +0 -5
  335. package/dist/api-contract-discovery/protocol-callback-mutations.mjs +0 -42
  336. package/dist/api-contract-discovery/protocol-callback-registration.d.mts +0 -3
  337. package/dist/api-contract-discovery/protocol-callback-registration.mjs +0 -27
  338. package/dist/api-contract-discovery/protocol-callback-values.d.mts +0 -18
  339. package/dist/api-contract-discovery/protocol-callback-values.mjs +0 -114
  340. package/dist/api-contract-discovery/protocol-context-alias.d.mts +0 -3
  341. package/dist/api-contract-discovery/protocol-context-alias.mjs +0 -20
  342. package/dist/api-contract-discovery/protocol-contract-extraction.d.mts +0 -9
  343. package/dist/api-contract-discovery/protocol-contract-extraction.mjs +0 -87
  344. package/dist/api-contract-discovery/protocol-contract-keys.d.mts +0 -1
  345. package/dist/api-contract-discovery/protocol-contract-keys.mjs +0 -8
  346. package/dist/api-contract-discovery/protocol-contract-registry.d.mts +0 -5
  347. package/dist/api-contract-discovery/protocol-contract-registry.mjs +0 -133
  348. package/dist/api-contract-discovery/protocol-executable-path.d.mts +0 -3
  349. package/dist/api-contract-discovery/protocol-executable-path.mjs +0 -64
  350. package/dist/api-contract-discovery/protocol-execution-path.d.mts +0 -4
  351. package/dist/api-contract-discovery/protocol-execution-path.mjs +0 -16
  352. package/dist/api-contract-discovery/protocol-http-association.d.mts +0 -7
  353. package/dist/api-contract-discovery/protocol-http-association.mjs +0 -108
  354. package/dist/api-contract-discovery/protocol-http-body-kinds.d.mts +0 -3
  355. package/dist/api-contract-discovery/protocol-http-body-kinds.mjs +0 -19
  356. package/dist/api-contract-discovery/protocol-http-context-callers.d.mts +0 -7
  357. package/dist/api-contract-discovery/protocol-http-context-callers.mjs +0 -40
  358. package/dist/api-contract-discovery/protocol-http-context-escapes.d.mts +0 -3
  359. package/dist/api-contract-discovery/protocol-http-context-escapes.mjs +0 -95
  360. package/dist/api-contract-discovery/protocol-http-context.d.mts +0 -8
  361. package/dist/api-contract-discovery/protocol-http-context.mjs +0 -85
  362. package/dist/api-contract-discovery/protocol-http-emission.d.mts +0 -3
  363. package/dist/api-contract-discovery/protocol-http-emission.mjs +0 -76
  364. package/dist/api-contract-discovery/protocol-http-implicit-taint.d.mts +0 -7
  365. package/dist/api-contract-discovery/protocol-http-implicit-taint.mjs +0 -26
  366. package/dist/api-contract-discovery/protocol-http-method-access.d.mts +0 -9
  367. package/dist/api-contract-discovery/protocol-http-method-access.mjs +0 -34
  368. package/dist/api-contract-discovery/protocol-http-method-mutations.d.mts +0 -3
  369. package/dist/api-contract-discovery/protocol-http-method-mutations.mjs +0 -31
  370. package/dist/api-contract-discovery/protocol-http-reflect.d.mts +0 -5
  371. package/dist/api-contract-discovery/protocol-http-reflect.mjs +0 -45
  372. package/dist/api-contract-discovery/protocol-http-registration.d.mts +0 -12
  373. package/dist/api-contract-discovery/protocol-http-registration.mjs +0 -53
  374. package/dist/api-contract-discovery/protocol-http-response-mutations.d.mts +0 -3
  375. package/dist/api-contract-discovery/protocol-http-response-mutations.mjs +0 -31
  376. package/dist/api-contract-discovery/protocol-marker-analysis.d.mts +0 -7
  377. package/dist/api-contract-discovery/protocol-marker-analysis.mjs +0 -50
  378. package/dist/api-contract-discovery/protocol-opaque-callback.d.mts +0 -3
  379. package/dist/api-contract-discovery/protocol-opaque-callback.mjs +0 -107
  380. package/dist/api-contract-discovery/protocol-platform-callbacks.d.mts +0 -7
  381. package/dist/api-contract-discovery/protocol-platform-callbacks.mjs +0 -76
  382. package/dist/api-contract-discovery/protocol-platform-mutation-targets.d.mts +0 -5
  383. package/dist/api-contract-discovery/protocol-platform-mutation-targets.mjs +0 -89
  384. package/dist/api-contract-discovery/protocol-platform-writes.d.mts +0 -3
  385. package/dist/api-contract-discovery/protocol-platform-writes.mjs +0 -92
  386. package/dist/api-contract-discovery/protocol-requested-keys.d.mts +0 -5
  387. package/dist/api-contract-discovery/protocol-requested-keys.mjs +0 -45
  388. package/dist/api-contract-discovery/protocol-sse-callers.d.mts +0 -7
  389. package/dist/api-contract-discovery/protocol-sse-callers.mjs +0 -67
  390. package/dist/api-contract-discovery/protocol-sse-emission.d.mts +0 -11
  391. package/dist/api-contract-discovery/protocol-sse-emission.mjs +0 -61
  392. package/dist/api-contract-discovery/protocol-sse-feasible-status.d.mts +0 -3
  393. package/dist/api-contract-discovery/protocol-sse-feasible-status.mjs +0 -24
  394. package/dist/api-contract-discovery/protocol-sse-raw-writes.d.mts +0 -9
  395. package/dist/api-contract-discovery/protocol-sse-raw-writes.mjs +0 -99
  396. package/dist/api-contract-discovery/protocol-sse-status.d.mts +0 -3
  397. package/dist/api-contract-discovery/protocol-sse-status.mjs +0 -84
  398. package/dist/api-contract-discovery/protocol-sse-write-access.d.mts +0 -9
  399. package/dist/api-contract-discovery/protocol-sse-write-access.mjs +0 -42
  400. package/dist/api-contract-discovery/protocol-sse-write-helpers.d.mts +0 -7
  401. package/dist/api-contract-discovery/protocol-sse-write-helpers.mjs +0 -82
  402. package/dist/api-contract-discovery/protocol-sse-write-mutations.d.mts +0 -9
  403. package/dist/api-contract-discovery/protocol-sse-write-mutations.mjs +0 -42
  404. package/dist/api-contract-discovery/protocol-sse-write-resolution.d.mts +0 -14
  405. package/dist/api-contract-discovery/protocol-sse-write-resolution.mjs +0 -79
  406. package/dist/api-contract-discovery/protocol-status-dominance.d.mts +0 -5
  407. package/dist/api-contract-discovery/protocol-status-dominance.mjs +0 -35
  408. package/dist/api-contract-discovery/protocol-write-receiver.d.mts +0 -9
  409. package/dist/api-contract-discovery/protocol-write-receiver.mjs +0 -79
  410. package/dist/api-contract-discovery/query-contract-extraction.d.mts +0 -3
  411. package/dist/api-contract-discovery/query-contract-extraction.mjs +0 -82
  412. package/dist/api-contract-discovery/query-contract-literals.d.mts +0 -13
  413. package/dist/api-contract-discovery/query-contract-literals.mjs +0 -83
  414. package/dist/api-contract-discovery/query-contract-registry.d.mts +0 -3
  415. package/dist/api-contract-discovery/query-contract-registry.mjs +0 -70
  416. package/dist/api-contract-discovery/query-contract-types.d.mts +0 -8
  417. package/dist/api-contract-discovery/registered-route-binding-writes.d.mts +0 -4
  418. package/dist/api-contract-discovery/registered-route-binding-writes.mjs +0 -47
  419. package/dist/api-contract-discovery/registered-route-catalog.d.mts +0 -10
  420. package/dist/api-contract-discovery/registered-route-catalog.mjs +0 -85
  421. package/dist/api-contract-discovery/registered-route-factory-returns.d.mts +0 -3
  422. package/dist/api-contract-discovery/registered-route-factory-returns.mjs +0 -29
  423. package/dist/api-contract-discovery/registered-route-handler-analysis.d.mts +0 -12
  424. package/dist/api-contract-discovery/registered-route-handler-analysis.mjs +0 -119
  425. package/dist/api-contract-discovery/registered-route-handler-helpers.d.mts +0 -3
  426. package/dist/api-contract-discovery/registered-route-handler-helpers.mjs +0 -16
  427. package/dist/api-contract-discovery/registered-route-runtime-parameters.d.mts +0 -3
  428. package/dist/api-contract-discovery/registered-route-runtime-parameters.mjs +0 -5
  429. package/dist/api-contract-discovery/registered-route-terminal-error.d.mts +0 -3
  430. package/dist/api-contract-discovery/registered-route-terminal-error.mjs +0 -98
  431. package/dist/api-contract-discovery/request-contract-implicit.d.mts +0 -17
  432. package/dist/api-contract-discovery/request-contract-implicit.mjs +0 -73
  433. package/dist/api-contract-discovery/request-contract-lenient.d.mts +0 -28
  434. package/dist/api-contract-discovery/request-contract-lenient.mjs +0 -59
  435. package/dist/api-contract-discovery/request-contract-registry.d.mts +0 -14
  436. package/dist/api-contract-discovery/request-contract-registry.mjs +0 -63
  437. package/dist/api-contract-discovery/request-contract-route-analysis.d.mts +0 -25
  438. package/dist/api-contract-discovery/request-contract-route-analysis.mjs +0 -68
  439. package/dist/api-contract-discovery/request-contract-types.d.mts +0 -12
  440. package/dist/api-contract-discovery/request-contract-types.mjs +0 -1
  441. package/dist/api-contract-discovery/request-validation-callbacks.d.mts +0 -9
  442. package/dist/api-contract-discovery/request-validation-callbacks.mjs +0 -27
  443. package/dist/api-contract-discovery/request-validation-checker.d.mts +0 -7
  444. package/dist/api-contract-discovery/request-validation-checker.mjs +0 -25
  445. package/dist/api-contract-discovery/request-validation-conditional.d.mts +0 -6
  446. package/dist/api-contract-discovery/request-validation-conditional.mjs +0 -31
  447. package/dist/api-contract-discovery/request-validation-factory-calls.d.mts +0 -11
  448. package/dist/api-contract-discovery/request-validation-factory-calls.mjs +0 -23
  449. package/dist/api-contract-discovery/request-validation-facts.d.mts +0 -16
  450. package/dist/api-contract-discovery/request-validation-facts.mjs +0 -64
  451. package/dist/api-contract-discovery/request-validation-follow.d.mts +0 -24
  452. package/dist/api-contract-discovery/request-validation-follow.mjs +0 -38
  453. package/dist/api-contract-discovery/request-validation-handler-state.d.mts +0 -8
  454. package/dist/api-contract-discovery/request-validation-handler-state.mjs +0 -35
  455. package/dist/api-contract-discovery/request-validation-input.d.mts +0 -12
  456. package/dist/api-contract-discovery/request-validation-input.mjs +0 -43
  457. package/dist/api-contract-discovery/request-validation-keys.d.mts +0 -25
  458. package/dist/api-contract-discovery/request-validation-keys.mjs +0 -119
  459. package/dist/api-contract-discovery/request-validation-match.d.mts +0 -11
  460. package/dist/api-contract-discovery/request-validation-match.mjs +0 -47
  461. package/dist/api-contract-discovery/request-validation-mutation.d.mts +0 -7
  462. package/dist/api-contract-discovery/request-validation-mutation.mjs +0 -80
  463. package/dist/api-contract-discovery/request-validation-origin.d.mts +0 -20
  464. package/dist/api-contract-discovery/request-validation-origin.mjs +0 -71
  465. package/dist/api-contract-discovery/request-validation-reads.d.mts +0 -13
  466. package/dist/api-contract-discovery/request-validation-reads.mjs +0 -88
  467. package/dist/api-contract-discovery/request-validation-registration.d.mts +0 -9
  468. package/dist/api-contract-discovery/request-validation-registration.mjs +0 -32
  469. package/dist/api-contract-discovery/request-validation-report.d.mts +0 -3
  470. package/dist/api-contract-discovery/request-validation-report.mjs +0 -21
  471. package/dist/api-contract-discovery/request-validation-request-origin.d.mts +0 -5
  472. package/dist/api-contract-discovery/request-validation-request-origin.mjs +0 -13
  473. package/dist/api-contract-discovery/request-validation-select.d.mts +0 -9
  474. package/dist/api-contract-discovery/request-validation-select.mjs +0 -36
  475. package/dist/api-contract-discovery/request-validation-sites.d.mts +0 -9
  476. package/dist/api-contract-discovery/request-validation-sites.mjs +0 -77
  477. package/dist/api-contract-discovery/request-validation-state-key.d.mts +0 -13
  478. package/dist/api-contract-discovery/request-validation-state-key.mjs +0 -30
  479. package/dist/api-contract-discovery/request-validation-trace-helpers.d.mts +0 -14
  480. package/dist/api-contract-discovery/request-validation-trace-helpers.mjs +0 -80
  481. package/dist/api-contract-discovery/request-validation-trace-select.d.mts +0 -23
  482. package/dist/api-contract-discovery/request-validation-trace-select.mjs +0 -45
  483. package/dist/api-contract-discovery/request-validation-trace.d.mts +0 -8
  484. package/dist/api-contract-discovery/request-validation-trace.mjs +0 -130
  485. package/dist/api-contract-discovery/request-validation-types.d.mts +0 -84
  486. package/dist/api-contract-discovery/request-validation-types.mjs +0 -1
  487. package/dist/api-contract-discovery/request-validation-walker.d.mts +0 -26
  488. package/dist/api-contract-discovery/request-validation-walker.mjs +0 -143
  489. package/dist/api-contract-discovery/request-validation.test-helpers.d.mts +0 -39
  490. package/dist/api-contract-discovery/request-validation.test-helpers.mjs +0 -108
  491. package/dist/api-contract-discovery/response-contract-attribution-facts.d.mts +0 -2
  492. package/dist/api-contract-discovery/response-contract-attribution-facts.mjs +0 -18
  493. package/dist/api-contract-discovery/response-contract-attribution.d.mts +0 -3
  494. package/dist/api-contract-discovery/response-contract-attribution.mjs +0 -23
  495. package/dist/api-contract-discovery/response-contract-call-classification.d.mts +0 -3
  496. package/dist/api-contract-discovery/response-contract-call-classification.mjs +0 -37
  497. package/dist/api-contract-discovery/response-contract-ctx-analysis.d.mts +0 -7
  498. package/dist/api-contract-discovery/response-contract-ctx-analysis.mjs +0 -28
  499. package/dist/api-contract-discovery/response-contract-error-branch.d.mts +0 -15
  500. package/dist/api-contract-discovery/response-contract-error-branch.mjs +0 -150
  501. package/dist/api-contract-discovery/response-contract-handler-bindings.d.mts +0 -3
  502. package/dist/api-contract-discovery/response-contract-handler-bindings.mjs +0 -126
  503. package/dist/api-contract-discovery/response-contract-handler-calls.d.mts +0 -3
  504. package/dist/api-contract-discovery/response-contract-handler-calls.mjs +0 -81
  505. package/dist/api-contract-discovery/response-contract-implicit-sources.test-helpers.d.mts +0 -145
  506. package/dist/api-contract-discovery/response-contract-implicit-sources.test-helpers.mjs +0 -145
  507. package/dist/api-contract-discovery/response-contract-implicit-variants.d.mts +0 -2
  508. package/dist/api-contract-discovery/response-contract-implicit-variants.mjs +0 -6
  509. package/dist/api-contract-discovery/response-contract-implicit.d.mts +0 -6
  510. package/dist/api-contract-discovery/response-contract-implicit.mjs +0 -120
  511. package/dist/api-contract-discovery/response-contract-lenient.d.mts +0 -41
  512. package/dist/api-contract-discovery/response-contract-lenient.mjs +0 -52
  513. package/dist/api-contract-discovery/response-contract-media.d.mts +0 -3
  514. package/dist/api-contract-discovery/response-contract-media.mjs +0 -46
  515. package/dist/api-contract-discovery/response-contract-object-symbols.d.mts +0 -3
  516. package/dist/api-contract-discovery/response-contract-object-symbols.mjs +0 -80
  517. package/dist/api-contract-discovery/response-contract-property-mutations.d.mts +0 -5
  518. package/dist/api-contract-discovery/response-contract-property-mutations.mjs +0 -84
  519. package/dist/api-contract-discovery/response-contract-registration.d.mts +0 -11
  520. package/dist/api-contract-discovery/response-contract-registration.mjs +0 -65
  521. package/dist/api-contract-discovery/response-contract-registry.d.mts +0 -7
  522. package/dist/api-contract-discovery/response-contract-registry.mjs +0 -124
  523. package/dist/api-contract-discovery/response-contract-route-analysis.d.mts +0 -12
  524. package/dist/api-contract-discovery/response-contract-route-analysis.mjs +0 -65
  525. package/dist/api-contract-discovery/response-contract-route-syntax.d.mts +0 -7
  526. package/dist/api-contract-discovery/response-contract-route-syntax.mjs +0 -41
  527. package/dist/api-contract-discovery/response-contract-status.d.mts +0 -27
  528. package/dist/api-contract-discovery/response-contract-status.mjs +0 -82
  529. package/dist/api-contract-discovery/response-contract-symbols.d.mts +0 -5
  530. package/dist/api-contract-discovery/response-contract-symbols.mjs +0 -82
  531. package/dist/api-contract-discovery/response-contract-types.d.mts +0 -23
  532. package/dist/api-contract-discovery/response-contract-types.mjs +0 -1
  533. package/dist/api-contract-discovery/test-setup.test-helpers.d.mts +0 -3
  534. package/dist/api-contract-discovery/test-setup.test-helpers.mjs +0 -2
  535. package/dist/workflow-policy/concurrency-scope.d.mts +0 -4
  536. package/dist/workflow-policy/concurrency-scope.mjs +0 -66
  537. package/dist/workflow-policy/concurrency.d.mts +0 -10
  538. package/dist/workflow-policy/concurrency.mjs +0 -77
  539. package/dist/workflow-policy/graph.d.mts +0 -2
  540. package/dist/workflow-policy/graph.mjs +0 -138
  541. /package/dist/{api-contract-discovery/header-contract-types.mjs → post-publication-inventory/readers/public-view-options.mjs} +0 -0
  542. /package/dist/{api-contract-discovery/query-contract-types.mjs → post-publication-inventory/readers/source-options.mjs} +0 -0
@@ -1,143 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mjs';
2
- import { handlerBindings } from './request-validation-handler-state.mjs';
3
- import { httpContextInvocations } from './protocol-http-context-callers.mjs';
4
- import { potentiallyExecuted } from './protocol-executable-path.mjs';
5
- import { executedCallbackFunctions, invokedUnconditionally, } from './request-validation-callbacks.mjs';
6
- import { isConditionalPosition } from './request-validation-conditional.mjs';
7
- import { followedImplementations, inlineFunction, } from './request-validation-follow.mjs';
8
- import { calledFactory } from './request-validation-factory-calls.mjs';
9
- import { findConfig } from './request-validation-match.mjs';
10
- import { rawReadsAt } from './request-validation-reads.mjs';
11
- import { factorySite, sourceOf, validatorSite } from './request-validation-sites.mjs';
12
- import { createReporter } from './request-validation-report.mjs';
13
- import { createRegistrationScanner } from './request-validation-registration.mjs';
14
- import { createStateKey, emptyState, } from './request-validation-state-key.mjs';
15
- import { bindArguments } from './request-validation-trace.mjs';
16
- import { unwrapTransparentExpression } from './response-contract-route-syntax.mjs';
17
- /** Walks handlers and the helpers they run, collecting validation facts for one route. */
18
- export function createRouteWalker(config) {
19
- const { checker, sourceFiles, validators, factories, executedCallbacks, protocolCache } = config;
20
- const configured = [...validators, ...factories, ...executedCallbacks];
21
- const facts = { validatorSites: [], factorySites: [], carrierReads: [] };
22
- const report = createReporter();
23
- const visited = new Map();
24
- const scopeOf = (state) => ({
25
- checker,
26
- sourceFiles,
27
- configured,
28
- roots: state.roots,
29
- keys: state.keys,
30
- cache: protocolCache,
31
- });
32
- const stateKey = createStateKey();
33
- const inputs = new Set();
34
- const pendingReads = [];
35
- const isInput = (node) => {
36
- for (let current = node; current; current = current.parent)
37
- if (inputs.has(current))
38
- return true;
39
- return false;
40
- };
41
- function walkFunction(fn, state) {
42
- const seen = visited.get(fn) ?? new Set();
43
- const key = stateKey(state);
44
- if (seen.has(key))
45
- return;
46
- visited.set(fn, seen.add(key));
47
- walk(fn.body, state);
48
- }
49
- /** Records a configured validator call; its input arguments are not raw reads. */
50
- function reportValidator(call, state) {
51
- const validator = findConfig(call.expression, validators, checker);
52
- if (!validator)
53
- return false;
54
- const { site, inputNodes } = validatorSite(call, validator, scopeOf(state), state.conditional || isConditionalPosition(call));
55
- inputNodes.forEach((node) => inputs.add(node));
56
- const { conditional, ...identity } = site;
57
- // A site reached both conditionally and unconditionally is unconditional.
58
- report('validator', facts.validatorSites, site, call, identity).conditional &&= conditional;
59
- return true;
60
- }
61
- /** Records a factory site once per call node; one reached both ways is unconditional. */
62
- function recordFactory(call, factory, state, conditional) {
63
- const site = factorySite(call, factory, scopeOf(state), conditional);
64
- const { conditional: merged, ...identity } = site;
65
- report('factory', facts.factorySites, site, call, identity).conditional &&= merged;
66
- }
67
- /** Records a configured factory call whose returned handler is a registration-time value. */
68
- function reportFactory(call, state) {
69
- const factory = findConfig(call.expression, factories, checker);
70
- if (!factory)
71
- return false;
72
- recordFactory(call, factory, state, state.conditional || isConditionalPosition(call));
73
- return true;
74
- }
75
- function visitCall(call, state) {
76
- const conditional = state.conditional || isConditionalPosition(call);
77
- // A handler built by a configured factory at module level and invoked here.
78
- const built = calledFactory(call, factories, checker);
79
- if (built)
80
- recordFactory(built.call, built.config, emptyState, conditional);
81
- const inline = inlineFunction(unwrapTransparentExpression(call.expression));
82
- const callee = inline?.asteriskToken ? undefined : inline;
83
- const via = new Set(state.via).add(call);
84
- const runners = new Set(callee ? [callee] : []);
85
- if (callee) {
86
- const { keys, roots } = bindArguments(callee, call, scopeOf(state));
87
- walkFunction(callee, { keys, roots, conditional, via });
88
- }
89
- for (const implementation of followedImplementations(call, scopeOf(state))) {
90
- const { keys, roots } = bindArguments(implementation, call, scopeOf(state));
91
- runners.add(implementation);
92
- walkFunction(implementation, { keys, roots, conditional, via });
93
- }
94
- // Listed callbacks of a configured host take only the call's own condition.
95
- for (const callback of executedCallbackFunctions(call, executedCallbacks, checker))
96
- walkFunction(callback, { ...state, conditional });
97
- for (const argument of call.arguments) {
98
- const callback = unwrapTransparentExpression(argument);
99
- if (!ts.isArrowFunction(callback) && !ts.isFunctionExpression(callback))
100
- continue;
101
- const { callers } = httpContextInvocations(callback, checker, protocolCache);
102
- // A helper that runs the callback under its own condition makes the sites conditional.
103
- if (callers.length > 0)
104
- walkFunction(callback, {
105
- ...state,
106
- conditional: conditional || !invokedUnconditionally(callers, runners),
107
- });
108
- }
109
- }
110
- function walk(node, state) {
111
- if (!potentiallyExecuted(node))
112
- return;
113
- if (ts.isCallExpression(node))
114
- reportValidator(node, state);
115
- for (const read of rawReadsAt(node, scopeOf(state)))
116
- pendingReads.push({ node, read: { ...read, source: sourceOf(node) }, via: state.via });
117
- if (ts.isCallExpression(node))
118
- visitCall(node, state);
119
- ts.forEachChild(node, (child) => {
120
- if (!ts.isFunctionLike(child))
121
- walk(child, state);
122
- });
123
- }
124
- const scanRegistration = createRegistrationScanner(scopeOf, reportFactory);
125
- return {
126
- /** The collected facts; reads that only build a validator's input are left out. */
127
- get facts() {
128
- for (const { node, read, via } of pendingReads)
129
- if (!isInput(node) && ![...via].some(isInput))
130
- report('read', facts.carrierReads, read);
131
- pendingReads.length = 0;
132
- return facts;
133
- },
134
- scanRegistration: (node) => scanRegistration(node),
135
- walkHandler(proof) {
136
- walkFunction(proof.node, {
137
- ...handlerBindings(proof, checker),
138
- conditional: proof.conditional ?? false,
139
- via: emptyState.via,
140
- });
141
- },
142
- };
143
- }
@@ -1,39 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mts';
2
- import type { ExecutedCallbackConfig, FactoryConfig, ValidatorConfig } from './request-validation-types.mts';
3
- /** Synthetic library modules shared by the request-validation fixtures. */
4
- export declare const librarySources: {
5
- readonly 'lib/validation.ts': `
6
- export function validateInput(ctx: any, operation: string, input?: any): boolean {
7
- if (ctx.query.limit && input && operation) ctx.throw(400)
8
- return true
9
- }
10
- export function validatePage(ctx: any, operation: string, options?: any): boolean {
11
- if (ctx.query.limit && operation && options) ctx.throw(400)
12
- return true
13
- }
14
- `;
15
- readonly 'lib/factory.ts': `
16
- import { validateInput } from './validation'
17
- export function createThingHandler(options: any) {
18
- return (ctx: any) => {
19
- if (options.mode) validateInput(ctx, options.operation, { path: ctx.params })
20
- ctx.status = 204
21
- }
22
- }
23
- `;
24
- readonly 'lib/reexport.ts': `export { validateInput as checkInput } from './validation'`;
25
- readonly 'lib/keys.ts': `export const LIST_KEY = 'GET:/api/items'`;
26
- };
27
- export declare const validators: readonly ValidatorConfig[];
28
- /** Builds a program whose files can import each other, relatively or through `@lib/*`. */
29
- export declare function buildModuleProgram(files: Readonly<Record<string, string>>): {
30
- program: ts.Program;
31
- sourceFile(path: string): ts.SourceFile;
32
- };
33
- export type ModuleProgram = ReturnType<typeof buildModuleProgram>;
34
- /** Runs discovery over the given files with the shared configuration. */
35
- export declare function discover(built: ModuleProgram, paths: readonly string[], overrides?: {
36
- validators?: readonly ValidatorConfig[];
37
- factories?: readonly FactoryConfig[];
38
- executedCallbacks?: readonly ExecutedCallbackConfig[];
39
- }): Record<string, import("./request-validation-types.mts").RouteValidationFacts>;
@@ -1,108 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mjs';
2
- import { discoverRequestValidationFacts } from './request-validation-facts.mjs';
3
- /** Synthetic library modules shared by the request-validation fixtures. */
4
- export const librarySources = {
5
- 'lib/validation.ts': `
6
- export function validateInput(ctx: any, operation: string, input?: any): boolean {
7
- if (ctx.query.limit && input && operation) ctx.throw(400)
8
- return true
9
- }
10
- export function validatePage(ctx: any, operation: string, options?: any): boolean {
11
- if (ctx.query.limit && operation && options) ctx.throw(400)
12
- return true
13
- }
14
- `,
15
- 'lib/factory.ts': `
16
- import { validateInput } from './validation'
17
- export function createThingHandler(options: any) {
18
- return (ctx: any) => {
19
- if (options.mode) validateInput(ctx, options.operation, { path: ctx.params })
20
- ctx.status = 204
21
- }
22
- }
23
- `,
24
- 'lib/reexport.ts': `export { validateInput as checkInput } from './validation'`,
25
- 'lib/keys.ts': `export const LIST_KEY = 'GET:/api/items'`,
26
- };
27
- export const validators = [
28
- {
29
- module: 'lib/validation.ts',
30
- exportName: 'validateInput',
31
- operationArgument: 1,
32
- carriers: { kind: 'input-object', argument: 2 },
33
- },
34
- {
35
- module: 'lib/validation',
36
- exportName: 'validatePage',
37
- operationArgument: 1,
38
- carriers: {
39
- kind: 'fixed',
40
- carriers: ['query'],
41
- optionCarriers: [{ argument: 2, property: 'path', carrier: 'path' }],
42
- },
43
- },
44
- ];
45
- const factories = [
46
- {
47
- module: 'lib/factory.ts',
48
- exportName: 'createThingHandler',
49
- optionsArgument: 0,
50
- operationProperty: 'operation',
51
- carriers: ['path', 'body'],
52
- },
53
- ];
54
- const ROOT = '/virtual/';
55
- /** Builds a program whose files can import each other, relatively or through `@lib/*`. */
56
- export function buildModuleProgram(files) {
57
- const sources = new Map(Object.entries(files).map(([path, text]) => [
58
- `${ROOT}${path}`,
59
- path.startsWith('global/') ? text : `${text}\nexport {}\n`,
60
- ]));
61
- const options = {
62
- module: ts.ModuleKind.ESNext,
63
- moduleResolution: ts.ModuleResolutionKind.Bundler,
64
- baseUrl: ROOT,
65
- paths: { '@lib/*': ['lib/*'] },
66
- skipLibCheck: true,
67
- strict: true,
68
- target: ts.ScriptTarget.ESNext,
69
- };
70
- const host = ts.createCompilerHost(options, true);
71
- const getSourceFile = host.getSourceFile.bind(host);
72
- host.getSourceFile = (requested, languageVersion, ...rest) => {
73
- const text = sources.get(requested);
74
- return text === undefined
75
- ? getSourceFile(requested, languageVersion, ...rest)
76
- : ts.createSourceFile(requested, text, languageVersion, true, ts.ScriptKind.TS);
77
- };
78
- host.fileExists = (requested) => sources.has(requested) || ts.sys.fileExists(requested);
79
- host.directoryExists = (requested) => [...sources.keys()].some((path) => path.startsWith(`${requested.replace(/\/$/, '')}/`)) ||
80
- !!ts.sys.directoryExists?.(requested);
81
- host.readFile = (requested) => sources.get(requested) ?? ts.sys.readFile(requested);
82
- const program = ts.createProgram([...sources.keys()], options, host);
83
- return {
84
- program,
85
- sourceFile(path) {
86
- const sourceFile = program.getSourceFile(`${ROOT}${path}`);
87
- const diagnostics = [
88
- ...program.getSyntacticDiagnostics(sourceFile),
89
- ...program.getSemanticDiagnostics(sourceFile),
90
- ];
91
- if (diagnostics.length > 0)
92
- throw new Error(diagnostics
93
- .map((item) => ts.flattenDiagnosticMessageText(item.messageText, '\n'))
94
- .join('\n'));
95
- return sourceFile;
96
- },
97
- };
98
- }
99
- /** Runs discovery over the given files with the shared configuration. */
100
- export function discover(built, paths, overrides = {}) {
101
- return discoverRequestValidationFacts({
102
- program: built.program,
103
- sourceFiles: paths.map((path) => built.sourceFile(path)),
104
- validators,
105
- factories,
106
- ...overrides,
107
- });
108
- }
@@ -1,2 +0,0 @@
1
- import type { AmbiguousAttributionFact } from './response-contract-lenient.mts';
2
- export declare function sortAttributionFacts(facts: readonly AmbiguousAttributionFact[]): AmbiguousAttributionFact[];
@@ -1,18 +0,0 @@
1
- export function sortAttributionFacts(facts) {
2
- return [...facts].toSorted((left, right) => {
3
- const first = parseSourceLocation(left.sourceLocation);
4
- const second = parseSourceLocation(right.sourceLocation);
5
- if (first.path !== second.path)
6
- return first.path < second.path ? -1 : 1;
7
- return first.line - second.line || first.column - second.column;
8
- });
9
- }
10
- function parseSourceLocation(location) {
11
- const columnSeparator = location.lastIndexOf(':');
12
- const lineSeparator = location.lastIndexOf(':', columnSeparator - 1);
13
- return {
14
- path: location.slice(0, lineSeparator),
15
- line: Number(location.slice(lineSeparator + 1, columnSeparator)),
16
- column: Number(location.slice(columnSeparator + 1)),
17
- };
18
- }
@@ -1,3 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mts';
2
- import { type HandlerBindings, type AmbiguousHandlerBindings } from './response-contract-route-analysis.mts';
3
- export declare function ambiguousRoutesForCall(node: ts.Node, checker: ts.TypeChecker, handlerBindings: HandlerBindings, ambiguousBindings: AmbiguousHandlerBindings): readonly string[] | undefined;
@@ -1,23 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mjs';
2
- import { executableProtocolPath } from './protocol-execution-path.mjs';
3
- import { attributionFunctionSymbol, attributionSymbol } from './response-contract-symbols.mjs';
4
- import { isInlineRouteHandler } from './response-contract-route-syntax.mjs';
5
- import {} from './response-contract-route-analysis.mjs';
6
- export function ambiguousRoutesForCall(node, checker, handlerBindings, ambiguousBindings) {
7
- let current = node;
8
- while (current) {
9
- if (isInlineRouteHandler(current))
10
- return undefined;
11
- const symbol = attributionFunctionSymbol(current, checker);
12
- if (symbol) {
13
- const resolved = attributionSymbol(symbol, checker);
14
- const routes = ambiguousBindings.get(resolved);
15
- if (routes)
16
- return executableProtocolPath(node, checker, current) ? routes : undefined;
17
- if (handlerBindings.has(resolved))
18
- return undefined;
19
- }
20
- current = current.parent;
21
- }
22
- return undefined;
23
- }
@@ -1,3 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mts';
2
- export type ImplicitResponseCallLabel = 'ctx.json()' | 'ctx.pipeline()' | 'ctx.response.xml()' | 'ctx.response.buffer()' | 'ctx.response.empty()';
3
- export declare function implicitResponseCallLabel(call: ts.CallExpression, excludeDynamicErrorObjects?: boolean, checker?: ts.TypeChecker): ImplicitResponseCallLabel | undefined;
@@ -1,37 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mjs';
2
- import { isInErrorBranch } from './response-contract-error-branch.mjs';
3
- import { isXmlResponseCall } from './response-contract-media.mjs';
4
- import { containsResponseMarker } from './response-contract-registration.mjs';
5
- import { isContextMethod, isContextResponseBufferCall, isContextResponseEmptyCall, } from './response-contract-route-analysis.mjs';
6
- import { unwrapTransparentExpression } from './response-contract-route-syntax.mjs';
7
- export function implicitResponseCallLabel(call, excludeDynamicErrorObjects = false, checker) {
8
- if (isContextMethod(call.expression, 'json')) {
9
- if (!call.arguments[0] || isInErrorBranch(call, excludeDynamicErrorObjects, checker))
10
- return undefined;
11
- return 'ctx.json()';
12
- }
13
- if (isStreamJsonPipeline(call, excludeDynamicErrorObjects))
14
- return isInErrorBranch(call, excludeDynamicErrorObjects, checker) ? undefined : 'ctx.pipeline()';
15
- if (excludeDynamicErrorObjects && isInErrorBranch(call, true, checker))
16
- return undefined;
17
- if (isXmlResponseCall(call))
18
- return call.arguments[0] ? 'ctx.response.xml()' : undefined;
19
- if (isContextResponseBufferCall(call.expression))
20
- return 'ctx.response.buffer()';
21
- if (isContextResponseEmptyCall(call.expression))
22
- return 'ctx.response.empty()';
23
- if (isContextMethod(call.expression, 'pipeline') && !containsResponseMarker(call))
24
- return 'ctx.pipeline()';
25
- return undefined;
26
- }
27
- function isStreamJsonPipeline(call, unwrapArguments) {
28
- if (!isContextMethod(call.expression, 'pipeline'))
29
- return false;
30
- const originalBody = call.arguments[0];
31
- const pipelineBody = originalBody && (unwrapArguments ? unwrapTransparentExpression(originalBody) : originalBody);
32
- return (!!pipelineBody &&
33
- ts.isCallExpression(pipelineBody) &&
34
- ts.isIdentifier(pipelineBody.expression) &&
35
- pipelineBody.expression.text === 'streamJsonObject' &&
36
- !!pipelineBody.arguments[0]);
37
- }
@@ -1,7 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mts';
2
- export declare function responseMarker(expression: ts.Expression): 'apiOpenApiRawResponse' | 'apiResponse' | 'apiNoContent' | undefined;
3
- export declare function isContextMethod(expression: ts.Expression, method: string): boolean;
4
- /** Detects the framework's explicit no-body signal independently of the response status. */
5
- export declare function isContextResponseEmptyCall(expression: ts.Expression): boolean;
6
- /** Detects `ctx.response.buffer(...)`: a raw pass-through body whose shape can't be statically extracted. */
7
- export declare function isContextResponseBufferCall(expression: ts.Expression): boolean;
@@ -1,28 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mjs';
2
- export function responseMarker(expression) {
3
- if (!ts.isIdentifier(expression))
4
- return undefined;
5
- if (expression.text === 'apiOpenApiRawResponse' ||
6
- expression.text === 'apiResponse' ||
7
- expression.text === 'apiNoContent')
8
- return expression.text;
9
- return undefined;
10
- }
11
- export function isContextMethod(expression, method) {
12
- return (ts.isPropertyAccessExpression(expression) &&
13
- ts.isIdentifier(expression.expression) &&
14
- expression.expression.text === 'ctx' &&
15
- expression.name.text === method);
16
- }
17
- /** Detects the framework's explicit no-body signal independently of the response status. */
18
- export function isContextResponseEmptyCall(expression) {
19
- if (!ts.isPropertyAccessExpression(expression) || expression.name.text !== 'empty')
20
- return false;
21
- return isContextMethod(expression.expression, 'response');
22
- }
23
- /** Detects `ctx.response.buffer(...)`: a raw pass-through body whose shape can't be statically extracted. */
24
- export function isContextResponseBufferCall(expression) {
25
- if (!ts.isPropertyAccessExpression(expression) || expression.name.text !== 'buffer')
26
- return false;
27
- return isContextMethod(expression.expression, 'response');
28
- }
@@ -1,15 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mts';
2
- /**
3
- * Detects a hand-rolled early-return error guard: `ctx.setStatus(NNN >= 400)` followed by a
4
- * response body call in the same block (e.g. `auth-me.mts`'s `ctx.setStatus(401); return
5
- * ctx.json({error})` before its `ctx.json({user})` success body). Skipping these keeps the
6
- * bare implicit key free for the route's actual success body instead of locking onto whichever
7
- * error branch happens to appear first in document order.
8
- *
9
- * Deliberately narrow: only a *direct* sibling `ExpressionStatement` counts, not a nested one
10
- * inside an earlier sibling's own subtree (e.g. inside an earlier, unrelated `if` guard's own
11
- * block). Recursing into nested subtrees would flag a trailing success statement that follows
12
- * two independent, self-contained early-return guards, even though neither guard's error status
13
- * is in effect on the path that reaches the trailing statement.
14
- */
15
- export declare function isInErrorBranch(call: ts.CallExpression, excludeDynamicErrorObjects?: boolean, checker?: ts.TypeChecker): boolean;
@@ -1,150 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mjs';
2
- import { isContextMethod } from './response-contract-route-analysis.mjs';
3
- import { potentiallyExecuted } from './protocol-executable-path.mjs';
4
- import { unwrapTransparentExpression } from './response-contract-route-syntax.mjs';
5
- import { responseBodyExpression } from './response-contract-registration.mjs';
6
- /**
7
- * Detects a hand-rolled early-return error guard: `ctx.setStatus(NNN >= 400)` followed by a
8
- * response body call in the same block (e.g. `auth-me.mts`'s `ctx.setStatus(401); return
9
- * ctx.json({error})` before its `ctx.json({user})` success body). Skipping these keeps the
10
- * bare implicit key free for the route's actual success body instead of locking onto whichever
11
- * error branch happens to appear first in document order.
12
- *
13
- * Deliberately narrow: only a *direct* sibling `ExpressionStatement` counts, not a nested one
14
- * inside an earlier sibling's own subtree (e.g. inside an earlier, unrelated `if` guard's own
15
- * block). Recursing into nested subtrees would flag a trailing success statement that follows
16
- * two independent, self-contained early-return guards, even though neither guard's error status
17
- * is in effect on the path that reaches the trailing statement.
18
- */
19
- export function isInErrorBranch(call, excludeDynamicErrorObjects = false, checker) {
20
- let statement = call;
21
- while (!ts.isStatement(statement))
22
- statement = statement.parent;
23
- if (!excludeDynamicErrorObjects)
24
- return precededByErrorStatus(statement);
25
- const latestStatus = latestStatusSetter(statement);
26
- if (!latestStatus)
27
- return false;
28
- if (isBareErrorStatusStatement(latestStatus, true))
29
- return true;
30
- return isErrorObjectJson(call, checker) && isDynamicStatusStatement(latestStatus);
31
- }
32
- /**
33
- * Walks outward through enclosing blocks so a `ctx.setStatus(>=400)` set before the branch's own
34
- * containing statement — not just a direct sibling in the same block — still marks the branch as
35
- * an error path. Needed for a shared helper like `data-request.mts`'s `sendActiveRequestConflict`,
36
- * which sets one error status up front, then branches into two differently-shaped `ctx.json`
37
- * bodies nested one block deeper.
38
- */
39
- function precededByErrorStatus(statement) {
40
- return precededByStatus(statement, isBareErrorStatusStatement);
41
- }
42
- function precededByStatus(statement, matches) {
43
- const block = statement.parent;
44
- if (!ts.isBlock(block))
45
- return false;
46
- const index = block.statements.indexOf(statement);
47
- if (block.statements.slice(0, index).some(matches))
48
- return true;
49
- const enclosing = block.parent;
50
- return ts.isStatement(enclosing) ? precededByStatus(enclosing, matches) : false;
51
- }
52
- function latestStatusSetter(statement) {
53
- const block = statement.parent;
54
- if (!ts.isBlock(block))
55
- return undefined;
56
- const index = block.statements.indexOf(statement);
57
- for (let previous = index - 1; previous >= 0; previous--) {
58
- const candidate = block.statements[previous];
59
- if (isStatusSetterStatement(candidate)) {
60
- if (potentiallyExecuted(candidate))
61
- return candidate;
62
- continue;
63
- }
64
- if (mayConditionallySetStatus(candidate))
65
- return undefined;
66
- }
67
- const enclosing = block.parent;
68
- return ts.isStatement(enclosing) ? latestStatusSetter(enclosing) : undefined;
69
- }
70
- function mayConditionallySetStatus(statement) {
71
- if (ts.isFunctionDeclaration(statement) ||
72
- ts.isInterfaceDeclaration(statement) ||
73
- ts.isTypeAliasDeclaration(statement) ||
74
- ts.isImportDeclaration(statement))
75
- return false;
76
- let found = false;
77
- const inspect = (node) => {
78
- if (node !== statement && isNestedFunction(node))
79
- return;
80
- if (ts.isCallExpression(node) &&
81
- isContextMethod(node.expression, 'setStatus') &&
82
- potentiallyExecuted(node))
83
- found = true;
84
- ts.forEachChild(node, inspect);
85
- };
86
- inspect(statement);
87
- return found;
88
- }
89
- function isNestedFunction(node) {
90
- return (ts.isFunctionDeclaration(node) ||
91
- ts.isFunctionExpression(node) ||
92
- ts.isArrowFunction(node) ||
93
- ts.isMethodDeclaration(node) ||
94
- ts.isGetAccessorDeclaration(node) ||
95
- ts.isSetAccessorDeclaration(node) ||
96
- ts.isConstructorDeclaration(node));
97
- }
98
- function isStatusSetterStatement(statement) {
99
- return (ts.isExpressionStatement(statement) &&
100
- ts.isCallExpression(statement.expression) &&
101
- isContextMethod(statement.expression.expression, 'setStatus'));
102
- }
103
- function isDynamicStatusStatement(statement) {
104
- const status = statement.expression.arguments[0];
105
- return !!status && !ts.isNumericLiteral(unwrapTransparentExpression(status));
106
- }
107
- function isErrorObjectJson(call, checker) {
108
- const body = responseBodyExpression(call, true);
109
- const errorObject = body && resolveConstObjectAlias(unwrapTransparentExpression(body), checker);
110
- return (!!errorObject &&
111
- ts.isObjectLiteralExpression(errorObject) &&
112
- errorObject.properties.some((property) => {
113
- if (ts.isSpreadAssignment(property) || ts.isMethodDeclaration(property))
114
- return false;
115
- // Every remaining object-literal member has a name; spread members were excluded above.
116
- const name = property.name;
117
- if (ts.isIdentifier(name) || ts.isStringLiteral(name))
118
- return name.text === 'error';
119
- if (!ts.isComputedPropertyName(name))
120
- return false;
121
- const key = unwrapTransparentExpression(name.expression);
122
- return ts.isStringLiteral(key) && key.text === 'error';
123
- }));
124
- }
125
- function resolveConstObjectAlias(expression, checker, seen = new Set()) {
126
- if (!checker || !ts.isIdentifier(expression))
127
- return expression;
128
- const symbol = checker.getSymbolAtLocation(expression);
129
- if (!symbol || seen.has(symbol))
130
- return expression;
131
- seen.add(symbol);
132
- const declaration = symbol.valueDeclaration;
133
- if (!declaration ||
134
- !ts.isVariableDeclaration(declaration) ||
135
- !declaration.initializer ||
136
- !ts.isVariableDeclarationList(declaration.parent) ||
137
- !(declaration.parent.flags & ts.NodeFlags.Const))
138
- return expression;
139
- return resolveConstObjectAlias(unwrapTransparentExpression(declaration.initializer), checker, seen);
140
- }
141
- function isBareErrorStatusStatement(statement, unwrapStatus = false) {
142
- if (!ts.isExpressionStatement(statement))
143
- return false;
144
- const expression = statement.expression;
145
- if (!ts.isCallExpression(expression) || !isContextMethod(expression.expression, 'setStatus'))
146
- return false;
147
- const statusArgument = expression.arguments[0];
148
- const status = statusArgument && (unwrapStatus ? unwrapTransparentExpression(statusArgument) : statusArgument);
149
- return !!status && ts.isNumericLiteral(status) && Number(status.text) >= 400;
150
- }
@@ -1,3 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mts';
2
- import type { AmbiguousHandlerBindings, HandlerBindings } from './response-contract-route-analysis.mts';
3
- export declare function collectHandlerBindings(sourceFiles: readonly ts.SourceFile[], checker: ts.TypeChecker, ambiguousBindings?: AmbiguousHandlerBindings): HandlerBindings;