vouchington-tooling 0.34.0 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (542) hide show
  1. package/README.md +24 -221
  2. package/dist/agent-blackboard/feedback-audit-source.mjs +2 -2
  3. package/dist/agent-blackboard/feedback-canonical.mjs +1 -1
  4. package/dist/agent-blackboard/feedback-codec.mjs +3 -3
  5. package/dist/agent-blackboard/feedback-compose.mjs +5 -5
  6. package/dist/agent-blackboard/feedback-deadline.mjs +1 -1
  7. package/dist/agent-blackboard/feedback-delivery.mjs +6 -6
  8. package/dist/agent-blackboard/feedback-fields.mjs +1 -1
  9. package/dist/agent-blackboard/feedback-identity.mjs +3 -3
  10. package/dist/agent-blackboard/feedback-journal-audit.mjs +4 -4
  11. package/dist/agent-blackboard/feedback-journal-sandbox.mjs +1 -1
  12. package/dist/agent-blackboard/feedback-online-error.mjs +1 -1
  13. package/dist/agent-blackboard/feedback-online.mjs +7 -7
  14. package/dist/agent-blackboard/feedback-outbox-counts.mjs +2 -2
  15. package/dist/agent-blackboard/feedback-outbox.mjs +7 -7
  16. package/dist/agent-blackboard/index.mjs +13 -13
  17. package/dist/agent-blackboard/journal.mjs +3 -3
  18. package/dist/agent-blackboard/session-tools.mjs +4 -4
  19. package/dist/agent-blackboard/snapshot-cleanup-directory.mjs +3 -3
  20. package/dist/agent-blackboard/snapshot-cleanup-receipt.mjs +1 -1
  21. package/dist/agent-blackboard/snapshot-cleanup-resume.mjs +2 -2
  22. package/dist/agent-blackboard/snapshot-partition-cleanup.mjs +3 -3
  23. package/dist/agent-blackboard/snapshot-partition-format.mjs +3 -3
  24. package/dist/agent-blackboard/snapshot-partition-predicates.mjs +2 -2
  25. package/dist/agent-blackboard/snapshot-partition-read.mjs +2 -2
  26. package/dist/agent-blackboard/snapshot-partition-validate.mjs +2 -2
  27. package/dist/agent-blackboard/snapshot-partition-write.mjs +2 -2
  28. package/dist/agent-blackboard/snapshot-partitions.mjs +4 -4
  29. package/dist/agent-blackboard/snapshot.mjs +2 -2
  30. package/dist/agent-harness-identity/index.d.mts +1 -1
  31. package/dist/api-fixtures/fixture-contract-validation.mjs +1 -1
  32. package/dist/api-fixtures/index.mjs +3 -3
  33. package/dist/ast-grep-examples/companion-parity.mjs +1 -1
  34. package/dist/ast-grep-examples/index.mjs +1 -1
  35. package/dist/basic-auth-doc-sync/index.mjs +2 -2
  36. package/dist/basic-auth-doc-sync/runbook.mjs +4 -4
  37. package/dist/basic-auth-doc-sync/source.mjs +2 -2
  38. package/dist/browser-session-runner/attempt.mjs +5 -5
  39. package/dist/browser-session-runner/index.mjs +4 -4
  40. package/dist/browser-session-runner/output.mjs +1 -1
  41. package/dist/ci-local/index.mjs +2 -2
  42. package/dist/cli/commands/agent-blackboard-flags.mjs +1 -1
  43. package/dist/cli/commands/agent-blackboard.mjs +3 -3
  44. package/dist/cli/commands/ast-grep-examples.mjs +1 -1
  45. package/dist/cli/commands/ast-grep-pack.mjs +1 -1
  46. package/dist/cli/commands/gha-artifacts-cleanup.mjs +1 -1
  47. package/dist/cli/commands/gha-runtime-audit.mjs +1 -1
  48. package/dist/cli/commands/gha-workspace-policy.mjs +2 -2
  49. package/dist/cli/commands/http-origin.mjs +1 -1
  50. package/dist/cli/commands/link-skill.mjs +1 -1
  51. package/dist/cli/commands/mcp.mjs +2 -2
  52. package/dist/cli/commands/nuget-central-version.mjs +1 -1
  53. package/dist/cli/commands/pnpm-install.mjs +1 -1
  54. package/dist/cli/commands/prepare-vitest-reports.mjs +1 -1
  55. package/dist/cli/commands/require-up-to-date.mjs +1 -1
  56. package/dist/cli/commands/retrospective-facts.mjs +1 -1
  57. package/dist/cli/commands/retrospective-transcript.mjs +1 -1
  58. package/dist/cli/commands/runner-port-policy.mjs +1 -1
  59. package/dist/cli/commands/vitest-blob-manifest.mjs +1 -1
  60. package/dist/cli/commands/vitest-report-attempt.mjs +1 -1
  61. package/dist/cli/index.mjs +27 -27
  62. package/dist/cli/installed-version.mjs +1 -1
  63. package/dist/cli/parse-gha-runtime-audit.mjs +1 -1
  64. package/dist/cli/parse-options.mjs +2 -2
  65. package/dist/cli/parse.mjs +5 -5
  66. package/dist/compiler-build/index.mjs +3 -3
  67. package/dist/compiler-build/program.mjs +3 -3
  68. package/dist/config-inventory/collect.mjs +5 -5
  69. package/dist/config-inventory/dynamic-configs.mjs +1 -1
  70. package/dist/config-inventory/env-expression-readers.mjs +1 -1
  71. package/dist/config-inventory/env-prefix-readers.mjs +2 -2
  72. package/dist/config-inventory/env-var-accumulator.mjs +1 -1
  73. package/dist/config-inventory/env-vars.mjs +5 -5
  74. package/dist/config-inventory/index.mjs +2 -2
  75. package/dist/contract-schema/contract-schema-bounded-array.mjs +2 -2
  76. package/dist/contract-schema/contract-schema-extractor.mjs +3 -3
  77. package/dist/contract-schema/contract-schema-object-tuple.mjs +2 -2
  78. package/dist/contract-schema/contract-schema-type-extractor.mjs +5 -5
  79. package/dist/contract-schema/contract-schema-type-utils.mjs +2 -2
  80. package/dist/contract-schema/contract-schema-validator.mjs +1 -1
  81. package/dist/contract-schema/index.mjs +7 -7
  82. package/dist/contract-schema/type-query-call.mjs +3 -3
  83. package/dist/contract-schema/type-query.mjs +2 -2
  84. package/dist/contract-schema/virtual-program.mjs +1 -1
  85. package/dist/coverage-transport/control-v2-parse-object.mjs +2 -2
  86. package/dist/coverage-transport/control-v2.mjs +4 -4
  87. package/dist/coverage-transport/control.mjs +2 -2
  88. package/dist/coverage-transport/discovery.mjs +4 -4
  89. package/dist/coverage-transport/http.mjs +1 -1
  90. package/dist/coverage-transport/index.mjs +10 -10
  91. package/dist/coverage-transport/keys.mjs +1 -1
  92. package/dist/coverage-transport/lib.mjs +6 -6
  93. package/dist/coverage-transport/prefix-transfer.mjs +4 -4
  94. package/dist/coverage-transport/prefix.mjs +3 -3
  95. package/dist/coverage-transport/presign.mjs +1 -1
  96. package/dist/coverage-transport/vitest-blob-transport.mjs +2 -2
  97. package/dist/dependency-license-policy/collect.mjs +5 -5
  98. package/dist/dependency-license-policy/index.mjs +3 -3
  99. package/dist/dependency-license-policy/policy.mjs +1 -1
  100. package/dist/dependency-license-policy/workspace.mjs +1 -1
  101. package/dist/dockerfile-parse/index.mjs +2 -2
  102. package/dist/dockerfile-parse/prewarm-ports.mjs +1 -1
  103. package/dist/dockerfile-parse/runtime-cmd.mjs +2 -2
  104. package/dist/finite-enum-ripple/check.mjs +3 -3
  105. package/dist/finite-enum-ripple/compare.mjs +3 -5
  106. package/dist/finite-enum-ripple/component-paths.mjs +2 -2
  107. package/dist/finite-enum-ripple/configured-object-mutations.mjs +1 -1
  108. package/dist/finite-enum-ripple/create-page-jsx.mjs +1 -1
  109. package/dist/finite-enum-ripple/create-page-literals.mjs +4 -4
  110. package/dist/finite-enum-ripple/create-page-object-visitor.mjs +2 -2
  111. package/dist/finite-enum-ripple/create-page-properties.mjs +1 -1
  112. package/dist/finite-enum-ripple/index.mjs +1 -1
  113. package/dist/finite-enum-ripple/model.d.mts +4 -0
  114. package/dist/finite-enum-ripple/parser-support.mjs +16 -3
  115. package/dist/finite-enum-ripple/parsers.mjs +5 -3
  116. package/dist/finite-enum-ripple/structured-route-check.mjs +5 -5
  117. package/dist/finite-enum-ripple/types.mjs +3 -3
  118. package/dist/finite-enum-ripple/union-factory-check.mjs +2 -2
  119. package/dist/finite-enum-ripple/union-types.mjs +5 -5
  120. package/dist/gh-api-shell-quoting/index.mjs +2 -2
  121. package/dist/gh-api-shell-quoting/logical-line.mjs +1 -1
  122. package/dist/gh-api-shell-quoting/scan.mjs +1 -1
  123. package/dist/gh-api-shell-quoting/yaml.mjs +1 -1
  124. package/dist/gh-cli/index.mjs +4 -4
  125. package/dist/gha-artifacts-cleanup/commands.mjs +2 -2
  126. package/dist/gha-artifacts-cleanup/index.mjs +4 -4
  127. package/dist/gha-check-run/cli.mjs +2 -2
  128. package/dist/gha-check-run/index.mjs +2 -2
  129. package/dist/gha-claude-post-review/index.mjs +2 -2
  130. package/dist/gha-post-review/claude-token.d.mts +2 -2
  131. package/dist/gha-post-review/claude-token.mjs +1 -1
  132. package/dist/gha-post-review/cli.mjs +1 -1
  133. package/dist/gha-post-review/github.mjs +7 -7
  134. package/dist/gha-post-review/index.mjs +6 -6
  135. package/dist/gha-post-review/post.mjs +2 -2
  136. package/dist/gha-post-review/pull-io.mjs +1 -1
  137. package/dist/gha-post-review/token.mjs +1 -1
  138. package/dist/gha-pr-checkpoint/index.mjs +3 -3
  139. package/dist/gha-pr-checkpoint/resume.mjs +1 -1
  140. package/dist/gha-pr-checkpoint/update.mjs +1 -1
  141. package/dist/gha-review-payload/cli.mjs +2 -2
  142. package/dist/gha-review-payload/file.mjs +1 -1
  143. package/dist/gha-review-payload/index.mjs +4 -4
  144. package/dist/gha-review-payload/remap.mjs +1 -1
  145. package/dist/gha-runtime-audit/audit.mjs +4 -4
  146. package/dist/gha-runtime-audit/index.mjs +3 -3
  147. package/dist/gha-workspace-policy/docker-options.mjs +1 -1
  148. package/dist/gha-workspace-policy/docker-workspace-user.mjs +2 -2
  149. package/dist/gha-workspace-policy/index.mjs +3 -3
  150. package/dist/gha-workspace-policy/shell-tokens.mjs +1 -1
  151. package/dist/gha-workspace-policy/sparse-checkout.mjs +1 -1
  152. package/dist/github-projects/index.mjs +2 -2
  153. package/dist/github-projects/project-audit.mjs +1 -1
  154. package/dist/index.mjs +55 -55
  155. package/dist/markdown/content-facts.mjs +1 -1
  156. package/dist/markdown/document-sections.mjs +2 -2
  157. package/dist/markdown/html-blocks.mjs +1 -1
  158. package/dist/markdown/index.mjs +10 -10
  159. package/dist/markdown/sections.mjs +2 -2
  160. package/dist/markdown/tables.mjs +2 -2
  161. package/dist/markdown/tasks.mjs +1 -1
  162. package/dist/mcp-server/context.mjs +2 -2
  163. package/dist/mcp-server/dispatch.mjs +8 -8
  164. package/dist/mcp-server/git-fixture.test-helpers.mjs +1 -1
  165. package/dist/mcp-server/handlers-journal.mjs +4 -4
  166. package/dist/mcp-server/handlers-outbox.mjs +2 -2
  167. package/dist/mcp-server/handlers-session.mjs +3 -3
  168. package/dist/mcp-server/harness.test-helpers.mjs +4 -4
  169. package/dist/mcp-server/main.mjs +1 -1
  170. package/dist/mcp-server/run.mjs +3 -3
  171. package/dist/mcp-server/sdk.mjs +1 -1
  172. package/dist/mcp-server/server.mjs +2 -2
  173. package/dist/mcp-server/worktree.mjs +2 -2
  174. package/dist/nuget-central-version/cli.mjs +1 -1
  175. package/dist/openapi-document/build-openapi-catalog-sse.mjs +1 -1
  176. package/dist/openapi-document/build-openapi-document.mjs +8 -8
  177. package/dist/openapi-document/build-openapi-request.mjs +1 -1
  178. package/dist/openapi-document/build-openapi-response.mjs +3 -3
  179. package/dist/openapi-document/build-openapi-sse-events.mjs +1 -1
  180. package/dist/openapi-document/component-registry.mjs +1 -1
  181. package/dist/openapi-document/contract-schema-intersection-merge.mjs +1 -1
  182. package/dist/openapi-document/contract-schema-to-openapi.mjs +1 -1
  183. package/dist/openapi-document/index.mjs +12 -12
  184. package/dist/openapi-document/openapi-route-helpers.mjs +1 -1
  185. package/dist/pg-schema-snapshot/build-snapshot.mjs +3 -3
  186. package/dist/pg-schema-snapshot/catalog-objects.mjs +1 -1
  187. package/dist/pg-schema-snapshot/catalog-queries.mjs +4 -4
  188. package/dist/pg-schema-snapshot/catalog-table-constraints.mjs +1 -1
  189. package/dist/pg-schema-snapshot/catalog-table-indexes.mjs +1 -1
  190. package/dist/pg-schema-snapshot/catalog-tables.mjs +1 -1
  191. package/dist/pg-schema-snapshot/generate.mjs +5 -5
  192. package/dist/pg-schema-snapshot/index.mjs +6 -6
  193. package/dist/pg-schema-snapshot/markdown-files.mjs +1 -1
  194. package/dist/pg-schema-snapshot/render-markdown.mjs +1 -1
  195. package/dist/pg-schema-snapshot/table-snapshot-constraints.mjs +1 -1
  196. package/dist/pg-schema-snapshot/table-snapshot.mjs +3 -3
  197. package/dist/pnpm-deploy/index.mjs +3 -3
  198. package/dist/pnpm-deploy/restore.mjs +1 -1
  199. package/dist/pnpm-install/exec.mjs +1 -1
  200. package/dist/pnpm-install/index.mjs +8 -8
  201. package/dist/pnpm-install/install-operations.mjs +6 -6
  202. package/dist/pnpm-install/metadata-legacy.mjs +1 -1
  203. package/dist/pnpm-install/metadata.d.mts +1 -1
  204. package/dist/pnpm-install/metadata.mjs +2 -2
  205. package/dist/pnpm-install/native-health.mjs +2 -2
  206. package/dist/pnpm-install/pnpm-install-fixture.test-helpers.mjs +2 -2
  207. package/dist/pnpm-install/runner.mjs +7 -7
  208. package/dist/post-publication-inventory/index.d.mts +6 -0
  209. package/dist/post-publication-inventory/index.mjs +6 -2
  210. package/dist/post-publication-inventory/readers/compose-appends.d.mts +7 -0
  211. package/dist/post-publication-inventory/readers/compose-appends.mjs +38 -0
  212. package/dist/post-publication-inventory/readers/composes.d.mts +2 -0
  213. package/dist/post-publication-inventory/readers/composes.mjs +79 -0
  214. package/dist/post-publication-inventory/readers/composition.d.mts +2 -0
  215. package/dist/post-publication-inventory/readers/composition.mjs +62 -0
  216. package/dist/post-publication-inventory/readers/public-boundary-ast.d.mts +5 -0
  217. package/dist/post-publication-inventory/readers/public-boundary-ast.mjs +33 -0
  218. package/dist/post-publication-inventory/readers/public-boundary-consumed.d.mts +3 -0
  219. package/dist/post-publication-inventory/readers/public-boundary-consumed.mjs +39 -0
  220. package/dist/post-publication-inventory/readers/public-boundary-dataflow.d.mts +3 -0
  221. package/dist/post-publication-inventory/readers/public-boundary-dataflow.mjs +61 -0
  222. package/dist/post-publication-inventory/readers/public-boundary-then.d.mts +9 -0
  223. package/dist/post-publication-inventory/readers/public-boundary-then.mjs +31 -0
  224. package/dist/post-publication-inventory/readers/public-boundary.d.mts +3 -0
  225. package/dist/post-publication-inventory/readers/public-boundary.mjs +71 -0
  226. package/dist/post-publication-inventory/readers/public-view-ast.d.mts +6 -0
  227. package/dist/post-publication-inventory/readers/public-view-ast.mjs +67 -0
  228. package/dist/post-publication-inventory/readers/public-view-options.d.mts +8 -0
  229. package/dist/post-publication-inventory/readers/public-view-protection.d.mts +2 -0
  230. package/dist/post-publication-inventory/readers/public-view-protection.mjs +83 -0
  231. package/dist/post-publication-inventory/readers/public-view.d.mts +2 -0
  232. package/dist/post-publication-inventory/readers/public-view.mjs +117 -0
  233. package/dist/post-publication-inventory/readers/source-ast.d.mts +30 -0
  234. package/dist/post-publication-inventory/readers/source-ast.mjs +52 -0
  235. package/dist/post-publication-inventory/readers/source-executors.d.mts +4 -0
  236. package/dist/post-publication-inventory/readers/source-executors.mjs +38 -0
  237. package/dist/post-publication-inventory/readers/source-helpers.d.mts +16 -0
  238. package/dist/post-publication-inventory/readers/source-helpers.mjs +72 -0
  239. package/dist/post-publication-inventory/readers/source-options.d.mts +8 -0
  240. package/dist/post-publication-inventory/readers/source-sql.d.mts +3 -0
  241. package/dist/post-publication-inventory/readers/source-sql.mjs +17 -0
  242. package/dist/post-publication-inventory/readers/sql-executors.mjs +2 -2
  243. package/dist/post-publication-inventory/readers/sql-source.mjs +3 -3
  244. package/dist/post-publication-inventory/readers/sql-template.mjs +1 -1
  245. package/dist/post-publication-inventory/writers/source.mjs +1 -1
  246. package/dist/retrospective-facts/coverage.mjs +1 -1
  247. package/dist/retrospective-facts/foreign.mjs +3 -3
  248. package/dist/retrospective-facts/index.mjs +4 -4
  249. package/dist/retrospective-facts/local.mjs +4 -4
  250. package/dist/retrospective-transcript/claude-blocks.mjs +1 -1
  251. package/dist/retrospective-transcript/claude.mjs +2 -2
  252. package/dist/retrospective-transcript/codex-messages.mjs +1 -1
  253. package/dist/retrospective-transcript/codex-payload.mjs +2 -2
  254. package/dist/retrospective-transcript/codex-records.mjs +3 -3
  255. package/dist/retrospective-transcript/codex-segment.mjs +1 -1
  256. package/dist/retrospective-transcript/codex.mjs +2 -2
  257. package/dist/retrospective-transcript/index.mjs +9 -9
  258. package/dist/retrospective-transcript/resolve-transcript-file.mjs +2 -2
  259. package/dist/scc-complexity/baseline.mjs +2 -2
  260. package/dist/scc-complexity/index.mjs +8 -8
  261. package/dist/scc-complexity/parser.mjs +1 -1
  262. package/dist/scc-complexity/scope-config.mjs +1 -1
  263. package/dist/session-friction/audit-block.mjs +1 -1
  264. package/dist/session-friction/ci-failures.mjs +2 -2
  265. package/dist/session-friction/classify.mjs +2 -2
  266. package/dist/session-friction/coverage-ledger.mjs +1 -1
  267. package/dist/session-friction/index.mjs +5 -5
  268. package/dist/session-friction/log-file.mjs +2 -2
  269. package/dist/session-friction/log.mjs +7 -7
  270. package/dist/session-friction/normalize.mjs +1 -1
  271. package/dist/session-friction/report.mjs +5 -5
  272. package/dist/session-friction/sandbox.mjs +1 -1
  273. package/dist/session-friction/session-id.mjs +1 -1
  274. package/dist/shared-context/index.mjs +1 -1
  275. package/dist/skill-discovery/index.mjs +3 -3
  276. package/dist/sql-ast/add-column.mjs +1 -1
  277. package/dist/sql-ast/constraint-do-block.mjs +2 -2
  278. package/dist/sql-ast/constraint-shared.mjs +1 -1
  279. package/dist/sql-ast/constraint.mjs +4 -4
  280. package/dist/sql-ast/create-table.mjs +2 -2
  281. package/dist/sql-ast/drop-index.mjs +2 -2
  282. package/dist/sql-ast/implicit-indexes.mjs +1 -1
  283. package/dist/sql-ast/index-metadata.mjs +3 -3
  284. package/dist/sql-ast/index.mjs +8 -8
  285. package/dist/sql-scanner/comments.mjs +1 -1
  286. package/dist/sql-scanner/index.mjs +3 -3
  287. package/dist/sql-scanner/literals.mjs +1 -1
  288. package/dist/swift-semantic-equal/cli.mjs +1 -1
  289. package/dist/swift-semantic-equal/index.mjs +1 -1
  290. package/dist/transient-retry/index.mjs +2 -2
  291. package/dist/vitest-blob-manifest/cli.mjs +2 -2
  292. package/dist/vitest-blob-manifest/index.mjs +4 -4
  293. package/dist/vitest-blob-manifest/report-attempt-cli.mjs +2 -2
  294. package/dist/vitest-blob-manifest/report-attempt.mjs +1 -1
  295. package/dist/vitest-blob-manifest/reports-cli.mjs +3 -3
  296. package/dist/vitest-blob-manifest/reports-source.mjs +2 -2
  297. package/dist/vitest-blob-manifest/reports.mjs +2 -2
  298. package/dist/vitest-diagnostics/index.mjs +8 -8
  299. package/dist/vitest-diagnostics/vitest-fork-exit-records.mjs +1 -1
  300. package/dist/vitest-diagnostics/vitest-fork-exit-sentinel.mjs +2 -2
  301. package/dist/vitest-diagnostics/vitest-fork-leak-detection.mjs +2 -2
  302. package/dist/vitest-diagnostics/vitest-worker-exit-diagnostics-reporter.mjs +2 -2
  303. package/dist/workflow-policy/condition-entailment.mjs +1 -1
  304. package/dist/workflow-policy/index.d.mts +1 -3
  305. package/dist/workflow-policy/index.mjs +4 -6
  306. package/dist/workflow-policy/permission-inheritance.mjs +1 -1
  307. package/dist/workflow-policy/permission-mismatches.mjs +2 -2
  308. package/dist/workflow-policy/secret-readiness.mjs +2 -2
  309. package/dist/workflow-policy/types.d.mts +2 -28
  310. package/dist/workspace-gates/first-party-graph.mjs +2 -2
  311. package/dist/workspace-gates/index.mjs +1 -1
  312. package/dist/workspace-gates/manifest-version-assertions.mjs +2 -2
  313. package/dist/workspace-gates/manifest-version-parser.mjs +1 -1
  314. package/dist/workspace-gates/options.mjs +1 -1
  315. package/dist/workspace-gates/policy.mjs +7 -7
  316. package/dist/workspace-gates/test-helpers.d.mts +2 -2
  317. package/docs/workflow-and-compiler.md +7 -16
  318. package/package.json +3 -6
  319. package/dist/api-contract-discovery/header-contract-parser.d.mts +0 -3
  320. package/dist/api-contract-discovery/header-contract-parser.mjs +0 -93
  321. package/dist/api-contract-discovery/header-contract-registry.d.mts +0 -3
  322. package/dist/api-contract-discovery/header-contract-registry.mjs +0 -40
  323. package/dist/api-contract-discovery/header-contract-types.d.mts +0 -19
  324. package/dist/api-contract-discovery/index.d.mts +0 -34
  325. package/dist/api-contract-discovery/index.mjs +0 -27
  326. package/dist/api-contract-discovery/protocol-analysis-cache.d.mts +0 -21
  327. package/dist/api-contract-discovery/protocol-analysis-cache.mjs +0 -7
  328. package/dist/api-contract-discovery/protocol-body-status.d.mts +0 -2
  329. package/dist/api-contract-discovery/protocol-body-status.mjs +0 -4
  330. package/dist/api-contract-discovery/protocol-callback-argument-bindings.d.mts +0 -7
  331. package/dist/api-contract-discovery/protocol-callback-argument-bindings.mjs +0 -33
  332. package/dist/api-contract-discovery/protocol-callback-invocation.d.mts +0 -6
  333. package/dist/api-contract-discovery/protocol-callback-invocation.mjs +0 -111
  334. package/dist/api-contract-discovery/protocol-callback-mutations.d.mts +0 -5
  335. package/dist/api-contract-discovery/protocol-callback-mutations.mjs +0 -42
  336. package/dist/api-contract-discovery/protocol-callback-registration.d.mts +0 -3
  337. package/dist/api-contract-discovery/protocol-callback-registration.mjs +0 -27
  338. package/dist/api-contract-discovery/protocol-callback-values.d.mts +0 -18
  339. package/dist/api-contract-discovery/protocol-callback-values.mjs +0 -114
  340. package/dist/api-contract-discovery/protocol-context-alias.d.mts +0 -3
  341. package/dist/api-contract-discovery/protocol-context-alias.mjs +0 -20
  342. package/dist/api-contract-discovery/protocol-contract-extraction.d.mts +0 -9
  343. package/dist/api-contract-discovery/protocol-contract-extraction.mjs +0 -87
  344. package/dist/api-contract-discovery/protocol-contract-keys.d.mts +0 -1
  345. package/dist/api-contract-discovery/protocol-contract-keys.mjs +0 -8
  346. package/dist/api-contract-discovery/protocol-contract-registry.d.mts +0 -5
  347. package/dist/api-contract-discovery/protocol-contract-registry.mjs +0 -133
  348. package/dist/api-contract-discovery/protocol-executable-path.d.mts +0 -3
  349. package/dist/api-contract-discovery/protocol-executable-path.mjs +0 -64
  350. package/dist/api-contract-discovery/protocol-execution-path.d.mts +0 -4
  351. package/dist/api-contract-discovery/protocol-execution-path.mjs +0 -16
  352. package/dist/api-contract-discovery/protocol-http-association.d.mts +0 -7
  353. package/dist/api-contract-discovery/protocol-http-association.mjs +0 -108
  354. package/dist/api-contract-discovery/protocol-http-body-kinds.d.mts +0 -3
  355. package/dist/api-contract-discovery/protocol-http-body-kinds.mjs +0 -19
  356. package/dist/api-contract-discovery/protocol-http-context-callers.d.mts +0 -7
  357. package/dist/api-contract-discovery/protocol-http-context-callers.mjs +0 -40
  358. package/dist/api-contract-discovery/protocol-http-context-escapes.d.mts +0 -3
  359. package/dist/api-contract-discovery/protocol-http-context-escapes.mjs +0 -95
  360. package/dist/api-contract-discovery/protocol-http-context.d.mts +0 -8
  361. package/dist/api-contract-discovery/protocol-http-context.mjs +0 -85
  362. package/dist/api-contract-discovery/protocol-http-emission.d.mts +0 -3
  363. package/dist/api-contract-discovery/protocol-http-emission.mjs +0 -76
  364. package/dist/api-contract-discovery/protocol-http-implicit-taint.d.mts +0 -7
  365. package/dist/api-contract-discovery/protocol-http-implicit-taint.mjs +0 -26
  366. package/dist/api-contract-discovery/protocol-http-method-access.d.mts +0 -9
  367. package/dist/api-contract-discovery/protocol-http-method-access.mjs +0 -34
  368. package/dist/api-contract-discovery/protocol-http-method-mutations.d.mts +0 -3
  369. package/dist/api-contract-discovery/protocol-http-method-mutations.mjs +0 -31
  370. package/dist/api-contract-discovery/protocol-http-reflect.d.mts +0 -5
  371. package/dist/api-contract-discovery/protocol-http-reflect.mjs +0 -45
  372. package/dist/api-contract-discovery/protocol-http-registration.d.mts +0 -12
  373. package/dist/api-contract-discovery/protocol-http-registration.mjs +0 -53
  374. package/dist/api-contract-discovery/protocol-http-response-mutations.d.mts +0 -3
  375. package/dist/api-contract-discovery/protocol-http-response-mutations.mjs +0 -31
  376. package/dist/api-contract-discovery/protocol-marker-analysis.d.mts +0 -7
  377. package/dist/api-contract-discovery/protocol-marker-analysis.mjs +0 -50
  378. package/dist/api-contract-discovery/protocol-opaque-callback.d.mts +0 -3
  379. package/dist/api-contract-discovery/protocol-opaque-callback.mjs +0 -107
  380. package/dist/api-contract-discovery/protocol-platform-callbacks.d.mts +0 -7
  381. package/dist/api-contract-discovery/protocol-platform-callbacks.mjs +0 -76
  382. package/dist/api-contract-discovery/protocol-platform-mutation-targets.d.mts +0 -5
  383. package/dist/api-contract-discovery/protocol-platform-mutation-targets.mjs +0 -89
  384. package/dist/api-contract-discovery/protocol-platform-writes.d.mts +0 -3
  385. package/dist/api-contract-discovery/protocol-platform-writes.mjs +0 -92
  386. package/dist/api-contract-discovery/protocol-requested-keys.d.mts +0 -5
  387. package/dist/api-contract-discovery/protocol-requested-keys.mjs +0 -45
  388. package/dist/api-contract-discovery/protocol-sse-callers.d.mts +0 -7
  389. package/dist/api-contract-discovery/protocol-sse-callers.mjs +0 -67
  390. package/dist/api-contract-discovery/protocol-sse-emission.d.mts +0 -11
  391. package/dist/api-contract-discovery/protocol-sse-emission.mjs +0 -61
  392. package/dist/api-contract-discovery/protocol-sse-feasible-status.d.mts +0 -3
  393. package/dist/api-contract-discovery/protocol-sse-feasible-status.mjs +0 -24
  394. package/dist/api-contract-discovery/protocol-sse-raw-writes.d.mts +0 -9
  395. package/dist/api-contract-discovery/protocol-sse-raw-writes.mjs +0 -99
  396. package/dist/api-contract-discovery/protocol-sse-status.d.mts +0 -3
  397. package/dist/api-contract-discovery/protocol-sse-status.mjs +0 -84
  398. package/dist/api-contract-discovery/protocol-sse-write-access.d.mts +0 -9
  399. package/dist/api-contract-discovery/protocol-sse-write-access.mjs +0 -42
  400. package/dist/api-contract-discovery/protocol-sse-write-helpers.d.mts +0 -7
  401. package/dist/api-contract-discovery/protocol-sse-write-helpers.mjs +0 -82
  402. package/dist/api-contract-discovery/protocol-sse-write-mutations.d.mts +0 -9
  403. package/dist/api-contract-discovery/protocol-sse-write-mutations.mjs +0 -42
  404. package/dist/api-contract-discovery/protocol-sse-write-resolution.d.mts +0 -14
  405. package/dist/api-contract-discovery/protocol-sse-write-resolution.mjs +0 -79
  406. package/dist/api-contract-discovery/protocol-status-dominance.d.mts +0 -5
  407. package/dist/api-contract-discovery/protocol-status-dominance.mjs +0 -35
  408. package/dist/api-contract-discovery/protocol-write-receiver.d.mts +0 -9
  409. package/dist/api-contract-discovery/protocol-write-receiver.mjs +0 -79
  410. package/dist/api-contract-discovery/query-contract-extraction.d.mts +0 -3
  411. package/dist/api-contract-discovery/query-contract-extraction.mjs +0 -82
  412. package/dist/api-contract-discovery/query-contract-literals.d.mts +0 -13
  413. package/dist/api-contract-discovery/query-contract-literals.mjs +0 -83
  414. package/dist/api-contract-discovery/query-contract-registry.d.mts +0 -3
  415. package/dist/api-contract-discovery/query-contract-registry.mjs +0 -70
  416. package/dist/api-contract-discovery/query-contract-types.d.mts +0 -8
  417. package/dist/api-contract-discovery/registered-route-binding-writes.d.mts +0 -4
  418. package/dist/api-contract-discovery/registered-route-binding-writes.mjs +0 -47
  419. package/dist/api-contract-discovery/registered-route-catalog.d.mts +0 -10
  420. package/dist/api-contract-discovery/registered-route-catalog.mjs +0 -85
  421. package/dist/api-contract-discovery/registered-route-factory-returns.d.mts +0 -3
  422. package/dist/api-contract-discovery/registered-route-factory-returns.mjs +0 -29
  423. package/dist/api-contract-discovery/registered-route-handler-analysis.d.mts +0 -12
  424. package/dist/api-contract-discovery/registered-route-handler-analysis.mjs +0 -119
  425. package/dist/api-contract-discovery/registered-route-handler-helpers.d.mts +0 -3
  426. package/dist/api-contract-discovery/registered-route-handler-helpers.mjs +0 -16
  427. package/dist/api-contract-discovery/registered-route-runtime-parameters.d.mts +0 -3
  428. package/dist/api-contract-discovery/registered-route-runtime-parameters.mjs +0 -5
  429. package/dist/api-contract-discovery/registered-route-terminal-error.d.mts +0 -3
  430. package/dist/api-contract-discovery/registered-route-terminal-error.mjs +0 -98
  431. package/dist/api-contract-discovery/request-contract-implicit.d.mts +0 -17
  432. package/dist/api-contract-discovery/request-contract-implicit.mjs +0 -73
  433. package/dist/api-contract-discovery/request-contract-lenient.d.mts +0 -28
  434. package/dist/api-contract-discovery/request-contract-lenient.mjs +0 -59
  435. package/dist/api-contract-discovery/request-contract-registry.d.mts +0 -14
  436. package/dist/api-contract-discovery/request-contract-registry.mjs +0 -63
  437. package/dist/api-contract-discovery/request-contract-route-analysis.d.mts +0 -25
  438. package/dist/api-contract-discovery/request-contract-route-analysis.mjs +0 -68
  439. package/dist/api-contract-discovery/request-contract-types.d.mts +0 -12
  440. package/dist/api-contract-discovery/request-contract-types.mjs +0 -1
  441. package/dist/api-contract-discovery/request-validation-callbacks.d.mts +0 -9
  442. package/dist/api-contract-discovery/request-validation-callbacks.mjs +0 -27
  443. package/dist/api-contract-discovery/request-validation-checker.d.mts +0 -7
  444. package/dist/api-contract-discovery/request-validation-checker.mjs +0 -25
  445. package/dist/api-contract-discovery/request-validation-conditional.d.mts +0 -6
  446. package/dist/api-contract-discovery/request-validation-conditional.mjs +0 -31
  447. package/dist/api-contract-discovery/request-validation-factory-calls.d.mts +0 -11
  448. package/dist/api-contract-discovery/request-validation-factory-calls.mjs +0 -23
  449. package/dist/api-contract-discovery/request-validation-facts.d.mts +0 -16
  450. package/dist/api-contract-discovery/request-validation-facts.mjs +0 -64
  451. package/dist/api-contract-discovery/request-validation-follow.d.mts +0 -24
  452. package/dist/api-contract-discovery/request-validation-follow.mjs +0 -38
  453. package/dist/api-contract-discovery/request-validation-handler-state.d.mts +0 -8
  454. package/dist/api-contract-discovery/request-validation-handler-state.mjs +0 -35
  455. package/dist/api-contract-discovery/request-validation-input.d.mts +0 -12
  456. package/dist/api-contract-discovery/request-validation-input.mjs +0 -43
  457. package/dist/api-contract-discovery/request-validation-keys.d.mts +0 -25
  458. package/dist/api-contract-discovery/request-validation-keys.mjs +0 -119
  459. package/dist/api-contract-discovery/request-validation-match.d.mts +0 -11
  460. package/dist/api-contract-discovery/request-validation-match.mjs +0 -47
  461. package/dist/api-contract-discovery/request-validation-mutation.d.mts +0 -7
  462. package/dist/api-contract-discovery/request-validation-mutation.mjs +0 -80
  463. package/dist/api-contract-discovery/request-validation-origin.d.mts +0 -20
  464. package/dist/api-contract-discovery/request-validation-origin.mjs +0 -71
  465. package/dist/api-contract-discovery/request-validation-reads.d.mts +0 -13
  466. package/dist/api-contract-discovery/request-validation-reads.mjs +0 -88
  467. package/dist/api-contract-discovery/request-validation-registration.d.mts +0 -9
  468. package/dist/api-contract-discovery/request-validation-registration.mjs +0 -32
  469. package/dist/api-contract-discovery/request-validation-report.d.mts +0 -3
  470. package/dist/api-contract-discovery/request-validation-report.mjs +0 -21
  471. package/dist/api-contract-discovery/request-validation-request-origin.d.mts +0 -5
  472. package/dist/api-contract-discovery/request-validation-request-origin.mjs +0 -13
  473. package/dist/api-contract-discovery/request-validation-select.d.mts +0 -9
  474. package/dist/api-contract-discovery/request-validation-select.mjs +0 -36
  475. package/dist/api-contract-discovery/request-validation-sites.d.mts +0 -9
  476. package/dist/api-contract-discovery/request-validation-sites.mjs +0 -77
  477. package/dist/api-contract-discovery/request-validation-state-key.d.mts +0 -13
  478. package/dist/api-contract-discovery/request-validation-state-key.mjs +0 -30
  479. package/dist/api-contract-discovery/request-validation-trace-helpers.d.mts +0 -14
  480. package/dist/api-contract-discovery/request-validation-trace-helpers.mjs +0 -80
  481. package/dist/api-contract-discovery/request-validation-trace-select.d.mts +0 -23
  482. package/dist/api-contract-discovery/request-validation-trace-select.mjs +0 -45
  483. package/dist/api-contract-discovery/request-validation-trace.d.mts +0 -8
  484. package/dist/api-contract-discovery/request-validation-trace.mjs +0 -130
  485. package/dist/api-contract-discovery/request-validation-types.d.mts +0 -84
  486. package/dist/api-contract-discovery/request-validation-types.mjs +0 -1
  487. package/dist/api-contract-discovery/request-validation-walker.d.mts +0 -26
  488. package/dist/api-contract-discovery/request-validation-walker.mjs +0 -143
  489. package/dist/api-contract-discovery/request-validation.test-helpers.d.mts +0 -39
  490. package/dist/api-contract-discovery/request-validation.test-helpers.mjs +0 -108
  491. package/dist/api-contract-discovery/response-contract-attribution-facts.d.mts +0 -2
  492. package/dist/api-contract-discovery/response-contract-attribution-facts.mjs +0 -18
  493. package/dist/api-contract-discovery/response-contract-attribution.d.mts +0 -3
  494. package/dist/api-contract-discovery/response-contract-attribution.mjs +0 -23
  495. package/dist/api-contract-discovery/response-contract-call-classification.d.mts +0 -3
  496. package/dist/api-contract-discovery/response-contract-call-classification.mjs +0 -37
  497. package/dist/api-contract-discovery/response-contract-ctx-analysis.d.mts +0 -7
  498. package/dist/api-contract-discovery/response-contract-ctx-analysis.mjs +0 -28
  499. package/dist/api-contract-discovery/response-contract-error-branch.d.mts +0 -15
  500. package/dist/api-contract-discovery/response-contract-error-branch.mjs +0 -150
  501. package/dist/api-contract-discovery/response-contract-handler-bindings.d.mts +0 -3
  502. package/dist/api-contract-discovery/response-contract-handler-bindings.mjs +0 -126
  503. package/dist/api-contract-discovery/response-contract-handler-calls.d.mts +0 -3
  504. package/dist/api-contract-discovery/response-contract-handler-calls.mjs +0 -81
  505. package/dist/api-contract-discovery/response-contract-implicit-sources.test-helpers.d.mts +0 -145
  506. package/dist/api-contract-discovery/response-contract-implicit-sources.test-helpers.mjs +0 -145
  507. package/dist/api-contract-discovery/response-contract-implicit-variants.d.mts +0 -2
  508. package/dist/api-contract-discovery/response-contract-implicit-variants.mjs +0 -6
  509. package/dist/api-contract-discovery/response-contract-implicit.d.mts +0 -6
  510. package/dist/api-contract-discovery/response-contract-implicit.mjs +0 -120
  511. package/dist/api-contract-discovery/response-contract-lenient.d.mts +0 -41
  512. package/dist/api-contract-discovery/response-contract-lenient.mjs +0 -52
  513. package/dist/api-contract-discovery/response-contract-media.d.mts +0 -3
  514. package/dist/api-contract-discovery/response-contract-media.mjs +0 -46
  515. package/dist/api-contract-discovery/response-contract-object-symbols.d.mts +0 -3
  516. package/dist/api-contract-discovery/response-contract-object-symbols.mjs +0 -80
  517. package/dist/api-contract-discovery/response-contract-property-mutations.d.mts +0 -5
  518. package/dist/api-contract-discovery/response-contract-property-mutations.mjs +0 -84
  519. package/dist/api-contract-discovery/response-contract-registration.d.mts +0 -11
  520. package/dist/api-contract-discovery/response-contract-registration.mjs +0 -65
  521. package/dist/api-contract-discovery/response-contract-registry.d.mts +0 -7
  522. package/dist/api-contract-discovery/response-contract-registry.mjs +0 -124
  523. package/dist/api-contract-discovery/response-contract-route-analysis.d.mts +0 -12
  524. package/dist/api-contract-discovery/response-contract-route-analysis.mjs +0 -65
  525. package/dist/api-contract-discovery/response-contract-route-syntax.d.mts +0 -7
  526. package/dist/api-contract-discovery/response-contract-route-syntax.mjs +0 -41
  527. package/dist/api-contract-discovery/response-contract-status.d.mts +0 -27
  528. package/dist/api-contract-discovery/response-contract-status.mjs +0 -82
  529. package/dist/api-contract-discovery/response-contract-symbols.d.mts +0 -5
  530. package/dist/api-contract-discovery/response-contract-symbols.mjs +0 -82
  531. package/dist/api-contract-discovery/response-contract-types.d.mts +0 -23
  532. package/dist/api-contract-discovery/response-contract-types.mjs +0 -1
  533. package/dist/api-contract-discovery/test-setup.test-helpers.d.mts +0 -3
  534. package/dist/api-contract-discovery/test-setup.test-helpers.mjs +0 -2
  535. package/dist/workflow-policy/concurrency-scope.d.mts +0 -4
  536. package/dist/workflow-policy/concurrency-scope.mjs +0 -66
  537. package/dist/workflow-policy/concurrency.d.mts +0 -10
  538. package/dist/workflow-policy/concurrency.mjs +0 -77
  539. package/dist/workflow-policy/graph.d.mts +0 -2
  540. package/dist/workflow-policy/graph.mjs +0 -138
  541. /package/dist/{api-contract-discovery/header-contract-types.mjs → post-publication-inventory/readers/public-view-options.mjs} +0 -0
  542. /package/dist/{api-contract-discovery/query-contract-types.mjs → post-publication-inventory/readers/source-options.mjs} +0 -0
@@ -1,8 +1,8 @@
1
- export { extractAlterTableAddColumnLocations } from './add-column.mjs';
2
- export { extractMigrationConstraintMetadata } from './constraint.mjs';
3
- export { extractCreateTableMetadata } from './create-table.mjs';
4
- export { extractDefaultFunction, extractFuncCallArgColumnNames } from './default-function.mjs';
5
- export { extractDropIndexMetadata } from './drop-index.mjs';
6
- export { extractCreateIndexMetadata } from './index-metadata.mjs';
7
- export { lineOfUtf8ByteOffset } from './line-of-offset.mjs';
8
- export { initSqlAst, MissingSqlAstParserError, parseSql } from './parser.mjs';
1
+ export { extractAlterTableAddColumnLocations } from "./add-column.mjs";
2
+ export { extractMigrationConstraintMetadata } from "./constraint.mjs";
3
+ export { extractCreateTableMetadata } from "./create-table.mjs";
4
+ export { extractDefaultFunction, extractFuncCallArgColumnNames } from "./default-function.mjs";
5
+ export { extractDropIndexMetadata } from "./drop-index.mjs";
6
+ export { extractCreateIndexMetadata } from "./index-metadata.mjs";
7
+ export { lineOfUtf8ByteOffset } from "./line-of-offset.mjs";
8
+ export { initSqlAst, MissingSqlAstParserError, parseSql } from "./parser.mjs";
@@ -1,4 +1,4 @@
1
- import { readDollarQuoteDelimiter, stringLiteralQuoteStart } from './literals.mjs';
1
+ import { readDollarQuoteDelimiter, stringLiteralQuoteStart } from "./literals.mjs";
2
2
  function maskNonNewlines(value) {
3
3
  return value.replace(/[^\n]/g, ' ');
4
4
  }
@@ -1,6 +1,6 @@
1
- import { readDollarQuoteDelimiter, stringLiteralQuoteStart } from './literals.mjs';
2
- export { dollarQuoteEnd, maskSqlQuotedText, readDollarQuoteDelimiter, readStringLiteral, sqlFragments, } from './literals.mjs';
3
- export { stripSqlComments } from './comments.mjs';
1
+ import { readDollarQuoteDelimiter, stringLiteralQuoteStart } from "./literals.mjs";
2
+ export { dollarQuoteEnd, maskSqlQuotedText, readDollarQuoteDelimiter, readStringLiteral, sqlFragments, } from "./literals.mjs";
3
+ export { stripSqlComments } from "./comments.mjs";
4
4
  export function lineOf(content, index) {
5
5
  return content.slice(0, index).split('\n').length;
6
6
  }
@@ -1,4 +1,4 @@
1
- import { decodeSqlStringBody, singleQuoteEnd } from './quote-decode.mjs';
1
+ import { decodeSqlStringBody, singleQuoteEnd } from "./quote-decode.mjs";
2
2
  export function readDollarQuoteDelimiter(content, index) {
3
3
  if (content[index] !== '$')
4
4
  return null;
@@ -1,5 +1,5 @@
1
1
  import { execFileSync } from 'node:child_process';
2
- import { normalizeSwiftSource } from './normalize.mjs';
2
+ import { normalizeSwiftSource } from "./normalize.mjs";
3
3
  export function runSwiftSemanticEqualCli(args, gitShow = execFileSync) {
4
4
  const [base, head, file] = args;
5
5
  if (!base || !head || !file || args.length !== 3 || !file.endsWith('.swift')) {
@@ -1 +1 @@
1
- export { normalizeSwiftSource } from './normalize.mjs';
1
+ export { normalizeSwiftSource } from "./normalize.mjs";
@@ -1,2 +1,2 @@
1
- export { deriveRetryAttempt } from './attempts.mjs';
2
- export { decide } from './decision-evaluator.mjs';
1
+ export { deriveRetryAttempt } from "./attempts.mjs";
2
+ export { decide } from "./decision-evaluator.mjs";
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { execFileSync } from 'node:child_process';
3
3
  import { fileURLToPath } from 'node:url';
4
- import { writeVitestBlobManifest } from './index.mjs';
5
- import { parseGitHubRunAttempt } from './run-attempt.mjs';
4
+ import { writeVitestBlobManifest } from "./index.mjs";
5
+ import { parseGitHubRunAttempt } from "./run-attempt.mjs";
6
6
  function failRepository() {
7
7
  throw new Error('GITHUB_REPOSITORY is required');
8
8
  }
@@ -1,10 +1,10 @@
1
1
  import { createHash, randomUUID } from 'node:crypto';
2
2
  import { lstatSync, readFileSync, readdirSync, renameSync, unlinkSync, writeFileSync, } from 'node:fs';
3
3
  import { basename, join } from 'node:path';
4
- import { VITEST_SUITE_PATTERN } from './constants.mjs';
5
- import { VitestBlobBundleError } from './bundle-error.mjs';
6
- export * from './report-attempt.mjs';
7
- export { VITEST_SUITE_PATTERN } from './constants.mjs';
4
+ import { VITEST_SUITE_PATTERN } from "./constants.mjs";
5
+ import { VitestBlobBundleError } from "./bundle-error.mjs";
6
+ export * from "./report-attempt.mjs";
7
+ export { VITEST_SUITE_PATTERN } from "./constants.mjs";
8
8
  export const VITEST_BLOB_MANIFEST_FILENAME = 'vitest-blob-manifest.json';
9
9
  export const VITEST_BLOB_MANIFEST_VERSION = 'vitest-blob-manifest:v1';
10
10
  function isRecord(value) {
@@ -1,5 +1,5 @@
1
- import { readVitestReportAttempts, writeVitestReportAttempt, } from './report-attempt.mjs';
2
- import { parseGitHubRunAttempt } from './run-attempt.mjs';
1
+ import { readVitestReportAttempts, writeVitestReportAttempt, } from "./report-attempt.mjs";
2
+ import { parseGitHubRunAttempt } from "./run-attempt.mjs";
3
3
  function required(env, name) {
4
4
  const value = env[name];
5
5
  if (!value)
@@ -1,7 +1,7 @@
1
1
  import { randomUUID } from 'node:crypto';
2
2
  import { existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, renameSync, unlinkSync, writeFileSync, } from 'node:fs';
3
3
  import { basename, join } from 'node:path';
4
- import { VITEST_SUITE_PATTERN } from './constants.mjs';
4
+ import { VITEST_SUITE_PATTERN } from "./constants.mjs";
5
5
  export const VITEST_REPORT_ATTEMPT_VERSION = 'vitest-report-attempt:v1';
6
6
  export const VITEST_REPORT_ATTEMPT_PREFIX = 'vitest-report-attempt-';
7
7
  function isRecord(value) {
@@ -1,6 +1,6 @@
1
- import { VITEST_SUITE_PATTERN } from './constants.mjs';
2
- import { prepareVitestReports } from './reports.mjs';
3
- import { parseGitHubRunAttempt } from './run-attempt.mjs';
1
+ import { VITEST_SUITE_PATTERN } from "./constants.mjs";
2
+ import { prepareVitestReports } from "./reports.mjs";
3
+ import { parseGitHubRunAttempt } from "./run-attempt.mjs";
4
4
  function required(env, name) {
5
5
  const value = env[name];
6
6
  if (!value)
@@ -1,7 +1,7 @@
1
1
  import { lstatSync, readdirSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
- import { inspectVitestBlobBundle, VITEST_BLOB_MANIFEST_FILENAME, VITEST_SUITE_PATTERN, } from './index.mjs';
4
- import { VitestBlobBundleError } from './bundle-error.mjs';
3
+ import { inspectVitestBlobBundle, VITEST_BLOB_MANIFEST_FILENAME, VITEST_SUITE_PATTERN, } from "./index.mjs";
4
+ import { VitestBlobBundleError } from "./bundle-error.mjs";
5
5
  class SourceFailure extends Error {
6
6
  reason;
7
7
  constructor(reason) {
@@ -1,8 +1,8 @@
1
1
  import { randomUUID } from 'node:crypto';
2
2
  import { existsSync, lstatSync, mkdirSync, mkdtempSync, renameSync, rmSync, writeFileSync, } from 'node:fs';
3
3
  import { basename, dirname, join } from 'node:path';
4
- import { VITEST_SUITE_PATTERN } from './index.mjs';
5
- import { inspectVitestReportSource, } from './reports-source.mjs';
4
+ import { VITEST_SUITE_PATTERN } from "./index.mjs";
5
+ import { inspectVitestReportSource, } from "./reports-source.mjs";
6
6
  function validateOptions(options) {
7
7
  if (!/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/.test(options.repository))
8
8
  throw new Error('Invalid Vitest repository');
@@ -1,15 +1,15 @@
1
1
  import { join, posix, win32 } from 'node:path';
2
- export { registerForkExitSentinel, setCurrentForkExitModule, setCurrentForkExitProject, } from './vitest-fork-exit-sentinel.mjs';
3
- export { clearForkExitRecords, formatForkExitSentinelSection, readForkExitRecords, summarizeForkExitRecords, } from './vitest-fork-exit-records.mjs';
4
- export { createVitestWorkerExitDiagnosticsReporter, formatWorkerExitDiagnostics, isWorkerExitError, } from './vitest-worker-exit-diagnostics-reporter.mjs';
5
- export { createForkLeakDetector, formatForkLeakDiagnostics, waitForResourceCloseCallbacks, } from './vitest-fork-leak-detection.mjs';
6
- import { isDiagnosticReportDirectoryCurrent, readDiagnosticReportDirectory } from './directory.mjs';
7
- import { readBoundedRegularFile } from './read-file.mjs';
8
- export { MAX_DIAGNOSTIC_REPORT_BYTES } from './read-file.mjs';
2
+ export { registerForkExitSentinel, setCurrentForkExitModule, setCurrentForkExitProject, } from "./vitest-fork-exit-sentinel.mjs";
3
+ export { clearForkExitRecords, formatForkExitSentinelSection, readForkExitRecords, summarizeForkExitRecords, } from "./vitest-fork-exit-records.mjs";
4
+ export { createVitestWorkerExitDiagnosticsReporter, formatWorkerExitDiagnostics, isWorkerExitError, } from "./vitest-worker-exit-diagnostics-reporter.mjs";
5
+ export { createForkLeakDetector, formatForkLeakDiagnostics, waitForResourceCloseCallbacks, } from "./vitest-fork-leak-detection.mjs";
6
+ import { isDiagnosticReportDirectoryCurrent, readDiagnosticReportDirectory } from "./directory.mjs";
7
+ import { readBoundedRegularFile } from "./read-file.mjs";
8
+ export { MAX_DIAGNOSTIC_REPORT_BYTES } from "./read-file.mjs";
9
9
  export const DEFAULT_MAX_DIAGNOSTIC_REPORTS = 100;
10
10
  export const DEFAULT_MAX_FORMATTED_DIAGNOSTIC_REPORTS = 20;
11
11
  export const HARD_MAX_DIAGNOSTIC_REPORTS = 100;
12
- export { HARD_MAX_DIAGNOSTIC_DIRECTORY_ENTRIES } from './directory.mjs';
12
+ export { HARD_MAX_DIAGNOSTIC_DIRECTORY_ENTRIES } from "./directory.mjs";
13
13
  const TEXT_LIMIT = 200;
14
14
  const PATH_LIMIT = 240;
15
15
  function objectValue(value) {
@@ -2,7 +2,7 @@
2
2
  // identifies a death before the sentinel handler ran. Synchronous writes avoid async pipe loss.
3
3
  import { closeSync, constants, lstatSync, mkdirSync, openSync, readdirSync, readFileSync, unlinkSync, writeSync, } from 'node:fs';
4
4
  import { join } from 'node:path';
5
- import { sanitizeInlineErrorMessage } from './vitest-fork-exit-error-detail.mjs';
5
+ import { sanitizeInlineErrorMessage } from "./vitest-fork-exit-error-detail.mjs";
6
6
  const recordFileFds = new Map();
7
7
  function recordFileDescriptor(directory) {
8
8
  const cached = recordFileFds.get(directory);
@@ -10,8 +10,8 @@
10
10
  import { writeSync } from 'node:fs';
11
11
  import { constants as osConstants } from 'node:os';
12
12
  import { getHeapStatistics } from 'node:v8';
13
- import { MAX_RECORDED_ERROR_STACK_CHARS, sanitizeInlineErrorMessage, toErrorDetail, } from './vitest-fork-exit-error-detail.mjs';
14
- import { writeForkExitRecord } from './vitest-fork-exit-records.mjs';
13
+ import { MAX_RECORDED_ERROR_STACK_CHARS, sanitizeInlineErrorMessage, toErrorDetail, } from "./vitest-fork-exit-error-detail.mjs";
14
+ import { writeForkExitRecord } from "./vitest-fork-exit-records.mjs";
15
15
  const SENTINEL_REGISTERED = Symbol.for('vouchington-tooling.vitest-fork-exit-sentinel.registered');
16
16
  let currentModule = null;
17
17
  // isolate: false lets one fork run files from multiple projects. Track the current project per test.
@@ -1,8 +1,8 @@
1
1
  // Fork-side growth-delta leak detector for Vitest's reused forks pool.
2
2
  // It spans setup-file resets with one episode per type and stable candidate plateau.
3
3
  // Episodes combine new high-water marks with rolling samples for transient-high recovery.
4
- export { formatForkLeakDiagnostics } from './vitest-fork-leak-diagnostics.mjs';
5
- import { createForkLeakEpisode, findForkLeakEpisodeEvidence, recordForkLeakEpisode, setForkLeakCandidate, takeConfirmedForkLeakCandidate, } from './vitest-fork-leak-episode.mjs';
4
+ export { formatForkLeakDiagnostics } from "./vitest-fork-leak-diagnostics.mjs";
5
+ import { createForkLeakEpisode, findForkLeakEpisodeEvidence, recordForkLeakEpisode, setForkLeakCandidate, takeConfirmedForkLeakCandidate, } from "./vitest-fork-leak-episode.mjs";
6
6
  const realSetTimeout = globalThis.setTimeout;
7
7
  const PERSISTENT_HANDLE_TYPES = new Set([
8
8
  'TCPSocketWrap',
@@ -1,6 +1,6 @@
1
1
  import { EOL } from 'node:os';
2
- import { clearForkExitRecords, formatForkExitSentinelSection, readForkExitRecords, summarizeForkExitRecords, } from './vitest-fork-exit-records.mjs';
3
- import { collectStringValues, serializeDiagnosticsError, } from './vitest-worker-exit-diagnostics-errors.mjs';
2
+ import { clearForkExitRecords, formatForkExitSentinelSection, readForkExitRecords, summarizeForkExitRecords, } from "./vitest-fork-exit-records.mjs";
3
+ import { collectStringValues, serializeDiagnosticsError, } from "./vitest-worker-exit-diagnostics-errors.mjs";
4
4
  const MAX_RECENT_MODULE_EVENTS = 8;
5
5
  const MAX_RECENT_STDERR_LINES = 12;
6
6
  const MAX_UNHANDLED_ERRORS = 2;
@@ -1,4 +1,4 @@
1
- import { splitTopLevel, hasTopLevelMixedOperators } from './condition-split.mjs';
1
+ import { splitTopLevel, hasTopLevelMixedOperators } from "./condition-split.mjs";
2
2
  /**
3
3
  * Conservative GitHub Actions `if:` condition comparison.
4
4
  * Deliberately conservative: a condition shape this can't reason about is treated as NOT entailed
@@ -1,7 +1,5 @@
1
- export { evaluateGraphPolicy } from './graph.mts';
2
- export { evaluateLockPolicy, type ConcurrencyPolicy } from './concurrency.mts';
3
1
  export { conditionEntails } from './condition-entailment.mts';
4
2
  export { unprovisionedSecretsWithoutReadinessStep } from './secret-readiness.mts';
5
3
  export { callerCalleePermissionMismatches, type CallerCalleePermissionPolicy, } from './permission-mismatches.mts';
6
4
  export { missingTopLevelPermissionPaths, parsePermissions, parseWorkflow, requiredWorkflowPermissions, type Workflow, } from './permissions.mts';
7
- export type { WorkflowTopology, WorkflowTopologyIndex, WorkflowTopologyPolicy, WorkflowNode, WorkflowJobNode, WorkflowStep, } from './types.mts';
5
+ export type { WorkflowTopology, WorkflowTopologyIndex, WorkflowNode, WorkflowJobNode, WorkflowStep, } from './types.mts';
@@ -1,6 +1,4 @@
1
- export { evaluateGraphPolicy } from './graph.mjs';
2
- export { evaluateLockPolicy } from './concurrency.mjs';
3
- export { conditionEntails } from './condition-entailment.mjs';
4
- export { unprovisionedSecretsWithoutReadinessStep } from './secret-readiness.mjs';
5
- export { callerCalleePermissionMismatches, } from './permission-mismatches.mjs';
6
- export { missingTopLevelPermissionPaths, parsePermissions, parseWorkflow, requiredWorkflowPermissions, } from './permissions.mjs';
1
+ export { conditionEntails } from "./condition-entailment.mjs";
2
+ export { unprovisionedSecretsWithoutReadinessStep } from "./secret-readiness.mjs";
3
+ export { callerCalleePermissionMismatches, } from "./permission-mismatches.mjs";
4
+ export { missingTopLevelPermissionPaths, parsePermissions, parseWorkflow, requiredWorkflowPermissions, } from "./permissions.mjs";
@@ -1,4 +1,4 @@
1
- import { isPlainRecord, isValidDeclaration, isValidPermissionMap, mergePermissionMaps, permissionMap, PERMISSION_LEVEL_RANK, } from './permission-declarations.mjs';
1
+ import { isPlainRecord, isValidDeclaration, isValidPermissionMap, mergePermissionMaps, permissionMap, PERMISSION_LEVEL_RANK, } from "./permission-declarations.mjs";
2
2
  function sortedEntries(value) {
3
3
  return [...value].toSorted(([left], [right]) => left.localeCompare(right));
4
4
  }
@@ -1,5 +1,5 @@
1
- import { parsePermissions, permissionsToMap, requiredWorkflowPermissions, } from './permissions.mjs';
2
- import { inheritanceAwarePermissionMismatches } from './permission-inheritance.mjs';
1
+ import { parsePermissions, permissionsToMap, requiredWorkflowPermissions, } from "./permissions.mjs";
2
+ import { inheritanceAwarePermissionMismatches } from "./permission-inheritance.mjs";
3
3
  function formatPermissions(value) {
4
4
  if (value === null)
5
5
  return 'none';
@@ -1,5 +1,5 @@
1
- import { conditionEntails } from './condition-entailment.mjs';
2
- import { stripShellComments } from './shell-comments.mjs';
1
+ import { conditionEntails } from "./condition-entailment.mjs";
2
+ import { stripShellComments } from "./shell-comments.mjs";
3
3
  function referencingWorkflowsByName(topology) {
4
4
  const byName = new Map();
5
5
  const paths = new Map(topology.workflows.map((workflow) => [workflow.id, workflow.path]));
@@ -9,7 +9,7 @@ export interface WorkflowStep {
9
9
  run?: string;
10
10
  secretReferences?: readonly string[];
11
11
  }
12
- export interface WorkflowConcurrency {
12
+ interface WorkflowConcurrency {
13
13
  effective: {
14
14
  group: string;
15
15
  cancelInProgress: boolean | string;
@@ -61,30 +61,4 @@ export interface WorkflowTopologyIndex {
61
61
  match?: string;
62
62
  }[];
63
63
  }
64
- export type EdgeRule = readonly [from: string, to: string];
65
- export type StepSelector = {
66
- id?: string;
67
- uses?: string;
68
- name?: string;
69
- };
70
- export type WorkflowTopologyPolicy = {
71
- jobInventory: Readonly<Record<string, readonly string[]>>;
72
- requiredJobs: readonly string[];
73
- forbiddenJobs: readonly string[];
74
- requiredDirectEdges: readonly EdgeRule[];
75
- forbiddenDirectEdges: readonly EdgeRule[];
76
- requiredTransitiveEdges: readonly EdgeRule[];
77
- forbiddenTransitiveEdges: readonly EdgeRule[];
78
- requiredArtifactEdges: readonly {
79
- from: string;
80
- to: string;
81
- name: string;
82
- match?: string;
83
- }[];
84
- exactFanIns: Readonly<Record<string, readonly string[]>>;
85
- exactCallerJobs: Readonly<Record<string, readonly string[]>>;
86
- stepOrders: readonly {
87
- jobId: string;
88
- steps: readonly StepSelector[];
89
- }[];
90
- };
64
+ export {};
@@ -1,7 +1,7 @@
1
1
  import { readFile } from 'node:fs/promises';
2
2
  import { join } from 'node:path';
3
- import { packageNameFromPnpmLockKey, pnpmLockPackageKeyMatchesSelector, } from '../pnpm-install/index.mjs';
4
- import { loadYaml } from './yaml-loader.mjs';
3
+ import { packageNameFromPnpmLockKey, pnpmLockPackageKeyMatchesSelector, } from "../pnpm-install/index.mjs";
4
+ import { loadYaml } from "./yaml-loader.mjs";
5
5
  const PACKAGE_DEPENDENCY_FIELDS = [
6
6
  'dependencies',
7
7
  'devDependencies',
@@ -1 +1 @@
1
- export { checkWorkspaceGatesPolicy } from './policy.mjs';
1
+ export { checkWorkspaceGatesPolicy } from "./policy.mjs";
@@ -1,7 +1,7 @@
1
1
  import { readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
- import { findExpectations } from './manifest-version-parser.mjs';
4
- import { buildDependencyMatchers, SEMVER_LITERAL } from './manifest-version-patterns.mjs';
3
+ import { findExpectations } from "./manifest-version-parser.mjs";
4
+ import { buildDependencyMatchers, SEMVER_LITERAL } from "./manifest-version-patterns.mjs";
5
5
  const TEST_SOURCE_FILE = /(?:^|\/)[^/]+\.(?:test|spec)\.[cm]?[jt]sx?$/u;
6
6
  const PACKAGE_JSON_FILE = /(?:^|\/)package\.json$/u;
7
7
  const TEST_OR_FIXTURE_DIRECTORY = /(?:^|\/)(?:test|tests|__tests__|fixture|fixtures|__fixtures__)(?:\/|$)/u;
@@ -1,4 +1,4 @@
1
- import { skipLiteralOrComment } from './manifest-version-skips.mjs';
1
+ import { skipLiteralOrComment } from "./manifest-version-skips.mjs";
2
2
  const EXPECTATION_MATCHER = /^\s*(?:\.|\?\.)\s*(?:not\s*\.\s*)?to(?:Be|Equal|StrictEqual|MatchObject|Contain|ContainEqual|HaveProperty)\s*\(/u;
3
3
  function closingParenthesis(source, open) {
4
4
  let depth = 1;
@@ -1,4 +1,4 @@
1
- import { flattenReleaseAgeSelectors, } from '../pnpm-install/index.mjs';
1
+ import { flattenReleaseAgeSelectors, } from "../pnpm-install/index.mjs";
2
2
  export function resolveWorkspaceGatesOptions(options) {
3
3
  return {
4
4
  firstPartyNames: options.firstPartyNames,
@@ -1,10 +1,10 @@
1
- import { validateReleaseAgeExemptionGroups } from '../pnpm-install/index.mjs';
2
- import { checkDependabotCrosslist } from './dependabot.mjs';
3
- import { checkExcludeRegistry } from './exclude-registry.mjs';
4
- import { checkManifestDependencyVersionAssertions } from './manifest-version-assertions.mjs';
5
- import { checkActiveFirstPartyGraph, checkTemporaryReleaseAgeSelectorsInLockfile, } from './first-party-graph.mjs';
6
- import { resolveWorkspaceGatesOptions, shouldValidateTemporaryGroups, } from './options.mjs';
7
- import { loadYaml } from './yaml-loader.mjs';
1
+ import { validateReleaseAgeExemptionGroups } from "../pnpm-install/index.mjs";
2
+ import { checkDependabotCrosslist } from "./dependabot.mjs";
3
+ import { checkExcludeRegistry } from "./exclude-registry.mjs";
4
+ import { checkManifestDependencyVersionAssertions } from "./manifest-version-assertions.mjs";
5
+ import { checkActiveFirstPartyGraph, checkTemporaryReleaseAgeSelectorsInLockfile, } from "./first-party-graph.mjs";
6
+ import { resolveWorkspaceGatesOptions, shouldValidateTemporaryGroups, } from "./options.mjs";
7
+ import { loadYaml } from "./yaml-loader.mjs";
8
8
  export async function checkWorkspaceGatesPolicy(ctx, options) {
9
9
  const errors = [];
10
10
  const resolved = resolveWorkspaceGatesOptions(options);
@@ -1,7 +1,7 @@
1
1
  import type { SharedContext } from '../shared-context/index.mts';
2
2
  import type { WorkspaceGatesOptions } from './options.mts';
3
- export declare const FIRST_PARTY_NAMES: readonly ['acme-lib', '@acme/core'];
4
- export declare const SCOPED_PREFIXES: readonly ['@acme/'];
3
+ export declare const FIRST_PARTY_NAMES: readonly ["acme-lib", "@acme/core"];
4
+ export declare const SCOPED_PREFIXES: readonly ["@acme/"];
5
5
  export declare const TEMPORARY_SELECTOR = "demo-temporary-package@9.9.9";
6
6
  export declare function defaultOptions(overrides?: Partial<WorkspaceGatesOptions>): WorkspaceGatesOptions;
7
7
  export declare function stubCtx(repoRoot: string, trackedFiles: readonly string[]): SharedContext;
@@ -1,33 +1,24 @@
1
1
  # Workflow and compiler primitives
2
2
 
3
- `workflow-policy` evaluates parsed GitHub Actions topology against policy supplied by the
4
- consumer. It has no workflow inventory or secret names of its own. Supply a topology and an index
5
- with the structural methods described by `WorkflowTopologyIndex`; a parser may expose additional
6
- fields. `evaluateGraphPolicy` checks inventory, job and edge presence, artifact flow, fan-in,
7
- reusable callers, and step order. `evaluateLockPolicy` takes the consumer's unlocked reasons and
8
- concurrency intent separately. Its scope classifier recognizes GitHub expression references and
9
- reports unsupported contexts.
10
-
11
- Inventory compares workflow `jobIds` against each corresponding job's `key`; job IDs may use any
12
- format. Fan-in and caller comparisons ignore ordering of index results.
3
+ `workflow-policy` checks parsed GitHub Actions topology against data supplied by the consumer. It
4
+ has no workflow inventory or secret names of its own. Supply a topology shaped like
5
+ `WorkflowTopology`; a parser may expose additional fields. Topology, job-graph and concurrency
6
+ policy lives in the `no-mistakes` `workflow-topology-policy` rule, not here. This breaking minor removed `evaluateGraphPolicy`, `evaluateLockPolicy`,
7
+ `ConcurrencyPolicy` and `WorkflowTopologyPolicy`; migrate to that rule.
13
8
 
14
9
  ```ts
15
10
  import {
16
11
  conditionEntails,
17
- evaluateGraphPolicy,
18
- evaluateLockPolicy,
19
12
  callerCalleePermissionMismatches,
20
13
  parseWorkflow,
21
14
  unprovisionedSecretsWithoutReadinessStep,
22
15
  } from 'vouchington-tooling/workflow-policy'
23
16
 
24
- const diagnostics = evaluateGraphPolicy(topology, index, policy)
25
- diagnostics.push(...evaluateLockPolicy(topology, unlockedReasons, concurrencyIntent))
26
- diagnostics.push(
17
+ const diagnostics = [
27
18
  ...unprovisionedSecretsWithoutReadinessStep(topology, {
28
19
  RELEASE_KEY: { provisioned: false },
29
20
  }),
30
- )
21
+ ]
31
22
  const documents = Object.fromEntries(
32
23
  Object.entries(workflowSources).map(([path, yaml]) => [path, parseWorkflow(yaml)]),
33
24
  )
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vouchington-tooling",
3
- "version": "0.34.0",
3
+ "version": "0.36.0",
4
4
  "description": "Vouchington CLI and extractable tooling libraries.",
5
5
  "homepage": "https://github.com/vouchington/vouchington-tooling/tree/main/packages/vouchington-tooling#readme",
6
6
  "bugs": {
@@ -181,11 +181,6 @@
181
181
  "import": "./dist/api-fixtures/index.mjs",
182
182
  "default": "./dist/api-fixtures/index.mjs"
183
183
  },
184
- "./api-contract-discovery": {
185
- "types": "./dist/api-contract-discovery/index.d.mts",
186
- "import": "./dist/api-contract-discovery/index.mjs",
187
- "default": "./dist/api-contract-discovery/index.mjs"
188
- },
189
184
  "./transient-retry": {
190
185
  "types": "./dist/transient-retry/index.d.mts",
191
186
  "import": "./dist/transient-retry/index.mjs",
@@ -364,6 +359,7 @@
364
359
  "dependencies": {
365
360
  "@types/mdast": "4.0.4",
366
361
  "@types/unist": "3.0.3",
362
+ "@typescript-eslint/parser": "^8.71.1",
367
363
  "csv-parse": "7.0.3",
368
364
  "csv-stringify": "6.9.0",
369
365
  "dockerfile-ast": "0.7.1",
@@ -371,6 +367,7 @@
371
367
  "remark": "15.0.1",
372
368
  "remark-gfm": "4.0.1",
373
369
  "spdx-expression-parse": "5.0.0",
370
+ "typescript": "npm:@typescript/typescript6@^6.0.2",
374
371
  "yaml": "2.9.1"
375
372
  },
376
373
  "devDependencies": {
@@ -1,3 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mts';
2
- import type { HeaderContract } from './header-contract-types.mts';
3
- export declare function parseHeaderContract(sourceFile: ts.SourceFile, node: ts.ObjectLiteralExpression): HeaderContract;
@@ -1,93 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mjs';
2
- import { contractError } from './response-contract-registration.mjs';
3
- export function parseHeaderContract(sourceFile, node) {
4
- const request = propertyObject(sourceFile, node, 'request');
5
- const responses = propertyObject(sourceFile, node, 'responses');
6
- return {
7
- requestHeaders: request ? parseHeaders(sourceFile, request) : {},
8
- responseHeaders: responses ? parseResponses(sourceFile, responses) : {},
9
- };
10
- }
11
- function parseResponses(sourceFile, node) {
12
- const result = {};
13
- for (const property of node.properties) {
14
- if (!ts.isPropertyAssignment(property) ||
15
- !ts.isNumericLiteral(property.name) ||
16
- !ts.isObjectLiteralExpression(property.initializer))
17
- throw contractError(sourceFile, property, 'apiHeaders response status must be a numeric object property');
18
- const status = Number(property.name.text);
19
- const errors = property.initializer.properties.find((item) => ts.isPropertyAssignment(item) && item.name.getText(sourceFile) === 'errors');
20
- const headers = propertyObject(sourceFile, property.initializer, 'headers');
21
- const description = stringProperty(property.initializer, 'description');
22
- result[status] = {
23
- ...(description ? { description } : {}),
24
- ...(errors ? { errors: parseErrors(sourceFile, property.initializer) } : {}),
25
- headers: headers ? parseHeaders(sourceFile, headers) : {},
26
- };
27
- }
28
- return result;
29
- }
30
- function parseErrors(sourceFile, node) {
31
- const property = findProperty(node, 'errors', sourceFile);
32
- if (!property || !ts.isArrayLiteralExpression(property.initializer))
33
- throw contractError(sourceFile, node, 'apiHeaders errors must be an array');
34
- return property.initializer.elements.map((element) => {
35
- if (!ts.isObjectLiteralExpression(element))
36
- throw contractError(sourceFile, element, 'apiHeaders errors entries must be objects');
37
- return {
38
- code: requiredString(sourceFile, element, 'code'),
39
- message: requiredString(sourceFile, element, 'message'),
40
- };
41
- });
42
- }
43
- function parseHeaders(sourceFile, node) {
44
- const result = Object.create(null);
45
- for (const property of node.properties) {
46
- if (!ts.isPropertyAssignment(property) ||
47
- !ts.isStringLiteral(property.name) ||
48
- !ts.isObjectLiteralExpression(property.initializer))
49
- throw contractError(sourceFile, property, 'apiHeaders header must be a string-keyed object property');
50
- const description = stringProperty(property.initializer, 'description');
51
- const format = stringProperty(property.initializer, 'format');
52
- result[property.name.text] = {
53
- type: requiredString(sourceFile, property.initializer, 'type'),
54
- required: booleanProperty(property.initializer, 'required') ?? false,
55
- ...(format ? { format: format } : {}),
56
- ...(description ? { description } : {}),
57
- };
58
- }
59
- return result;
60
- }
61
- function propertyObject(sourceFile, node, name) {
62
- const property = findProperty(node, name, sourceFile);
63
- if (!property)
64
- return undefined;
65
- if (!ts.isObjectLiteralExpression(property.initializer))
66
- throw contractError(sourceFile, property, `apiHeaders ${name} must be an object`);
67
- return property.initializer;
68
- }
69
- function stringProperty(node, name) {
70
- const property = findProperty(node, name);
71
- return property && ts.isStringLiteral(property.initializer)
72
- ? property.initializer.text
73
- : undefined;
74
- }
75
- function requiredString(sourceFile, node, name) {
76
- const value = stringProperty(node, name);
77
- if (!value)
78
- throw contractError(sourceFile, node, `apiHeaders requires string ${name}`);
79
- return value;
80
- }
81
- function booleanProperty(node, name) {
82
- const property = findProperty(node, name);
83
- if (!property)
84
- return undefined;
85
- if (property.initializer.kind === ts.SyntaxKind.TrueKeyword)
86
- return true;
87
- if (property.initializer.kind === ts.SyntaxKind.FalseKeyword)
88
- return false;
89
- return undefined;
90
- }
91
- function findProperty(node, name, sourceFile) {
92
- return node.properties.find((item) => ts.isPropertyAssignment(item) && item.name.getText(sourceFile) === name);
93
- }
@@ -1,3 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mts';
2
- import type { HeaderContractRegistry } from './header-contract-types.mts';
3
- export declare function discoverApiHeaderContracts(program: ts.Program, sourceFiles: readonly ts.SourceFile[], knownResponseRoutes: ReadonlySet<string>): HeaderContractRegistry;
@@ -1,40 +0,0 @@
1
- import ts from '../contract-schema/typescript-api.mjs';
2
- import { registerPlatformCompilerLibraries } from './protocol-platform-callbacks.mjs';
3
- import { contractError } from './response-contract-registration.mjs';
4
- import { parseHeaderContract } from './header-contract-parser.mjs';
5
- import { collectHandlerBindings, enclosingRouteBinding, visit, } from './response-contract-route-analysis.mjs';
6
- export function discoverApiHeaderContracts(program, sourceFiles, knownResponseRoutes) {
7
- registerPlatformCompilerLibraries(program);
8
- const checker = program.getTypeChecker();
9
- const bindings = collectHandlerBindings(sourceFiles, checker);
10
- const contracts = new Map();
11
- const knownOperations = new Set([...knownResponseRoutes].map((key) => key.split('#')[0]));
12
- for (const sourceFile of sourceFiles) {
13
- visit(sourceFile, (node) => {
14
- if (!ts.isCallExpression(node) || !isMarker(node.expression))
15
- return;
16
- const [keyNode, contractNode] = node.arguments;
17
- if (!keyNode ||
18
- !ts.isStringLiteral(keyNode) ||
19
- !contractNode ||
20
- !ts.isObjectLiteralExpression(contractNode)) {
21
- throw contractError(sourceFile, node, 'apiHeaders requires a literal operation key and object contract');
22
- }
23
- const binding = enclosingRouteBinding(node, checker, bindings);
24
- if (!binding)
25
- throw contractError(sourceFile, node, 'apiHeaders must be inside an app.route handler');
26
- const key = `${binding.method}:${binding.routeTemplate}`;
27
- if (keyNode.text !== key)
28
- throw contractError(sourceFile, keyNode, `Header operation key "${keyNode.text}" does not match enclosing route ${key}`);
29
- if (!knownOperations.has(key))
30
- throw contractError(sourceFile, keyNode, `apiHeaders references unknown response route ${key}`);
31
- if (contracts.has(key))
32
- throw contractError(sourceFile, keyNode, `Duplicate apiHeaders marker for ${key}`);
33
- contracts.set(key, parseHeaderContract(sourceFile, contractNode));
34
- });
35
- }
36
- return Object.fromEntries([...contracts.entries()].toSorted(([a], [b]) => a.localeCompare(b)));
37
- }
38
- function isMarker(expression) {
39
- return ts.isIdentifier(expression) && expression.text === 'apiHeaders';
40
- }