@zxyycom/vibe-check 0.0.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 (767) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -0
  3. package/dist/esm/check/check.mjs +5 -0
  4. package/dist/esm/check/check.mjs.map +1 -0
  5. package/dist/esm/check/descriptor-validation.mjs +37 -0
  6. package/dist/esm/check/descriptor-validation.mjs.map +1 -0
  7. package/dist/esm/check/descriptor.mjs +2 -0
  8. package/dist/esm/check/descriptor.mjs.map +1 -0
  9. package/dist/esm/check/inherited-collection.mjs +62 -0
  10. package/dist/esm/check/inherited-collection.mjs.map +1 -0
  11. package/dist/esm/check/options-snapshot.mjs +75 -0
  12. package/dist/esm/check/options-snapshot.mjs.map +1 -0
  13. package/dist/esm/check-settlement/fact-validation.mjs +216 -0
  14. package/dist/esm/check-settlement/fact-validation.mjs.map +1 -0
  15. package/dist/esm/check-settlement/facts.mjs +2 -0
  16. package/dist/esm/check-settlement/facts.mjs.map +1 -0
  17. package/dist/esm/check-settlement/outcome-normalization.mjs +80 -0
  18. package/dist/esm/check-settlement/outcome-normalization.mjs.map +1 -0
  19. package/dist/esm/check-settlement/record-store.mjs +59 -0
  20. package/dist/esm/check-settlement/record-store.mjs.map +1 -0
  21. package/dist/esm/check-settlement/session.mjs +179 -0
  22. package/dist/esm/check-settlement/session.mjs.map +1 -0
  23. package/dist/esm/data-boundary/canonical-data.mjs +159 -0
  24. package/dist/esm/data-boundary/canonical-data.mjs.map +1 -0
  25. package/dist/esm/data-boundary/canonical-json.mjs +2 -0
  26. package/dist/esm/data-boundary/canonical-json.mjs.map +1 -0
  27. package/dist/esm/data-boundary/closed-values.mjs +98 -0
  28. package/dist/esm/data-boundary/closed-values.mjs.map +1 -0
  29. package/dist/esm/data-boundary/value-shapes.mjs +13 -0
  30. package/dist/esm/data-boundary/value-shapes.mjs.map +1 -0
  31. package/dist/esm/finding-waivers/reconciliation.mjs +84 -0
  32. package/dist/esm/finding-waivers/reconciliation.mjs.map +1 -0
  33. package/dist/esm/index.mjs +26 -0
  34. package/dist/esm/index.mjs.map +1 -0
  35. package/dist/esm/machine-output/v4/atomic-publication.mjs +102 -0
  36. package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -0
  37. package/dist/esm/machine-output/v4/freeze-publication-value.mjs +14 -0
  38. package/dist/esm/machine-output/v4/freeze-publication-value.mjs.map +1 -0
  39. package/dist/esm/machine-output/v4/projection.mjs +23 -0
  40. package/dist/esm/machine-output/v4/projection.mjs.map +1 -0
  41. package/dist/esm/machine-output/v4/publication-invariants.mjs +59 -0
  42. package/dist/esm/machine-output/v4/publication-invariants.mjs.map +1 -0
  43. package/dist/esm/machine-output/v4/publication-model.mjs +19 -0
  44. package/dist/esm/machine-output/v4/publication-model.mjs.map +1 -0
  45. package/dist/esm/machine-output/v4/publish.mjs +20 -0
  46. package/dist/esm/machine-output/v4/publish.mjs.map +1 -0
  47. package/dist/esm/machine-output/v4/records-fingerprint.mjs +9 -0
  48. package/dist/esm/machine-output/v4/records-fingerprint.mjs.map +1 -0
  49. package/dist/esm/machine-output/v4/schema-identities.mjs +8 -0
  50. package/dist/esm/machine-output/v4/schema-identities.mjs.map +1 -0
  51. package/dist/esm/machine-output/v4/schema.mjs +50 -0
  52. package/dist/esm/machine-output/v4/schema.mjs.map +1 -0
  53. package/dist/esm/machine-output/v4/serializers.mjs +9 -0
  54. package/dist/esm/machine-output/v4/serializers.mjs.map +1 -0
  55. package/dist/esm/machine-output/v4/validation-result.mjs +16 -0
  56. package/dist/esm/machine-output/v4/validation-result.mjs.map +1 -0
  57. package/dist/esm/machine-output/v4/validation.mjs +131 -0
  58. package/dist/esm/machine-output/v4/validation.mjs.map +1 -0
  59. package/dist/esm/package-checks/code-quality-findings/policy.mjs +49 -0
  60. package/dist/esm/package-checks/code-quality-findings/policy.mjs.map +1 -0
  61. package/dist/esm/package-checks/duplicate-detection/area-policy.mjs +71 -0
  62. package/dist/esm/package-checks/duplicate-detection/area-policy.mjs.map +1 -0
  63. package/dist/esm/package-checks/duplicate-detection/cache/cache-contract.mjs +2 -0
  64. package/dist/esm/package-checks/duplicate-detection/cache/cache-contract.mjs.map +1 -0
  65. package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs +37 -0
  66. package/dist/esm/package-checks/duplicate-detection/cache/identity.mjs.map +1 -0
  67. package/dist/esm/package-checks/duplicate-detection/cache/key.mjs +38 -0
  68. package/dist/esm/package-checks/duplicate-detection/cache/key.mjs.map +1 -0
  69. package/dist/esm/package-checks/duplicate-detection/cache/payload.mjs +47 -0
  70. package/dist/esm/package-checks/duplicate-detection/cache/payload.mjs.map +1 -0
  71. package/dist/esm/package-checks/duplicate-detection/cache/store.mjs +44 -0
  72. package/dist/esm/package-checks/duplicate-detection/cache/store.mjs.map +1 -0
  73. package/dist/esm/package-checks/duplicate-detection/default-check.mjs +39 -0
  74. package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -0
  75. package/dist/esm/package-checks/duplicate-detection/execution.mjs +124 -0
  76. package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -0
  77. package/dist/esm/package-checks/duplicate-detection/final-data.mjs +6 -0
  78. package/dist/esm/package-checks/duplicate-detection/final-data.mjs.map +1 -0
  79. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +77 -0
  80. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -0
  81. package/dist/esm/package-checks/duplicate-detection/jscpd/command-path.mjs +6 -0
  82. package/dist/esm/package-checks/duplicate-detection/jscpd/command-path.mjs.map +1 -0
  83. package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs +87 -0
  84. package/dist/esm/package-checks/duplicate-detection/jscpd/command-resolution.mjs.map +1 -0
  85. package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs +94 -0
  86. package/dist/esm/package-checks/duplicate-detection/jscpd/json-report.mjs.map +1 -0
  87. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner-contract.mjs +2 -0
  88. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner-contract.mjs.map +1 -0
  89. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs +180 -0
  90. package/dist/esm/package-checks/duplicate-detection/jscpd/scanner.mjs.map +1 -0
  91. package/dist/esm/package-checks/duplicate-detection/jscpd/scoped-fragments.mjs +10 -0
  92. package/dist/esm/package-checks/duplicate-detection/jscpd/scoped-fragments.mjs.map +1 -0
  93. package/dist/esm/package-checks/duplicate-detection/measurement-model.mjs +2 -0
  94. package/dist/esm/package-checks/duplicate-detection/measurement-model.mjs.map +1 -0
  95. package/dist/esm/package-checks/duplicate-detection/measurement.mjs +151 -0
  96. package/dist/esm/package-checks/duplicate-detection/measurement.mjs.map +1 -0
  97. package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs +126 -0
  98. package/dist/esm/package-checks/duplicate-detection/options-resolution.mjs.map +1 -0
  99. package/dist/esm/package-checks/duplicate-detection/options-validation.mjs +60 -0
  100. package/dist/esm/package-checks/duplicate-detection/options-validation.mjs.map +1 -0
  101. package/dist/esm/package-checks/duplicate-detection/options.mjs +2 -0
  102. package/dist/esm/package-checks/duplicate-detection/options.mjs.map +1 -0
  103. package/dist/esm/package-checks/duplicate-detection/project-revision.mjs +5 -0
  104. package/dist/esm/package-checks/duplicate-detection/project-revision.mjs.map +1 -0
  105. package/dist/esm/package-checks/duplicate-detection/records.mjs +119 -0
  106. package/dist/esm/package-checks/duplicate-detection/records.mjs.map +1 -0
  107. package/dist/esm/package-checks/file-metrics/constructor.mjs +39 -0
  108. package/dist/esm/package-checks/file-metrics/constructor.mjs.map +1 -0
  109. package/dist/esm/package-checks/file-metrics/execution.mjs +170 -0
  110. package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -0
  111. package/dist/esm/package-checks/file-metrics/final-data.mjs +6 -0
  112. package/dist/esm/package-checks/file-metrics/final-data.mjs.map +1 -0
  113. package/dist/esm/package-checks/file-metrics/measurement-model.mjs +2 -0
  114. package/dist/esm/package-checks/file-metrics/measurement-model.mjs.map +1 -0
  115. package/dist/esm/package-checks/file-metrics/measurement.mjs +33 -0
  116. package/dist/esm/package-checks/file-metrics/measurement.mjs.map +1 -0
  117. package/dist/esm/package-checks/file-metrics/options-resolution.mjs +171 -0
  118. package/dist/esm/package-checks/file-metrics/options-resolution.mjs.map +1 -0
  119. package/dist/esm/package-checks/file-metrics/options-validation.mjs +82 -0
  120. package/dist/esm/package-checks/file-metrics/options-validation.mjs.map +1 -0
  121. package/dist/esm/package-checks/file-metrics/options.mjs +2 -0
  122. package/dist/esm/package-checks/file-metrics/options.mjs.map +1 -0
  123. package/dist/esm/package-checks/file-metrics/records.mjs +109 -0
  124. package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -0
  125. package/dist/esm/package-checks/file-metrics/scc/availability.mjs +59 -0
  126. package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -0
  127. package/dist/esm/package-checks/file-metrics/scc/csv.mjs +17 -0
  128. package/dist/esm/package-checks/file-metrics/scc/csv.mjs.map +1 -0
  129. package/dist/esm/package-checks/file-metrics/scc/parser.mjs +145 -0
  130. package/dist/esm/package-checks/file-metrics/scc/parser.mjs.map +1 -0
  131. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +54 -0
  132. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -0
  133. package/dist/esm/package-checks/final-data-parsing.mjs +35 -0
  134. package/dist/esm/package-checks/final-data-parsing.mjs.map +1 -0
  135. package/dist/esm/package-checks/function-metrics/analysis.mjs +96 -0
  136. package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -0
  137. package/dist/esm/package-checks/function-metrics/constructor.mjs +43 -0
  138. package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -0
  139. package/dist/esm/package-checks/function-metrics/execution.mjs +178 -0
  140. package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -0
  141. package/dist/esm/package-checks/function-metrics/final-data.mjs +6 -0
  142. package/dist/esm/package-checks/function-metrics/final-data.mjs.map +1 -0
  143. package/dist/esm/package-checks/function-metrics/lizard/availability.mjs +64 -0
  144. package/dist/esm/package-checks/function-metrics/lizard/availability.mjs.map +1 -0
  145. package/dist/esm/package-checks/function-metrics/lizard/csv.mjs +17 -0
  146. package/dist/esm/package-checks/function-metrics/lizard/csv.mjs.map +1 -0
  147. package/dist/esm/package-checks/function-metrics/lizard/parser.mjs +138 -0
  148. package/dist/esm/package-checks/function-metrics/lizard/parser.mjs.map +1 -0
  149. package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs +35 -0
  150. package/dist/esm/package-checks/function-metrics/lizard/scanner.mjs.map +1 -0
  151. package/dist/esm/package-checks/function-metrics/measurement-model.mjs +2 -0
  152. package/dist/esm/package-checks/function-metrics/measurement-model.mjs.map +1 -0
  153. package/dist/esm/package-checks/function-metrics/measurement.mjs +35 -0
  154. package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -0
  155. package/dist/esm/package-checks/function-metrics/options-resolution.mjs +171 -0
  156. package/dist/esm/package-checks/function-metrics/options-resolution.mjs.map +1 -0
  157. package/dist/esm/package-checks/function-metrics/options-validation.mjs +71 -0
  158. package/dist/esm/package-checks/function-metrics/options-validation.mjs.map +1 -0
  159. package/dist/esm/package-checks/function-metrics/options.mjs +2 -0
  160. package/dist/esm/package-checks/function-metrics/options.mjs.map +1 -0
  161. package/dist/esm/package-checks/function-metrics/records.mjs +133 -0
  162. package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -0
  163. package/dist/esm/package-checks/function-metrics/target-files.mjs +75 -0
  164. package/dist/esm/package-checks/function-metrics/target-files.mjs.map +1 -0
  165. package/dist/esm/package-checks/host-environment/error-message.mjs +4 -0
  166. package/dist/esm/package-checks/host-environment/error-message.mjs.map +1 -0
  167. package/dist/esm/package-checks/host-environment/filesystem.mjs +81 -0
  168. package/dist/esm/package-checks/host-environment/filesystem.mjs.map +1 -0
  169. package/dist/esm/package-checks/host-environment/git.mjs +51 -0
  170. package/dist/esm/package-checks/host-environment/git.mjs.map +1 -0
  171. package/dist/esm/package-checks/host-environment/path.mjs +18 -0
  172. package/dist/esm/package-checks/host-environment/path.mjs.map +1 -0
  173. package/dist/esm/package-checks/host-environment/process/command.mjs +13 -0
  174. package/dist/esm/package-checks/host-environment/process/command.mjs.map +1 -0
  175. package/dist/esm/package-checks/host-environment/process/contract.mjs +2 -0
  176. package/dist/esm/package-checks/host-environment/process/contract.mjs.map +1 -0
  177. package/dist/esm/package-checks/host-environment/process/env.mjs +19 -0
  178. package/dist/esm/package-checks/host-environment/process/env.mjs.map +1 -0
  179. package/dist/esm/package-checks/host-environment/process/failure.mjs +34 -0
  180. package/dist/esm/package-checks/host-environment/process/failure.mjs.map +1 -0
  181. package/dist/esm/package-checks/host-environment/process/result.mjs +33 -0
  182. package/dist/esm/package-checks/host-environment/process/result.mjs.map +1 -0
  183. package/dist/esm/package-checks/host-environment/process/runner.mjs +30 -0
  184. package/dist/esm/package-checks/host-environment/process/runner.mjs.map +1 -0
  185. package/dist/esm/package-checks/json-document/strict-document.mjs +163 -0
  186. package/dist/esm/package-checks/json-document/strict-document.mjs.map +1 -0
  187. package/dist/esm/package-checks/json-schema-validation/default-check.mjs +39 -0
  188. package/dist/esm/package-checks/json-schema-validation/default-check.mjs.map +1 -0
  189. package/dist/esm/package-checks/json-schema-validation/execution-stages.mjs +141 -0
  190. package/dist/esm/package-checks/json-schema-validation/execution-stages.mjs.map +1 -0
  191. package/dist/esm/package-checks/json-schema-validation/final-data.mjs +64 -0
  192. package/dist/esm/package-checks/json-schema-validation/final-data.mjs.map +1 -0
  193. package/dist/esm/package-checks/json-schema-validation/issue-collector.mjs +35 -0
  194. package/dist/esm/package-checks/json-schema-validation/issue-collector.mjs.map +1 -0
  195. package/dist/esm/package-checks/json-schema-validation/json-schema-validation.mjs +118 -0
  196. package/dist/esm/package-checks/json-schema-validation/json-schema-validation.mjs.map +1 -0
  197. package/dist/esm/package-checks/json-schema-validation/options-resolution.mjs +45 -0
  198. package/dist/esm/package-checks/json-schema-validation/options-resolution.mjs.map +1 -0
  199. package/dist/esm/package-checks/json-schema-validation/options-validation.mjs +212 -0
  200. package/dist/esm/package-checks/json-schema-validation/options-validation.mjs.map +1 -0
  201. package/dist/esm/package-checks/json-schema-validation/options.mjs +2 -0
  202. package/dist/esm/package-checks/json-schema-validation/options.mjs.map +1 -0
  203. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs +128 -0
  204. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs.map +1 -0
  205. package/dist/esm/package-checks/json-schema-validation/remote-response.mjs +71 -0
  206. package/dist/esm/package-checks/json-schema-validation/remote-response.mjs.map +1 -0
  207. package/dist/esm/package-checks/json-schema-validation/schema-engine.mjs +190 -0
  208. package/dist/esm/package-checks/json-schema-validation/schema-engine.mjs.map +1 -0
  209. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs +234 -0
  210. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs.map +1 -0
  211. package/dist/esm/package-checks/json-validation/default-check.mjs +39 -0
  212. package/dist/esm/package-checks/json-validation/default-check.mjs.map +1 -0
  213. package/dist/esm/package-checks/json-validation/final-data.mjs +27 -0
  214. package/dist/esm/package-checks/json-validation/final-data.mjs.map +1 -0
  215. package/dist/esm/package-checks/json-validation/json-validation.mjs +138 -0
  216. package/dist/esm/package-checks/json-validation/json-validation.mjs.map +1 -0
  217. package/dist/esm/package-checks/json-validation/options-resolution.mjs +33 -0
  218. package/dist/esm/package-checks/json-validation/options-resolution.mjs.map +1 -0
  219. package/dist/esm/package-checks/json-validation/options-validation.mjs +16 -0
  220. package/dist/esm/package-checks/json-validation/options-validation.mjs.map +1 -0
  221. package/dist/esm/package-checks/json-validation/options.mjs +2 -0
  222. package/dist/esm/package-checks/json-validation/options.mjs.map +1 -0
  223. package/dist/esm/package-checks/maintenance-reminders/assessment-results.mjs +73 -0
  224. package/dist/esm/package-checks/maintenance-reminders/assessment-results.mjs.map +1 -0
  225. package/dist/esm/package-checks/maintenance-reminders/final-data.mjs +153 -0
  226. package/dist/esm/package-checks/maintenance-reminders/final-data.mjs.map +1 -0
  227. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs +155 -0
  228. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs.map +1 -0
  229. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs +58 -0
  230. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs.map +1 -0
  231. package/dist/esm/package-checks/maintenance-reminders/measurement.mjs +125 -0
  232. package/dist/esm/package-checks/maintenance-reminders/measurement.mjs.map +1 -0
  233. package/dist/esm/package-checks/maintenance-reminders/options-validation.mjs +72 -0
  234. package/dist/esm/package-checks/maintenance-reminders/options-validation.mjs.map +1 -0
  235. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +55 -0
  236. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -0
  237. package/dist/esm/package-checks/markdown-link-validation/execution.mjs +199 -0
  238. package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -0
  239. package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs +109 -0
  240. package/dist/esm/package-checks/markdown-link-validation/filesystem-probes.mjs.map +1 -0
  241. package/dist/esm/package-checks/markdown-link-validation/final-data.mjs +28 -0
  242. package/dist/esm/package-checks/markdown-link-validation/final-data.mjs.map +1 -0
  243. package/dist/esm/package-checks/markdown-link-validation/local-resolution.mjs +158 -0
  244. package/dist/esm/package-checks/markdown-link-validation/local-resolution.mjs.map +1 -0
  245. package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs +17 -0
  246. package/dist/esm/package-checks/markdown-link-validation/local-resolver.mjs.map +1 -0
  247. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs +191 -0
  248. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs.map +1 -0
  249. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs +83 -0
  250. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs.map +1 -0
  251. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs +50 -0
  252. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs.map +1 -0
  253. package/dist/esm/package-checks/markdown-link-validation/options.mjs +2 -0
  254. package/dist/esm/package-checks/markdown-link-validation/options.mjs.map +1 -0
  255. package/dist/esm/package-checks/markdown-link-validation/records.mjs +32 -0
  256. package/dist/esm/package-checks/markdown-link-validation/records.mjs.map +1 -0
  257. package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs +196 -0
  258. package/dist/esm/package-checks/markdown-link-validation/resolver-engine.mjs.map +1 -0
  259. package/dist/esm/package-checks/markdown-link-validation/target-descriptor.mjs +23 -0
  260. package/dist/esm/package-checks/markdown-link-validation/target-descriptor.mjs.map +1 -0
  261. package/dist/esm/package-checks/markdown-link-validation/traversal-result.mjs +41 -0
  262. package/dist/esm/package-checks/markdown-link-validation/traversal-result.mjs.map +1 -0
  263. package/dist/esm/package-checks/project-files/collection.mjs +142 -0
  264. package/dist/esm/package-checks/project-files/collection.mjs.map +1 -0
  265. package/dist/esm/package-checks/project-files/config-glob.mjs +11 -0
  266. package/dist/esm/package-checks/project-files/config-glob.mjs.map +1 -0
  267. package/dist/esm/package-checks/project-files/configuration.mjs +104 -0
  268. package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -0
  269. package/dist/esm/package-checks/project-files/exact-input-measurement.mjs +24 -0
  270. package/dist/esm/package-checks/project-files/exact-input-measurement.mjs.map +1 -0
  271. package/dist/esm/package-checks/project-files/file-fingerprint.mjs +36 -0
  272. package/dist/esm/package-checks/project-files/file-fingerprint.mjs.map +1 -0
  273. package/dist/esm/package-checks/project-files/gitlink-revision.mjs +57 -0
  274. package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -0
  275. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +72 -0
  276. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -0
  277. package/dist/esm/package-checks/project-files/input-eligibility.mjs +13 -0
  278. package/dist/esm/package-checks/project-files/input-eligibility.mjs.map +1 -0
  279. package/dist/esm/package-checks/project-files/reported-path.mjs +30 -0
  280. package/dist/esm/package-checks/project-files/reported-path.mjs.map +1 -0
  281. package/dist/esm/package-checks/project-files/revision-paths.mjs +19 -0
  282. package/dist/esm/package-checks/project-files/revision-paths.mjs.map +1 -0
  283. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs +102 -0
  284. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -0
  285. package/dist/esm/project-definition/check-tree/authoring.mjs +242 -0
  286. package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -0
  287. package/dist/esm/project-definition/check-tree/materialization.mjs +50 -0
  288. package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -0
  289. package/dist/esm/project-definition/check-tree/resolution.mjs +60 -0
  290. package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -0
  291. package/dist/esm/project-definition/output-defaults.mjs +7 -0
  292. package/dist/esm/project-definition/output-defaults.mjs.map +1 -0
  293. package/dist/esm/project-definition/output-validation.mjs +44 -0
  294. package/dist/esm/project-definition/output-validation.mjs.map +1 -0
  295. package/dist/esm/project-definition/project-definition-validation.mjs +95 -0
  296. package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -0
  297. package/dist/esm/project-definition/project-definition.mjs +92 -0
  298. package/dist/esm/project-definition/project-definition.mjs.map +1 -0
  299. package/dist/esm/project-run/aggregation.mjs +66 -0
  300. package/dist/esm/project-run/aggregation.mjs.map +1 -0
  301. package/dist/esm/project-run/check-execution/callback.mjs +70 -0
  302. package/dist/esm/project-run/check-execution/callback.mjs.map +1 -0
  303. package/dist/esm/project-run/check-execution/dependencies.mjs +50 -0
  304. package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -0
  305. package/dist/esm/project-run/check-execution/execution-finalization.mjs +103 -0
  306. package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -0
  307. package/dist/esm/project-run/check-execution/execution-settlement.mjs +90 -0
  308. package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -0
  309. package/dist/esm/project-run/check-execution/messages.mjs +38 -0
  310. package/dist/esm/project-run/check-execution/messages.mjs.map +1 -0
  311. package/dist/esm/project-run/check-execution/plan.mjs +35 -0
  312. package/dist/esm/project-run/check-execution/plan.mjs.map +1 -0
  313. package/dist/esm/project-run/check-execution/preflight-result.mjs +83 -0
  314. package/dist/esm/project-run/check-execution/preflight-result.mjs.map +1 -0
  315. package/dist/esm/project-run/check-execution/preflight.mjs +186 -0
  316. package/dist/esm/project-run/check-execution/preflight.mjs.map +1 -0
  317. package/dist/esm/project-run/check-execution/resolved-checks.mjs +168 -0
  318. package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -0
  319. package/dist/esm/project-run/check-execution/terminal-result.mjs +49 -0
  320. package/dist/esm/project-run/check-execution/terminal-result.mjs.map +1 -0
  321. package/dist/esm/project-run/completion.mjs +173 -0
  322. package/dist/esm/project-run/completion.mjs.map +1 -0
  323. package/dist/esm/project-run/controls/contract.mjs +2 -0
  324. package/dist/esm/project-run/controls/contract.mjs.map +1 -0
  325. package/dist/esm/project-run/controls/outputs-override-validation.mjs +61 -0
  326. package/dist/esm/project-run/controls/outputs-override-validation.mjs.map +1 -0
  327. package/dist/esm/project-run/controls/validation-result.mjs +2 -0
  328. package/dist/esm/project-run/controls/validation-result.mjs.map +1 -0
  329. package/dist/esm/project-run/controls/validation.mjs +156 -0
  330. package/dist/esm/project-run/controls/validation.mjs.map +1 -0
  331. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs +182 -0
  332. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs.map +1 -0
  333. package/dist/esm/project-run/diagnostic-logging/logger.mjs +242 -0
  334. package/dist/esm/project-run/diagnostic-logging/logger.mjs.map +1 -0
  335. package/dist/esm/project-run/invocation-creation.mjs +111 -0
  336. package/dist/esm/project-run/invocation-creation.mjs.map +1 -0
  337. package/dist/esm/project-run/invocation.mjs +195 -0
  338. package/dist/esm/project-run/invocation.mjs.map +1 -0
  339. package/dist/esm/project-run/machine-publication.mjs +16 -0
  340. package/dist/esm/project-run/machine-publication.mjs.map +1 -0
  341. package/dist/esm/project-run/output-configuration.mjs +17 -0
  342. package/dist/esm/project-run/output-configuration.mjs.map +1 -0
  343. package/dist/esm/project-run/output-status.mjs +43 -0
  344. package/dist/esm/project-run/output-status.mjs.map +1 -0
  345. package/dist/esm/project-run/progress-rendering/presentation.mjs +135 -0
  346. package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -0
  347. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +100 -0
  348. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -0
  349. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +123 -0
  350. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -0
  351. package/dist/esm/project-run/progress-rendering/renderer.mjs +12 -0
  352. package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -0
  353. package/dist/esm/project-run/project-context.mjs +8 -0
  354. package/dist/esm/project-run/project-context.mjs.map +1 -0
  355. package/dist/esm/project-run/result.mjs +54 -0
  356. package/dist/esm/project-run/result.mjs.map +1 -0
  357. package/dist/esm/project-run/run.mjs +23 -0
  358. package/dist/esm/project-run/run.mjs.map +1 -0
  359. package/dist/esm/project-run/task-scheduler/execution-state.mjs +66 -0
  360. package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -0
  361. package/dist/esm/project-run/task-scheduler/graph-validation.mjs +119 -0
  362. package/dist/esm/project-run/task-scheduler/graph-validation.mjs.map +1 -0
  363. package/dist/esm/project-run/task-scheduler/graph.mjs +116 -0
  364. package/dist/esm/project-run/task-scheduler/graph.mjs.map +1 -0
  365. package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs +82 -0
  366. package/dist/esm/project-run/task-scheduler/scheduler-admission-decision.mjs.map +1 -0
  367. package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs +27 -0
  368. package/dist/esm/project-run/task-scheduler/scheduler-blocker-summary.mjs.map +1 -0
  369. package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs +125 -0
  370. package/dist/esm/project-run/task-scheduler/scheduler-decision-inspection.mjs.map +1 -0
  371. package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs +45 -0
  372. package/dist/esm/project-run/task-scheduler/scheduler-decision-model.mjs.map +1 -0
  373. package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs +74 -0
  374. package/dist/esm/project-run/task-scheduler/scheduler-decision.mjs.map +1 -0
  375. package/dist/esm/project-run/task-scheduler/scheduler.mjs +147 -0
  376. package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -0
  377. package/docs/api-mechanics.md +205 -0
  378. package/docs/checks/duplicate-detection.md +195 -0
  379. package/docs/checks/file-metrics.md +229 -0
  380. package/docs/checks/function-metrics.md +222 -0
  381. package/docs/checks/json-schema-validation.md +190 -0
  382. package/docs/checks/json-validation.md +133 -0
  383. package/docs/checks/maintenance-reminders.md +158 -0
  384. package/docs/checks/markdown-link-validation.md +192 -0
  385. package/docs/examples/artifacts/mixed-outcomes/definition.ts +195 -0
  386. package/docs/examples/artifacts/mixed-outcomes/records.ndjson +2 -0
  387. package/docs/examples/artifacts/mixed-outcomes/run.json +70 -0
  388. package/docs/output.md +97 -0
  389. package/docs/schemas/vibe-check-record.schema.json +33 -0
  390. package/docs/schemas/vibe-check-run.schema.json +173 -0
  391. package/index.mjs +1 -0
  392. package/package.json +49 -0
  393. package/src/check/check.ts +497 -0
  394. package/src/check/descriptor-validation.ts +60 -0
  395. package/src/check/descriptor.ts +5 -0
  396. package/src/check/inherited-collection.ts +101 -0
  397. package/src/check/options-snapshot.ts +80 -0
  398. package/src/check-settlement/fact-validation.ts +289 -0
  399. package/src/check-settlement/facts.ts +27 -0
  400. package/src/check-settlement/outcome-normalization.ts +118 -0
  401. package/src/check-settlement/record-store.ts +73 -0
  402. package/src/check-settlement/session.ts +257 -0
  403. package/src/data-boundary/canonical-data.ts +188 -0
  404. package/src/data-boundary/canonical-json.ts +11 -0
  405. package/src/data-boundary/closed-values.ts +126 -0
  406. package/src/data-boundary/value-shapes.ts +15 -0
  407. package/src/finding-waivers/reconciliation.ts +176 -0
  408. package/src/index.ts +123 -0
  409. package/src/machine-output/v4/atomic-publication.ts +123 -0
  410. package/src/machine-output/v4/freeze-publication-value.ts +12 -0
  411. package/src/machine-output/v4/projection.ts +36 -0
  412. package/src/machine-output/v4/publication-invariants.ts +89 -0
  413. package/src/machine-output/v4/publication-model.ts +38 -0
  414. package/src/machine-output/v4/publish.ts +23 -0
  415. package/src/machine-output/v4/records-fingerprint.ts +12 -0
  416. package/src/machine-output/v4/schema-identities.ts +8 -0
  417. package/src/machine-output/v4/schema.ts +97 -0
  418. package/src/machine-output/v4/serializers.ts +18 -0
  419. package/src/machine-output/v4/validation-result.ts +59 -0
  420. package/src/machine-output/v4/validation.ts +166 -0
  421. package/src/package-checks/code-quality-findings/policy.ts +85 -0
  422. package/src/package-checks/duplicate-detection/area-policy.ts +103 -0
  423. package/src/package-checks/duplicate-detection/cache/cache-contract.ts +49 -0
  424. package/src/package-checks/duplicate-detection/cache/identity.ts +61 -0
  425. package/src/package-checks/duplicate-detection/cache/key.ts +46 -0
  426. package/src/package-checks/duplicate-detection/cache/payload.ts +78 -0
  427. package/src/package-checks/duplicate-detection/cache/store.ts +77 -0
  428. package/src/package-checks/duplicate-detection/default-check.ts +50 -0
  429. package/src/package-checks/duplicate-detection/execution.ts +168 -0
  430. package/src/package-checks/duplicate-detection/final-data.ts +10 -0
  431. package/src/package-checks/duplicate-detection/jscpd/availability.ts +137 -0
  432. package/src/package-checks/duplicate-detection/jscpd/command-path.ts +8 -0
  433. package/src/package-checks/duplicate-detection/jscpd/command-resolution.ts +112 -0
  434. package/src/package-checks/duplicate-detection/jscpd/json-report.ts +137 -0
  435. package/src/package-checks/duplicate-detection/jscpd/scanner-contract.ts +18 -0
  436. package/src/package-checks/duplicate-detection/jscpd/scanner.ts +257 -0
  437. package/src/package-checks/duplicate-detection/jscpd/scoped-fragments.ts +17 -0
  438. package/src/package-checks/duplicate-detection/measurement-model.ts +44 -0
  439. package/src/package-checks/duplicate-detection/measurement.ts +223 -0
  440. package/src/package-checks/duplicate-detection/options-resolution.ts +162 -0
  441. package/src/package-checks/duplicate-detection/options-validation.ts +75 -0
  442. package/src/package-checks/duplicate-detection/options.ts +72 -0
  443. package/src/package-checks/duplicate-detection/project-revision.ts +5 -0
  444. package/src/package-checks/duplicate-detection/records.ts +171 -0
  445. package/src/package-checks/file-metrics/constructor.ts +46 -0
  446. package/src/package-checks/file-metrics/execution.ts +233 -0
  447. package/src/package-checks/file-metrics/final-data.ts +10 -0
  448. package/src/package-checks/file-metrics/measurement-model.ts +10 -0
  449. package/src/package-checks/file-metrics/measurement.ts +52 -0
  450. package/src/package-checks/file-metrics/options-resolution.ts +213 -0
  451. package/src/package-checks/file-metrics/options-validation.ts +104 -0
  452. package/src/package-checks/file-metrics/options.ts +91 -0
  453. package/src/package-checks/file-metrics/records.ts +182 -0
  454. package/src/package-checks/file-metrics/scc/availability.ts +100 -0
  455. package/src/package-checks/file-metrics/scc/csv.ts +20 -0
  456. package/src/package-checks/file-metrics/scc/parser.ts +223 -0
  457. package/src/package-checks/file-metrics/scc/scanner.ts +68 -0
  458. package/src/package-checks/final-data-parsing.ts +49 -0
  459. package/src/package-checks/function-metrics/analysis.ts +138 -0
  460. package/src/package-checks/function-metrics/constructor.ts +55 -0
  461. package/src/package-checks/function-metrics/execution.ts +263 -0
  462. package/src/package-checks/function-metrics/final-data.ts +10 -0
  463. package/src/package-checks/function-metrics/lizard/availability.ts +90 -0
  464. package/src/package-checks/function-metrics/lizard/csv.ts +20 -0
  465. package/src/package-checks/function-metrics/lizard/parser.ts +179 -0
  466. package/src/package-checks/function-metrics/lizard/scanner.ts +62 -0
  467. package/src/package-checks/function-metrics/measurement-model.ts +30 -0
  468. package/src/package-checks/function-metrics/measurement.ts +57 -0
  469. package/src/package-checks/function-metrics/options-resolution.ts +215 -0
  470. package/src/package-checks/function-metrics/options-validation.ts +89 -0
  471. package/src/package-checks/function-metrics/options.ts +84 -0
  472. package/src/package-checks/function-metrics/records.ts +254 -0
  473. package/src/package-checks/function-metrics/target-files.ts +85 -0
  474. package/src/package-checks/host-environment/error-message.ts +3 -0
  475. package/src/package-checks/host-environment/filesystem.ts +110 -0
  476. package/src/package-checks/host-environment/git.ts +68 -0
  477. package/src/package-checks/host-environment/path.ts +20 -0
  478. package/src/package-checks/host-environment/process/command.ts +21 -0
  479. package/src/package-checks/host-environment/process/contract.ts +56 -0
  480. package/src/package-checks/host-environment/process/env.ts +25 -0
  481. package/src/package-checks/host-environment/process/failure.ts +40 -0
  482. package/src/package-checks/host-environment/process/result.ts +39 -0
  483. package/src/package-checks/host-environment/process/runner.ts +47 -0
  484. package/src/package-checks/json-document/strict-document.ts +209 -0
  485. package/src/package-checks/json-schema-validation/default-check.ts +54 -0
  486. package/src/package-checks/json-schema-validation/execution-stages.ts +230 -0
  487. package/src/package-checks/json-schema-validation/final-data.ts +115 -0
  488. package/src/package-checks/json-schema-validation/issue-collector.ts +43 -0
  489. package/src/package-checks/json-schema-validation/json-schema-validation.ts +191 -0
  490. package/src/package-checks/json-schema-validation/options-resolution.ts +61 -0
  491. package/src/package-checks/json-schema-validation/options-validation.ts +256 -0
  492. package/src/package-checks/json-schema-validation/options.ts +66 -0
  493. package/src/package-checks/json-schema-validation/reference-resolver.ts +165 -0
  494. package/src/package-checks/json-schema-validation/remote-response.ts +84 -0
  495. package/src/package-checks/json-schema-validation/schema-engine.ts +263 -0
  496. package/src/package-checks/json-schema-validation/schema-policy.ts +275 -0
  497. package/src/package-checks/json-validation/default-check.ts +48 -0
  498. package/src/package-checks/json-validation/final-data.ts +46 -0
  499. package/src/package-checks/json-validation/json-validation.ts +212 -0
  500. package/src/package-checks/json-validation/options-resolution.ts +50 -0
  501. package/src/package-checks/json-validation/options-validation.ts +27 -0
  502. package/src/package-checks/json-validation/options.ts +18 -0
  503. package/src/package-checks/maintenance-reminders/assessment-results.ts +117 -0
  504. package/src/package-checks/maintenance-reminders/final-data.ts +239 -0
  505. package/src/package-checks/maintenance-reminders/maintenance-reminders.ts +264 -0
  506. package/src/package-checks/maintenance-reminders/maintenance-support.ts +67 -0
  507. package/src/package-checks/maintenance-reminders/measurement.ts +183 -0
  508. package/src/package-checks/maintenance-reminders/options-validation.ts +88 -0
  509. package/src/package-checks/markdown-link-validation/default-check.ts +70 -0
  510. package/src/package-checks/markdown-link-validation/execution.ts +325 -0
  511. package/src/package-checks/markdown-link-validation/filesystem-probes.ts +127 -0
  512. package/src/package-checks/markdown-link-validation/final-data.ts +47 -0
  513. package/src/package-checks/markdown-link-validation/local-resolution.ts +306 -0
  514. package/src/package-checks/markdown-link-validation/local-resolver.ts +51 -0
  515. package/src/package-checks/markdown-link-validation/markdown-parser.ts +302 -0
  516. package/src/package-checks/markdown-link-validation/options-resolution.ts +114 -0
  517. package/src/package-checks/markdown-link-validation/options-validation.ts +72 -0
  518. package/src/package-checks/markdown-link-validation/options.ts +50 -0
  519. package/src/package-checks/markdown-link-validation/records.ts +77 -0
  520. package/src/package-checks/markdown-link-validation/resolver-engine.ts +276 -0
  521. package/src/package-checks/markdown-link-validation/target-descriptor.ts +34 -0
  522. package/src/package-checks/markdown-link-validation/traversal-result.ts +58 -0
  523. package/src/package-checks/project-files/collection.ts +199 -0
  524. package/src/package-checks/project-files/config-glob.ts +17 -0
  525. package/src/package-checks/project-files/configuration.ts +152 -0
  526. package/src/package-checks/project-files/exact-input-measurement.ts +38 -0
  527. package/src/package-checks/project-files/file-fingerprint.ts +46 -0
  528. package/src/package-checks/project-files/gitlink-revision.ts +82 -0
  529. package/src/package-checks/project-files/gitlink-worktree.ts +106 -0
  530. package/src/package-checks/project-files/input-eligibility.ts +21 -0
  531. package/src/package-checks/project-files/reported-path.ts +35 -0
  532. package/src/package-checks/project-files/revision-paths.ts +34 -0
  533. package/src/package-checks/project-files/revision-worktree-files.ts +148 -0
  534. package/src/project-definition/check-tree/authoring.ts +332 -0
  535. package/src/project-definition/check-tree/materialization.ts +56 -0
  536. package/src/project-definition/check-tree/resolution.ts +108 -0
  537. package/src/project-definition/output-defaults.ts +6 -0
  538. package/src/project-definition/output-validation.ts +54 -0
  539. package/src/project-definition/project-definition-validation.ts +123 -0
  540. package/src/project-definition/project-definition.ts +184 -0
  541. package/src/project-run/aggregation.ts +90 -0
  542. package/src/project-run/check-execution/callback.ts +106 -0
  543. package/src/project-run/check-execution/dependencies.ts +70 -0
  544. package/src/project-run/check-execution/execution-finalization.ts +177 -0
  545. package/src/project-run/check-execution/execution-settlement.ts +147 -0
  546. package/src/project-run/check-execution/messages.ts +46 -0
  547. package/src/project-run/check-execution/plan.ts +46 -0
  548. package/src/project-run/check-execution/preflight-result.ts +131 -0
  549. package/src/project-run/check-execution/preflight.ts +321 -0
  550. package/src/project-run/check-execution/resolved-checks.ts +285 -0
  551. package/src/project-run/check-execution/terminal-result.ts +74 -0
  552. package/src/project-run/completion.ts +263 -0
  553. package/src/project-run/controls/contract.ts +24 -0
  554. package/src/project-run/controls/outputs-override-validation.ts +86 -0
  555. package/src/project-run/controls/validation-result.ts +12 -0
  556. package/src/project-run/controls/validation.ts +176 -0
  557. package/src/project-run/diagnostic-logging/diagnostic-detail-rendering.ts +223 -0
  558. package/src/project-run/diagnostic-logging/logger.ts +325 -0
  559. package/src/project-run/invocation-creation.ts +160 -0
  560. package/src/project-run/invocation.ts +303 -0
  561. package/src/project-run/machine-publication.ts +23 -0
  562. package/src/project-run/output-configuration.ts +24 -0
  563. package/src/project-run/output-status.ts +69 -0
  564. package/src/project-run/progress-rendering/presentation.ts +189 -0
  565. package/src/project-run/progress-rendering/renderer-formatting.ts +141 -0
  566. package/src/project-run/progress-rendering/renderer-lifecycle.ts +152 -0
  567. package/src/project-run/progress-rendering/renderer.ts +68 -0
  568. package/src/project-run/project-context.ts +11 -0
  569. package/src/project-run/result.ts +175 -0
  570. package/src/project-run/run.ts +50 -0
  571. package/src/project-run/task-scheduler/execution-state.ts +153 -0
  572. package/src/project-run/task-scheduler/graph-validation.ts +176 -0
  573. package/src/project-run/task-scheduler/graph.ts +185 -0
  574. package/src/project-run/task-scheduler/scheduler-admission-decision.ts +177 -0
  575. package/src/project-run/task-scheduler/scheduler-blocker-summary.ts +42 -0
  576. package/src/project-run/task-scheduler/scheduler-decision-inspection.ts +199 -0
  577. package/src/project-run/task-scheduler/scheduler-decision-model.ts +158 -0
  578. package/src/project-run/task-scheduler/scheduler-decision.ts +103 -0
  579. package/src/project-run/task-scheduler/scheduler.ts +228 -0
  580. package/third-party-licenses/momoa-3.3.12-LICENSE +201 -0
  581. package/types/check/check.d.ts +350 -0
  582. package/types/check/descriptor-validation.d.ts +18 -0
  583. package/types/check/descriptor.d.ts +5 -0
  584. package/types/check/inherited-collection.d.ts +35 -0
  585. package/types/check/options-snapshot.d.ts +2 -0
  586. package/types/check-settlement/fact-validation.d.ts +14 -0
  587. package/types/check-settlement/facts.d.ts +19 -0
  588. package/types/check-settlement/outcome-normalization.d.ts +9 -0
  589. package/types/check-settlement/record-store.d.ts +14 -0
  590. package/types/check-settlement/session.d.ts +41 -0
  591. package/types/data-boundary/canonical-data.d.ts +13 -0
  592. package/types/data-boundary/canonical-json.d.ts +6 -0
  593. package/types/data-boundary/closed-values.d.ts +8 -0
  594. package/types/data-boundary/value-shapes.d.ts +4 -0
  595. package/types/finding-waivers/reconciliation.d.ts +66 -0
  596. package/types/index.d.ts +57 -0
  597. package/types/machine-output/v4/atomic-publication.d.ts +9 -0
  598. package/types/machine-output/v4/freeze-publication-value.d.ts +6 -0
  599. package/types/machine-output/v4/projection.d.ts +7 -0
  600. package/types/machine-output/v4/publication-invariants.d.ts +3 -0
  601. package/types/machine-output/v4/publication-model.d.ts +15 -0
  602. package/types/machine-output/v4/publish.d.ts +7 -0
  603. package/types/machine-output/v4/records-fingerprint.d.ts +4 -0
  604. package/types/machine-output/v4/schema-identities.d.ts +7 -0
  605. package/types/machine-output/v4/schema.d.ts +44 -0
  606. package/types/machine-output/v4/serializers.d.ts +6 -0
  607. package/types/machine-output/v4/validation-result.d.ts +26 -0
  608. package/types/machine-output/v4/validation.d.ts +6 -0
  609. package/types/package-checks/code-quality-findings/policy.d.ts +20 -0
  610. package/types/package-checks/duplicate-detection/area-policy.d.ts +3 -0
  611. package/types/package-checks/duplicate-detection/cache/cache-contract.d.ts +48 -0
  612. package/types/package-checks/duplicate-detection/cache/identity.d.ts +17 -0
  613. package/types/package-checks/duplicate-detection/cache/key.d.ts +4 -0
  614. package/types/package-checks/duplicate-detection/cache/payload.d.ts +4 -0
  615. package/types/package-checks/duplicate-detection/cache/store.d.ts +18 -0
  616. package/types/package-checks/duplicate-detection/default-check.d.ts +11 -0
  617. package/types/package-checks/duplicate-detection/execution.d.ts +11 -0
  618. package/types/package-checks/duplicate-detection/final-data.d.ts +5 -0
  619. package/types/package-checks/duplicate-detection/jscpd/availability.d.ts +19 -0
  620. package/types/package-checks/duplicate-detection/jscpd/command-path.d.ts +1 -0
  621. package/types/package-checks/duplicate-detection/jscpd/command-resolution.d.ts +23 -0
  622. package/types/package-checks/duplicate-detection/jscpd/json-report.d.ts +2 -0
  623. package/types/package-checks/duplicate-detection/jscpd/scanner-contract.d.ts +11 -0
  624. package/types/package-checks/duplicate-detection/jscpd/scanner.d.ts +21 -0
  625. package/types/package-checks/duplicate-detection/jscpd/scoped-fragments.d.ts +4 -0
  626. package/types/package-checks/duplicate-detection/measurement-model.d.ts +36 -0
  627. package/types/package-checks/duplicate-detection/measurement.d.ts +14 -0
  628. package/types/package-checks/duplicate-detection/options-resolution.d.ts +3 -0
  629. package/types/package-checks/duplicate-detection/options-validation.d.ts +1 -0
  630. package/types/package-checks/duplicate-detection/options.d.ts +65 -0
  631. package/types/package-checks/duplicate-detection/project-revision.d.ts +1 -0
  632. package/types/package-checks/duplicate-detection/records.d.ts +22 -0
  633. package/types/package-checks/file-metrics/constructor.d.ts +11 -0
  634. package/types/package-checks/file-metrics/execution.d.ts +11 -0
  635. package/types/package-checks/file-metrics/final-data.d.ts +5 -0
  636. package/types/package-checks/file-metrics/measurement-model.d.ts +12 -0
  637. package/types/package-checks/file-metrics/measurement.d.ts +13 -0
  638. package/types/package-checks/file-metrics/options-resolution.d.ts +3 -0
  639. package/types/package-checks/file-metrics/options-validation.d.ts +3 -0
  640. package/types/package-checks/file-metrics/options.d.ts +75 -0
  641. package/types/package-checks/file-metrics/records.d.ts +43 -0
  642. package/types/package-checks/file-metrics/scc/availability.d.ts +18 -0
  643. package/types/package-checks/file-metrics/scc/csv.d.ts +1 -0
  644. package/types/package-checks/file-metrics/scc/parser.d.ts +25 -0
  645. package/types/package-checks/file-metrics/scc/scanner.d.ts +14 -0
  646. package/types/package-checks/final-data-parsing.d.ts +9 -0
  647. package/types/package-checks/function-metrics/analysis.d.ts +10 -0
  648. package/types/package-checks/function-metrics/constructor.d.ts +11 -0
  649. package/types/package-checks/function-metrics/execution.d.ts +7 -0
  650. package/types/package-checks/function-metrics/final-data.d.ts +5 -0
  651. package/types/package-checks/function-metrics/lizard/availability.d.ts +11 -0
  652. package/types/package-checks/function-metrics/lizard/csv.d.ts +1 -0
  653. package/types/package-checks/function-metrics/lizard/parser.d.ts +17 -0
  654. package/types/package-checks/function-metrics/lizard/scanner.d.ts +15 -0
  655. package/types/package-checks/function-metrics/measurement-model.d.ts +26 -0
  656. package/types/package-checks/function-metrics/measurement.d.ts +21 -0
  657. package/types/package-checks/function-metrics/options-resolution.d.ts +3 -0
  658. package/types/package-checks/function-metrics/options-validation.d.ts +3 -0
  659. package/types/package-checks/function-metrics/options.d.ts +76 -0
  660. package/types/package-checks/function-metrics/records.d.ts +37 -0
  661. package/types/package-checks/function-metrics/target-files.d.ts +3 -0
  662. package/types/package-checks/host-environment/error-message.d.ts +1 -0
  663. package/types/package-checks/host-environment/filesystem.d.ts +19 -0
  664. package/types/package-checks/host-environment/git.d.ts +13 -0
  665. package/types/package-checks/host-environment/path.d.ts +3 -0
  666. package/types/package-checks/host-environment/process/command.d.ts +7 -0
  667. package/types/package-checks/host-environment/process/contract.d.ts +50 -0
  668. package/types/package-checks/host-environment/process/env.d.ts +16 -0
  669. package/types/package-checks/host-environment/process/failure.d.ts +4 -0
  670. package/types/package-checks/host-environment/process/result.d.ts +2 -0
  671. package/types/package-checks/host-environment/process/runner.d.ts +3 -0
  672. package/types/package-checks/json-document/strict-document.d.ts +35 -0
  673. package/types/package-checks/json-schema-validation/default-check.d.ts +11 -0
  674. package/types/package-checks/json-schema-validation/execution-stages.d.ts +27 -0
  675. package/types/package-checks/json-schema-validation/final-data.d.ts +15 -0
  676. package/types/package-checks/json-schema-validation/issue-collector.d.ts +12 -0
  677. package/types/package-checks/json-schema-validation/json-schema-validation.d.ts +42 -0
  678. package/types/package-checks/json-schema-validation/options-resolution.d.ts +3 -0
  679. package/types/package-checks/json-schema-validation/options-validation.d.ts +2 -0
  680. package/types/package-checks/json-schema-validation/options.d.ts +53 -0
  681. package/types/package-checks/json-schema-validation/reference-resolver.d.ts +23 -0
  682. package/types/package-checks/json-schema-validation/remote-response.d.ts +2 -0
  683. package/types/package-checks/json-schema-validation/schema-engine.d.ts +33 -0
  684. package/types/package-checks/json-schema-validation/schema-policy.d.ts +17 -0
  685. package/types/package-checks/json-validation/default-check.d.ts +11 -0
  686. package/types/package-checks/json-validation/final-data.d.ts +10 -0
  687. package/types/package-checks/json-validation/json-validation.d.ts +28 -0
  688. package/types/package-checks/json-validation/options-resolution.d.ts +3 -0
  689. package/types/package-checks/json-validation/options-validation.d.ts +2 -0
  690. package/types/package-checks/json-validation/options.d.ts +13 -0
  691. package/types/package-checks/maintenance-reminders/assessment-results.d.ts +10 -0
  692. package/types/package-checks/maintenance-reminders/final-data.d.ts +47 -0
  693. package/types/package-checks/maintenance-reminders/maintenance-reminders.d.ts +111 -0
  694. package/types/package-checks/maintenance-reminders/maintenance-support.d.ts +7 -0
  695. package/types/package-checks/maintenance-reminders/measurement.d.ts +10 -0
  696. package/types/package-checks/maintenance-reminders/options-validation.d.ts +3 -0
  697. package/types/package-checks/markdown-link-validation/default-check.d.ts +27 -0
  698. package/types/package-checks/markdown-link-validation/execution.d.ts +12 -0
  699. package/types/package-checks/markdown-link-validation/filesystem-probes.d.ts +10 -0
  700. package/types/package-checks/markdown-link-validation/final-data.d.ts +10 -0
  701. package/types/package-checks/markdown-link-validation/local-resolution.d.ts +92 -0
  702. package/types/package-checks/markdown-link-validation/local-resolver.d.ts +5 -0
  703. package/types/package-checks/markdown-link-validation/markdown-parser.d.ts +37 -0
  704. package/types/package-checks/markdown-link-validation/options-resolution.d.ts +3 -0
  705. package/types/package-checks/markdown-link-validation/options-validation.d.ts +2 -0
  706. package/types/package-checks/markdown-link-validation/options.d.ts +43 -0
  707. package/types/package-checks/markdown-link-validation/records.d.ts +37 -0
  708. package/types/package-checks/markdown-link-validation/resolver-engine.d.ts +15 -0
  709. package/types/package-checks/markdown-link-validation/target-descriptor.d.ts +5 -0
  710. package/types/package-checks/markdown-link-validation/traversal-result.d.ts +12 -0
  711. package/types/package-checks/project-files/collection.d.ts +9 -0
  712. package/types/package-checks/project-files/config-glob.d.ts +5 -0
  713. package/types/package-checks/project-files/configuration.d.ts +31 -0
  714. package/types/package-checks/project-files/exact-input-measurement.d.ts +12 -0
  715. package/types/package-checks/project-files/file-fingerprint.d.ts +7 -0
  716. package/types/package-checks/project-files/gitlink-revision.d.ts +9 -0
  717. package/types/package-checks/project-files/gitlink-worktree.d.ts +26 -0
  718. package/types/package-checks/project-files/input-eligibility.d.ts +7 -0
  719. package/types/package-checks/project-files/reported-path.d.ts +1 -0
  720. package/types/package-checks/project-files/revision-paths.d.ts +12 -0
  721. package/types/package-checks/project-files/revision-worktree-files.d.ts +5 -0
  722. package/types/project-definition/check-tree/authoring.d.ts +41 -0
  723. package/types/project-definition/check-tree/materialization.d.ts +4 -0
  724. package/types/project-definition/check-tree/resolution.d.ts +25 -0
  725. package/types/project-definition/output-defaults.d.ts +14 -0
  726. package/types/project-definition/output-validation.d.ts +3 -0
  727. package/types/project-definition/project-definition-validation.d.ts +6 -0
  728. package/types/project-definition/project-definition.d.ts +88 -0
  729. package/types/project-run/aggregation.d.ts +7 -0
  730. package/types/project-run/check-execution/callback.d.ts +24 -0
  731. package/types/project-run/check-execution/dependencies.d.ts +9 -0
  732. package/types/project-run/check-execution/execution-finalization.d.ts +18 -0
  733. package/types/project-run/check-execution/execution-settlement.d.ts +41 -0
  734. package/types/project-run/check-execution/messages.d.ts +3 -0
  735. package/types/project-run/check-execution/plan.d.ts +10 -0
  736. package/types/project-run/check-execution/preflight-result.d.ts +23 -0
  737. package/types/project-run/check-execution/preflight.d.ts +27 -0
  738. package/types/project-run/check-execution/resolved-checks.d.ts +51 -0
  739. package/types/project-run/check-execution/terminal-result.d.ts +27 -0
  740. package/types/project-run/completion.d.ts +14 -0
  741. package/types/project-run/controls/contract.d.ts +24 -0
  742. package/types/project-run/controls/outputs-override-validation.d.ts +3 -0
  743. package/types/project-run/controls/validation-result.d.ts +14 -0
  744. package/types/project-run/controls/validation.d.ts +3 -0
  745. package/types/project-run/diagnostic-logging/diagnostic-detail-rendering.d.ts +11 -0
  746. package/types/project-run/diagnostic-logging/logger.d.ts +33 -0
  747. package/types/project-run/invocation-creation.d.ts +12 -0
  748. package/types/project-run/invocation.d.ts +34 -0
  749. package/types/project-run/machine-publication.d.ts +10 -0
  750. package/types/project-run/output-configuration.d.ts +3 -0
  751. package/types/project-run/output-status.d.ts +21 -0
  752. package/types/project-run/progress-rendering/presentation.d.ts +28 -0
  753. package/types/project-run/progress-rendering/renderer-formatting.d.ts +23 -0
  754. package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +24 -0
  755. package/types/project-run/progress-rendering/renderer.d.ts +44 -0
  756. package/types/project-run/project-context.d.ts +7 -0
  757. package/types/project-run/result.d.ts +99 -0
  758. package/types/project-run/run.d.ts +18 -0
  759. package/types/project-run/task-scheduler/execution-state.d.ts +67 -0
  760. package/types/project-run/task-scheduler/graph-validation.d.ts +11 -0
  761. package/types/project-run/task-scheduler/graph.d.ts +40 -0
  762. package/types/project-run/task-scheduler/scheduler-admission-decision.d.ts +8 -0
  763. package/types/project-run/task-scheduler/scheduler-blocker-summary.d.ts +4 -0
  764. package/types/project-run/task-scheduler/scheduler-decision-inspection.d.ts +24 -0
  765. package/types/project-run/task-scheduler/scheduler-decision-model.d.ts +94 -0
  766. package/types/project-run/task-scheduler/scheduler-decision.d.ts +8 -0
  767. package/types/project-run/task-scheduler/scheduler.d.ts +3 -0
@@ -0,0 +1,138 @@
1
+ import { resolve } from "node:path";
2
+ import { readStrictJsonDocument } from "../json-document/strict-document.mjs";
3
+ import { collectProjectFiles } from "../project-files/collection.mjs";
4
+ import { partitionProjectFilesByEligibility } from "../project-files/input-eligibility.mjs";
5
+ import { validJsonValidationOptions } from "./options-validation.mjs";
6
+ export const JSON_VALIDATION_CHECK_DEFINITION = {
7
+ checkId: "json-validation",
8
+ displayName: "JSON validation"
9
+ };
10
+ /** Validates the lower-case JSON subset selected by this Check's options. */
11
+ export function executeJsonValidation(context) {
12
+ if (!validJsonValidationOptions(context.options))
13
+ return unavailable("invalid-options");
14
+ if (context.signal.aborted)
15
+ return unavailable("execution-cancelled");
16
+ const inputs = jsonInputPaths(context);
17
+ if (inputs === undefined)
18
+ return unavailable("scan-input-unavailable");
19
+ if (context.signal.aborted)
20
+ return unavailable("execution-cancelled");
21
+ if (inputs.selectedPathCount === 0)
22
+ return noEligibleInput();
23
+ reportRejectedInputs(context, inputs.rejectedPaths);
24
+ return appendRejectedInputMessage(validateJsonPaths(context, inputs.acceptedPaths, inputs.rejectedPaths.length), inputs.rejectedPaths.length);
25
+ }
26
+ function validateJsonPaths(context, paths, rejectedInputCount) {
27
+ const counts = { invalidFileCount: 0, validFileCount: 0 };
28
+ for (const path of paths) {
29
+ if (context.signal.aborted)
30
+ return unavailable("execution-cancelled");
31
+ const document = readJsonDocument(context, path);
32
+ if (context.signal.aborted)
33
+ return unavailable("execution-cancelled");
34
+ if (document.kind === "unavailable")
35
+ return unavailable("document-unavailable");
36
+ if (document.kind === "valid") {
37
+ counts.validFileCount += 1;
38
+ continue;
39
+ }
40
+ counts.invalidFileCount += 1;
41
+ reportInvalidDocument(context, path, document.reason);
42
+ }
43
+ return resultForValidationCounts(paths.length, rejectedInputCount, counts);
44
+ }
45
+ function jsonInputPaths(context) {
46
+ try {
47
+ const selectedPaths = collectProjectFiles(context.project.root, context.options.files);
48
+ const partition = partitionProjectFilesByEligibility(selectedPaths, isJsonInputPath);
49
+ return Object.freeze({ ...partition, selectedPathCount: selectedPaths.length });
50
+ }
51
+ catch {
52
+ return undefined;
53
+ }
54
+ }
55
+ function isJsonInputPath(path) {
56
+ return path.endsWith(".json");
57
+ }
58
+ function noEligibleInput() {
59
+ return Object.freeze({ status: "not-applicable", reason: { code: "no-eligible-input" } });
60
+ }
61
+ function readJsonDocument(context, path) {
62
+ return readStrictJsonDocument({
63
+ filePath: resolve(context.project.root, path),
64
+ maximumBytes: context.options.maximumBytes
65
+ });
66
+ }
67
+ function reportInvalidDocument(context, path, reason) {
68
+ const record = Object.freeze({ path, reason });
69
+ context.records.report({ id: path }, record);
70
+ }
71
+ function resultForValidationCounts(scannedFileCount, rejectedInputCount, counts) {
72
+ const data = Object.freeze({
73
+ scannedFileCount,
74
+ validFileCount: counts.validFileCount,
75
+ invalidFileCount: counts.invalidFileCount,
76
+ issueCount: counts.invalidFileCount + rejectedInputCount,
77
+ rejectedInputCount
78
+ });
79
+ if (counts.invalidFileCount === 0)
80
+ return Object.freeze({ data, status: "passed" });
81
+ return Object.freeze({
82
+ data,
83
+ messages: Object.freeze([
84
+ Object.freeze({
85
+ code: "invalid-json-documents",
86
+ level: "error",
87
+ message: `${counts.invalidFileCount} JSON document(s) are invalid; inspect this Check's Records for each path and reason.`
88
+ })
89
+ ]),
90
+ status: "failed"
91
+ });
92
+ }
93
+ function reportRejectedInputs(context, paths) {
94
+ for (const path of paths) {
95
+ const data = Object.freeze({
96
+ blocking: false,
97
+ kind: "input-rejected",
98
+ path,
99
+ reason: "unsupported-file-type"
100
+ });
101
+ context.records.report({ id: `/input-rejected/${path}` }, data);
102
+ }
103
+ }
104
+ function appendRejectedInputMessage(result, rejectedInputCount) {
105
+ if (rejectedInputCount === 0)
106
+ return result;
107
+ const message = Object.freeze({
108
+ code: "input-rejected",
109
+ level: "warning",
110
+ message: `${rejectedInputCount} selected jsonValidation input file(s) were rejected because only lower-case .json paths are supported; inspect this Check's Records and narrow files.include/exclude.`
111
+ });
112
+ return Object.freeze({
113
+ ...result,
114
+ messages: Object.freeze([...(result.messages ?? []), message])
115
+ });
116
+ }
117
+ function unavailable(code) {
118
+ return Object.freeze({
119
+ status: "unavailable",
120
+ reason: { code },
121
+ messages: Object.freeze([
122
+ Object.freeze({ code, level: "error", message: unavailableMessage(code) })
123
+ ])
124
+ });
125
+ }
126
+ function unavailableMessage(code) {
127
+ switch (code) {
128
+ case "invalid-options":
129
+ return "jsonValidation options are invalid; recreate the Check with jsonValidation(options) or restore its complete resolved options.";
130
+ case "scan-input-unavailable":
131
+ return "JSON validation could not collect its configured project files; check the project root, permissions, and selected file source.";
132
+ case "document-unavailable":
133
+ return "A selected JSON document could not be read safely; check that the file still exists, is readable, and was not replaced during the Run.";
134
+ case "execution-cancelled":
135
+ return "JSON validation was cancelled before it could form a complete result; inspect the caller's cancellation reason and retry if appropriate.";
136
+ }
137
+ }
138
+ //# sourceMappingURL=json-validation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-validation.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-validation/json-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { resolve } from \"node:path\";\n\nimport type { CheckExecutionContext, CheckMessage, CheckResult } from \"../../check/check.ts\";\nimport {\n readStrictJsonDocument,\n type JsonDocumentIssue\n} from \"../json-document/strict-document.ts\";\nimport { collectProjectFiles } from \"../project-files/collection.ts\";\nimport { partitionProjectFilesByEligibility } from \"../project-files/input-eligibility.ts\";\nimport type { JsonValidationFinalData } from \"./final-data.ts\";\nimport type { ResolvedJsonValidationOptions } from \"./options.ts\";\nimport { validJsonValidationOptions } from \"./options-validation.ts\";\n\nexport const JSON_VALIDATION_CHECK_DEFINITION = {\n checkId: \"json-validation\",\n displayName: \"JSON validation\"\n} as const;\n\n/** `json-validation` whole-Check unavailable outcome 的稳定 reason code。 */\nexport type JsonValidationUnavailableCode =\n | \"invalid-options\"\n | \"document-unavailable\"\n | \"execution-cancelled\"\n | \"scan-input-unavailable\";\n\n/** Validates the lower-case JSON subset selected by this Check's options. */\nexport function executeJsonValidation(\n context: CheckExecutionContext<ResolvedJsonValidationOptions>\n): CheckResult<JsonValidationFinalData> {\n if (!validJsonValidationOptions(context.options)) return unavailable(\"invalid-options\");\n if (context.signal.aborted) return unavailable(\"execution-cancelled\");\n\n const inputs = jsonInputPaths(context);\n if (inputs === undefined) return unavailable(\"scan-input-unavailable\");\n if (context.signal.aborted) return unavailable(\"execution-cancelled\");\n if (inputs.selectedPathCount === 0) return noEligibleInput();\n reportRejectedInputs(context, inputs.rejectedPaths);\n return appendRejectedInputMessage(\n validateJsonPaths(context, inputs.acceptedPaths, inputs.rejectedPaths.length),\n inputs.rejectedPaths.length\n );\n}\n\nfunction validateJsonPaths(\n context: CheckExecutionContext<ResolvedJsonValidationOptions>,\n paths: readonly string[],\n rejectedInputCount: number\n): CheckResult<JsonValidationFinalData> {\n const counts = { invalidFileCount: 0, validFileCount: 0 };\n for (const path of paths) {\n if (context.signal.aborted) return unavailable(\"execution-cancelled\");\n const document = readJsonDocument(context, path);\n if (context.signal.aborted) return unavailable(\"execution-cancelled\");\n if (document.kind === \"unavailable\") return unavailable(\"document-unavailable\");\n if (document.kind === \"valid\") {\n counts.validFileCount += 1;\n continue;\n }\n\n counts.invalidFileCount += 1;\n reportInvalidDocument(context, path, document.reason);\n }\n\n return resultForValidationCounts(paths.length, rejectedInputCount, counts);\n}\n\ninterface JsonInputPaths {\n readonly acceptedPaths: readonly string[];\n readonly rejectedPaths: readonly string[];\n readonly selectedPathCount: number;\n}\n\nfunction jsonInputPaths(\n context: CheckExecutionContext<ResolvedJsonValidationOptions>\n): JsonInputPaths | undefined {\n try {\n const selectedPaths = collectProjectFiles(context.project.root, context.options.files);\n const partition = partitionProjectFilesByEligibility(selectedPaths, isJsonInputPath);\n return Object.freeze({ ...partition, selectedPathCount: selectedPaths.length });\n } catch {\n return undefined;\n }\n}\n\nfunction isJsonInputPath(path: string): boolean {\n return path.endsWith(\".json\");\n}\n\nfunction noEligibleInput(): CheckResult<JsonValidationFinalData> {\n return Object.freeze({ status: \"not-applicable\", reason: { code: \"no-eligible-input\" } });\n}\n\nfunction readJsonDocument(\n context: CheckExecutionContext<ResolvedJsonValidationOptions>,\n path: string\n) {\n return readStrictJsonDocument({\n filePath: resolve(context.project.root, path),\n maximumBytes: context.options.maximumBytes\n });\n}\n\nfunction reportInvalidDocument(\n context: CheckExecutionContext<ResolvedJsonValidationOptions>,\n path: string,\n reason: JsonDocumentIssue\n): void {\n const record: JsonValidationRecordData = Object.freeze({ path, reason });\n context.records.report({ id: path }, record);\n}\n\nfunction resultForValidationCounts(\n scannedFileCount: number,\n rejectedInputCount: number,\n counts: Readonly<{ invalidFileCount: number; validFileCount: number }>\n): CheckResult<JsonValidationFinalData> {\n const data = Object.freeze({\n scannedFileCount,\n validFileCount: counts.validFileCount,\n invalidFileCount: counts.invalidFileCount,\n issueCount: counts.invalidFileCount + rejectedInputCount,\n rejectedInputCount\n });\n if (counts.invalidFileCount === 0) return Object.freeze({ data, status: \"passed\" });\n return Object.freeze({\n data,\n messages: Object.freeze([\n Object.freeze({\n code: \"invalid-json-documents\",\n level: \"error\" as const,\n message: `${counts.invalidFileCount} JSON document(s) are invalid; inspect this Check's Records for each path and reason.`\n })\n ]),\n status: \"failed\"\n });\n}\n\nfunction reportRejectedInputs(\n context: CheckExecutionContext<ResolvedJsonValidationOptions>,\n paths: readonly string[]\n): void {\n for (const path of paths) {\n const data: JsonValidationInputRejectedRecordData = Object.freeze({\n blocking: false,\n kind: \"input-rejected\",\n path,\n reason: \"unsupported-file-type\"\n });\n context.records.report({ id: `/input-rejected/${path}` }, data);\n }\n}\n\nfunction appendRejectedInputMessage(\n result: CheckResult<JsonValidationFinalData>,\n rejectedInputCount: number\n): CheckResult<JsonValidationFinalData> {\n if (rejectedInputCount === 0) return result;\n const message: CheckMessage = Object.freeze({\n code: \"input-rejected\",\n level: \"warning\",\n message: `${rejectedInputCount} selected jsonValidation input file(s) were rejected because only lower-case .json paths are supported; inspect this Check's Records and narrow files.include/exclude.`\n });\n return Object.freeze({\n ...result,\n messages: Object.freeze([...(result.messages ?? []), message])\n });\n}\n\nfunction unavailable(code: JsonValidationUnavailableCode): CheckResult<JsonValidationFinalData> {\n return Object.freeze({\n status: \"unavailable\",\n reason: { code },\n messages: Object.freeze([\n Object.freeze({ code, level: \"error\" as const, message: unavailableMessage(code) })\n ])\n });\n}\n\nfunction unavailableMessage(code: JsonValidationUnavailableCode): string {\n switch (code) {\n case \"invalid-options\":\n return \"jsonValidation options are invalid; recreate the Check with jsonValidation(options) or restore its complete resolved options.\";\n case \"scan-input-unavailable\":\n return \"JSON validation could not collect its configured project files; check the project root, permissions, and selected file source.\";\n case \"document-unavailable\":\n return \"A selected JSON document could not be read safely; check that the file still exists, is readable, and was not replaced during the Run.\";\n case \"execution-cancelled\":\n return \"JSON validation was cancelled before it could form a complete result; inspect the caller's cancellation reason and retry if appropriate.\";\n }\n}\n\n/** 一条 invalid JSON document supplemental Record 的 data。 */\nexport interface JsonValidationDocumentRecordData {\n readonly path: string;\n readonly reason: JsonValidationRecordReason;\n}\n\n/** 一条 files policy 已选中但不受 JSON validation 支持的输入 Finding。 */\nexport interface JsonValidationInputRejectedRecordData {\n readonly blocking: false;\n readonly kind: \"input-rejected\";\n readonly path: string;\n readonly reason: \"unsupported-file-type\";\n}\n\n/** JSON validation 发布的 document issue 或 input-rejection Record data。 */\nexport type JsonValidationRecordData =\n | JsonValidationDocumentRecordData\n | JsonValidationInputRejectedRecordData;\n\n/** JSON document Record 的稳定问题原因。 */\nexport type JsonValidationRecordReason = JsonDocumentIssue;\n"]}
@@ -0,0 +1,33 @@
1
+ import { hasRequiredAndOptionalRecordKeys, snapshotClosedRecord } from "../../data-boundary/closed-values.mjs";
2
+ import { defaultProjectFileSelection, resolveProjectFileSelection, snapshotProjectFileSelection } from "../project-files/configuration.mjs";
3
+ import { validJsonValidationOptions } from "./options-validation.mjs";
4
+ const DEFAULT_MAXIMUM_BYTES = 1_048_576;
5
+ const DEFAULT_FILES = Object.freeze({
6
+ exclude: defaultProjectFileSelection.exclude,
7
+ include: Object.freeze(["**/*.json"]),
8
+ source: defaultProjectFileSelection.source
9
+ });
10
+ /** 将可省略 JSON validation policy 物化为完整、冻结的 execution options。 */
11
+ export function resolveJsonValidationOptions(value) {
12
+ const input = snapshotClosedRecord(value);
13
+ if (input === undefined ||
14
+ !hasRequiredAndOptionalRecordKeys(input, {
15
+ optional: ["files", "maximumBytes"],
16
+ required: []
17
+ })) {
18
+ return undefined;
19
+ }
20
+ const files = input.files === undefined
21
+ ? snapshotProjectFileSelection(DEFAULT_FILES)
22
+ : resolveProjectFileSelection(input.files, DEFAULT_FILES);
23
+ const maximumBytes = input.maximumBytes === undefined ? DEFAULT_MAXIMUM_BYTES : input.maximumBytes;
24
+ if (files === undefined ||
25
+ typeof maximumBytes !== "number" ||
26
+ !Number.isSafeInteger(maximumBytes) ||
27
+ maximumBytes <= 0) {
28
+ return undefined;
29
+ }
30
+ const options = Object.freeze({ files, maximumBytes });
31
+ return validJsonValidationOptions(options) ? options : undefined;
32
+ }
33
+ //# sourceMappingURL=options-resolution.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options-resolution.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-validation/options-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gCAAgC,EAChC,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC7B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAErE,MAAM,qBAAqB,GAAG,SAAS,CAAC;AACxC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,OAAO,EAAE,2BAA2B,CAAC,OAAO;IAC5C,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;IACrC,MAAM,EAAE,2BAA2B,CAAC,MAAM;CAC3C,CAAC,CAAC;AAEH,+DAA+D;AAC/D,MAAM,UAAU,4BAA4B,CAC1C,KAAc;IAEd,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC1C,IACE,KAAK,KAAK,SAAS;QACnB,CAAC,gCAAgC,CAAC,KAAK,EAAE;YACvC,QAAQ,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC;YACnC,QAAQ,EAAE,EAAE;SACb,CAAC,EACF,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GACT,KAAK,CAAC,KAAK,KAAK,SAAS;QACvB,CAAC,CAAC,4BAA4B,CAAC,aAAa,CAAC;QAC7C,CAAC,CAAC,2BAA2B,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC9D,MAAM,YAAY,GAChB,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;IAChF,IACE,KAAK,KAAK,SAAS;QACnB,OAAO,YAAY,KAAK,QAAQ;QAChC,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC;QACnC,YAAY,IAAI,CAAC,EACjB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;IACvD,OAAO,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC","sourcesContent":["import {\n hasRequiredAndOptionalRecordKeys,\n snapshotClosedRecord\n} from \"../../data-boundary/closed-values.ts\";\nimport {\n defaultProjectFileSelection,\n resolveProjectFileSelection,\n snapshotProjectFileSelection\n} from \"../project-files/configuration.ts\";\nimport type { ResolvedJsonValidationOptions } from \"./options.ts\";\nimport { validJsonValidationOptions } from \"./options-validation.ts\";\n\nconst DEFAULT_MAXIMUM_BYTES = 1_048_576;\nconst DEFAULT_FILES = Object.freeze({\n exclude: defaultProjectFileSelection.exclude,\n include: Object.freeze([\"**/*.json\"]),\n source: defaultProjectFileSelection.source\n});\n\n/** 将可省略 JSON validation policy 物化为完整、冻结的 execution options。 */\nexport function resolveJsonValidationOptions(\n value: unknown\n): ResolvedJsonValidationOptions | undefined {\n const input = snapshotClosedRecord(value);\n if (\n input === undefined ||\n !hasRequiredAndOptionalRecordKeys(input, {\n optional: [\"files\", \"maximumBytes\"],\n required: []\n })\n ) {\n return undefined;\n }\n const files =\n input.files === undefined\n ? snapshotProjectFileSelection(DEFAULT_FILES)\n : resolveProjectFileSelection(input.files, DEFAULT_FILES);\n const maximumBytes =\n input.maximumBytes === undefined ? DEFAULT_MAXIMUM_BYTES : input.maximumBytes;\n if (\n files === undefined ||\n typeof maximumBytes !== \"number\" ||\n !Number.isSafeInteger(maximumBytes) ||\n maximumBytes <= 0\n ) {\n return undefined;\n }\n const options = Object.freeze({ files, maximumBytes });\n return validJsonValidationOptions(options) ? options : undefined;\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import { hasExactPlainRecordKeys, snapshotClosedRecord } from "../../data-boundary/closed-values.mjs";
2
+ import { validProjectFileSelection } from "../project-files/configuration.mjs";
3
+ function exactRecord(value, keys) {
4
+ const record = snapshotClosedRecord(value);
5
+ return record !== undefined && hasExactPlainRecordKeys(record, keys) ? record : undefined;
6
+ }
7
+ function positiveSafeInteger(value) {
8
+ return typeof value === "number" && Number.isSafeInteger(value) && value > 0;
9
+ }
10
+ export function validJsonValidationOptions(value) {
11
+ const options = exactRecord(value, ["files", "maximumBytes"]);
12
+ return (options !== undefined &&
13
+ validProjectFileSelection(options.files) &&
14
+ positiveSafeInteger(options.maximumBytes));
15
+ }
16
+ //# sourceMappingURL=options-validation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options-validation.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-validation/options-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAG9E,SAAS,WAAW,CAClB,KAAc,EACd,IAAuB;IAEvB,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,MAAM,KAAK,SAAS,IAAI,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5F,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IAC9D,OAAO,CACL,OAAO,KAAK,SAAS;QACrB,yBAAyB,CAAC,OAAO,CAAC,KAAK,CAAC;QACxC,mBAAmB,CAAC,OAAO,CAAC,YAAY,CAAC,CAC1C,CAAC;AACJ,CAAC","sourcesContent":["import {\n hasExactPlainRecordKeys,\n snapshotClosedRecord\n} from \"../../data-boundary/closed-values.ts\";\nimport { validProjectFileSelection } from \"../project-files/configuration.ts\";\nimport type { ResolvedJsonValidationOptions } from \"./options.ts\";\n\nfunction exactRecord(\n value: unknown,\n keys: readonly string[]\n): Readonly<Record<string, unknown>> | undefined {\n const record = snapshotClosedRecord(value);\n return record !== undefined && hasExactPlainRecordKeys(record, keys) ? record : undefined;\n}\n\nfunction positiveSafeInteger(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value > 0;\n}\n\nexport function validJsonValidationOptions(value: unknown): value is ResolvedJsonValidationOptions {\n const options = exactRecord(value, [\"files\", \"maximumBytes\"]);\n return (\n options !== undefined &&\n validProjectFileSelection(options.files) &&\n positiveSafeInteger(options.maximumBytes)\n );\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=options.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.mjs","sourceRoot":"","sources":["../../../../src/package-checks/json-validation/options.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n ProjectFileSelection,\n ProjectFileSelectionOptions\n} from \"../project-files/configuration.ts\";\n\n/** `jsonValidation(options?)` 接受的可省略 authoring policy。 */\nexport interface JsonValidationOptions {\n /** 参与本 Check 的 repository-file selection;省略字段使用 package defaults。 */\n readonly files?: ProjectFileSelectionOptions;\n /** 单个 JSON document 允许的最大 raw byte 数;省略时为 1 MiB。 */\n readonly maximumBytes?: number;\n}\n\n/** `json-validation` execution 消费的完整、冻结 options。 */\nexport interface ResolvedJsonValidationOptions {\n readonly files: ProjectFileSelection;\n readonly maximumBytes: number;\n}\n"]}
@@ -0,0 +1,73 @@
1
+ const REMINDER_MESSAGE_CODE = Object.freeze({
2
+ due: "maintenance-reminder-due",
3
+ unavailable: "maintenance-reminder-unavailable"
4
+ });
5
+ export function completedResult(evaluations) {
6
+ const assessments = evaluations.map((evaluation) => evaluation.assessment);
7
+ const messages = evaluations.flatMap(messageForEvaluation);
8
+ const failed = evaluations.some((evaluation) => evaluation.assessment.mode === "enforcing" && evaluation.assessment.assessment !== "clear");
9
+ return {
10
+ status: failed ? "failed" : "passed",
11
+ data: { entries: assessments },
12
+ ...(messages.length === 0 ? {} : { messages })
13
+ };
14
+ }
15
+ export function unavailableResult(code) {
16
+ return {
17
+ status: "unavailable",
18
+ reason: { code },
19
+ messages: [{ code, level: "error", message: wholeCheckUnavailableMessage(code) }]
20
+ };
21
+ }
22
+ function wholeCheckUnavailableMessage(code) {
23
+ switch (code) {
24
+ case "invalid-options":
25
+ return "maintenanceReminders options are invalid; recreate the Check with maintenanceReminders(entries) or restore its complete resolved options.";
26
+ case "execution-cancelled":
27
+ return "Maintenance reminder evaluation was cancelled before it could form a complete result; inspect the caller's cancellation reason and retry if appropriate.";
28
+ case "maintenance-reminders-internal-failure":
29
+ return "Maintenance reminders could not form a complete ordered assessment; check package/runtime integrity and retry.";
30
+ }
31
+ }
32
+ function messageForEvaluation(evaluation) {
33
+ const { assessment, message } = evaluation;
34
+ if (assessment.assessment === "clear")
35
+ return [];
36
+ const level = assessment.mode === "enforcing" ? "error" : "warning";
37
+ const suffix = assessment.assessment === "unavailable" ? ` (${assessment.reason})` : "";
38
+ return [
39
+ {
40
+ code: assessment.assessment === "due"
41
+ ? REMINDER_MESSAGE_CODE.due
42
+ : REMINDER_MESSAGE_CODE.unavailable,
43
+ level,
44
+ message: `${assessment.id}: ${message}${suffix}`
45
+ }
46
+ ];
47
+ }
48
+ export function unavailableAssessment(entry, headCommit, reason) {
49
+ return {
50
+ assessment: "unavailable",
51
+ baseCommit: entry.baseCommit,
52
+ changedLines: null,
53
+ commitCount: null,
54
+ exceeded: [],
55
+ headCommit,
56
+ id: entry.id,
57
+ mode: modeOf(entry),
58
+ reason
59
+ };
60
+ }
61
+ export function modeOf(entry) {
62
+ return entry.mode === "enforcing" ? "enforcing" : "advisory";
63
+ }
64
+ export function unavailableHistory(reason) {
65
+ return { kind: "unavailable", reason };
66
+ }
67
+ export function reminderEvaluation(entry, assessment) {
68
+ return { assessment, message: entry.message };
69
+ }
70
+ export function completedMeasurement(entry, assessment) {
71
+ return { kind: "succeeded", value: reminderEvaluation(entry, assessment) };
72
+ }
73
+ //# sourceMappingURL=assessment-results.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assessment-results.mjs","sourceRoot":"","sources":["../../../../src/package-checks/maintenance-reminders/assessment-results.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CheckMessage, CheckResult } from \"../../check/check.ts\";\nimport type {\n MaintenanceReminder,\n MaintenanceRemindersUnavailableCode,\n ReminderEvaluation,\n ReminderMeasurement,\n FirstParentHistoryResolution,\n FirstParentHistoryUnavailableReason\n} from \"./maintenance-reminders.ts\";\nimport type {\n MaintenanceReminderAssessment,\n MaintenanceReminderMode,\n MaintenanceReminderUnavailableReason,\n MaintenanceRemindersFinalData,\n UnavailableMaintenanceReminderAssessment\n} from \"./final-data.ts\";\n\nconst REMINDER_MESSAGE_CODE = Object.freeze({\n due: \"maintenance-reminder-due\",\n unavailable: \"maintenance-reminder-unavailable\"\n});\n\nexport function completedResult(\n evaluations: readonly ReminderEvaluation[]\n): CheckResult<MaintenanceRemindersFinalData> {\n const assessments = evaluations.map((evaluation) => evaluation.assessment);\n const messages = evaluations.flatMap(messageForEvaluation);\n const failed = evaluations.some(\n (evaluation) =>\n evaluation.assessment.mode === \"enforcing\" && evaluation.assessment.assessment !== \"clear\"\n );\n return {\n status: failed ? (\"failed\" as const) : (\"passed\" as const),\n data: { entries: assessments },\n ...(messages.length === 0 ? {} : { messages })\n };\n}\n\nexport function unavailableResult(\n code: MaintenanceRemindersUnavailableCode\n): CheckResult<MaintenanceRemindersFinalData> {\n return {\n status: \"unavailable\" as const,\n reason: { code },\n messages: [{ code, level: \"error\", message: wholeCheckUnavailableMessage(code) }]\n };\n}\n\nfunction wholeCheckUnavailableMessage(code: MaintenanceRemindersUnavailableCode): string {\n switch (code) {\n case \"invalid-options\":\n return \"maintenanceReminders options are invalid; recreate the Check with maintenanceReminders(entries) or restore its complete resolved options.\";\n case \"execution-cancelled\":\n return \"Maintenance reminder evaluation was cancelled before it could form a complete result; inspect the caller's cancellation reason and retry if appropriate.\";\n case \"maintenance-reminders-internal-failure\":\n return \"Maintenance reminders could not form a complete ordered assessment; check package/runtime integrity and retry.\";\n }\n}\n\nfunction messageForEvaluation(evaluation: ReminderEvaluation): readonly CheckMessage[] {\n const { assessment, message } = evaluation;\n if (assessment.assessment === \"clear\") return [];\n const level = assessment.mode === \"enforcing\" ? (\"error\" as const) : (\"warning\" as const);\n const suffix = assessment.assessment === \"unavailable\" ? ` (${assessment.reason})` : \"\";\n return [\n {\n code:\n assessment.assessment === \"due\"\n ? REMINDER_MESSAGE_CODE.due\n : REMINDER_MESSAGE_CODE.unavailable,\n level,\n message: `${assessment.id}: ${message}${suffix}`\n }\n ];\n}\n\nexport function unavailableAssessment(\n entry: Readonly<MaintenanceReminder>,\n headCommit: string | null,\n reason: MaintenanceReminderUnavailableReason\n): UnavailableMaintenanceReminderAssessment {\n return {\n assessment: \"unavailable\",\n baseCommit: entry.baseCommit,\n changedLines: null,\n commitCount: null,\n exceeded: [],\n headCommit,\n id: entry.id,\n mode: modeOf(entry),\n reason\n };\n}\n\nexport function modeOf(entry: Readonly<MaintenanceReminder>): MaintenanceReminderMode {\n return entry.mode === \"enforcing\" ? \"enforcing\" : \"advisory\";\n}\n\nexport function unavailableHistory(\n reason: FirstParentHistoryUnavailableReason\n): FirstParentHistoryResolution {\n return { kind: \"unavailable\", reason };\n}\n\nexport function reminderEvaluation(\n entry: Readonly<MaintenanceReminder>,\n assessment: MaintenanceReminderAssessment\n): ReminderEvaluation {\n return { assessment, message: entry.message };\n}\n\nexport function completedMeasurement(\n entry: Readonly<MaintenanceReminder>,\n assessment: MaintenanceReminderAssessment\n): ReminderMeasurement {\n return { kind: \"succeeded\", value: reminderEvaluation(entry, assessment) };\n}\n"]}
@@ -0,0 +1,153 @@
1
+ import { snapshotClosedRecord } from "../../data-boundary/closed-values.mjs";
2
+ import { exactFinalDataRecord, finalDataArray, invalidFinalData, nonNegativeSafeInteger } from "../final-data-parsing.mjs";
3
+ const EMPTY_EXCEEDED = Object.freeze([]);
4
+ const FULL_COMMIT_ID = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/i;
5
+ const REMINDER_ID = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
6
+ /** 单条维护提醒无法测量时使用的稳定 reason code。 */
7
+ export const MAINTENANCE_REMINDER_UNAVAILABLE_REASON = Object.freeze({
8
+ baseCommitUnavailable: "base-commit-unavailable",
9
+ baseNotFirstParentAncestor: "base-not-first-parent-ancestor",
10
+ firstParentHistoryInvalid: "first-parent-history-invalid",
11
+ firstParentHistoryUnavailable: "first-parent-history-unavailable",
12
+ headInvalid: "head-invalid",
13
+ headUnavailable: "head-unavailable",
14
+ numstatInvalid: "numstat-invalid",
15
+ numstatUnavailable: "numstat-unavailable"
16
+ });
17
+ const MAINTENANCE_REMINDER_UNAVAILABLE_REASONS = Object.freeze(Object.values(MAINTENANCE_REMINDER_UNAVAILABLE_REASON));
18
+ /** 判断 unknown value 是否为维护提醒的稳定局部 ID。 */
19
+ export function isMaintenanceReminderId(value) {
20
+ return typeof value === "string" && REMINDER_ID.test(value);
21
+ }
22
+ /** 判断 unknown value 是否为 Git 的完整 SHA-1 或 SHA-256 commit ID。 */
23
+ export function isMaintenanceCommitId(value) {
24
+ return typeof value === "string" && FULL_COMMIT_ID.test(value);
25
+ }
26
+ /** 验证 discriminated entry assessments 并脱离 canonical final data。 */
27
+ export function parseMaintenanceRemindersData(data) {
28
+ const value = exactFinalDataRecord(data, ["entries"], "maintenanceReminders");
29
+ const entries = finalDataArray(value.entries, "maintenanceReminders");
30
+ const parsedEntries = [];
31
+ const ids = new Set();
32
+ for (const entry of entries) {
33
+ const parsed = parseAssessment(entry);
34
+ if (ids.has(parsed.id))
35
+ throw invalidFinalData("maintenanceReminders");
36
+ ids.add(parsed.id);
37
+ parsedEntries.push(parsed);
38
+ }
39
+ return Object.freeze({ entries: Object.freeze(parsedEntries) });
40
+ }
41
+ function parseAssessment(value) {
42
+ const record = assessmentRecord(value);
43
+ const identity = assessmentIdentity(record);
44
+ if (record.assessment === "unavailable") {
45
+ return parseUnavailableAssessment(record, identity);
46
+ }
47
+ return parseMeasuredAssessment(record, identity);
48
+ }
49
+ function assessmentRecord(value) {
50
+ return exactFinalDataRecord(value, valueAssessment(value) === "unavailable"
51
+ ? unavailableAssessmentKeys()
52
+ : measuredAssessmentKeys(), "maintenanceReminders");
53
+ }
54
+ function unavailableAssessmentKeys() {
55
+ return [
56
+ "assessment",
57
+ "baseCommit",
58
+ "changedLines",
59
+ "commitCount",
60
+ "exceeded",
61
+ "headCommit",
62
+ "id",
63
+ "mode",
64
+ "reason"
65
+ ];
66
+ }
67
+ function measuredAssessmentKeys() {
68
+ return [
69
+ "assessment",
70
+ "baseCommit",
71
+ "changedLines",
72
+ "commitCount",
73
+ "exceeded",
74
+ "headCommit",
75
+ "id",
76
+ "mode"
77
+ ];
78
+ }
79
+ function assessmentIdentity(record) {
80
+ const id = isMaintenanceReminderId(record.id) ? record.id : undefined;
81
+ const mode = record.mode === "advisory" || record.mode === "enforcing" ? record.mode : undefined;
82
+ const baseCommit = isMaintenanceCommitId(record.baseCommit) ? record.baseCommit : undefined;
83
+ if (id === undefined || mode === undefined || baseCommit === undefined)
84
+ throw invalidFinalData("maintenanceReminders");
85
+ return { baseCommit, id, mode };
86
+ }
87
+ function parseMeasuredAssessment(record, identity) {
88
+ if (record.assessment !== "clear" && record.assessment !== "due")
89
+ throw invalidFinalData("maintenanceReminders");
90
+ const commitCount = nonNegativeSafeInteger(record.commitCount);
91
+ const changedLines = nonNegativeSafeInteger(record.changedLines);
92
+ const headCommit = isMaintenanceCommitId(record.headCommit) ? record.headCommit : undefined;
93
+ const exceeded = parseExceeded(record.exceeded);
94
+ if (commitCount === undefined ||
95
+ changedLines === undefined ||
96
+ headCommit === undefined ||
97
+ exceeded === undefined ||
98
+ (record.assessment === "clear" ? exceeded.length !== 0 : exceeded.length === 0)) {
99
+ throw invalidFinalData("maintenanceReminders");
100
+ }
101
+ return Object.freeze({
102
+ assessment: record.assessment,
103
+ baseCommit: identity.baseCommit,
104
+ changedLines,
105
+ commitCount,
106
+ exceeded,
107
+ headCommit,
108
+ id: identity.id,
109
+ mode: identity.mode
110
+ });
111
+ }
112
+ function parseUnavailableAssessment(record, identity) {
113
+ const exceeded = finalDataArray(record.exceeded, "maintenanceReminders");
114
+ const headCommit = record.headCommit;
115
+ if (record.changedLines !== null ||
116
+ record.commitCount !== null ||
117
+ exceeded.length !== 0 ||
118
+ (headCommit !== null && !isMaintenanceCommitId(headCommit)) ||
119
+ !isUnavailableReason(record.reason)) {
120
+ throw invalidFinalData("maintenanceReminders");
121
+ }
122
+ return Object.freeze({
123
+ assessment: "unavailable",
124
+ baseCommit: identity.baseCommit,
125
+ changedLines: null,
126
+ commitCount: null,
127
+ exceeded: EMPTY_EXCEEDED,
128
+ headCommit,
129
+ id: identity.id,
130
+ mode: identity.mode,
131
+ reason: record.reason
132
+ });
133
+ }
134
+ function valueAssessment(value) {
135
+ return snapshotClosedRecord(value)?.assessment;
136
+ }
137
+ function parseExceeded(value) {
138
+ const entries = finalDataArray(value, "maintenanceReminders");
139
+ const exceeded = [];
140
+ const uniqueEntries = new Set();
141
+ for (const entry of entries) {
142
+ if ((entry !== "commits" && entry !== "changed-lines") || uniqueEntries.has(entry)) {
143
+ return undefined;
144
+ }
145
+ uniqueEntries.add(entry);
146
+ exceeded.push(entry);
147
+ }
148
+ return Object.freeze(exceeded);
149
+ }
150
+ function isUnavailableReason(value) {
151
+ return MAINTENANCE_REMINDER_UNAVAILABLE_REASONS.some((reason) => reason === value);
152
+ }
153
+ //# sourceMappingURL=final-data.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"final-data.mjs","sourceRoot":"","sources":["../../../../src/package-checks/maintenance-reminders/final-data.ts"],"names":[],"mappings":"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","sourcesContent":["import { snapshotClosedRecord } from \"../../data-boundary/closed-values.ts\";\nimport {\n exactFinalDataRecord,\n finalDataArray,\n invalidFinalData,\n nonNegativeSafeInteger\n} from \"../final-data-parsing.ts\";\n\nconst EMPTY_EXCEEDED: readonly [] = Object.freeze([]);\n\nconst FULL_COMMIT_ID = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/i;\nconst REMINDER_ID = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\n\n/** 单条维护提醒无法测量时使用的稳定 reason code。 */\nexport const MAINTENANCE_REMINDER_UNAVAILABLE_REASON = Object.freeze({\n baseCommitUnavailable: \"base-commit-unavailable\",\n baseNotFirstParentAncestor: \"base-not-first-parent-ancestor\",\n firstParentHistoryInvalid: \"first-parent-history-invalid\",\n firstParentHistoryUnavailable: \"first-parent-history-unavailable\",\n headInvalid: \"head-invalid\",\n headUnavailable: \"head-unavailable\",\n numstatInvalid: \"numstat-invalid\",\n numstatUnavailable: \"numstat-unavailable\"\n} as const);\n\nexport type MaintenanceReminderMode = \"advisory\" | \"enforcing\";\n\n/** 单条维护提醒无法测量时保留在 final data 中的稳定 reason。 */\nexport type MaintenanceReminderUnavailableReason =\n (typeof MAINTENANCE_REMINDER_UNAVAILABLE_REASON)[keyof typeof MAINTENANCE_REMINDER_UNAVAILABLE_REASON];\n\nconst MAINTENANCE_REMINDER_UNAVAILABLE_REASONS: readonly MaintenanceReminderUnavailableReason[] =\n Object.freeze(Object.values(MAINTENANCE_REMINDER_UNAVAILABLE_REASON));\n\n/** 判断 unknown value 是否为维护提醒的稳定局部 ID。 */\nexport function isMaintenanceReminderId(value: unknown): value is string {\n return typeof value === \"string\" && REMINDER_ID.test(value);\n}\n\n/** 判断 unknown value 是否为 Git 的完整 SHA-1 或 SHA-256 commit ID。 */\nexport function isMaintenanceCommitId(value: unknown): value is string {\n return typeof value === \"string\" && FULL_COMMIT_ID.test(value);\n}\n\nexport type MeasuredMaintenanceReminderAssessment = Readonly<{\n readonly assessment: \"clear\" | \"due\";\n readonly baseCommit: string;\n readonly changedLines: number;\n readonly commitCount: number;\n readonly exceeded: readonly (\"commits\" | \"changed-lines\")[];\n readonly headCommit: string;\n readonly id: string;\n readonly mode: MaintenanceReminderMode;\n}>;\n\nexport type UnavailableMaintenanceReminderAssessment = Readonly<{\n readonly assessment: \"unavailable\";\n readonly baseCommit: string;\n readonly changedLines: null;\n readonly commitCount: null;\n readonly exceeded: readonly [];\n readonly headCommit: string | null;\n readonly id: string;\n readonly mode: MaintenanceReminderMode;\n readonly reason: MaintenanceReminderUnavailableReason;\n}>;\n\n/** 单条维护提醒的 measured 或 unavailable discriminated assessment。 */\nexport type MaintenanceReminderAssessment =\n | MeasuredMaintenanceReminderAssessment\n | UnavailableMaintenanceReminderAssessment;\n\n/** `maintenance-reminders` 在 passed/failed outcome 中发布的主数据。 */\nexport interface MaintenanceRemindersFinalData {\n readonly entries: readonly MaintenanceReminderAssessment[];\n}\n\n/** 验证 discriminated entry assessments 并脱离 canonical final data。 */\nexport function parseMaintenanceRemindersData(data: unknown): MaintenanceRemindersFinalData {\n const value = exactFinalDataRecord(data, [\"entries\"], \"maintenanceReminders\");\n const entries = finalDataArray(value.entries, \"maintenanceReminders\");\n const parsedEntries: MaintenanceReminderAssessment[] = [];\n const ids = new Set<string>();\n for (const entry of entries) {\n const parsed = parseAssessment(entry);\n if (ids.has(parsed.id)) throw invalidFinalData(\"maintenanceReminders\");\n ids.add(parsed.id);\n parsedEntries.push(parsed);\n }\n return Object.freeze({ entries: Object.freeze(parsedEntries) });\n}\n\nfunction parseAssessment(value: unknown): MaintenanceReminderAssessment {\n const record = assessmentRecord(value);\n const identity = assessmentIdentity(record);\n if (record.assessment === \"unavailable\") {\n return parseUnavailableAssessment(record, identity);\n }\n return parseMeasuredAssessment(record, identity);\n}\n\nfunction assessmentRecord(value: unknown): Readonly<Record<string, unknown>> {\n return exactFinalDataRecord(\n value,\n valueAssessment(value) === \"unavailable\"\n ? unavailableAssessmentKeys()\n : measuredAssessmentKeys(),\n \"maintenanceReminders\"\n );\n}\n\nfunction unavailableAssessmentKeys(): readonly string[] {\n return [\n \"assessment\",\n \"baseCommit\",\n \"changedLines\",\n \"commitCount\",\n \"exceeded\",\n \"headCommit\",\n \"id\",\n \"mode\",\n \"reason\"\n ];\n}\n\nfunction measuredAssessmentKeys(): readonly string[] {\n return [\n \"assessment\",\n \"baseCommit\",\n \"changedLines\",\n \"commitCount\",\n \"exceeded\",\n \"headCommit\",\n \"id\",\n \"mode\"\n ];\n}\n\nfunction assessmentIdentity(record: Readonly<Record<string, unknown>>): Readonly<{\n readonly baseCommit: string;\n readonly id: string;\n readonly mode: MaintenanceReminderMode;\n}> {\n const id = isMaintenanceReminderId(record.id) ? record.id : undefined;\n const mode = record.mode === \"advisory\" || record.mode === \"enforcing\" ? record.mode : undefined;\n const baseCommit = isMaintenanceCommitId(record.baseCommit) ? record.baseCommit : undefined;\n if (id === undefined || mode === undefined || baseCommit === undefined)\n throw invalidFinalData(\"maintenanceReminders\");\n return { baseCommit, id, mode };\n}\n\nfunction parseMeasuredAssessment(\n record: Readonly<Record<string, unknown>>,\n identity: Readonly<{\n readonly baseCommit: string;\n readonly id: string;\n readonly mode: MaintenanceReminderMode;\n }>\n): MeasuredMaintenanceReminderAssessment {\n if (record.assessment !== \"clear\" && record.assessment !== \"due\")\n throw invalidFinalData(\"maintenanceReminders\");\n const commitCount = nonNegativeSafeInteger(record.commitCount);\n const changedLines = nonNegativeSafeInteger(record.changedLines);\n const headCommit = isMaintenanceCommitId(record.headCommit) ? record.headCommit : undefined;\n const exceeded = parseExceeded(record.exceeded);\n if (\n commitCount === undefined ||\n changedLines === undefined ||\n headCommit === undefined ||\n exceeded === undefined ||\n (record.assessment === \"clear\" ? exceeded.length !== 0 : exceeded.length === 0)\n ) {\n throw invalidFinalData(\"maintenanceReminders\");\n }\n return Object.freeze({\n assessment: record.assessment,\n baseCommit: identity.baseCommit,\n changedLines,\n commitCount,\n exceeded,\n headCommit,\n id: identity.id,\n mode: identity.mode\n });\n}\n\nfunction parseUnavailableAssessment(\n record: Readonly<Record<string, unknown>>,\n identity: Readonly<{\n readonly baseCommit: string;\n readonly id: string;\n readonly mode: MaintenanceReminderMode;\n }>\n): UnavailableMaintenanceReminderAssessment {\n const exceeded = finalDataArray(record.exceeded, \"maintenanceReminders\");\n const headCommit = record.headCommit;\n if (\n record.changedLines !== null ||\n record.commitCount !== null ||\n exceeded.length !== 0 ||\n (headCommit !== null && !isMaintenanceCommitId(headCommit)) ||\n !isUnavailableReason(record.reason)\n ) {\n throw invalidFinalData(\"maintenanceReminders\");\n }\n return Object.freeze({\n assessment: \"unavailable\",\n baseCommit: identity.baseCommit,\n changedLines: null,\n commitCount: null,\n exceeded: EMPTY_EXCEEDED,\n headCommit,\n id: identity.id,\n mode: identity.mode,\n reason: record.reason\n });\n}\n\nfunction valueAssessment(value: unknown): unknown {\n return snapshotClosedRecord(value)?.assessment;\n}\n\nfunction parseExceeded(value: unknown): readonly (\"commits\" | \"changed-lines\")[] | undefined {\n const entries = finalDataArray(value, \"maintenanceReminders\");\n const exceeded: (\"commits\" | \"changed-lines\")[] = [];\n const uniqueEntries = new Set<string>();\n for (const entry of entries) {\n if ((entry !== \"commits\" && entry !== \"changed-lines\") || uniqueEntries.has(entry)) {\n return undefined;\n }\n uniqueEntries.add(entry);\n exceeded.push(entry);\n }\n return Object.freeze(exceeded);\n}\n\nfunction isUnavailableReason(value: unknown): value is MaintenanceReminderUnavailableReason {\n return MAINTENANCE_REMINDER_UNAVAILABLE_REASONS.some((reason) => reason === value);\n}\n"]}