vouchington-tooling 0.35.0 → 0.36.1

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 (532) 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 +2 -2
  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/parser-support.mjs +2 -2
  114. package/dist/finite-enum-ripple/parsers.mjs +3 -3
  115. package/dist/finite-enum-ripple/structured-route-check.mjs +4 -4
  116. package/dist/finite-enum-ripple/types.mjs +3 -3
  117. package/dist/finite-enum-ripple/union-factory-check.mjs +2 -2
  118. package/dist/finite-enum-ripple/union-types.mjs +4 -4
  119. package/dist/gh-api-shell-quoting/index.mjs +2 -2
  120. package/dist/gh-api-shell-quoting/logical-line.mjs +1 -1
  121. package/dist/gh-api-shell-quoting/scan.mjs +1 -1
  122. package/dist/gh-api-shell-quoting/yaml.mjs +1 -1
  123. package/dist/gh-cli/index.mjs +4 -4
  124. package/dist/gha-artifacts-cleanup/commands.mjs +2 -2
  125. package/dist/gha-artifacts-cleanup/index.mjs +4 -4
  126. package/dist/gha-check-run/cli.mjs +2 -2
  127. package/dist/gha-check-run/index.mjs +2 -2
  128. package/dist/gha-claude-post-review/index.mjs +2 -2
  129. package/dist/gha-post-review/claude-token.d.mts +2 -2
  130. package/dist/gha-post-review/claude-token.mjs +1 -1
  131. package/dist/gha-post-review/cli.mjs +1 -1
  132. package/dist/gha-post-review/github.mjs +7 -7
  133. package/dist/gha-post-review/index.mjs +6 -6
  134. package/dist/gha-post-review/post.mjs +2 -2
  135. package/dist/gha-post-review/pull-io.mjs +1 -1
  136. package/dist/gha-post-review/token.mjs +1 -1
  137. package/dist/gha-pr-checkpoint/index.mjs +3 -3
  138. package/dist/gha-pr-checkpoint/resume.mjs +1 -1
  139. package/dist/gha-pr-checkpoint/update.mjs +1 -1
  140. package/dist/gha-review-payload/cli.mjs +2 -2
  141. package/dist/gha-review-payload/file.mjs +1 -1
  142. package/dist/gha-review-payload/index.mjs +4 -4
  143. package/dist/gha-review-payload/remap.mjs +1 -1
  144. package/dist/gha-runtime-audit/audit.mjs +4 -4
  145. package/dist/gha-runtime-audit/index.mjs +3 -3
  146. package/dist/gha-workspace-policy/docker-options.mjs +1 -1
  147. package/dist/gha-workspace-policy/docker-workspace-user.mjs +2 -2
  148. package/dist/gha-workspace-policy/index.mjs +3 -3
  149. package/dist/gha-workspace-policy/shell-tokens.mjs +1 -1
  150. package/dist/gha-workspace-policy/sparse-checkout.mjs +1 -1
  151. package/dist/github-projects/index.mjs +2 -2
  152. package/dist/github-projects/project-audit.mjs +1 -1
  153. package/dist/index.mjs +55 -55
  154. package/dist/markdown/content-facts.mjs +1 -1
  155. package/dist/markdown/document-sections.mjs +2 -2
  156. package/dist/markdown/html-blocks.mjs +1 -1
  157. package/dist/markdown/index.mjs +10 -10
  158. package/dist/markdown/sections.mjs +2 -2
  159. package/dist/markdown/tables.mjs +2 -2
  160. package/dist/markdown/tasks.mjs +1 -1
  161. package/dist/mcp-server/context.mjs +2 -2
  162. package/dist/mcp-server/dispatch.mjs +8 -8
  163. package/dist/mcp-server/git-fixture.test-helpers.mjs +1 -1
  164. package/dist/mcp-server/handlers-journal.mjs +4 -4
  165. package/dist/mcp-server/handlers-outbox.mjs +2 -2
  166. package/dist/mcp-server/handlers-session.mjs +3 -3
  167. package/dist/mcp-server/harness.test-helpers.mjs +4 -4
  168. package/dist/mcp-server/main.mjs +1 -1
  169. package/dist/mcp-server/run.mjs +3 -3
  170. package/dist/mcp-server/sdk.mjs +1 -1
  171. package/dist/mcp-server/server.mjs +2 -2
  172. package/dist/mcp-server/worktree.mjs +2 -2
  173. package/dist/nuget-central-version/cli.mjs +1 -1
  174. package/dist/openapi-document/build-openapi-catalog-sse.mjs +1 -1
  175. package/dist/openapi-document/build-openapi-document.mjs +8 -8
  176. package/dist/openapi-document/build-openapi-request.mjs +1 -1
  177. package/dist/openapi-document/build-openapi-response.mjs +3 -3
  178. package/dist/openapi-document/build-openapi-sse-events.mjs +1 -1
  179. package/dist/openapi-document/component-registry.mjs +1 -1
  180. package/dist/openapi-document/contract-schema-intersection-merge.mjs +1 -1
  181. package/dist/openapi-document/contract-schema-to-openapi.mjs +1 -1
  182. package/dist/openapi-document/index.mjs +12 -12
  183. package/dist/openapi-document/openapi-route-helpers.mjs +1 -1
  184. package/dist/pg-schema-snapshot/build-snapshot.mjs +3 -3
  185. package/dist/pg-schema-snapshot/catalog-objects.mjs +1 -1
  186. package/dist/pg-schema-snapshot/catalog-queries.mjs +4 -4
  187. package/dist/pg-schema-snapshot/catalog-table-constraints.mjs +1 -1
  188. package/dist/pg-schema-snapshot/catalog-table-indexes.mjs +1 -1
  189. package/dist/pg-schema-snapshot/catalog-tables.mjs +1 -1
  190. package/dist/pg-schema-snapshot/generate.mjs +5 -5
  191. package/dist/pg-schema-snapshot/index.mjs +6 -6
  192. package/dist/pg-schema-snapshot/markdown-files.mjs +1 -1
  193. package/dist/pg-schema-snapshot/render-markdown.mjs +1 -1
  194. package/dist/pg-schema-snapshot/table-snapshot-constraints.mjs +1 -1
  195. package/dist/pg-schema-snapshot/table-snapshot.mjs +3 -3
  196. package/dist/pnpm-deploy/index.mjs +3 -3
  197. package/dist/pnpm-deploy/restore.mjs +1 -1
  198. package/dist/pnpm-install/exec.mjs +1 -1
  199. package/dist/pnpm-install/index.mjs +8 -8
  200. package/dist/pnpm-install/install-operations.mjs +6 -6
  201. package/dist/pnpm-install/metadata-legacy.mjs +1 -1
  202. package/dist/pnpm-install/metadata.d.mts +1 -1
  203. package/dist/pnpm-install/metadata.mjs +2 -2
  204. package/dist/pnpm-install/native-health.mjs +2 -2
  205. package/dist/pnpm-install/pnpm-install-fixture.test-helpers.mjs +2 -2
  206. package/dist/pnpm-install/runner.mjs +7 -7
  207. package/dist/post-publication-inventory/index.d.mts +6 -0
  208. package/dist/post-publication-inventory/index.mjs +6 -2
  209. package/dist/post-publication-inventory/readers/compose-appends.d.mts +7 -0
  210. package/dist/post-publication-inventory/readers/compose-appends.mjs +38 -0
  211. package/dist/post-publication-inventory/readers/composes.d.mts +2 -0
  212. package/dist/post-publication-inventory/readers/composes.mjs +79 -0
  213. package/dist/post-publication-inventory/readers/composition.d.mts +2 -0
  214. package/dist/post-publication-inventory/readers/composition.mjs +62 -0
  215. package/dist/post-publication-inventory/readers/public-boundary-ast.d.mts +5 -0
  216. package/dist/post-publication-inventory/readers/public-boundary-ast.mjs +33 -0
  217. package/dist/post-publication-inventory/readers/public-boundary-consumed.d.mts +3 -0
  218. package/dist/post-publication-inventory/readers/public-boundary-consumed.mjs +39 -0
  219. package/dist/post-publication-inventory/readers/public-boundary-dataflow.d.mts +3 -0
  220. package/dist/post-publication-inventory/readers/public-boundary-dataflow.mjs +61 -0
  221. package/dist/post-publication-inventory/readers/public-boundary-then.d.mts +9 -0
  222. package/dist/post-publication-inventory/readers/public-boundary-then.mjs +31 -0
  223. package/dist/post-publication-inventory/readers/public-boundary.d.mts +3 -0
  224. package/dist/post-publication-inventory/readers/public-boundary.mjs +71 -0
  225. package/dist/post-publication-inventory/readers/public-view-ast.d.mts +6 -0
  226. package/dist/post-publication-inventory/readers/public-view-ast.mjs +67 -0
  227. package/dist/post-publication-inventory/readers/public-view-options.d.mts +8 -0
  228. package/dist/post-publication-inventory/readers/public-view-protection.d.mts +2 -0
  229. package/dist/post-publication-inventory/readers/public-view-protection.mjs +83 -0
  230. package/dist/post-publication-inventory/readers/public-view.d.mts +2 -0
  231. package/dist/post-publication-inventory/readers/public-view.mjs +117 -0
  232. package/dist/post-publication-inventory/readers/source-ast.d.mts +30 -0
  233. package/dist/post-publication-inventory/readers/source-ast.mjs +52 -0
  234. package/dist/post-publication-inventory/readers/source-executors.d.mts +4 -0
  235. package/dist/post-publication-inventory/readers/source-executors.mjs +38 -0
  236. package/dist/post-publication-inventory/readers/source-helpers.d.mts +16 -0
  237. package/dist/post-publication-inventory/readers/source-helpers.mjs +72 -0
  238. package/dist/post-publication-inventory/readers/source-options.d.mts +8 -0
  239. package/dist/post-publication-inventory/readers/source-sql.d.mts +3 -0
  240. package/dist/post-publication-inventory/readers/source-sql.mjs +17 -0
  241. package/dist/post-publication-inventory/readers/sql-executors.mjs +2 -2
  242. package/dist/post-publication-inventory/readers/sql-source.mjs +3 -3
  243. package/dist/post-publication-inventory/readers/sql-template.mjs +1 -1
  244. package/dist/post-publication-inventory/writers/source.mjs +1 -1
  245. package/dist/retrospective-facts/coverage.mjs +1 -1
  246. package/dist/retrospective-facts/foreign.mjs +3 -3
  247. package/dist/retrospective-facts/index.mjs +4 -4
  248. package/dist/retrospective-facts/local.mjs +4 -4
  249. package/dist/retrospective-transcript/claude-blocks.mjs +1 -1
  250. package/dist/retrospective-transcript/claude.mjs +2 -2
  251. package/dist/retrospective-transcript/codex-messages.mjs +1 -1
  252. package/dist/retrospective-transcript/codex-payload.mjs +2 -2
  253. package/dist/retrospective-transcript/codex-records.mjs +3 -3
  254. package/dist/retrospective-transcript/codex-segment.mjs +1 -1
  255. package/dist/retrospective-transcript/codex.mjs +2 -2
  256. package/dist/retrospective-transcript/index.mjs +9 -9
  257. package/dist/retrospective-transcript/resolve-transcript-file.mjs +2 -2
  258. package/dist/scc-complexity/baseline.mjs +2 -2
  259. package/dist/scc-complexity/index.mjs +8 -8
  260. package/dist/scc-complexity/parser.mjs +1 -1
  261. package/dist/scc-complexity/scope-config.mjs +1 -1
  262. package/dist/session-friction/audit-block.mjs +1 -1
  263. package/dist/session-friction/ci-failures.mjs +2 -2
  264. package/dist/session-friction/classify.mjs +2 -2
  265. package/dist/session-friction/coverage-ledger.mjs +1 -1
  266. package/dist/session-friction/index.mjs +5 -5
  267. package/dist/session-friction/log-file.mjs +2 -2
  268. package/dist/session-friction/log.mjs +7 -7
  269. package/dist/session-friction/normalize.mjs +1 -1
  270. package/dist/session-friction/report.mjs +5 -5
  271. package/dist/session-friction/sandbox.mjs +1 -1
  272. package/dist/session-friction/session-id.mjs +1 -1
  273. package/dist/shared-context/index.mjs +1 -1
  274. package/dist/skill-discovery/index.mjs +3 -3
  275. package/dist/sql-ast/add-column.mjs +1 -1
  276. package/dist/sql-ast/constraint-do-block.mjs +2 -2
  277. package/dist/sql-ast/constraint-shared.mjs +1 -1
  278. package/dist/sql-ast/constraint.mjs +4 -4
  279. package/dist/sql-ast/create-table.mjs +2 -2
  280. package/dist/sql-ast/drop-index.mjs +2 -2
  281. package/dist/sql-ast/implicit-indexes.mjs +1 -1
  282. package/dist/sql-ast/index-metadata.mjs +3 -3
  283. package/dist/sql-ast/index.mjs +8 -8
  284. package/dist/sql-scanner/comments.mjs +1 -1
  285. package/dist/sql-scanner/index.mjs +3 -3
  286. package/dist/sql-scanner/literals.mjs +1 -1
  287. package/dist/swift-semantic-equal/cli.mjs +1 -1
  288. package/dist/swift-semantic-equal/index.mjs +1 -1
  289. package/dist/transient-retry/index.mjs +2 -2
  290. package/dist/vitest-blob-manifest/cli.mjs +2 -2
  291. package/dist/vitest-blob-manifest/index.mjs +4 -4
  292. package/dist/vitest-blob-manifest/report-attempt-cli.mjs +2 -2
  293. package/dist/vitest-blob-manifest/report-attempt.mjs +1 -1
  294. package/dist/vitest-blob-manifest/reports-cli.mjs +3 -3
  295. package/dist/vitest-blob-manifest/reports-source.mjs +2 -2
  296. package/dist/vitest-blob-manifest/reports.mjs +2 -2
  297. package/dist/vitest-diagnostics/index.mjs +8 -8
  298. package/dist/vitest-diagnostics/vitest-fork-exit-records.mjs +1 -1
  299. package/dist/vitest-diagnostics/vitest-fork-exit-sentinel.mjs +2 -2
  300. package/dist/vitest-diagnostics/vitest-fork-leak-detection.mjs +2 -2
  301. package/dist/vitest-diagnostics/vitest-worker-exit-diagnostics-reporter.mjs +2 -2
  302. package/dist/workflow-policy/condition-entailment.mjs +1 -1
  303. package/dist/workflow-policy/index.mjs +4 -4
  304. package/dist/workflow-policy/permission-inheritance.mjs +1 -1
  305. package/dist/workflow-policy/permission-mismatches.mjs +2 -2
  306. package/dist/workflow-policy/secret-readiness.mjs +2 -2
  307. package/dist/workspace-gates/first-party-graph.mjs +2 -2
  308. package/dist/workspace-gates/index.mjs +1 -1
  309. package/dist/workspace-gates/manifest-version-assertions.mjs +2 -2
  310. package/dist/workspace-gates/manifest-version-parser.mjs +1 -1
  311. package/dist/workspace-gates/options.mjs +1 -1
  312. package/dist/workspace-gates/policy.mjs +7 -7
  313. package/dist/workspace-gates/test-helpers.d.mts +2 -2
  314. package/package.json +3 -6
  315. package/dist/api-contract-discovery/header-contract-parser.d.mts +0 -3
  316. package/dist/api-contract-discovery/header-contract-parser.mjs +0 -93
  317. package/dist/api-contract-discovery/header-contract-registry.d.mts +0 -3
  318. package/dist/api-contract-discovery/header-contract-registry.mjs +0 -40
  319. package/dist/api-contract-discovery/header-contract-types.d.mts +0 -19
  320. package/dist/api-contract-discovery/index.d.mts +0 -34
  321. package/dist/api-contract-discovery/index.mjs +0 -27
  322. package/dist/api-contract-discovery/protocol-analysis-cache.d.mts +0 -21
  323. package/dist/api-contract-discovery/protocol-analysis-cache.mjs +0 -7
  324. package/dist/api-contract-discovery/protocol-body-status.d.mts +0 -2
  325. package/dist/api-contract-discovery/protocol-body-status.mjs +0 -4
  326. package/dist/api-contract-discovery/protocol-callback-argument-bindings.d.mts +0 -7
  327. package/dist/api-contract-discovery/protocol-callback-argument-bindings.mjs +0 -33
  328. package/dist/api-contract-discovery/protocol-callback-invocation.d.mts +0 -6
  329. package/dist/api-contract-discovery/protocol-callback-invocation.mjs +0 -111
  330. package/dist/api-contract-discovery/protocol-callback-mutations.d.mts +0 -5
  331. package/dist/api-contract-discovery/protocol-callback-mutations.mjs +0 -42
  332. package/dist/api-contract-discovery/protocol-callback-registration.d.mts +0 -3
  333. package/dist/api-contract-discovery/protocol-callback-registration.mjs +0 -27
  334. package/dist/api-contract-discovery/protocol-callback-values.d.mts +0 -18
  335. package/dist/api-contract-discovery/protocol-callback-values.mjs +0 -114
  336. package/dist/api-contract-discovery/protocol-context-alias.d.mts +0 -3
  337. package/dist/api-contract-discovery/protocol-context-alias.mjs +0 -20
  338. package/dist/api-contract-discovery/protocol-contract-extraction.d.mts +0 -9
  339. package/dist/api-contract-discovery/protocol-contract-extraction.mjs +0 -87
  340. package/dist/api-contract-discovery/protocol-contract-keys.d.mts +0 -1
  341. package/dist/api-contract-discovery/protocol-contract-keys.mjs +0 -8
  342. package/dist/api-contract-discovery/protocol-contract-registry.d.mts +0 -5
  343. package/dist/api-contract-discovery/protocol-contract-registry.mjs +0 -133
  344. package/dist/api-contract-discovery/protocol-executable-path.d.mts +0 -3
  345. package/dist/api-contract-discovery/protocol-executable-path.mjs +0 -64
  346. package/dist/api-contract-discovery/protocol-execution-path.d.mts +0 -4
  347. package/dist/api-contract-discovery/protocol-execution-path.mjs +0 -16
  348. package/dist/api-contract-discovery/protocol-http-association.d.mts +0 -7
  349. package/dist/api-contract-discovery/protocol-http-association.mjs +0 -108
  350. package/dist/api-contract-discovery/protocol-http-body-kinds.d.mts +0 -3
  351. package/dist/api-contract-discovery/protocol-http-body-kinds.mjs +0 -19
  352. package/dist/api-contract-discovery/protocol-http-context-callers.d.mts +0 -7
  353. package/dist/api-contract-discovery/protocol-http-context-callers.mjs +0 -40
  354. package/dist/api-contract-discovery/protocol-http-context-escapes.d.mts +0 -3
  355. package/dist/api-contract-discovery/protocol-http-context-escapes.mjs +0 -95
  356. package/dist/api-contract-discovery/protocol-http-context.d.mts +0 -8
  357. package/dist/api-contract-discovery/protocol-http-context.mjs +0 -85
  358. package/dist/api-contract-discovery/protocol-http-emission.d.mts +0 -3
  359. package/dist/api-contract-discovery/protocol-http-emission.mjs +0 -76
  360. package/dist/api-contract-discovery/protocol-http-implicit-taint.d.mts +0 -7
  361. package/dist/api-contract-discovery/protocol-http-implicit-taint.mjs +0 -26
  362. package/dist/api-contract-discovery/protocol-http-method-access.d.mts +0 -9
  363. package/dist/api-contract-discovery/protocol-http-method-access.mjs +0 -34
  364. package/dist/api-contract-discovery/protocol-http-method-mutations.d.mts +0 -3
  365. package/dist/api-contract-discovery/protocol-http-method-mutations.mjs +0 -31
  366. package/dist/api-contract-discovery/protocol-http-reflect.d.mts +0 -5
  367. package/dist/api-contract-discovery/protocol-http-reflect.mjs +0 -45
  368. package/dist/api-contract-discovery/protocol-http-registration.d.mts +0 -12
  369. package/dist/api-contract-discovery/protocol-http-registration.mjs +0 -53
  370. package/dist/api-contract-discovery/protocol-http-response-mutations.d.mts +0 -3
  371. package/dist/api-contract-discovery/protocol-http-response-mutations.mjs +0 -31
  372. package/dist/api-contract-discovery/protocol-marker-analysis.d.mts +0 -7
  373. package/dist/api-contract-discovery/protocol-marker-analysis.mjs +0 -50
  374. package/dist/api-contract-discovery/protocol-opaque-callback.d.mts +0 -3
  375. package/dist/api-contract-discovery/protocol-opaque-callback.mjs +0 -107
  376. package/dist/api-contract-discovery/protocol-platform-callbacks.d.mts +0 -7
  377. package/dist/api-contract-discovery/protocol-platform-callbacks.mjs +0 -76
  378. package/dist/api-contract-discovery/protocol-platform-mutation-targets.d.mts +0 -5
  379. package/dist/api-contract-discovery/protocol-platform-mutation-targets.mjs +0 -89
  380. package/dist/api-contract-discovery/protocol-platform-writes.d.mts +0 -3
  381. package/dist/api-contract-discovery/protocol-platform-writes.mjs +0 -92
  382. package/dist/api-contract-discovery/protocol-requested-keys.d.mts +0 -5
  383. package/dist/api-contract-discovery/protocol-requested-keys.mjs +0 -45
  384. package/dist/api-contract-discovery/protocol-sse-callers.d.mts +0 -7
  385. package/dist/api-contract-discovery/protocol-sse-callers.mjs +0 -67
  386. package/dist/api-contract-discovery/protocol-sse-emission.d.mts +0 -11
  387. package/dist/api-contract-discovery/protocol-sse-emission.mjs +0 -61
  388. package/dist/api-contract-discovery/protocol-sse-feasible-status.d.mts +0 -3
  389. package/dist/api-contract-discovery/protocol-sse-feasible-status.mjs +0 -24
  390. package/dist/api-contract-discovery/protocol-sse-raw-writes.d.mts +0 -9
  391. package/dist/api-contract-discovery/protocol-sse-raw-writes.mjs +0 -99
  392. package/dist/api-contract-discovery/protocol-sse-status.d.mts +0 -3
  393. package/dist/api-contract-discovery/protocol-sse-status.mjs +0 -84
  394. package/dist/api-contract-discovery/protocol-sse-write-access.d.mts +0 -9
  395. package/dist/api-contract-discovery/protocol-sse-write-access.mjs +0 -42
  396. package/dist/api-contract-discovery/protocol-sse-write-helpers.d.mts +0 -7
  397. package/dist/api-contract-discovery/protocol-sse-write-helpers.mjs +0 -82
  398. package/dist/api-contract-discovery/protocol-sse-write-mutations.d.mts +0 -9
  399. package/dist/api-contract-discovery/protocol-sse-write-mutations.mjs +0 -42
  400. package/dist/api-contract-discovery/protocol-sse-write-resolution.d.mts +0 -14
  401. package/dist/api-contract-discovery/protocol-sse-write-resolution.mjs +0 -79
  402. package/dist/api-contract-discovery/protocol-status-dominance.d.mts +0 -5
  403. package/dist/api-contract-discovery/protocol-status-dominance.mjs +0 -35
  404. package/dist/api-contract-discovery/protocol-write-receiver.d.mts +0 -9
  405. package/dist/api-contract-discovery/protocol-write-receiver.mjs +0 -79
  406. package/dist/api-contract-discovery/query-contract-extraction.d.mts +0 -3
  407. package/dist/api-contract-discovery/query-contract-extraction.mjs +0 -82
  408. package/dist/api-contract-discovery/query-contract-literals.d.mts +0 -13
  409. package/dist/api-contract-discovery/query-contract-literals.mjs +0 -83
  410. package/dist/api-contract-discovery/query-contract-registry.d.mts +0 -3
  411. package/dist/api-contract-discovery/query-contract-registry.mjs +0 -70
  412. package/dist/api-contract-discovery/query-contract-types.d.mts +0 -8
  413. package/dist/api-contract-discovery/registered-route-binding-writes.d.mts +0 -4
  414. package/dist/api-contract-discovery/registered-route-binding-writes.mjs +0 -47
  415. package/dist/api-contract-discovery/registered-route-catalog.d.mts +0 -10
  416. package/dist/api-contract-discovery/registered-route-catalog.mjs +0 -85
  417. package/dist/api-contract-discovery/registered-route-factory-returns.d.mts +0 -3
  418. package/dist/api-contract-discovery/registered-route-factory-returns.mjs +0 -29
  419. package/dist/api-contract-discovery/registered-route-handler-analysis.d.mts +0 -12
  420. package/dist/api-contract-discovery/registered-route-handler-analysis.mjs +0 -119
  421. package/dist/api-contract-discovery/registered-route-handler-helpers.d.mts +0 -3
  422. package/dist/api-contract-discovery/registered-route-handler-helpers.mjs +0 -16
  423. package/dist/api-contract-discovery/registered-route-runtime-parameters.d.mts +0 -3
  424. package/dist/api-contract-discovery/registered-route-runtime-parameters.mjs +0 -5
  425. package/dist/api-contract-discovery/registered-route-terminal-error.d.mts +0 -3
  426. package/dist/api-contract-discovery/registered-route-terminal-error.mjs +0 -98
  427. package/dist/api-contract-discovery/request-contract-implicit.d.mts +0 -17
  428. package/dist/api-contract-discovery/request-contract-implicit.mjs +0 -73
  429. package/dist/api-contract-discovery/request-contract-lenient.d.mts +0 -28
  430. package/dist/api-contract-discovery/request-contract-lenient.mjs +0 -59
  431. package/dist/api-contract-discovery/request-contract-registry.d.mts +0 -14
  432. package/dist/api-contract-discovery/request-contract-registry.mjs +0 -63
  433. package/dist/api-contract-discovery/request-contract-route-analysis.d.mts +0 -25
  434. package/dist/api-contract-discovery/request-contract-route-analysis.mjs +0 -68
  435. package/dist/api-contract-discovery/request-contract-types.d.mts +0 -12
  436. package/dist/api-contract-discovery/request-contract-types.mjs +0 -1
  437. package/dist/api-contract-discovery/request-validation-callbacks.d.mts +0 -9
  438. package/dist/api-contract-discovery/request-validation-callbacks.mjs +0 -27
  439. package/dist/api-contract-discovery/request-validation-checker.d.mts +0 -7
  440. package/dist/api-contract-discovery/request-validation-checker.mjs +0 -25
  441. package/dist/api-contract-discovery/request-validation-conditional.d.mts +0 -6
  442. package/dist/api-contract-discovery/request-validation-conditional.mjs +0 -31
  443. package/dist/api-contract-discovery/request-validation-factory-calls.d.mts +0 -11
  444. package/dist/api-contract-discovery/request-validation-factory-calls.mjs +0 -23
  445. package/dist/api-contract-discovery/request-validation-facts.d.mts +0 -16
  446. package/dist/api-contract-discovery/request-validation-facts.mjs +0 -64
  447. package/dist/api-contract-discovery/request-validation-follow.d.mts +0 -24
  448. package/dist/api-contract-discovery/request-validation-follow.mjs +0 -38
  449. package/dist/api-contract-discovery/request-validation-handler-state.d.mts +0 -8
  450. package/dist/api-contract-discovery/request-validation-handler-state.mjs +0 -35
  451. package/dist/api-contract-discovery/request-validation-input.d.mts +0 -12
  452. package/dist/api-contract-discovery/request-validation-input.mjs +0 -43
  453. package/dist/api-contract-discovery/request-validation-keys.d.mts +0 -25
  454. package/dist/api-contract-discovery/request-validation-keys.mjs +0 -119
  455. package/dist/api-contract-discovery/request-validation-match.d.mts +0 -11
  456. package/dist/api-contract-discovery/request-validation-match.mjs +0 -47
  457. package/dist/api-contract-discovery/request-validation-mutation.d.mts +0 -7
  458. package/dist/api-contract-discovery/request-validation-mutation.mjs +0 -80
  459. package/dist/api-contract-discovery/request-validation-origin.d.mts +0 -20
  460. package/dist/api-contract-discovery/request-validation-origin.mjs +0 -71
  461. package/dist/api-contract-discovery/request-validation-reads.d.mts +0 -13
  462. package/dist/api-contract-discovery/request-validation-reads.mjs +0 -88
  463. package/dist/api-contract-discovery/request-validation-registration.d.mts +0 -9
  464. package/dist/api-contract-discovery/request-validation-registration.mjs +0 -32
  465. package/dist/api-contract-discovery/request-validation-report.d.mts +0 -3
  466. package/dist/api-contract-discovery/request-validation-report.mjs +0 -21
  467. package/dist/api-contract-discovery/request-validation-request-origin.d.mts +0 -5
  468. package/dist/api-contract-discovery/request-validation-request-origin.mjs +0 -13
  469. package/dist/api-contract-discovery/request-validation-select.d.mts +0 -9
  470. package/dist/api-contract-discovery/request-validation-select.mjs +0 -36
  471. package/dist/api-contract-discovery/request-validation-sites.d.mts +0 -9
  472. package/dist/api-contract-discovery/request-validation-sites.mjs +0 -77
  473. package/dist/api-contract-discovery/request-validation-state-key.d.mts +0 -13
  474. package/dist/api-contract-discovery/request-validation-state-key.mjs +0 -30
  475. package/dist/api-contract-discovery/request-validation-trace-helpers.d.mts +0 -14
  476. package/dist/api-contract-discovery/request-validation-trace-helpers.mjs +0 -80
  477. package/dist/api-contract-discovery/request-validation-trace-select.d.mts +0 -23
  478. package/dist/api-contract-discovery/request-validation-trace-select.mjs +0 -45
  479. package/dist/api-contract-discovery/request-validation-trace.d.mts +0 -8
  480. package/dist/api-contract-discovery/request-validation-trace.mjs +0 -130
  481. package/dist/api-contract-discovery/request-validation-types.d.mts +0 -84
  482. package/dist/api-contract-discovery/request-validation-types.mjs +0 -1
  483. package/dist/api-contract-discovery/request-validation-walker.d.mts +0 -26
  484. package/dist/api-contract-discovery/request-validation-walker.mjs +0 -143
  485. package/dist/api-contract-discovery/request-validation.test-helpers.d.mts +0 -39
  486. package/dist/api-contract-discovery/request-validation.test-helpers.mjs +0 -108
  487. package/dist/api-contract-discovery/response-contract-attribution-facts.d.mts +0 -2
  488. package/dist/api-contract-discovery/response-contract-attribution-facts.mjs +0 -18
  489. package/dist/api-contract-discovery/response-contract-attribution.d.mts +0 -3
  490. package/dist/api-contract-discovery/response-contract-attribution.mjs +0 -23
  491. package/dist/api-contract-discovery/response-contract-call-classification.d.mts +0 -3
  492. package/dist/api-contract-discovery/response-contract-call-classification.mjs +0 -37
  493. package/dist/api-contract-discovery/response-contract-ctx-analysis.d.mts +0 -7
  494. package/dist/api-contract-discovery/response-contract-ctx-analysis.mjs +0 -28
  495. package/dist/api-contract-discovery/response-contract-error-branch.d.mts +0 -15
  496. package/dist/api-contract-discovery/response-contract-error-branch.mjs +0 -150
  497. package/dist/api-contract-discovery/response-contract-handler-bindings.d.mts +0 -3
  498. package/dist/api-contract-discovery/response-contract-handler-bindings.mjs +0 -126
  499. package/dist/api-contract-discovery/response-contract-handler-calls.d.mts +0 -3
  500. package/dist/api-contract-discovery/response-contract-handler-calls.mjs +0 -81
  501. package/dist/api-contract-discovery/response-contract-implicit-sources.test-helpers.d.mts +0 -145
  502. package/dist/api-contract-discovery/response-contract-implicit-sources.test-helpers.mjs +0 -145
  503. package/dist/api-contract-discovery/response-contract-implicit-variants.d.mts +0 -2
  504. package/dist/api-contract-discovery/response-contract-implicit-variants.mjs +0 -6
  505. package/dist/api-contract-discovery/response-contract-implicit.d.mts +0 -6
  506. package/dist/api-contract-discovery/response-contract-implicit.mjs +0 -120
  507. package/dist/api-contract-discovery/response-contract-lenient.d.mts +0 -41
  508. package/dist/api-contract-discovery/response-contract-lenient.mjs +0 -52
  509. package/dist/api-contract-discovery/response-contract-media.d.mts +0 -3
  510. package/dist/api-contract-discovery/response-contract-media.mjs +0 -46
  511. package/dist/api-contract-discovery/response-contract-object-symbols.d.mts +0 -3
  512. package/dist/api-contract-discovery/response-contract-object-symbols.mjs +0 -80
  513. package/dist/api-contract-discovery/response-contract-property-mutations.d.mts +0 -5
  514. package/dist/api-contract-discovery/response-contract-property-mutations.mjs +0 -84
  515. package/dist/api-contract-discovery/response-contract-registration.d.mts +0 -11
  516. package/dist/api-contract-discovery/response-contract-registration.mjs +0 -65
  517. package/dist/api-contract-discovery/response-contract-registry.d.mts +0 -7
  518. package/dist/api-contract-discovery/response-contract-registry.mjs +0 -124
  519. package/dist/api-contract-discovery/response-contract-route-analysis.d.mts +0 -12
  520. package/dist/api-contract-discovery/response-contract-route-analysis.mjs +0 -65
  521. package/dist/api-contract-discovery/response-contract-route-syntax.d.mts +0 -7
  522. package/dist/api-contract-discovery/response-contract-route-syntax.mjs +0 -41
  523. package/dist/api-contract-discovery/response-contract-status.d.mts +0 -27
  524. package/dist/api-contract-discovery/response-contract-status.mjs +0 -82
  525. package/dist/api-contract-discovery/response-contract-symbols.d.mts +0 -5
  526. package/dist/api-contract-discovery/response-contract-symbols.mjs +0 -82
  527. package/dist/api-contract-discovery/response-contract-types.d.mts +0 -23
  528. package/dist/api-contract-discovery/response-contract-types.mjs +0 -1
  529. package/dist/api-contract-discovery/test-setup.test-helpers.d.mts +0 -3
  530. package/dist/api-contract-discovery/test-setup.test-helpers.mjs +0 -2
  531. /package/dist/{api-contract-discovery/header-contract-types.mjs → post-publication-inventory/readers/public-view-options.mjs} +0 -0
  532. /package/dist/{api-contract-discovery/query-contract-types.mjs → post-publication-inventory/readers/source-options.mjs} +0 -0
@@ -1,80 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mjs';
2
- import { isConditionalPosition } from './request-validation-conditional.mjs';
3
- import { potentiallyExecuted } from './protocol-executable-path.mjs';
4
- const owningFunction = (node) => {
5
- let current = node.parent;
6
- while (current && !ts.isFunctionLike(current))
7
- current = current.parent;
8
- return current;
9
- };
10
- function writtenSymbol(left, checker) {
11
- let current = left;
12
- while (ts.isPropertyAccessExpression(current) || ts.isElementAccessExpression(current))
13
- current = current.expression;
14
- return ts.isIdentifier(current) ? checker.getSymbolAtLocation(current) : undefined;
15
- }
16
- /** True when the node may not run, within its function: conditional branches and `try` blocks. */
17
- function maybeSkipped(node) {
18
- if (isConditionalPosition(node))
19
- return true;
20
- let child = node;
21
- for (let parent = node.parent; parent && !ts.isFunctionLike(parent); parent = parent.parent) {
22
- if (ts.isTryStatement(parent) && child === parent.tryBlock)
23
- return true;
24
- child = parent;
25
- }
26
- return false;
27
- }
28
- /** Plain assignments to the symbol within the scope, excluding nested functions, in source order. */
29
- function assignmentsTo(scope, symbol, checker, cache) {
30
- let bySymbol = cache?.assignments.get(scope);
31
- if (!bySymbol) {
32
- const found = new Map();
33
- const scan = (node) => {
34
- if (node !== scope && ts.isFunctionLike(node))
35
- return;
36
- if (ts.isBinaryExpression(node) && node.operatorToken.kind === ts.SyntaxKind.EqualsToken) {
37
- const written = writtenSymbol(node.left, checker);
38
- const entry = { node, direct: ts.isIdentifier(node.left), start: node.getStart() };
39
- if (written)
40
- found.set(written, [...(found.get(written) ?? []), entry]);
41
- }
42
- ts.forEachChild(node, scan);
43
- };
44
- scan(scope);
45
- bySymbol = found;
46
- cache?.assignments.set(scope, bySymbol);
47
- }
48
- return bySymbol.get(symbol) ?? [];
49
- }
50
- /**
51
- * The assignments that can supply a value at the use: property writes, plus reassignments of the
52
- * identifier itself made earlier in the same function. An unconditional reassignment replaces
53
- * everything before it, including the initializer; conditional ones merge.
54
- */
55
- export function reachingWrites(use, symbol, checker, cache) {
56
- const scope = owningFunction(use) ?? use.getSourceFile();
57
- const before = use.getStart();
58
- const entries = assignmentsTo(scope, symbol, checker, cache).filter((entry) => entry.start < before &&
59
- (!entry.direct || entry.node.getEnd() <= before) &&
60
- potentiallyExecuted(entry.node));
61
- const killer = entries.findLast((entry) => entry.direct && !maybeSkipped(entry.node));
62
- const kept = entries.filter((entry) => !entry.direct || !killer || entries.indexOf(entry) >= entries.indexOf(killer));
63
- return { writes: kept.map((entry) => entry.node.right), initializer: !killer };
64
- }
65
- /** Returned expressions of a function, including an arrow function's expression body. */
66
- export function returnedValues(fn) {
67
- const body = fn.body;
68
- if (!ts.isBlock(body))
69
- return [body];
70
- const values = [];
71
- const scan = (node) => {
72
- if (ts.isFunctionLike(node))
73
- return;
74
- if (ts.isReturnStatement(node) && node.expression && potentiallyExecuted(node.expression))
75
- values.push(node.expression);
76
- ts.forEachChild(node, scan);
77
- };
78
- ts.forEachChild(body, scan);
79
- return values;
80
- }
@@ -1,23 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mts';
2
- import { type Scope } from './request-validation-follow.mts';
3
- import type { Carrier } from './request-validation-types.mts';
4
- /** The request carriers a value derives from, and why part of it could not be traced. */
5
- export type Trace = {
6
- origins: Set<Carrier>;
7
- unresolved?: string | undefined;
8
- };
9
- export type Visit = {
10
- trace: Trace;
11
- seen: Set<ts.Node>;
12
- functions: Set<ts.Node>;
13
- /** Calls whose arguments are being traced, so a value that feeds its own call terminates. */
14
- calls: Set<ts.Node>;
15
- };
16
- /** The tracer's own entry points, passed in so this module does not import it back. */
17
- type Deps = {
18
- visitValue: (node: ts.Node, scope: Scope, visit: Visit) => void;
19
- bindArguments: (fn: ts.FunctionLikeDeclaration, call: ts.CallExpression, scope: Scope, calls: Set<ts.Node>) => Scope;
20
- };
21
- /** Traces only what a destructured local binds; false when the selection cannot be resolved. */
22
- export declare function visitSelected(element: ts.BindingElement, initializer: ts.Expression, scope: Scope, visit: Visit, deps: Deps): boolean;
23
- export {};
@@ -1,45 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mjs';
2
- import { followedImplementations } from './request-validation-follow.mjs';
3
- import { bindingKey, literalMember } from './request-validation-select.mjs';
4
- import { returnedValues } from './request-validation-trace-helpers.mjs';
5
- import { unwrapTransparentExpression } from './response-contract-route-syntax.mjs';
6
- /** Traces only what a destructured local binds; false when the selection cannot be resolved. */
7
- export function visitSelected(element, initializer, scope, visit, deps) {
8
- const key = bindingKey(element);
9
- const selected = { ...visit, trace: { origins: new Set() } };
10
- if (key === undefined || !visitMember(initializer, key, scope, selected, deps))
11
- return false;
12
- if (element.initializer)
13
- deps.visitValue(element.initializer, scope, selected);
14
- selected.trace.origins.forEach((origin) => visit.trace.origins.add(origin));
15
- visit.trace.unresolved ??= selected.trace.unresolved;
16
- return true;
17
- }
18
- /** Visits one member of a literal, a const naming one, or a followed helper's returned value. */
19
- function visitMember(node, key, scope, visit, deps) {
20
- const value = unwrapTransparentExpression(node);
21
- if (ts.isAwaitExpression(value))
22
- return visitMember(value.expression, key, scope, visit, deps);
23
- const literal = literalMember(value, key, scope);
24
- if (literal !== undefined) {
25
- if (literal)
26
- deps.visitValue(literal, scope, visit);
27
- return true;
28
- }
29
- if (!ts.isCallExpression(value) || visit.calls.has(value))
30
- return false;
31
- const followed = followedImplementations(value, scope);
32
- return (followed.length > 0 &&
33
- followed.every((fn) => {
34
- if (visit.functions.has(fn))
35
- return false;
36
- const next = {
37
- ...visit,
38
- seen: new Set(),
39
- functions: new Set(visit.functions).add(fn),
40
- calls: new Set(visit.calls).add(value),
41
- };
42
- const bound = deps.bindArguments(fn, value, scope, next.calls);
43
- return returnedValues(fn).every((returned) => visitMember(returned, key, bound, next, deps));
44
- }));
45
- }
@@ -1,8 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mts';
2
- import { type Scope } from './request-validation-follow.mts';
3
- import { type Trace } from './request-validation-trace-select.mts';
4
- export type { Trace };
5
- /** Binds a followed function's parameters to what the call passes, with their origins. */
6
- export declare function bindArguments(fn: ts.FunctionLikeDeclaration, call: ts.CallExpression, scope: Scope, calls?: Set<ts.Node>): Scope;
7
- /** Unions the request origins found anywhere in a value expression. */
8
- export declare function traceValue(node: ts.Node, scope: Scope, calls?: Set<ts.Node>): Trace;
@@ -1,130 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mjs';
2
- import { followedImplementations } from './request-validation-follow.mjs';
3
- import { reachingWrites, returnedValues } from './request-validation-trace-helpers.mjs';
4
- import { identifierSymbol, resolveKey } from './request-validation-keys.mjs';
5
- import { rootKind } from './request-validation-origin.mjs';
6
- import { visitSelected } from './request-validation-trace-select.mjs';
7
- import { requestOrigin } from './request-validation-request-origin.mjs';
8
- import { runtimeParameters } from './registered-route-runtime-parameters.mjs';
9
- /** Binds a followed function's parameters to what the call passes, with their origins. */
10
- export function bindArguments(fn, call, scope, calls = new Set()) {
11
- const keys = new Map(scope.keys);
12
- const roots = new Map(scope.roots);
13
- runtimeParameters(fn).forEach((parameter, index) => {
14
- const symbol = ts.isIdentifier(parameter.name)
15
- ? scope.checker.getSymbolAtLocation(parameter.name)
16
- : undefined;
17
- if (!symbol)
18
- return;
19
- keys.delete(symbol);
20
- roots.delete(symbol);
21
- const argument = call.arguments[index];
22
- const key = resolveKey(argument, scope.checker, scope.keys);
23
- if (key !== undefined)
24
- keys.set(symbol, key);
25
- const bound = boundValue(parameter, argument, scope, calls);
26
- if (bound)
27
- roots.set(symbol, bound);
28
- });
29
- return { ...scope, keys, roots };
30
- }
31
- function boundValue(parameter, argument, scope, calls) {
32
- // An omitted optional or defaulted parameter is not request-derived: it stays resolved.
33
- if (!argument)
34
- return parameter.questionToken || parameter.initializer ? { origins: [] } : undefined;
35
- const traced = traceValue(argument, scope, calls);
36
- return {
37
- kind: rootKind(argument, scope.roots, scope.checker),
38
- origins: [...traced.origins],
39
- unresolved: traced.unresolved,
40
- expression: argument,
41
- };
42
- }
43
- function visitIdentifier(identifier, scope, visit) {
44
- const { seen } = visit;
45
- const symbol = identifierSymbol(identifier, scope.checker);
46
- if (!symbol || seen.has(identifier))
47
- return;
48
- seen.add(identifier);
49
- const { writes, initializer } = reachingWrites(identifier, symbol, scope.checker, scope.cache);
50
- if (initializer)
51
- visitDeclared(identifier, symbol, scope, visit);
52
- for (const write of writes)
53
- visitValue(write, scope, visit);
54
- }
55
- /** The value a binding starts with: a call-site binding, a parameter, or its initializer. */
56
- function visitDeclared(identifier, symbol, scope, visit) {
57
- const { trace } = visit;
58
- const bound = scope.roots.get(symbol);
59
- if (bound) {
60
- bound.origins.forEach((origin) => trace.origins.add(origin));
61
- trace.unresolved ??= bound.unresolved;
62
- return;
63
- }
64
- for (const declaration of symbol.declarations ?? []) {
65
- if (ts.isParameter(declaration)) {
66
- if (!scope.keys.has(symbol))
67
- trace.unresolved ??= `parameter \`${identifier.text}\` has no call-site binding`;
68
- continue;
69
- }
70
- const owner = ts.isBindingElement(declaration) ? declaration.parent.parent : declaration;
71
- if (ts.isVariableDeclaration(owner) && owner.initializer) {
72
- if (!ts.isBindingElement(declaration) ||
73
- !visitSelected(declaration, owner.initializer, scope, visit, { visitValue, bindArguments }))
74
- visitValue(owner.initializer, scope, visit);
75
- }
76
- // `for (const [key, value] of Object.entries(x))` derives from the iterated expression.
77
- else if (ts.isVariableDeclaration(owner) && ts.isForOfStatement(owner.parent.parent))
78
- visitValue(owner.parent.parent.expression, scope, visit);
79
- }
80
- }
81
- function visitCall(call, scope, visit) {
82
- if (visit.calls.has(call))
83
- return;
84
- const followed = followedImplementations(call, scope);
85
- for (const fn of followed) {
86
- if (visit.functions.has(fn))
87
- continue;
88
- const next = {
89
- ...visit,
90
- seen: new Set(),
91
- functions: new Set(visit.functions).add(fn),
92
- calls: new Set(visit.calls).add(call),
93
- };
94
- const bound = bindArguments(fn, call, scope, next.calls);
95
- for (const value of returnedValues(fn))
96
- visitValue(value, bound, next);
97
- }
98
- // An opaque call may use any argument; a followed helper's return values already say which.
99
- if (followed.length === 0)
100
- ts.forEachChild(call, (child) => visitValue(child, scope, visit));
101
- }
102
- function visitValue(node, scope, visit) {
103
- const { checker, roots } = scope;
104
- const { trace } = visit;
105
- if (ts.isFunctionLike(node))
106
- return;
107
- const origin = requestOrigin(node, roots, checker);
108
- if (origin)
109
- trace.origins.add(origin);
110
- else if (ts.isCallExpression(node))
111
- visitCall(node, scope, visit);
112
- else if (ts.isConditionalExpression(node)) {
113
- visitValue(node.whenTrue, scope, visit);
114
- visitValue(node.whenFalse, scope, visit);
115
- }
116
- else if (ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node))
117
- visitValue(node.expression, scope, visit);
118
- else if (ts.isPropertyAssignment(node))
119
- visitValue(node.initializer, scope, visit);
120
- else if (ts.isIdentifier(node))
121
- visitIdentifier(node, scope, visit);
122
- else
123
- ts.forEachChild(node, (child) => visitValue(child, scope, visit));
124
- }
125
- /** Unions the request origins found anywhere in a value expression. */
126
- export function traceValue(node, scope, calls = new Set()) {
127
- const trace = { origins: new Set() };
128
- visitValue(node, scope, { trace, seen: new Set(), functions: new Set(), calls });
129
- return trace;
130
- }
@@ -1,84 +0,0 @@
1
- import type { RegisteredRoute } from './registered-route-catalog.mts';
2
- export type Carrier = 'path' | 'query' | 'body' | 'header';
3
- export declare const CARRIERS: readonly Carrier[];
4
- export type ValidatorConfig = {
5
- /** Resolved declaration file path suffix, or a package specifier, of the export. */
6
- module: string;
7
- exportName: string;
8
- operationArgument: number;
9
- carriers: {
10
- kind: 'input-object';
11
- argument: number;
12
- } | {
13
- kind: 'fixed';
14
- carriers: readonly Carrier[];
15
- optionCarriers?: readonly {
16
- argument: number;
17
- property: string;
18
- carrier: Carrier;
19
- }[];
20
- };
21
- };
22
- export type FactoryConfig = {
23
- module: string;
24
- exportName: string;
25
- optionsArgument: number;
26
- operationProperty: string;
27
- carriers: readonly Carrier[];
28
- };
29
- /** A validated carrier and the request carriers its value derives from. */
30
- export type ValidatorSiteCarrier = {
31
- carrier: Carrier;
32
- origins: Carrier[];
33
- /** Set when part of the value cannot be traced, such as an unbound parameter. */
34
- unresolved?: string;
35
- };
36
- export type ExecutedCallbackConfig = {
37
- module: string;
38
- exportName: string;
39
- /** Index of the object-literal argument. */
40
- argument: number;
41
- /** Function-valued properties of that object treated as executed. */
42
- properties: readonly string[];
43
- };
44
- export type ValidatorSite = {
45
- exportName: string;
46
- source: string;
47
- operation: string | null;
48
- unresolvedReason?: string;
49
- carriers: ValidatorSiteCarrier[];
50
- /**
51
- * Set when the input object cannot be fully resolved (a non-literal input, an unresolvable
52
- * spread or a computed property name), so `carriers` may be incomplete.
53
- */
54
- unresolvedCarriers?: string;
55
- conditional: boolean;
56
- };
57
- export type FactorySite = {
58
- exportName: string;
59
- source: string;
60
- operation: string | null;
61
- unresolvedReason?: string;
62
- carriers: Carrier[];
63
- /** True when the factory call is reached only under a branch, loop or short-circuit. */
64
- conditional: boolean;
65
- };
66
- /**
67
- * `key` for a static key, `computed` for a non-static key (`key: null`), `whole` for the carrier
68
- * used as a value or a body read (`key: null`).
69
- */
70
- type CarrierReadAccess = 'key' | 'computed' | 'whole';
71
- export type CarrierRead = {
72
- carrier: Carrier;
73
- key: string | null;
74
- access: CarrierReadAccess;
75
- source: string;
76
- };
77
- export type RouteValidationFacts = {
78
- kind: RegisteredRoute['kind'];
79
- source: string;
80
- validatorSites: ValidatorSite[];
81
- factorySites: FactorySite[];
82
- carrierReads: CarrierRead[];
83
- };
84
- export {};
@@ -1 +0,0 @@
1
- export const CARRIERS = ['path', 'query', 'body', 'header'];
@@ -1,26 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mts';
2
- import type { ProtocolCache } from './protocol-analysis-cache.mts';
3
- import type { HandlerProof } from './registered-route-handler-analysis.mts';
4
- import type { CarrierRead, ExecutedCallbackConfig, FactoryConfig, FactorySite, ValidatorConfig, ValidatorSite } from './request-validation-types.mts';
5
- type RouteFacts = {
6
- validatorSites: ValidatorSite[];
7
- factorySites: FactorySite[];
8
- carrierReads: CarrierRead[];
9
- };
10
- export type WalkerConfig = {
11
- checker: ts.TypeChecker;
12
- sourceFiles: ReadonlySet<ts.SourceFile>;
13
- validators: readonly ValidatorConfig[];
14
- factories: readonly FactoryConfig[];
15
- executedCallbacks: readonly ExecutedCallbackConfig[];
16
- /** Shared across the routes of one facts run. */
17
- protocolCache?: ProtocolCache;
18
- };
19
- /** Walks handlers and the helpers they run, collecting validation facts for one route. */
20
- export declare function createRouteWalker(config: WalkerConfig): {
21
- /** The collected facts; reads that only build a validator's input are left out. */
22
- readonly facts: RouteFacts;
23
- scanRegistration: (node: ts.Node) => void;
24
- walkHandler(proof: HandlerProof): void;
25
- };
26
- export {};
@@ -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>;