@stsepelin/checktrail 0.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (385) hide show
  1. package/CONTRIBUTING.md +42 -0
  2. package/LICENSE +21 -0
  3. package/README.md +355 -0
  4. package/SECURITY.md +46 -0
  5. package/dist/src/actionlint-evidence.d.ts +2 -0
  6. package/dist/src/actionlint-evidence.js +166 -0
  7. package/dist/src/actionlint-inputs.d.ts +5 -0
  8. package/dist/src/actionlint-inputs.js +123 -0
  9. package/dist/src/actionlint-runner.d.ts +1 -0
  10. package/dist/src/actionlint-runner.js +122 -0
  11. package/dist/src/actionlint.d.ts +19 -0
  12. package/dist/src/actionlint.js +80 -0
  13. package/dist/src/adapters.d.ts +49 -0
  14. package/dist/src/adapters.js +430 -0
  15. package/dist/src/architecture.d.ts +107 -0
  16. package/dist/src/architecture.js +230 -0
  17. package/dist/src/clang-evidence.d.ts +2 -0
  18. package/dist/src/clang-evidence.js +194 -0
  19. package/dist/src/clang-protocol.d.ts +3 -0
  20. package/dist/src/clang-protocol.js +25 -0
  21. package/dist/src/clang-runner.d.ts +1 -0
  22. package/dist/src/clang-runner.js +159 -0
  23. package/dist/src/clang.d.ts +44 -0
  24. package/dist/src/clang.js +197 -0
  25. package/dist/src/cli.d.ts +2 -0
  26. package/dist/src/cli.js +338 -0
  27. package/dist/src/config.d.ts +33 -0
  28. package/dist/src/config.js +140 -0
  29. package/dist/src/contract-schema.d.ts +85 -0
  30. package/dist/src/contract-schema.js +56 -0
  31. package/dist/src/contract-worker.d.ts +1 -0
  32. package/dist/src/contract-worker.js +123 -0
  33. package/dist/src/contracts.d.ts +22 -0
  34. package/dist/src/contracts.js +123 -0
  35. package/dist/src/django-evidence.d.ts +2 -0
  36. package/dist/src/django-evidence.js +100 -0
  37. package/dist/src/django-runner.d.ts +1 -0
  38. package/dist/src/django-runner.js +80 -0
  39. package/dist/src/django.d.ts +9 -0
  40. package/dist/src/django.js +50 -0
  41. package/dist/src/dotnet-compiler.d.ts +1 -0
  42. package/dist/src/dotnet-compiler.js +87 -0
  43. package/dist/src/dotnet-evidence.d.ts +2 -0
  44. package/dist/src/dotnet-evidence.js +127 -0
  45. package/dist/src/dotnet-runner.d.ts +1 -0
  46. package/dist/src/dotnet-runner.js +167 -0
  47. package/dist/src/dotnet.d.ts +65 -0
  48. package/dist/src/dotnet.js +120 -0
  49. package/dist/src/engine.d.ts +19 -0
  50. package/dist/src/engine.js +239 -0
  51. package/dist/src/environment.d.ts +6 -0
  52. package/dist/src/environment.js +36 -0
  53. package/dist/src/eslint-evidence.d.ts +2 -0
  54. package/dist/src/eslint-evidence.js +98 -0
  55. package/dist/src/eslint-runner.d.ts +1 -0
  56. package/dist/src/eslint-runner.js +61 -0
  57. package/dist/src/eslint.d.ts +2 -0
  58. package/dist/src/eslint.js +40 -0
  59. package/dist/src/evidence.d.ts +2 -0
  60. package/dist/src/evidence.js +313 -0
  61. package/dist/src/external-adapter.d.ts +164 -0
  62. package/dist/src/external-adapter.js +265 -0
  63. package/dist/src/external-evidence.d.ts +2 -0
  64. package/dist/src/external-evidence.js +127 -0
  65. package/dist/src/external-runner.d.ts +1 -0
  66. package/dist/src/external-runner.js +122 -0
  67. package/dist/src/fastapi-evidence.d.ts +2 -0
  68. package/dist/src/fastapi-evidence.js +126 -0
  69. package/dist/src/fastapi-runner.d.ts +1 -0
  70. package/dist/src/fastapi-runner.js +84 -0
  71. package/dist/src/fastapi.d.ts +10 -0
  72. package/dist/src/fastapi.js +52 -0
  73. package/dist/src/fetch-pack.d.ts +16 -0
  74. package/dist/src/fetch-pack.js +154 -0
  75. package/dist/src/finding-policy-schema.d.ts +146 -0
  76. package/dist/src/finding-policy-schema.js +70 -0
  77. package/dist/src/finding-policy.d.ts +62 -0
  78. package/dist/src/finding-policy.js +206 -0
  79. package/dist/src/git-selection.d.ts +3 -0
  80. package/dist/src/git-selection.js +229 -0
  81. package/dist/src/go-directives.d.ts +1 -0
  82. package/dist/src/go-directives.js +32 -0
  83. package/dist/src/go-scope.d.ts +11 -0
  84. package/dist/src/go-scope.js +122 -0
  85. package/dist/src/golangci-evidence.d.ts +2 -0
  86. package/dist/src/golangci-evidence.js +92 -0
  87. package/dist/src/golangci-runner.d.ts +1 -0
  88. package/dist/src/golangci-runner.js +124 -0
  89. package/dist/src/golangci.d.ts +2 -0
  90. package/dist/src/golangci.js +35 -0
  91. package/dist/src/guidance.d.ts +98 -0
  92. package/dist/src/guidance.js +247 -0
  93. package/dist/src/index.d.ts +31 -0
  94. package/dist/src/index.js +16 -0
  95. package/dist/src/inventory.d.ts +4 -0
  96. package/dist/src/inventory.js +94 -0
  97. package/dist/src/java-compiler.d.ts +1 -0
  98. package/dist/src/java-compiler.js +110 -0
  99. package/dist/src/java-evidence.d.ts +2 -0
  100. package/dist/src/java-evidence.js +114 -0
  101. package/dist/src/java-runner.d.ts +1 -0
  102. package/dist/src/java-runner.js +79 -0
  103. package/dist/src/java.d.ts +25 -0
  104. package/dist/src/java.js +102 -0
  105. package/dist/src/jest-evidence.d.ts +2 -0
  106. package/dist/src/jest-evidence.js +117 -0
  107. package/dist/src/jest-runner.d.ts +1 -0
  108. package/dist/src/jest-runner.js +46 -0
  109. package/dist/src/jest.d.ts +2 -0
  110. package/dist/src/jest.js +36 -0
  111. package/dist/src/junit.d.ts +18 -0
  112. package/dist/src/junit.js +157 -0
  113. package/dist/src/laravel-evidence.d.ts +2 -0
  114. package/dist/src/laravel-evidence.js +175 -0
  115. package/dist/src/laravel-runner.d.ts +1 -0
  116. package/dist/src/laravel-runner.js +168 -0
  117. package/dist/src/laravel.d.ts +8 -0
  118. package/dist/src/laravel.js +50 -0
  119. package/dist/src/local-tool.d.ts +1 -0
  120. package/dist/src/local-tool.js +19 -0
  121. package/dist/src/mcp.d.ts +14 -0
  122. package/dist/src/mcp.js +362 -0
  123. package/dist/src/mutation.d.ts +118 -0
  124. package/dist/src/mutation.js +370 -0
  125. package/dist/src/mypy-evidence.d.ts +2 -0
  126. package/dist/src/mypy-evidence.js +63 -0
  127. package/dist/src/mypy.d.ts +2 -0
  128. package/dist/src/mypy.js +59 -0
  129. package/dist/src/node-reporter.d.ts +1 -0
  130. package/dist/src/node-reporter.js +28 -0
  131. package/dist/src/nuxt-evidence.d.ts +2 -0
  132. package/dist/src/nuxt-evidence.js +160 -0
  133. package/dist/src/nuxt-protocol.d.ts +52 -0
  134. package/dist/src/nuxt-protocol.js +29 -0
  135. package/dist/src/nuxt-runner.d.ts +1 -0
  136. package/dist/src/nuxt-runner.js +165 -0
  137. package/dist/src/nuxt.d.ts +24 -0
  138. package/dist/src/nuxt.js +105 -0
  139. package/dist/src/output.d.ts +3 -0
  140. package/dist/src/output.js +48 -0
  141. package/dist/src/phpstan-evidence.d.ts +2 -0
  142. package/dist/src/phpstan-evidence.js +81 -0
  143. package/dist/src/phpstan.d.ts +2 -0
  144. package/dist/src/phpstan.js +51 -0
  145. package/dist/src/phpunit-evidence.d.ts +2 -0
  146. package/dist/src/phpunit-evidence.js +53 -0
  147. package/dist/src/phpunit.d.ts +2 -0
  148. package/dist/src/phpunit.js +58 -0
  149. package/dist/src/pint-evidence.d.ts +2 -0
  150. package/dist/src/pint-evidence.js +79 -0
  151. package/dist/src/pint-runner.d.ts +1 -0
  152. package/dist/src/pint-runner.js +53 -0
  153. package/dist/src/pint.d.ts +2 -0
  154. package/dist/src/pint.js +37 -0
  155. package/dist/src/playwright-evidence.d.ts +2 -0
  156. package/dist/src/playwright-evidence.js +127 -0
  157. package/dist/src/playwright-reporter.d.ts +10 -0
  158. package/dist/src/playwright-reporter.js +37 -0
  159. package/dist/src/playwright-runner.d.ts +1 -0
  160. package/dist/src/playwright-runner.js +61 -0
  161. package/dist/src/playwright.d.ts +2 -0
  162. package/dist/src/playwright.js +35 -0
  163. package/dist/src/policy-pack.d.ts +21 -0
  164. package/dist/src/policy-pack.js +41 -0
  165. package/dist/src/pytest-evidence.d.ts +2 -0
  166. package/dist/src/pytest-evidence.js +116 -0
  167. package/dist/src/pytest-runner.d.ts +1 -0
  168. package/dist/src/pytest-runner.js +48 -0
  169. package/dist/src/pytest.d.ts +2 -0
  170. package/dist/src/pytest.js +25 -0
  171. package/dist/src/report-validation.d.ts +129 -0
  172. package/dist/src/report-validation.js +27 -0
  173. package/dist/src/review.d.ts +270 -0
  174. package/dist/src/review.js +349 -0
  175. package/dist/src/ruby.d.ts +2 -0
  176. package/dist/src/ruby.js +25 -0
  177. package/dist/src/ruff-evidence.d.ts +2 -0
  178. package/dist/src/ruff-evidence.js +99 -0
  179. package/dist/src/ruff.d.ts +2 -0
  180. package/dist/src/ruff.js +40 -0
  181. package/dist/src/runner.d.ts +8 -0
  182. package/dist/src/runner.js +117 -0
  183. package/dist/src/runtime-inventory.d.ts +112 -0
  184. package/dist/src/runtime-inventory.js +200 -0
  185. package/dist/src/rust-dep-info.d.ts +1 -0
  186. package/dist/src/rust-dep-info.js +46 -0
  187. package/dist/src/rust-evidence.d.ts +2 -0
  188. package/dist/src/rust-evidence.js +157 -0
  189. package/dist/src/rust-runner.d.ts +1 -0
  190. package/dist/src/rust-runner.js +161 -0
  191. package/dist/src/rust.d.ts +7 -0
  192. package/dist/src/rust.js +39 -0
  193. package/dist/src/sarif.d.ts +86 -0
  194. package/dist/src/sarif.js +113 -0
  195. package/dist/src/schemas.d.ts +393 -0
  196. package/dist/src/schemas.js +222 -0
  197. package/dist/src/staticcheck-evidence.d.ts +2 -0
  198. package/dist/src/staticcheck-evidence.js +75 -0
  199. package/dist/src/swift.d.ts +2 -0
  200. package/dist/src/swift.js +20 -0
  201. package/dist/src/task-store.d.ts +37 -0
  202. package/dist/src/task-store.js +349 -0
  203. package/dist/src/tool-versions.d.ts +3 -0
  204. package/dist/src/tool-versions.js +260 -0
  205. package/dist/src/types.d.ts +157 -0
  206. package/dist/src/types.js +37 -0
  207. package/dist/src/typescript-build-evidence.d.ts +2 -0
  208. package/dist/src/typescript-build-evidence.js +86 -0
  209. package/dist/src/typescript-build-runner.d.ts +1 -0
  210. package/dist/src/typescript-build-runner.js +132 -0
  211. package/dist/src/typescript-build.d.ts +2 -0
  212. package/dist/src/typescript-build.js +41 -0
  213. package/dist/src/typescript.d.ts +2 -0
  214. package/dist/src/typescript.js +54 -0
  215. package/dist/src/validation-task-worker.d.ts +1 -0
  216. package/dist/src/validation-task-worker.js +205 -0
  217. package/dist/src/validation-tasks-protocol.d.ts +69 -0
  218. package/dist/src/validation-tasks-protocol.js +57 -0
  219. package/dist/src/validation-tasks.d.ts +11 -0
  220. package/dist/src/validation-tasks.js +144 -0
  221. package/dist/src/vitest-evidence.d.ts +2 -0
  222. package/dist/src/vitest-evidence.js +112 -0
  223. package/dist/src/vitest-runner.d.ts +1 -0
  224. package/dist/src/vitest-runner.js +48 -0
  225. package/dist/src/vitest.d.ts +2 -0
  226. package/dist/src/vitest.js +36 -0
  227. package/dist/src/vue-router-capture.d.ts +42 -0
  228. package/dist/src/vue-router-capture.js +87 -0
  229. package/dist/src/vue-router-evidence.d.ts +2 -0
  230. package/dist/src/vue-router-evidence.js +126 -0
  231. package/dist/src/vue-router-protocol.d.ts +63 -0
  232. package/dist/src/vue-router-protocol.js +44 -0
  233. package/dist/src/vue-router-runner.d.ts +1 -0
  234. package/dist/src/vue-router-runner.js +88 -0
  235. package/dist/src/vue-router.d.ts +23 -0
  236. package/dist/src/vue-router.js +108 -0
  237. package/dist/src/vue-tsc-runner.d.ts +1 -0
  238. package/dist/src/vue-tsc-runner.js +24 -0
  239. package/dist/src/workspace.d.ts +7 -0
  240. package/dist/src/workspace.js +53 -0
  241. package/docs/ACCEPTANCE.md +56 -0
  242. package/docs/ACTIONLINT.md +112 -0
  243. package/docs/ARCHITECTURE-POLICY.md +82 -0
  244. package/docs/ARCHITECTURE.md +122 -0
  245. package/docs/CLANG.md +113 -0
  246. package/docs/CLIENTS.md +109 -0
  247. package/docs/CONTRACTS.md +73 -0
  248. package/docs/DEPENDENCIES.md +42 -0
  249. package/docs/DJANGO.md +70 -0
  250. package/docs/DOTNET.md +114 -0
  251. package/docs/ENVIRONMENTS.md +52 -0
  252. package/docs/ESLINT.md +68 -0
  253. package/docs/EVALUATION.md +124 -0
  254. package/docs/EXECUTION.md +250 -0
  255. package/docs/EXTERNAL-ADAPTERS.md +170 -0
  256. package/docs/EXTERNAL-EVALUATION.md +155 -0
  257. package/docs/EXTERNAL-RUFF-EVALUATION.md +85 -0
  258. package/docs/FASTAPI.md +73 -0
  259. package/docs/FINDING-POLICY.md +67 -0
  260. package/docs/GO-RACE.md +19 -0
  261. package/docs/GO-SCOPE.md +63 -0
  262. package/docs/GOLANGCI-LINT.md +64 -0
  263. package/docs/GUIDANCE.md +46 -0
  264. package/docs/IMPACT-MEASUREMENT.md +97 -0
  265. package/docs/INSTALLATION.md +102 -0
  266. package/docs/JAVA.md +79 -0
  267. package/docs/JEST.md +36 -0
  268. package/docs/JUNIT.md +31 -0
  269. package/docs/LANGUAGES.md +113 -0
  270. package/docs/LARAVEL.md +111 -0
  271. package/docs/MCP-COMPATIBILITY.md +68 -0
  272. package/docs/MUTATIONS.md +93 -0
  273. package/docs/MYPY.md +37 -0
  274. package/docs/NATIVE-CI.md +96 -0
  275. package/docs/NUXT.md +123 -0
  276. package/docs/PACK-DISTRIBUTION.md +98 -0
  277. package/docs/PERFORMANCE.md +71 -0
  278. package/docs/PEST.md +36 -0
  279. package/docs/PHPSTAN.md +48 -0
  280. package/docs/PHPUNIT.md +32 -0
  281. package/docs/PINT.md +41 -0
  282. package/docs/PLAN.md +265 -0
  283. package/docs/PLAYWRIGHT.md +73 -0
  284. package/docs/POLICY-PACKS.md +106 -0
  285. package/docs/PRIOR-WORKFLOW-EVALUATION.md +116 -0
  286. package/docs/PUBLICATION.md +28 -0
  287. package/docs/PYTEST.md +51 -0
  288. package/docs/RELEASE.md +115 -0
  289. package/docs/RENAMING.md +55 -0
  290. package/docs/REVIEW-EXCHANGE.md +136 -0
  291. package/docs/RUBY.md +50 -0
  292. package/docs/RUFF.md +39 -0
  293. package/docs/RUNTIME-INVENTORY.md +56 -0
  294. package/docs/RUST.md +74 -0
  295. package/docs/SARIF.md +64 -0
  296. package/docs/STATUS.md +530 -0
  297. package/docs/SWIFT.md +48 -0
  298. package/docs/TASK-STORAGE.md +141 -0
  299. package/docs/TOOL-IDENTITY.md +30 -0
  300. package/docs/TYPESCRIPT-BUILD.md +55 -0
  301. package/docs/VALIDATION-TASKS.md +119 -0
  302. package/docs/VITEST.md +36 -0
  303. package/docs/VUE-ROUTER.md +130 -0
  304. package/docs/VUE-TSC.md +26 -0
  305. package/docs/WORKSPACES.md +81 -0
  306. package/docs/licenses/nodable-entities-3.0.0.txt +21 -0
  307. package/docs/measurements/client-claude-before-schema-fix-darwin-arm64-node26.json +60 -0
  308. package/docs/measurements/client-claude-darwin-arm64-node26.json +55 -0
  309. package/docs/measurements/client-codex-darwin-arm64-node26.json +175 -0
  310. package/docs/measurements/evaluation-corpus-repo-verifier.json +332 -0
  311. package/docs/measurements/evaluation-darwin-arm64-node26.json +1236 -0
  312. package/docs/measurements/evaluation-linux-arm64-node22.json +1236 -0
  313. package/docs/measurements/external-eslint-darwin-arm64-node26.json +11866 -0
  314. package/docs/measurements/external-eslint-linux-arm64-node22.json +11866 -0
  315. package/docs/measurements/external-eslint-preservation.json +1527 -0
  316. package/docs/measurements/external-ruff-darwin-arm64-node26.json +1031 -0
  317. package/docs/measurements/external-ruff-linux-arm64-node22.json +1031 -0
  318. package/docs/measurements/hosted-ci-52ba415.json +1005 -0
  319. package/docs/measurements/impact-darwin-arm64-node26.json +6685 -0
  320. package/docs/measurements/impact-linux-arm64-node22.json +6690 -0
  321. package/docs/measurements/performance-darwin-arm64-node26.json +845 -0
  322. package/docs/measurements/performance-linux-arm64-node22.json +845 -0
  323. package/docs/measurements/required-native-profiles.json +500 -0
  324. package/package.json +72 -0
  325. package/packs/actionlint.json +8 -0
  326. package/packs/cpp.json +8 -0
  327. package/packs/dotnet.json +8 -0
  328. package/packs/go.json +7 -0
  329. package/packs/java.json +8 -0
  330. package/packs/javascript-node.json +7 -0
  331. package/packs/nuxt.json +7 -0
  332. package/packs/php-pest.json +7 -0
  333. package/packs/php-phpunit.json +7 -0
  334. package/packs/python-pytest.json +7 -0
  335. package/packs/ruby.json +7 -0
  336. package/packs/rust.json +7 -0
  337. package/packs/swift.json +7 -0
  338. package/packs/vue-router.json +7 -0
  339. package/packs/vue.json +11 -0
  340. package/schemas/actionlint-config.schema.json +19 -0
  341. package/schemas/architecture-policy.schema.json +51 -0
  342. package/schemas/architecture-report.schema.json +123 -0
  343. package/schemas/architecture-summary.schema.json +82 -0
  344. package/schemas/clang-database.schema.json +23 -0
  345. package/schemas/config.schema.json +69 -0
  346. package/schemas/contract-bundle.schema.json +78 -0
  347. package/schemas/contract-report.schema.json +114 -0
  348. package/schemas/contract-summary.schema.json +72 -0
  349. package/schemas/dependency-graph.schema.json +65 -0
  350. package/schemas/django-config.schema.json +16 -0
  351. package/schemas/dotnet-config.schema.json +60 -0
  352. package/schemas/external-manifest.schema.json +97 -0
  353. package/schemas/external-reference.schema.json +10 -0
  354. package/schemas/external-request.schema.json +56 -0
  355. package/schemas/external-result.schema.json +111 -0
  356. package/schemas/fastapi-config.schema.json +27 -0
  357. package/schemas/finding-baseline.schema.json +92 -0
  358. package/schemas/finding-comparison-summary.schema.json +95 -0
  359. package/schemas/finding-comparison.schema.json +121 -0
  360. package/schemas/guidance-context.schema.json +34 -0
  361. package/schemas/guidance-report.schema.json +176 -0
  362. package/schemas/guidance-summary.schema.json +68 -0
  363. package/schemas/java-config.schema.json +24 -0
  364. package/schemas/junit.schema.json +69 -0
  365. package/schemas/laravel-config.schema.json +11 -0
  366. package/schemas/mutation-recipe.schema.json +31 -0
  367. package/schemas/mutation-report.schema.json +238 -0
  368. package/schemas/mutation-summary.schema.json +98 -0
  369. package/schemas/nuxt-config.schema.json +51 -0
  370. package/schemas/plan-summary.schema.json +63 -0
  371. package/schemas/plan.schema.json +244 -0
  372. package/schemas/policy-pack.schema.json +41 -0
  373. package/schemas/report-summary.schema.json +100 -0
  374. package/schemas/report.schema.json +463 -0
  375. package/schemas/review-assessment.schema.json +133 -0
  376. package/schemas/review-context-summary.schema.json +31 -0
  377. package/schemas/review-context.schema.json +254 -0
  378. package/schemas/review-receipt-summary.schema.json +104 -0
  379. package/schemas/review-receipt.schema.json +271 -0
  380. package/schemas/review-selection.schema.json +30 -0
  381. package/schemas/runtime-comparison-summary.schema.json +68 -0
  382. package/schemas/runtime-comparison.schema.json +127 -0
  383. package/schemas/runtime-inventory.schema.json +99 -0
  384. package/schemas/vue-router-config.schema.json +67 -0
  385. package/server.json +47 -0
@@ -0,0 +1,42 @@
1
+ export interface RouteRecord {
2
+ path: unknown;
3
+ name?: unknown;
4
+ aliasOf?: RouteRecord;
5
+ components?: Record<string, unknown>;
6
+ children: unknown[];
7
+ meta: unknown;
8
+ redirect?: unknown;
9
+ beforeEnter?: unknown;
10
+ }
11
+ export interface Router {
12
+ getRoutes(): RouteRecord[];
13
+ resolve(value: string): {
14
+ matched: RouteRecord[];
15
+ };
16
+ }
17
+ export declare function vueRecordIdentity(record: RouteRecord): {
18
+ path: string;
19
+ name: string | null;
20
+ };
21
+ export declare function captureVueRecords(records: RouteRecord[], config: {
22
+ strict: boolean;
23
+ sensitive: boolean;
24
+ }): {
25
+ entries: {
26
+ key: string;
27
+ attributes: {
28
+ path: string;
29
+ name: string | null;
30
+ aliasPath: string | null;
31
+ aliasName: string | null;
32
+ views: string[];
33
+ meta: string;
34
+ redirect: string;
35
+ beforeEnter: string[];
36
+ children: number;
37
+ globalStrict: boolean;
38
+ globalSensitive: boolean;
39
+ };
40
+ }[];
41
+ indices: number[];
42
+ };
@@ -0,0 +1,87 @@
1
+ import { vueRouteIdentitySchema } from "./vue-router.js";
2
+ import { vueRouteAttributesSchema, vueRouteKey, } from "./vue-router-protocol.js";
3
+ function data(value, depth = 0, budget = { remaining: 1024 }) {
4
+ if (depth > 8 || --budget.remaining < 0)
5
+ throw new Error("Route data nesting exceeds limits");
6
+ if (value === null ||
7
+ typeof value === "string" ||
8
+ typeof value === "boolean" ||
9
+ (typeof value === "number" && Number.isFinite(value)))
10
+ return value;
11
+ if (Array.isArray(value) && value.length <= 64) {
12
+ if (Reflect.ownKeys(value).some((key) => key !== "length" &&
13
+ (typeof key !== "string" ||
14
+ String(Number(key)) !== key ||
15
+ !Number.isInteger(Number(key)) ||
16
+ Number(key) < 0 ||
17
+ Number(key) >= value.length)))
18
+ throw new Error("Array metadata contains non-JSON properties");
19
+ return Array.from({ length: value.length }, (_, index) => {
20
+ const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
21
+ if (!descriptor || !("value" in descriptor))
22
+ throw new Error("Sparse or computed array metadata is unsupported");
23
+ return data(descriptor.value, depth + 1, budget);
24
+ });
25
+ }
26
+ if (value &&
27
+ typeof value === "object" &&
28
+ [Object.prototype, null].includes(Object.getPrototypeOf(value))) {
29
+ if (Reflect.ownKeys(value).some((key) => typeof key !== "string"))
30
+ throw new Error("Symbol metadata is outside the JSON projection");
31
+ const descriptors = Object.getOwnPropertyDescriptors(value);
32
+ if (Object.values(descriptors).some((descriptor) => !descriptor.enumerable || !("value" in descriptor)))
33
+ throw new Error("Computed or hidden metadata is unsupported");
34
+ const entries = Object.entries(descriptors)
35
+ .map(([key, descriptor]) => [key, descriptor.value])
36
+ .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
37
+ if (entries.length > 64)
38
+ throw new Error("Route metadata exceeds limits");
39
+ return Object.fromEntries(entries.map(([key, item]) => [key, data(item, depth + 1, budget)]));
40
+ }
41
+ throw new Error("Route data is not a supported JSON value");
42
+ }
43
+ export function vueRecordIdentity(record) {
44
+ return vueRouteIdentitySchema.parse({
45
+ path: record.path,
46
+ name: record.name ?? null,
47
+ });
48
+ }
49
+ export function captureVueRecords(records, config) {
50
+ const entries = [];
51
+ const indices = [];
52
+ for (const [index, record] of records.entries()) {
53
+ try {
54
+ const guards = record.beforeEnter === undefined
55
+ ? []
56
+ : Array.isArray(record.beforeEnter)
57
+ ? record.beforeEnter
58
+ : [record.beforeEnter];
59
+ if (guards.some((guard) => typeof guard !== "function"))
60
+ throw new Error("Unsupported route guard");
61
+ const attributes = vueRouteAttributesSchema.parse({
62
+ ...vueRecordIdentity(record),
63
+ aliasPath: record.aliasOf
64
+ ? vueRecordIdentity(record.aliasOf).path
65
+ : null,
66
+ aliasName: record.aliasOf
67
+ ? vueRecordIdentity(record.aliasOf).name
68
+ : null,
69
+ views: Object.keys(record.components ?? {}).sort(),
70
+ meta: JSON.stringify(data(record.meta)),
71
+ redirect: record.redirect === undefined
72
+ ? "null"
73
+ : JSON.stringify(data(record.redirect)),
74
+ beforeEnter: guards.map((guard) => guard.name),
75
+ children: record.children.length,
76
+ globalStrict: config.strict,
77
+ globalSensitive: config.sensitive,
78
+ });
79
+ entries.push({ key: vueRouteKey(attributes), attributes });
80
+ indices.push(index);
81
+ }
82
+ catch {
83
+ continue;
84
+ }
85
+ }
86
+ return { entries, indices };
87
+ }
@@ -0,0 +1,2 @@
1
+ import type { Check, CheckResult, ProcessResult } from "./types.js";
2
+ export declare function vueRouterEvidence(check: Check, processes: ProcessResult[]): Partial<CheckResult>;
@@ -0,0 +1,126 @@
1
+ import { z } from "zod";
2
+ import path from "node:path";
3
+ import { vueRouterConfigSchema } from "./vue-router.js";
4
+ import { vueRouteAttributesSchema, vueRouteKey, vueRouterResultSchema, } from "./vue-router-protocol.js";
5
+ export function vueRouterEvidence(check, processes) {
6
+ const incomplete = {
7
+ status: "inconclusive",
8
+ reason: "Vue Router capture or route probe coverage is empty, malformed or incomplete.",
9
+ findingsComplete: false,
10
+ };
11
+ if (processes.length !== 1)
12
+ return incomplete;
13
+ const execution = processes[0];
14
+ if (execution.exitCode === 3) {
15
+ try {
16
+ z.strictObject({
17
+ unavailable: z.literal("vue-router-runtime"),
18
+ reason: z.literal("unsupported-version"),
19
+ }).parse(JSON.parse(execution.stdout));
20
+ return {
21
+ status: "unavailable",
22
+ reason: "The verified Vue Router/Vue versions are not installed.",
23
+ findingsComplete: false,
24
+ };
25
+ }
26
+ catch {
27
+ return incomplete;
28
+ }
29
+ }
30
+ if (execution.exitCode !== 0)
31
+ return {
32
+ status: "error",
33
+ reason: "Vue Router startup or capture failed.",
34
+ findingsComplete: false,
35
+ };
36
+ try {
37
+ const result = vueRouterResultSchema.parse(JSON.parse(execution.stdout));
38
+ const config = vueRouterConfigSchema.parse(JSON.parse(check.commands[0].args[4]));
39
+ const collection = result.runtime.collections[0];
40
+ if (result.runtime.sourceFingerprint !== check.commands[0].args[5] ||
41
+ result.runtime.producer.name !== "checktrail.vue-router" ||
42
+ result.runtime.producer.version !== "1.0.0" ||
43
+ result.runtime.assembly.name !== config.assembly ||
44
+ result.runtime.assembly.environment !== config.environment ||
45
+ result.runtime.collections.length !== 1 ||
46
+ collection.kind !== "routes" ||
47
+ !collection.ordered ||
48
+ collection.complete !== (result.supportedRoutes === result.totalRoutes) ||
49
+ result.supportedRoutes !== collection.entries.length ||
50
+ result.indices.length !== result.supportedRoutes ||
51
+ new Set(result.indices).size !== result.supportedRoutes ||
52
+ result.indices.some((index, offset) => index >= result.totalRoutes ||
53
+ (offset > 0 && index <= result.indices[offset - 1])) ||
54
+ result.coveredIndices.some((index, offset) => index >= result.totalRoutes ||
55
+ (offset > 0 && index <= result.coveredIndices[offset - 1])) ||
56
+ result.probes.length !== config.probes.length ||
57
+ !result.totalRoutes)
58
+ return incomplete;
59
+ const records = new Map();
60
+ for (const [offset, entry] of collection.entries.entries()) {
61
+ const attributes = vueRouteAttributesSchema.parse(entry.attributes);
62
+ if (entry.key !== vueRouteKey(attributes) ||
63
+ attributes.globalStrict !== config.strict ||
64
+ attributes.globalSensitive !== config.sensitive)
65
+ return incomplete;
66
+ records.set(result.indices[offset], {
67
+ path: attributes.path,
68
+ name: attributes.name,
69
+ });
70
+ }
71
+ const observed = new Set();
72
+ const findings = [];
73
+ for (const [index, probe] of result.probes.entries()) {
74
+ if (probe.path !== config.probes[index].path)
75
+ return incomplete;
76
+ const nonnull = probe.indices.filter((value) => value !== null);
77
+ if (probe.indices.length !== probe.matched.length ||
78
+ new Set(nonnull).size !== nonnull.length)
79
+ return incomplete;
80
+ for (const [offset, recordIndex] of probe.indices.entries()) {
81
+ if (recordIndex === null)
82
+ continue;
83
+ if (recordIndex >= result.totalRoutes ||
84
+ (records.has(recordIndex) &&
85
+ JSON.stringify(records.get(recordIndex)) !==
86
+ JSON.stringify(probe.matched[offset])))
87
+ return incomplete;
88
+ observed.add(recordIndex);
89
+ }
90
+ if (JSON.stringify(probe.matched) !==
91
+ JSON.stringify(config.probes[index].matched))
92
+ findings.push({
93
+ ruleId: "vue-router/probe-mismatch",
94
+ level: "error",
95
+ message: `Route probe ${probe.path} did not resolve to its expected matched route chain.`,
96
+ file: path.posix.join(check.project, "checktrail.vue-router.json"),
97
+ });
98
+ }
99
+ if (JSON.stringify([...observed].sort((a, b) => a - b)) !==
100
+ JSON.stringify(result.coveredIndices))
101
+ return incomplete;
102
+ const complete = collection.complete &&
103
+ result.coveredIndices.length === result.totalRoutes;
104
+ const evidence = {
105
+ runtime: result.runtime,
106
+ findings,
107
+ findingsComplete: complete,
108
+ };
109
+ if (findings.length)
110
+ return {
111
+ ...evidence,
112
+ status: "failed",
113
+ reason: "Native Vue Router resolution differs from the declared route contract.",
114
+ };
115
+ if (!complete)
116
+ return { ...evidence, ...incomplete };
117
+ return {
118
+ ...evidence,
119
+ status: "passed",
120
+ reason: "Every native route record participated in a probe and all resolved route chains matched the declared contract.",
121
+ };
122
+ }
123
+ catch {
124
+ return incomplete;
125
+ }
126
+ }
@@ -0,0 +1,63 @@
1
+ import { z } from "zod";
2
+ export declare const vueRouteAttributesSchema: z.ZodObject<{
3
+ path: z.ZodString;
4
+ name: z.ZodNullable<z.ZodString>;
5
+ aliasPath: z.ZodNullable<z.ZodString>;
6
+ aliasName: z.ZodNullable<z.ZodString>;
7
+ views: z.ZodArray<z.ZodString>;
8
+ meta: z.ZodString;
9
+ redirect: z.ZodString;
10
+ beforeEnter: z.ZodArray<z.ZodString>;
11
+ children: z.ZodNumber;
12
+ globalStrict: z.ZodBoolean;
13
+ globalSensitive: z.ZodBoolean;
14
+ }, z.core.$strict>;
15
+ export declare const vueRouterResultSchema: z.ZodObject<{
16
+ schemaVersion: z.ZodLiteral<1>;
17
+ versions: z.ZodObject<{
18
+ router: z.ZodLiteral<"5.3.1">;
19
+ vue: z.ZodLiteral<"3.5.43">;
20
+ }, z.core.$strict>;
21
+ totalRoutes: z.ZodNumber;
22
+ supportedRoutes: z.ZodNumber;
23
+ indices: z.ZodArray<z.ZodNumber>;
24
+ coveredIndices: z.ZodArray<z.ZodNumber>;
25
+ runtime: z.ZodObject<{
26
+ schemaVersion: z.ZodLiteral<1>;
27
+ format: z.ZodLiteral<"runtime-inventory">;
28
+ producer: z.ZodObject<{
29
+ name: z.ZodString;
30
+ version: z.ZodString;
31
+ }, z.core.$strict>;
32
+ assembly: z.ZodObject<{
33
+ name: z.ZodString;
34
+ environment: z.ZodString;
35
+ }, z.core.$strict>;
36
+ sourceFingerprint: z.ZodString;
37
+ capturedAt: z.ZodISODateTime;
38
+ collections: z.ZodArray<z.ZodObject<{
39
+ kind: z.ZodEnum<{
40
+ routes: "routes";
41
+ listeners: "listeners";
42
+ middleware: "middleware";
43
+ schedules: "schedules";
44
+ bindings: "bindings";
45
+ }>;
46
+ complete: z.ZodBoolean;
47
+ ordered: z.ZodBoolean;
48
+ entries: z.ZodArray<z.ZodObject<{
49
+ key: z.ZodString;
50
+ attributes: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodArray<z.ZodString>]>>;
51
+ }, z.core.$strict>>;
52
+ }, z.core.$strict>>;
53
+ }, z.core.$strict>;
54
+ probes: z.ZodArray<z.ZodObject<{
55
+ path: z.ZodString;
56
+ matched: z.ZodArray<z.ZodObject<{
57
+ path: z.ZodString;
58
+ name: z.ZodNullable<z.ZodString>;
59
+ }, z.core.$strict>>;
60
+ indices: z.ZodArray<z.ZodNullable<z.ZodNumber>>;
61
+ }, z.core.$strict>>;
62
+ }, z.core.$strict>;
63
+ export declare function vueRouteKey(attributes: z.infer<typeof vueRouteAttributesSchema>): string;
@@ -0,0 +1,44 @@
1
+ import { z } from "zod";
2
+ import { runtimeInventorySchema } from "./runtime-inventory.js";
3
+ import { vueRouteIdentitySchema } from "./vue-router.js";
4
+ const count = z.number().int().nonnegative().max(2048);
5
+ export const vueRouteAttributesSchema = z.strictObject({
6
+ path: z.string().regex(/^\//).max(4096),
7
+ name: z.string().max(256).nullable(),
8
+ aliasPath: z.string().max(4096).nullable(),
9
+ aliasName: z.string().max(256).nullable(),
10
+ views: z.array(z.string().max(256)).max(32),
11
+ meta: z.string().max(4096),
12
+ redirect: z.string().max(4096),
13
+ beforeEnter: z.array(z.string().max(256)).max(32),
14
+ children: count,
15
+ globalStrict: z.boolean(),
16
+ globalSensitive: z.boolean(),
17
+ });
18
+ export const vueRouterResultSchema = z.strictObject({
19
+ schemaVersion: z.literal(1),
20
+ versions: z.strictObject({
21
+ router: z.literal("5.3.1"),
22
+ vue: z.literal("3.5.43"),
23
+ }),
24
+ totalRoutes: count,
25
+ supportedRoutes: count,
26
+ indices: z.array(count).max(2048),
27
+ coveredIndices: z.array(count).max(2048),
28
+ runtime: runtimeInventorySchema,
29
+ probes: z
30
+ .array(z.strictObject({
31
+ path: z.string(),
32
+ matched: z.array(vueRouteIdentitySchema).max(32),
33
+ indices: z.array(count.nullable()).max(32),
34
+ }))
35
+ .max(256),
36
+ });
37
+ export function vueRouteKey(attributes) {
38
+ return JSON.stringify([
39
+ attributes.path,
40
+ attributes.name,
41
+ attributes.aliasPath,
42
+ attributes.aliasName,
43
+ ]);
44
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,88 @@
1
+ import { captureVueRecords, vueRecordIdentity, } from "./vue-router-capture.js";
2
+ import { readFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { pathToFileURL } from "node:url";
5
+ import { vueRouterConfigSchema } from "./vue-router.js";
6
+ import { vueRouterResultSchema } from "./vue-router-protocol.js";
7
+ async function main() {
8
+ const [routerEntry, vueMetadata, moduleEntry, encoded, fingerprint] = process.argv.slice(2);
9
+ const config = vueRouterConfigSchema.parse(JSON.parse(encoded));
10
+ const routerVersion = JSON.parse(await readFile(path.join(path.dirname(routerEntry), "package.json"), "utf8")).version;
11
+ const vueVersion = JSON.parse(await readFile(vueMetadata, "utf8")).version;
12
+ if (routerVersion !== "5.3.1" || vueVersion !== "3.5.43") {
13
+ process.stdout.write(JSON.stringify({
14
+ unavailable: "vue-router-runtime",
15
+ reason: "unsupported-version",
16
+ }));
17
+ process.exitCode = 3;
18
+ return;
19
+ }
20
+ const native = (await import(pathToFileURL(routerEntry).href));
21
+ const router = native.createRouter({
22
+ history: native.createMemoryHistory(),
23
+ routes: [],
24
+ strict: config.strict,
25
+ sensitive: config.sensitive,
26
+ });
27
+ const routes = router.getRoutes.bind(router);
28
+ const resolve = router.resolve.bind(router);
29
+ const startup = await import(pathToFileURL(moduleEntry).href);
30
+ const configure = startup[config.attribute];
31
+ if (typeof configure !== "function")
32
+ throw new Error("Missing route startup function");
33
+ await configure(router);
34
+ const records = routes();
35
+ if (records.length > 2048)
36
+ throw new Error("Route inventory exceeds limits");
37
+ const { entries, indices } = captureVueRecords(records, config);
38
+ const covered = new Set();
39
+ const probes = config.probes.map((probe) => {
40
+ const matched = resolve(probe.path).matched;
41
+ for (const record of matched) {
42
+ const index = records.indexOf(record);
43
+ if (index >= 0)
44
+ covered.add(index);
45
+ }
46
+ return {
47
+ path: probe.path,
48
+ matched: matched.map(vueRecordIdentity),
49
+ indices: matched.map((record) => {
50
+ const index = records.indexOf(record);
51
+ return index >= 0 ? index : null;
52
+ }),
53
+ };
54
+ });
55
+ if (routes().length !== records.length ||
56
+ routes().some((record, index) => record !== records[index]))
57
+ throw new Error("Route assembly changed during capture");
58
+ const result = vueRouterResultSchema.parse({
59
+ schemaVersion: 1,
60
+ versions: { router: routerVersion, vue: vueVersion },
61
+ totalRoutes: records.length,
62
+ supportedRoutes: entries.length,
63
+ indices,
64
+ coveredIndices: [...covered].sort((a, b) => a - b),
65
+ probes,
66
+ runtime: {
67
+ schemaVersion: 1,
68
+ format: "runtime-inventory",
69
+ producer: { name: "checktrail.vue-router", version: "1.0.0" },
70
+ assembly: { name: config.assembly, environment: config.environment },
71
+ sourceFingerprint: fingerprint,
72
+ capturedAt: new Date().toISOString(),
73
+ collections: [
74
+ {
75
+ kind: "routes",
76
+ complete: entries.length === records.length,
77
+ ordered: true,
78
+ entries,
79
+ },
80
+ ],
81
+ },
82
+ });
83
+ process.stdout.write(JSON.stringify(result));
84
+ }
85
+ main().catch(() => {
86
+ process.stderr.write("Vue Router startup or runtime capture could not complete\n");
87
+ process.exitCode = 2;
88
+ });
@@ -0,0 +1,23 @@
1
+ import { z } from "zod";
2
+ import type { Check, Inventory, Project } from "./types.js";
3
+ export declare const vueRouteIdentitySchema: z.ZodObject<{
4
+ path: z.ZodString;
5
+ name: z.ZodNullable<z.ZodString>;
6
+ }, z.core.$strict>;
7
+ export declare const vueRouterConfigSchema: z.ZodObject<{
8
+ schemaVersion: z.ZodLiteral<1>;
9
+ module: z.ZodString;
10
+ attribute: z.ZodString;
11
+ assembly: z.ZodString;
12
+ environment: z.ZodLiteral<"test">;
13
+ strict: z.ZodBoolean;
14
+ sensitive: z.ZodBoolean;
15
+ probes: z.ZodArray<z.ZodObject<{
16
+ path: z.ZodString;
17
+ matched: z.ZodArray<z.ZodObject<{
18
+ path: z.ZodString;
19
+ name: z.ZodNullable<z.ZodString>;
20
+ }, z.core.$strict>>;
21
+ }, z.core.$strict>>;
22
+ }, z.core.$strict>;
23
+ export declare function vueRouterCheck(source: Inventory, project: Project): Promise<Check>;
@@ -0,0 +1,108 @@
1
+ import path from "node:path";
2
+ import { createRequire } from "node:module";
3
+ import { fileURLToPath } from "node:url";
4
+ import { z } from "zod";
5
+ import { readProjectFile, withinRoot } from "./inventory.js";
6
+ import { localTool } from "./local-tool.js";
7
+ const routePath = z.string().regex(/^\//).max(4096);
8
+ export const vueRouteIdentitySchema = z.strictObject({
9
+ path: routePath,
10
+ name: z.string().max(256).nullable(),
11
+ });
12
+ export const vueRouterConfigSchema = z.strictObject({
13
+ schemaVersion: z.literal(1),
14
+ module: z
15
+ .string()
16
+ .min(1)
17
+ .max(4096)
18
+ .refine((value) => path.posix.normalize(value) === value &&
19
+ !path.posix.isAbsolute(value) &&
20
+ !value.startsWith("../") &&
21
+ !value.includes("\\") &&
22
+ !value.includes("\0") &&
23
+ /\.[cm]?js$/.test(value)),
24
+ attribute: z
25
+ .string()
26
+ .regex(/^[A-Za-z_$][\w$]*$/)
27
+ .max(128),
28
+ assembly: z.string().min(1).max(256),
29
+ environment: z.literal("test"),
30
+ strict: z.boolean(),
31
+ sensitive: z.boolean(),
32
+ probes: z
33
+ .array(z.strictObject({
34
+ path: z
35
+ .string()
36
+ .regex(/^\/(?!\/)/)
37
+ .max(4096),
38
+ matched: z.array(vueRouteIdentitySchema).max(32),
39
+ }))
40
+ .min(1)
41
+ .max(256),
42
+ });
43
+ export async function vueRouterCheck(source, project) {
44
+ const check = {
45
+ id: "javascript.vue-router",
46
+ adapter: project.adapter,
47
+ project: project.path,
48
+ kind: "analysis",
49
+ parser: "vue-router-json",
50
+ scope: [],
51
+ commands: [],
52
+ reason: "Capture native Vue Router records after configured startup and verify declared route probes with complete record participation.",
53
+ };
54
+ if (!project.files.includes("checktrail.vue-router.json")) {
55
+ check.unavailableReason =
56
+ "Vue Router checks require an explicit checktrail.vue-router.json profile.";
57
+ return check;
58
+ }
59
+ const config = vueRouterConfigSchema.parse(JSON.parse(await readProjectFile(source.root, path.posix.join(project.path, "checktrail.vue-router.json"))));
60
+ if (new Set(config.probes.map((probe) => probe.path)).size !==
61
+ config.probes.length ||
62
+ !config.probes.some((probe) => probe.matched.length))
63
+ throw new Error("Vue Router probes require unique paths and at least one expected route match");
64
+ if (!project.files.includes(config.module)) {
65
+ check.unavailableReason =
66
+ "Vue Router startup must be an inventoried Node-compatible module in this project.";
67
+ return check;
68
+ }
69
+ check.scope = [config.module];
70
+ const router = await localTool(source.root, project.path, "vue-router/vue-router.node.mjs");
71
+ let vue;
72
+ if (router) {
73
+ try {
74
+ const resolved = createRequire(router).resolve("vue/package.json");
75
+ vue = await withinRoot(source.root, path.relative(source.root, resolved));
76
+ }
77
+ catch {
78
+ vue = undefined;
79
+ }
80
+ }
81
+ if (!router || !vue) {
82
+ check.unavailableReason =
83
+ "Vue Router and Vue must be installed inside the configured root.";
84
+ return check;
85
+ }
86
+ const entry = await withinRoot(source.root, path.posix.join(project.path, config.module));
87
+ if (entry !== path.resolve(source.root, project.path, config.module))
88
+ throw new Error("Vue Router startup cannot traverse symbolic links");
89
+ const encoded = JSON.stringify(config);
90
+ if (Buffer.byteLength(encoded) > 64 * 1024)
91
+ throw new Error("Vue Router profile exceeds 64 KiB");
92
+ check.commands = [
93
+ {
94
+ executable: process.execPath,
95
+ args: [
96
+ fileURLToPath(new URL("./vue-router-runner.js", import.meta.url)),
97
+ router,
98
+ vue,
99
+ entry,
100
+ encoded,
101
+ source.fingerprint,
102
+ ],
103
+ cwd: project.path,
104
+ env: { NODE_ENV: "test", NODE_OPTIONS: "" },
105
+ },
106
+ ];
107
+ return check;
108
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,24 @@
1
+ import { createRequire } from "node:module";
2
+ import path from "node:path";
3
+ import { withinRoot } from "./inventory.js";
4
+ async function main() {
5
+ const [entry, root, ...args] = process.argv.slice(2);
6
+ if (!entry || !root)
7
+ throw new Error("Invalid Vue compiler arguments");
8
+ const tool = await withinRoot(root, path.relative(root, entry));
9
+ const load = createRequire(tool);
10
+ const resolve = async (name) => withinRoot(root, path.relative(root, load.resolve(name)));
11
+ const ts = load(await resolve("typescript"));
12
+ const core = load(await resolve("@vue/language-core"));
13
+ const config = core.createParsedCommandLine(ts, ts.sys, path.resolve("tsconfig.json"));
14
+ if (config.vueOptions.skipTemplateCodegen)
15
+ throw new Error("Vue template checking is disabled by skipTemplateCodegen");
16
+ const compiler = load(tool);
17
+ const tsc = await resolve("typescript/lib/tsc.js");
18
+ process.argv = [process.execPath, tool, ...args];
19
+ compiler.run(tsc);
20
+ }
21
+ main().catch((error) => {
22
+ process.stderr.write(`${error instanceof Error ? error.message : "Vue type checking failed"}\n`);
23
+ process.exitCode = 2;
24
+ });
@@ -0,0 +1,7 @@
1
+ import type { Workspace } from "./types.js";
2
+ export declare function validateWorkspace(workspace: Workspace, projects: string[]): void;
3
+ export declare function affectedProjects(projects: string[], files: string[], workspace?: Workspace): {
4
+ projects: string[];
5
+ reason: string;
6
+ affected: boolean;
7
+ };