vouchington-tooling 0.35.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 (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,29 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mjs';
2
- export function returnedExpressions(declaration) {
3
- const body = declaration.body;
4
- if (!ts.isBlock(body))
5
- return [body];
6
- const returned = [];
7
- const collect = (node) => {
8
- if (node !== declaration && ts.isFunctionLike(node))
9
- return;
10
- if (ts.isReturnStatement(node)) {
11
- returned.push(node.expression);
12
- return;
13
- }
14
- node.forEachChild(collect);
15
- };
16
- body.forEachChild(collect);
17
- return returned;
18
- }
19
- export function returnsOnEveryPath(node) {
20
- if (ts.isBlock(node))
21
- return node.statements.some(returnsOnEveryPath);
22
- if (ts.isReturnStatement(node))
23
- return true;
24
- if (ts.isIfStatement(node))
25
- return (!!node.elseStatement &&
26
- returnsOnEveryPath(node.thenStatement) &&
27
- returnsOnEveryPath(node.elseStatement));
28
- return !ts.isStatement(node);
29
- }
@@ -1,12 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mts';
2
- export type HandlerProof = {
3
- node: ts.FunctionLikeDeclaration;
4
- bindings: Map<ts.Symbol, ts.Expression>;
5
- /** Set under `executableReturns` when a runtime branch selects the handler. */
6
- conditional?: boolean;
7
- };
8
- export declare function handlerNodes(argument: ts.Expression, checker: ts.TypeChecker, parameterBindings?: Map<ts.Symbol, ts.Expression>, active?: Set<ts.Node>, staticProof?: boolean, proofs?: HandlerProof[],
9
- /** Ignore `let`, `var` and reassigned bindings; always on under `staticProof`. */
10
- stableBindings?: boolean,
11
- /** Ignore returned values on statically dead paths, and mark runtime-branch ones conditional. */
12
- executableReturns?: boolean): ts.Node[];
@@ -1,119 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mjs';
2
- import { returnedExpressions, returnsOnEveryPath } from './registered-route-factory-returns.mjs';
3
- import { runtimeParameters } from './registered-route-runtime-parameters.mjs';
4
- import { potentiallyExecuted } from './protocol-executable-path.mjs';
5
- import { hasBindingWrite } from './registered-route-binding-writes.mjs';
6
- import { hasStableBinding, unwrapHandlerExpression } from './registered-route-handler-helpers.mjs';
7
- import { isConditionalPosition } from './request-validation-conditional.mjs';
8
- export function handlerNodes(argument, checker, parameterBindings = new Map(), active = new Set(), staticProof = false, proofs,
9
- /** Ignore `let`, `var` and reassigned bindings; always on under `staticProof`. */
10
- stableBindings = staticProof,
11
- /** Ignore returned values on statically dead paths, and mark runtime-branch ones conditional. */
12
- executableReturns = false) {
13
- const again = (node, bindings = parameterBindings, seen = active, sink = proofs) => handlerNodes(node, checker, bindings, seen, staticProof, sink, stableBindings, executableReturns);
14
- const unwrapped = unwrapHandlerExpression(argument);
15
- if (unwrapped !== argument)
16
- return again(unwrapped);
17
- let bound = argument;
18
- const boundIdentifiers = new Set();
19
- while (ts.isIdentifier(bound)) {
20
- const symbol = checker.getSymbolAtLocation(bound);
21
- const nextArgument = symbol && parameterBindings.get(symbol);
22
- if (!nextArgument)
23
- break;
24
- if (boundIdentifiers.has(bound))
25
- return [];
26
- boundIdentifiers.add(bound);
27
- bound = nextArgument;
28
- }
29
- if (bound !== argument)
30
- return again(bound);
31
- if (active.has(argument))
32
- return [];
33
- const next = new Set(active).add(argument);
34
- if (ts.isArrowFunction(argument) || ts.isFunctionExpression(argument)) {
35
- proofs?.push({ node: argument, bindings: parameterBindings });
36
- return [argument];
37
- }
38
- if (ts.isCallExpression(argument)) {
39
- const resolvedProofs = [];
40
- const groups = callableImplementations(argument.expression, checker, staticProof, stableBindings).map((implementation) => {
41
- if (staticProof &&
42
- (implementation.asteriskToken ||
43
- implementation.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword) ||
44
- runtimeParameters(implementation).some((parameter) => hasBindingWrite(parameter, checker))))
45
- return [];
46
- const bindings = new Map(parameterBindings);
47
- runtimeParameters(implementation).forEach((parameter, index) => {
48
- const callArgument = argument.arguments[index];
49
- const symbol = checker.getSymbolAtLocation(parameter.name);
50
- if (callArgument && symbol)
51
- bindings.set(symbol, callArgument);
52
- });
53
- const returned = returnedExpressions(implementation).filter((value) => !executableReturns || !value || potentiallyExecuted(value));
54
- if (staticProof &&
55
- (!returnsOnEveryPath(implementation.body) || returned.some((value) => !value)))
56
- return [];
57
- const results = returned.map((value) => {
58
- const selected = [];
59
- const found = value ? again(value, bindings, next, selected) : [];
60
- if (executableReturns && value && isConditionalPosition(value))
61
- selected.forEach((proof) => (proof.conditional = true));
62
- resolvedProofs.push(...selected);
63
- return found;
64
- });
65
- return staticProof && results.some((result) => !result.some(ts.isFunctionLike))
66
- ? []
67
- : results.flat();
68
- });
69
- if (staticProof && groups.some((group) => group.length === 0))
70
- return [];
71
- proofs?.push(...resolvedProofs);
72
- return groups.flat();
73
- }
74
- return declarationImplementations(argument, checker, next, staticProof, parameterBindings, proofs, stableBindings, executableReturns);
75
- }
76
- function callableImplementations(node, checker, staticProof = false, stableBindings = staticProof) {
77
- const symbol = checker.getSymbolAtLocation(node);
78
- if (!symbol)
79
- return [];
80
- const resolved = symbol.flags & ts.SymbolFlags.Alias ? checker.getAliasedSymbol(symbol) : symbol;
81
- const implementations = [];
82
- for (const declaration of resolved.declarations ?? []) {
83
- if (stableBindings && !hasStableBinding(declaration, checker))
84
- continue;
85
- if (ts.isVariableDeclaration(declaration) && declaration.initializer) {
86
- const initializer = unwrapHandlerExpression(declaration.initializer);
87
- if (ts.isArrowFunction(initializer) || ts.isFunctionExpression(initializer))
88
- implementations.push(initializer);
89
- continue;
90
- }
91
- if ((ts.isFunctionDeclaration(declaration) ||
92
- (!staticProof && ts.isMethodDeclaration(declaration))) &&
93
- declaration.body)
94
- implementations.push(declaration);
95
- }
96
- return implementations;
97
- }
98
- function declarationImplementations(node, checker, active, staticProof, parameterBindings, proofs, stableBindings = staticProof, executableReturns = false) {
99
- const symbol = checker.getSymbolAtLocation(node);
100
- if (!symbol)
101
- return [];
102
- const resolved = symbol.flags & ts.SymbolFlags.Alias ? checker.getAliasedSymbol(symbol) : symbol;
103
- return (resolved.declarations ?? []).flatMap((declaration) => {
104
- if (stableBindings && !hasStableBinding(declaration, checker))
105
- return [];
106
- if (ts.isFunctionDeclaration(declaration) ||
107
- (!staticProof && ts.isMethodDeclaration(declaration))) {
108
- if (declaration.body)
109
- proofs?.push({ node: declaration, bindings: parameterBindings });
110
- return declaration.body ? [declaration] : [];
111
- }
112
- if (ts.isVariableDeclaration(declaration) && declaration.initializer)
113
- return [
114
- declaration,
115
- ...handlerNodes(declaration.initializer, checker, parameterBindings, active, staticProof, proofs, stableBindings, executableReturns),
116
- ];
117
- return [];
118
- });
119
- }
@@ -1,3 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mts';
2
- export declare function hasStableBinding(declaration: ts.Declaration, checker: ts.TypeChecker): boolean;
3
- export declare function unwrapHandlerExpression(node: ts.Expression): ts.Expression;
@@ -1,16 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mjs';
2
- import { hasBindingWrite } from './registered-route-binding-writes.mjs';
3
- export function hasStableBinding(declaration, checker) {
4
- if (ts.isVariableDeclaration(declaration))
5
- return (ts.isVariableDeclarationList(declaration.parent) &&
6
- !!(declaration.parent.flags & ts.NodeFlags.Const));
7
- return !ts.isFunctionDeclaration(declaration) || !hasBindingWrite(declaration, checker);
8
- }
9
- export function unwrapHandlerExpression(node) {
10
- while (ts.isParenthesizedExpression(node) ||
11
- ts.isAsExpression(node) ||
12
- ts.isTypeAssertionExpression(node) ||
13
- ts.isSatisfiesExpression(node))
14
- node = node.expression;
15
- return node;
16
- }
@@ -1,3 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mts';
2
- /** TypeScript's explicit this parameter is erased and consumes no runtime argument. */
3
- export declare function runtimeParameters(node: ts.FunctionLikeDeclaration): ts.ParameterDeclaration[];
@@ -1,5 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mjs';
2
- /** TypeScript's explicit this parameter is erased and consumes no runtime argument. */
3
- export function runtimeParameters(node) {
4
- return node.parameters.filter((parameter) => !ts.isIdentifier(parameter.name) || parameter.name.text !== 'this');
5
- }
@@ -1,3 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mts';
2
- /** Proves a terminal 405 on the handler's own context, rather than finding a nested throw. */
3
- export declare function isTerminal405Handler(node: ts.Node, checker: ts.TypeChecker, bindings?: Map<ts.Symbol, ts.Expression>): boolean;
@@ -1,98 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mjs';
2
- import { runtimeParameters } from './registered-route-runtime-parameters.mjs';
3
- import { handlerNodes } from './registered-route-handler-analysis.mjs';
4
- /** Proves a terminal 405 on the handler's own context, rather than finding a nested throw. */
5
- export function isTerminal405Handler(node, checker, bindings = new Map()) {
6
- if (!(ts.isArrowFunction(node) ||
7
- ts.isFunctionExpression(node) ||
8
- ts.isFunctionDeclaration(node) ||
9
- ts.isMethodDeclaration(node)) ||
10
- !node.body)
11
- return false;
12
- const context = runtimeParameters(node)[0]?.name;
13
- const symbol = context && ts.isIdentifier(context) ? checker.getSymbolAtLocation(context) : undefined;
14
- return !!symbol && terminalBody(node, symbol, checker, new Set(), true, bindings);
15
- }
16
- function terminalBody(node, context, checker, active, returned = true, bindings = new Map()) {
17
- if (!node.body || node.asteriskToken || active.has(node))
18
- return false;
19
- if (node.parameters.some((parameter) => !ts.isIdentifier(parameter.name) ||
20
- parameter.dotDotDotToken ||
21
- (parameter.initializer && !ts.isLiteralExpression(parameter.initializer))))
22
- return false;
23
- const next = new Set(active).add(node);
24
- if (!ts.isBlock(node.body))
25
- return terminalCall(node.body, context, checker, next, returned, bindings);
26
- const statements = node.body.statements;
27
- const terminal = statements.at(-1);
28
- if (!terminal ||
29
- !statements.slice(0, -1).every((statement) => isInertStatement(statement, context, checker)))
30
- return false;
31
- if (ts.isExpressionStatement(terminal))
32
- return terminalCall(terminal.expression, context, checker, next, false, bindings);
33
- return (ts.isReturnStatement(terminal) &&
34
- !!terminal.expression &&
35
- terminalCall(terminal.expression, context, checker, next, returned, bindings));
36
- }
37
- function terminalCall(expression, context, checker, active, returned, bindings) {
38
- if (ts.isAwaitExpression(expression))
39
- return terminalCall(expression.expression, context, checker, active, true, bindings);
40
- if (ts.isParenthesizedExpression(expression))
41
- return terminalCall(expression.expression, context, checker, active, returned, bindings);
42
- if (!ts.isCallExpression(expression) || expression.questionDotToken)
43
- return false;
44
- if (expression.arguments.some((argument) => !ts.isIdentifier(argument) && !ts.isLiteralExpression(argument)))
45
- return false;
46
- const callee = expression.expression;
47
- if (ts.isPropertyAccessExpression(callee) && callee.name.text === 'throw') {
48
- const status = expression.arguments[0];
49
- return (!callee.questionDotToken &&
50
- ts.isIdentifier(callee.expression) &&
51
- checker.getSymbolAtLocation(callee.expression) === context &&
52
- !!status &&
53
- ts.isNumericLiteral(status) &&
54
- Number(status.text) === 405);
55
- }
56
- if (!ts.isIdentifier(callee))
57
- return false;
58
- const implementations = [];
59
- handlerNodes(callee, checker, bindings, new Set(), true, implementations);
60
- if (!returned && checker.getPropertyOfType(checker.getTypeAtLocation(expression), 'then'))
61
- return false;
62
- return (implementations.length > 0 &&
63
- implementations.every(({ node: implementation, bindings: captured }) => {
64
- if (!returned &&
65
- implementation.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword))
66
- return false;
67
- const index = expression.arguments.findIndex((argument) => ts.isIdentifier(argument) && checker.getSymbolAtLocation(argument) === context);
68
- const parameter = runtimeParameters(implementation)[index]?.name;
69
- const symbol = parameter && ts.isIdentifier(parameter) ? checker.getSymbolAtLocation(parameter) : undefined;
70
- return !!symbol && terminalBody(implementation, symbol, checker, active, returned, captured);
71
- }));
72
- }
73
- function isInertStatement(statement, context, checker) {
74
- if (ts.isEmptyStatement(statement))
75
- return true;
76
- if (ts.isExpressionStatement(statement)) {
77
- const expression = statement.expression;
78
- if (ts.isStringLiteral(expression))
79
- return true;
80
- if (!ts.isCallExpression(expression) || expression.arguments.length !== 2)
81
- return false;
82
- const callee = expression.expression;
83
- const [header, value] = expression.arguments;
84
- return (ts.isPropertyAccessExpression(callee) &&
85
- callee.name.text === 'set' &&
86
- ts.isIdentifier(callee.expression) &&
87
- checker.getSymbolAtLocation(callee.expression) === context &&
88
- ts.isStringLiteral(header) &&
89
- header.text.toLowerCase() === 'allow' &&
90
- ts.isStringLiteral(value) &&
91
- /^[A-Z]+(?:, *[A-Z]+)*$/.test(value.text));
92
- }
93
- if (!ts.isVariableStatement(statement))
94
- return false;
95
- return statement.declarationList.declarations.every((declaration) => ts.isIdentifier(declaration.name) &&
96
- checker.getSymbolAtLocation(declaration.name) !== context &&
97
- (!declaration.initializer || ts.isLiteralExpression(declaration.initializer)));
98
- }
@@ -1,17 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mts';
2
- import { type DiscoverApiRequestContractsOptions } from './request-contract-lenient.mts';
3
- import { type HandlerBindings } from './response-contract-route-analysis.mts';
4
- import type { BackendRequestContract } from './request-contract-types.mts';
5
- /**
6
- * Phase 2 (implicit harvest) dispatch for one call expression. Requests have no `#variant` escape
7
- * hatch, so precedence is stricter than the response side's: an explicit `apiRequest`/
8
- * `apiNoRequestBody` marker registered in Phase 1 (`markerKeys`) always wins outright — a harvest
9
- * never even attempts to register over one. A second implicit body-read for a route an earlier
10
- * implicit call already covered attempts registration but swallows any failure (extraction error
11
- * or hash mismatch), keeping the first-registered contract untouched — mirrors
12
- * `response-contract-implicit.mts`'s secondary-variant handling, minus the variant key (requests
13
- * get at most one contract per route). A `ctx.request.buffer(...)` read always overrides,
14
- * regardless of visit order or what's already registered, mirroring the response side's own
15
- * buffer-detection override.
16
- */
17
- export declare function discoverImplicitRequestContract(call: ts.CallExpression, checker: ts.TypeChecker, sourceFile: ts.SourceFile, contracts: Map<string, BackendRequestContract>, markerKeys: ReadonlySet<string>, handlerBindings: HandlerBindings, requestedKeys: ReadonlySet<string> | undefined, options: DiscoverApiRequestContractsOptions | undefined): void;
@@ -1,73 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mjs';
2
- import { extractContractSchema } from '../contract-schema/index.mjs';
3
- import { markBufferedRequestRouteUnavailable, registerRequestContract, registerRequestRouteContract, } from './request-contract-lenient.mjs';
4
- import { enclosingRequestBodyCast, isContextRequestBufferCall, isContextRequestJsonCall, } from './request-contract-route-analysis.mjs';
5
- import { sourceLocation } from './response-contract-registration.mjs';
6
- import { enclosingRouteBinding, requestedKeyForBinding, } from './response-contract-route-analysis.mjs';
7
- /**
8
- * Resolves the effective static type of a body-read call, or `undefined` when `call` isn't a
9
- * body-read pattern this harvester recognizes at all (most call expressions in a route file
10
- * aren't). `parseJsonBody<T>(ctx)`'s own call-expression type is `Promise<T>` (or `Promise<unknown>`
11
- * with no type argument) — `extractContractSchema` auto-unwraps the `Promise` either way, so no
12
- * special-casing is needed. `ctx.request.json(...)` has no such generic in practice; its effective
13
- * type comes from the enclosing `as T` cast, when one exists (`enclosingRequestBodyCast`) — absent
14
- * one, the call's own type is `Promise<unknown>`, which resolves to an honest `{type:'unknown'}`
15
- * rather than a failure (see `enclosingRequestBodyCast`'s docstring).
16
- */
17
- function resolveRequestBodyType(call, checker) {
18
- if (ts.isIdentifier(call.expression) && call.expression.text === 'parseJsonBody') {
19
- return checker.getTypeAtLocation(call);
20
- }
21
- if (!isContextRequestJsonCall(call.expression))
22
- return undefined;
23
- const cast = enclosingRequestBodyCast(call);
24
- return checker.getTypeAtLocation(cast ?? call);
25
- }
26
- /**
27
- * Phase 2 (implicit harvest) dispatch for one call expression. Requests have no `#variant` escape
28
- * hatch, so precedence is stricter than the response side's: an explicit `apiRequest`/
29
- * `apiNoRequestBody` marker registered in Phase 1 (`markerKeys`) always wins outright — a harvest
30
- * never even attempts to register over one. A second implicit body-read for a route an earlier
31
- * implicit call already covered attempts registration but swallows any failure (extraction error
32
- * or hash mismatch), keeping the first-registered contract untouched — mirrors
33
- * `response-contract-implicit.mts`'s secondary-variant handling, minus the variant key (requests
34
- * get at most one contract per route). A `ctx.request.buffer(...)` read always overrides,
35
- * regardless of visit order or what's already registered, mirroring the response side's own
36
- * buffer-detection override.
37
- */
38
- export function discoverImplicitRequestContract(call, checker, sourceFile, contracts, markerKeys, handlerBindings, requestedKeys, options) {
39
- const binding = enclosingRouteBinding(call, checker, handlerBindings);
40
- if (!binding)
41
- return;
42
- const key = requestedKeyForBinding(binding, requestedKeys);
43
- if (!key)
44
- return;
45
- if (isContextRequestBufferCall(call.expression)) {
46
- markBufferedRequestRouteUnavailable(contracts, key, binding, sourceLocation(sourceFile, call));
47
- return;
48
- }
49
- if (markerKeys.has(key))
50
- return; // An explicit Phase 1 marker always wins; never harvest over it.
51
- const bodyType = resolveRequestBodyType(call, checker);
52
- if (!bodyType)
53
- return;
54
- const location = sourceLocation(sourceFile, call);
55
- const extract = () => extractContractSchema(bodyType, checker, location, options);
56
- if (!contracts.has(key)) {
57
- registerRequestRouteContract(contracts, key, binding, location, extract, options);
58
- return;
59
- }
60
- // A second body-read call for a route an earlier implicit harvest already covered — attempt
61
- // registration but silently drop it on a hash-mismatch collision, keeping the
62
- // first-registered contract. Anything else (a type-checker crash, an AST invariant
63
- // violation) is unexpected and worth surfacing rather than swallowing.
64
- try {
65
- const extracted = extract();
66
- registerRequestContract(contracts, key, { ...extracted, ...binding });
67
- }
68
- catch (error) {
69
- if (error instanceof Error && !error.message.includes('resolves to multiple')) {
70
- console.warn(`Second body-read extraction for "${key}" failed:`, error);
71
- }
72
- }
73
- }
@@ -1,28 +0,0 @@
1
- import type { ExtractedResponseContract, ExtractContractSchemaOptions } from '../contract-schema/index.mts';
2
- import type { RouteBinding } from './response-contract-route-analysis.mts';
3
- import type { RouteDiscoveryError } from './response-contract-lenient.mts';
4
- import type { BackendRequestContract } from './request-contract-types.mts';
5
- export type DiscoverApiRequestContractsOptions = ExtractContractSchemaOptions & {
6
- onRouteError?: (error: RouteDiscoveryError) => void;
7
- };
8
- /**
9
- * Marks `key` unavailable regardless of AST visit order or what else is already registered for
10
- * this route (an explicit marker, or an earlier implicit harvest) — a raw buffered body's shape
11
- * is never statically determinable, so it always wins. Mirrors the response side's
12
- * `markBufferedRouteUnavailable` for `ctx.response.buffer(...)`.
13
- */
14
- export declare function markBufferedRequestRouteUnavailable(contracts: Map<string, BackendRequestContract>, key: string, binding: RouteBinding, source: string): void;
15
- /**
16
- * Inserts `contract` at `key`, throwing if `key` already resolves to a different schema. Requests
17
- * have no `#variant` escape hatch, so — unlike the response side, where a genuine collision is
18
- * always a real author bug worth surfacing — callers here must choose deliberately whether a
19
- * mismatch should throw (an explicit marker collision) or be caught (an implicit harvest
20
- * collision); see `request-contract-implicit.mts`.
21
- */
22
- export declare function registerRequestContract(contracts: Map<string, BackendRequestContract>, key: string, contract: BackendRequestContract): void;
23
- /**
24
- * Extracts a route's request contract and registers it. When `options.onRouteError` is set, an
25
- * extraction failure is caught, reported, and replaced with an `unavailable` placeholder instead
26
- * of aborting discovery for every other route — mirrors the response side's `registerRouteContract`.
27
- */
28
- export declare function registerRequestRouteContract(contracts: Map<string, BackendRequestContract>, key: string, binding: RouteBinding, location: string, extract: () => ExtractedResponseContract, options: DiscoverApiRequestContractsOptions | undefined): void;
@@ -1,59 +0,0 @@
1
- import { hashContractSchema } from '../contract-schema/index.mjs';
2
- /** Placeholder contract for a route whose request body could not be extracted. */
3
- function unavailableRequestContract(source, reason) {
4
- const schema = { root: { type: 'unknown' }, definitions: {} };
5
- return { source, schema, hash: hashContractSchema(schema), unavailableReason: reason };
6
- }
7
- /**
8
- * Marks `key` unavailable regardless of AST visit order or what else is already registered for
9
- * this route (an explicit marker, or an earlier implicit harvest) — a raw buffered body's shape
10
- * is never statically determinable, so it always wins. Mirrors the response side's
11
- * `markBufferedRouteUnavailable` for `ctx.response.buffer(...)`.
12
- */
13
- export function markBufferedRequestRouteUnavailable(contracts, key, binding, source) {
14
- contracts.set(key, {
15
- ...unavailableRequestContract(source, 'route reads a raw buffered request body (ctx.request.buffer) whose shape is not statically determinable'),
16
- ...binding,
17
- });
18
- }
19
- /**
20
- * Inserts `contract` at `key`, throwing if `key` already resolves to a different schema. Requests
21
- * have no `#variant` escape hatch, so — unlike the response side, where a genuine collision is
22
- * always a real author bug worth surfacing — callers here must choose deliberately whether a
23
- * mismatch should throw (an explicit marker collision) or be caught (an implicit harvest
24
- * collision); see `request-contract-implicit.mts`.
25
- */
26
- export function registerRequestContract(contracts, key, contract) {
27
- const existing = contracts.get(key);
28
- if (!existing) {
29
- contracts.set(key, contract);
30
- return;
31
- }
32
- if (existing.hash !== contract.hash) {
33
- throw new Error(`Backend request contract "${key}" resolves to multiple backend request schemas at ${existing.source} and ${contract.source}`);
34
- }
35
- }
36
- /**
37
- * Extracts a route's request contract and registers it. When `options.onRouteError` is set, an
38
- * extraction failure is caught, reported, and replaced with an `unavailable` placeholder instead
39
- * of aborting discovery for every other route — mirrors the response side's `registerRouteContract`.
40
- */
41
- export function registerRequestRouteContract(contracts, key, binding, location, extract, options) {
42
- let extracted;
43
- try {
44
- extracted = extract();
45
- }
46
- catch (error) {
47
- if (!options?.onRouteError)
48
- throw error;
49
- const reason = error instanceof Error ? error.message : String(error);
50
- options.onRouteError({
51
- method: binding.method,
52
- routeTemplate: binding.routeTemplate,
53
- source: location,
54
- reason,
55
- });
56
- extracted = unavailableRequestContract(location, reason);
57
- }
58
- registerRequestContract(contracts, key, { ...extracted, ...binding });
59
- }
@@ -1,14 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mts';
2
- import { type DiscoverApiRequestContractsOptions } from './request-contract-lenient.mts';
3
- import type { BackendRequestContract } from './request-contract-types.mts';
4
- export type { BackendRequestContract } from './request-contract-types.mts';
5
- export type { DiscoverApiRequestContractsOptions } from './request-contract-lenient.mts';
6
- /**
7
- * Two full passes over every route file, mirroring `discoverApiResponseContracts`: Phase 1
8
- * (explicit request-contract markers) completes for every file before Phase 2
9
- * (implicit harvest of `parseJsonBody`/`ctx.request.json(...) as T`/`ctx.request.buffer(...)`)
10
- * begins, so a marker anywhere always wins over a harvest anywhere regardless of visit order.
11
- * `markerKeys` records every key an explicit marker claimed (a body, or a deliberate
12
- * `apiNoRequestBody` suppression) so Phase 2 knows to never harvest over it.
13
- */
14
- export declare function discoverApiRequestContracts(program: ts.Program, sourceFiles: readonly ts.SourceFile[], requestedKeys?: ReadonlySet<string>, options?: DiscoverApiRequestContractsOptions): Record<string, BackendRequestContract>;
@@ -1,63 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mjs';
2
- import { registerPlatformCompilerLibraries } from './protocol-platform-callbacks.mjs';
3
- import { extractContractSchema } from '../contract-schema/index.mjs';
4
- import { registerRequestRouteContract, } from './request-contract-lenient.mjs';
5
- import { discoverImplicitRequestContract } from './request-contract-implicit.mjs';
6
- import { requestMarker } from './request-contract-route-analysis.mjs';
7
- import { contractError, sourceLocation } from './response-contract-registration.mjs';
8
- import { collectHandlerBindings, enclosingRouteBinding, visit, } from './response-contract-route-analysis.mjs';
9
- /**
10
- * Two full passes over every route file, mirroring `discoverApiResponseContracts`: Phase 1
11
- * (explicit request-contract markers) completes for every file before Phase 2
12
- * (implicit harvest of `parseJsonBody`/`ctx.request.json(...) as T`/`ctx.request.buffer(...)`)
13
- * begins, so a marker anywhere always wins over a harvest anywhere regardless of visit order.
14
- * `markerKeys` records every key an explicit marker claimed (a body, or a deliberate
15
- * `apiNoRequestBody` suppression) so Phase 2 knows to never harvest over it.
16
- */
17
- export function discoverApiRequestContracts(program, sourceFiles, requestedKeys, options) {
18
- registerPlatformCompilerLibraries(program);
19
- const checker = program.getTypeChecker();
20
- const contracts = new Map();
21
- const markerKeys = new Set();
22
- const handlerBindings = collectHandlerBindings(sourceFiles, checker);
23
- for (const sourceFile of sourceFiles) {
24
- visit(sourceFile, (node) => {
25
- if (!ts.isCallExpression(node))
26
- return;
27
- const marker = requestMarker(node.expression);
28
- if (!marker)
29
- return;
30
- const keyNode = node.arguments[0];
31
- if (!keyNode || !ts.isStringLiteral(keyNode)) {
32
- throw contractError(sourceFile, node, `${marker} requires a literal contract key`);
33
- }
34
- const binding = enclosingRouteBinding(node, checker, handlerBindings);
35
- if (!binding)
36
- throw contractError(sourceFile, node, `${marker} must be inside an app.route handler`);
37
- const expectedKey = `${binding.method}:${binding.routeTemplate}`;
38
- if (keyNode.text !== expectedKey) {
39
- // Requests have no `#variant` escape hatch (unlike responses) — the key must match exactly.
40
- throw contractError(sourceFile, keyNode, `Contract key "${keyNode.text}" does not match enclosing route ${expectedKey}`);
41
- }
42
- markerKeys.add(keyNode.text);
43
- if (marker === 'apiNoRequestBody')
44
- return; // Deliberate suppression: no contract, harvest skips this key.
45
- const bodyNode = node.arguments[1];
46
- const typeNode = node.typeArguments?.[1];
47
- if (marker === 'apiRequest' && !bodyNode)
48
- throw contractError(sourceFile, node, 'apiRequest requires a request body');
49
- if (marker === 'apiRequestContract' && !typeNode)
50
- throw contractError(sourceFile, node, 'apiRequestContract requires a request body type');
51
- const location = sourceLocation(sourceFile, node);
52
- registerRequestRouteContract(contracts, keyNode.text, binding, location, () => extractContractSchema(typeNode ? checker.getTypeFromTypeNode(typeNode) : checker.getTypeAtLocation(bodyNode), checker, location, options), options);
53
- });
54
- }
55
- for (const sourceFile of sourceFiles) {
56
- visit(sourceFile, (node) => {
57
- if (!ts.isCallExpression(node) || requestMarker(node.expression))
58
- return;
59
- discoverImplicitRequestContract(node, checker, sourceFile, contracts, markerKeys, handlerBindings, requestedKeys, options);
60
- });
61
- }
62
- return Object.fromEntries([...contracts.entries()].toSorted(([left], [right]) => left.localeCompare(right)));
63
- }
@@ -1,25 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mts';
2
- /**
3
- * Detects the request-contract markers in the version-one route convention.
4
- * Kept out of `responseMarker` (which only recognizes `apiResponse`/`apiNoContent`) so the two
5
- * AST walks never interfere — see `response-contract-route-analysis.mts` for the response side.
6
- */
7
- export declare function requestMarker(expression: ts.Expression): 'apiRequest' | 'apiRequestContract' | 'apiNoRequestBody' | undefined;
8
- /**
9
- * Detects `ctx.request.json(...)`: a two-level nested access (`ctx.request` then `.json`) that
10
- * `isContextMethod`'s single-level match can't see through directly — mirrors
11
- * `isContextResponseBufferCall`'s own two-level pattern on the response side.
12
- */
13
- export declare function isContextRequestJsonCall(expression: ts.Expression): boolean;
14
- /** Detects `ctx.request.buffer(...)`: a raw request body whose shape can't be statically extracted. */
15
- export declare function isContextRequestBufferCall(expression: ts.Expression): boolean;
16
- /**
17
- * Walks up from a `ctx.request.json(...)` call expression to find the enclosing `as T` cast that
18
- * gives it a static type, unwrapping the wrapper shapes real call sites use in between:
19
- * `(await ctx.request.json(...)) as T` and the `.catch()`-guarded
20
- * `(await ctx.request.json(...).catch(() => ({}))) as T`.
21
- * Returns `undefined` when no enclosing cast exists (e.g. the read feeds directly into another
22
- * call, `parseFoo(await ctx.request.json())`) — the caller treats that as an honest untyped
23
- * success, not a failure.
24
- */
25
- export declare function enclosingRequestBodyCast(call: ts.CallExpression): ts.AsExpression | undefined;