@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,43 @@
1
+ import { defineCheck } from "../../check/check.mjs";
2
+ import { executeFunctionMetrics } from "./execution.mjs";
3
+ import { parseFunctionMetricsData } from "./final-data.mjs";
4
+ import { resolveFunctionMetricsOptions } from "./options-resolution.mjs";
5
+ import { validResolvedFunctionMetricsOptions } from "./options-validation.mjs";
6
+ const FUNCTION_METRICS_CHECK_DEFINITION = {
7
+ checkId: "function-metrics",
8
+ displayName: "Function metrics"
9
+ };
10
+ /**
11
+ * 使用可省略的区域、阈值与 finding policy 构造一个完整 function-metrics Check。
12
+ *
13
+ * @param options - 省略字段由 package 补齐;显式 files 数组完整替换对应字段的默认数组。
14
+ * @returns 固定 `function-metrics` identity、完整冻结 options、preflight 与 execution。
15
+ * @throws {TypeError} input 含未知字段、空 area、非法 finding policy、非法 limit 或空 executable 时抛出。
16
+ */
17
+ export function functionMetrics(options = {}) {
18
+ const resolvedOptions = resolveFunctionMetricsOptions(options);
19
+ if (resolvedOptions === undefined) {
20
+ throw new TypeError("functionMetrics options must use the documented closed policy: a non-empty area map, recognized finding policies, positive safe-integer limits, and a non-empty scanner executable");
21
+ }
22
+ return defineCheck({
23
+ ...FUNCTION_METRICS_CHECK_DEFINITION,
24
+ execution: executeFunctionMetrics,
25
+ parseData: parseFunctionMetricsData,
26
+ preflight: (preparedOptions) => validResolvedFunctionMetricsOptions(preparedOptions)
27
+ ? { status: "success", preparedOptions }
28
+ : {
29
+ status: "failure",
30
+ action: "block",
31
+ reason: { code: "invalid-options" },
32
+ messages: [
33
+ {
34
+ code: "invalid-options",
35
+ level: "error",
36
+ message: "functionMetrics options are invalid; recreate the Check with functionMetrics(options) or restore its complete resolved options."
37
+ }
38
+ ]
39
+ },
40
+ options: resolvedOptions
41
+ });
42
+ }
43
+ //# sourceMappingURL=constructor.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constructor.mjs","sourceRoot":"","sources":["../../../../src/package-checks/function-metrics/constructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA8B,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,mCAAmC,EAAE,MAAM,yBAAyB,CAAC;AAE9E,MAAM,iCAAiC,GAAG;IACxC,OAAO,EAAE,kBAAkB;IAC3B,WAAW,EAAE,kBAAkB;CACvB,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAO,GAA2B,EAAE;IAMpC,MAAM,eAAe,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;IAC/D,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,IAAI,SAAS,CACjB,oLAAoL,CACrL,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC;QACjB,GAAG,iCAAiC;QACpC,SAAS,EAAE,sBAAsB;QACjC,SAAS,EAAE,wBAAwB;QACnC,SAAS,EAAE,CAAC,eAAe,EAAE,EAAE,CAC7B,mCAAmC,CAAC,eAAe,CAAC;YAClD,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE;YACxC,CAAC,CAAC;gBACE,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;gBACnC,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,iBAAiB;wBACvB,KAAK,EAAE,OAAO;wBACd,OAAO,EACL,iIAAiI;qBACpI;iBACF;aACF;QACP,OAAO,EAAE,eAAe;KACzB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { defineCheck, type TypedCheckWithOptions } from \"../../check/check.ts\";\nimport { executeFunctionMetrics } from \"./execution.ts\";\nimport { parseFunctionMetricsData } from \"./final-data.ts\";\nimport type { FunctionMetricsOptions, ResolvedFunctionMetricsOptions } from \"./options.ts\";\nimport { resolveFunctionMetricsOptions } from \"./options-resolution.ts\";\nimport { validResolvedFunctionMetricsOptions } from \"./options-validation.ts\";\n\nconst FUNCTION_METRICS_CHECK_DEFINITION = {\n checkId: \"function-metrics\",\n displayName: \"Function metrics\"\n} as const;\n\n/**\n * 使用可省略的区域、阈值与 finding policy 构造一个完整 function-metrics Check。\n *\n * @param options - 省略字段由 package 补齐;显式 files 数组完整替换对应字段的默认数组。\n * @returns 固定 `function-metrics` identity、完整冻结 options、preflight 与 execution。\n * @throws {TypeError} input 含未知字段、空 area、非法 finding policy、非法 limit 或空 executable 时抛出。\n */\nexport function functionMetrics(\n options: FunctionMetricsOptions = {}\n): TypedCheckWithOptions<\n \"function-metrics\",\n ResolvedFunctionMetricsOptions,\n typeof parseFunctionMetricsData\n> {\n const resolvedOptions = resolveFunctionMetricsOptions(options);\n if (resolvedOptions === undefined) {\n throw new TypeError(\n \"functionMetrics options must use the documented closed policy: a non-empty area map, recognized finding policies, positive safe-integer limits, and a non-empty scanner executable\"\n );\n }\n return defineCheck({\n ...FUNCTION_METRICS_CHECK_DEFINITION,\n execution: executeFunctionMetrics,\n parseData: parseFunctionMetricsData,\n preflight: (preparedOptions) =>\n validResolvedFunctionMetricsOptions(preparedOptions)\n ? { status: \"success\", preparedOptions }\n : {\n status: \"failure\",\n action: \"block\",\n reason: { code: \"invalid-options\" },\n messages: [\n {\n code: \"invalid-options\",\n level: \"error\",\n message:\n \"functionMetrics options are invalid; recreate the Check with functionMetrics(options) or restore its complete resolved options.\"\n }\n ]\n },\n options: resolvedOptions\n });\n}\n"]}
@@ -0,0 +1,178 @@
1
+ import { collectProjectFileSets, requireProjectFileSet } from "../project-files/collection.mjs";
2
+ import { partitionProjectFilesByEligibility } from "../project-files/input-eligibility.mjs";
3
+ import { settleFindings } from "../code-quality-findings/policy.mjs";
4
+ import { analyzeFunctionMetrics } from "./analysis.mjs";
5
+ import { measureFunctionMetrics } from "./measurement.mjs";
6
+ import { validResolvedFunctionMetricsOptions } from "./options-validation.mjs";
7
+ import { buildFunctionInputRejectedCandidates, buildFunctionRecordCandidates } from "./records.mjs";
8
+ import { isLizardTarget } from "./target-files.mjs";
9
+ /** Default Check callback;一次扫描完整 area exact-input union。 */
10
+ export async function executeFunctionMetrics(context) {
11
+ if (!validResolvedFunctionMetricsOptions(context.options))
12
+ return unavailable("invalid-options");
13
+ if (context.signal.aborted)
14
+ return unavailable("cancelled");
15
+ let prepared;
16
+ try {
17
+ prepared = prepareFunctionInputs(context.project.root, context.options.codeAreas);
18
+ }
19
+ catch {
20
+ return unavailable("source-unavailable");
21
+ }
22
+ if (context.signal.aborted)
23
+ return unavailable("cancelled");
24
+ return executePreparedFunctionMetrics(context, prepared);
25
+ }
26
+ async function executePreparedFunctionMetrics(context, prepared) {
27
+ if (prepared.selectedPathCount === 0) {
28
+ return Object.freeze({ status: "not-applicable", reason: { code: "no-eligible-input" } });
29
+ }
30
+ reportInputRejections(context, prepared.rejectedCandidates);
31
+ if (prepared.exactInput.approvedExactPaths.length === 0) {
32
+ return settleFunctionFindings([], prepared.rejectedCandidates);
33
+ }
34
+ const measurement = await measureFunctionMetrics({
35
+ dependency: context.options.scanner,
36
+ input: prepared.exactInput,
37
+ signal: context.signal
38
+ });
39
+ if (measurement.kind !== "complete") {
40
+ return appendInputRejectedMessage(directMeasurementFailure(measurement), prepared.rejectedCandidates.length);
41
+ }
42
+ const analysis = analyzeFunctionMetrics(measurement.metrics);
43
+ if (analysis === undefined) {
44
+ return appendInputRejectedMessage(unavailable("external-result-invalid"), prepared.rejectedCandidates.length);
45
+ }
46
+ const candidates = buildFunctionRecordCandidates(analysis, prepared.exactInput.areas);
47
+ if (candidates === undefined) {
48
+ return appendInputRejectedMessage(unavailable("external-result-invalid"), prepared.rejectedCandidates.length);
49
+ }
50
+ for (const candidate of candidates) {
51
+ context.records.report({ id: candidate.id }, candidate.data);
52
+ }
53
+ return settleFunctionFindings(candidates, prepared.rejectedCandidates);
54
+ }
55
+ function prepareFunctionInputs(rootDir, codeAreas) {
56
+ const collected = collectAreaInputs(rootDir, codeAreas);
57
+ return Object.freeze({
58
+ exactInput: Object.freeze({
59
+ approvedExactPaths: Object.freeze(uniqueSorted(collected.areas.flatMap((area) => area.approvedExactPaths))),
60
+ areas: collected.areas,
61
+ rootDir
62
+ }),
63
+ rejectedCandidates: buildFunctionInputRejectedCandidates(new Map([...collected.rejectedCodeAreasByPath].map(([path, matchingAreas]) => [
64
+ path,
65
+ Object.freeze(matchingAreas)
66
+ ]))),
67
+ selectedPathCount: collected.selectedPaths.size
68
+ });
69
+ }
70
+ function collectAreaInputs(rootDir, codeAreas) {
71
+ const areas = [];
72
+ const rejectedCodeAreasByPath = new Map();
73
+ const selectedPaths = new Set();
74
+ const orderedPolicies = Object.entries(codeAreas).sort(([left], [right]) => compareText(left, right));
75
+ const filesByArea = collectProjectFileSets(rootDir, Object.fromEntries(orderedPolicies.map(([areaId, policy]) => [areaId, policy.files])));
76
+ for (const [codeArea, policy] of orderedPolicies) {
77
+ const selectedForArea = requireProjectFileSet(filesByArea, codeArea);
78
+ for (const path of selectedForArea)
79
+ selectedPaths.add(path);
80
+ const partition = partitionProjectFilesByEligibility(selectedForArea, isLizardTarget);
81
+ for (const path of partition.rejectedPaths) {
82
+ const matchingAreas = rejectedCodeAreasByPath.get(path) ?? [];
83
+ matchingAreas.push(codeArea);
84
+ rejectedCodeAreasByPath.set(path, matchingAreas);
85
+ }
86
+ if (partition.acceptedPaths.length === 0)
87
+ continue;
88
+ areas.push(Object.freeze({
89
+ approvedExactPaths: partition.acceptedPaths,
90
+ codeArea,
91
+ findingPolicy: policy.findingPolicy,
92
+ limits: policy.limits
93
+ }));
94
+ }
95
+ return Object.freeze({
96
+ areas: Object.freeze(areas),
97
+ rejectedCodeAreasByPath,
98
+ selectedPaths
99
+ });
100
+ }
101
+ function reportInputRejections(context, candidates) {
102
+ for (const candidate of candidates) {
103
+ context.records.report({ id: candidate.id }, candidate.data);
104
+ }
105
+ }
106
+ function settleFunctionFindings(metricCandidates, rejectedCandidates) {
107
+ const settlement = settleFindings([
108
+ ...metricCandidates.map((candidate) => ({
109
+ actionable: true,
110
+ blocking: candidate.data.blocking
111
+ })),
112
+ ...rejectedCandidates.map(() => ({ actionable: false, blocking: false }))
113
+ ]);
114
+ return appendInputRejectedMessage(settlement, rejectedCandidates.length);
115
+ }
116
+ function appendInputRejectedMessage(result, rejectedInputCount) {
117
+ if (rejectedInputCount === 0)
118
+ return result;
119
+ const message = Object.freeze({
120
+ code: "input-rejected",
121
+ level: "warning",
122
+ message: `${rejectedInputCount} selected functionMetrics input file(s) were rejected because their file type is unsupported; inspect this Check's Records and narrow files.include/exclude.`
123
+ });
124
+ return Object.freeze({
125
+ ...result,
126
+ messages: Object.freeze([...(result.messages ?? []), message])
127
+ });
128
+ }
129
+ function directMeasurementFailure(measurement) {
130
+ switch (measurement.kind) {
131
+ case "cancelled":
132
+ return unavailable("cancelled");
133
+ case "execution-failed":
134
+ return unavailable("external-execution-failed");
135
+ case "invalid-result":
136
+ return unavailable("external-result-invalid");
137
+ case "unavailable":
138
+ return unavailable("external-dependency-unavailable");
139
+ }
140
+ const exhaustiveMeasurement = measurement;
141
+ return exhaustiveMeasurement;
142
+ }
143
+ function unavailable(code) {
144
+ return Object.freeze({
145
+ status: "unavailable",
146
+ reason: { code },
147
+ messages: Object.freeze([
148
+ Object.freeze({ code, level: "error", message: unavailableMessage(code) })
149
+ ])
150
+ });
151
+ }
152
+ function unavailableMessage(code) {
153
+ switch (code) {
154
+ case "invalid-options":
155
+ return "functionMetrics options are invalid; recreate the Check with functionMetrics(options) or restore its complete resolved options.";
156
+ case "cancelled":
157
+ return "Function metrics was cancelled before it could form a complete result; inspect the caller's cancellation reason and retry if appropriate.";
158
+ case "source-unavailable":
159
+ return "Function metrics could not collect its configured project files; check the project root, file permissions, and selected file source.";
160
+ case "external-dependency-unavailable":
161
+ return "The configured Lizard command is unavailable or incompatible; install Lizard 1.23.0 or configure a compatible executable.";
162
+ case "external-execution-failed":
163
+ return "Lizard did not complete successfully; run the configured command directly and inspect its environment.";
164
+ case "external-result-invalid":
165
+ return "Lizard output could not form a trusted complete result; check the executable version and CSV compatibility.";
166
+ }
167
+ }
168
+ function uniqueSorted(values) {
169
+ return [...new Set(values)].sort(compareText);
170
+ }
171
+ function compareText(left, right) {
172
+ if (left < right)
173
+ return -1;
174
+ if (left > right)
175
+ return 1;
176
+ return 0;
177
+ }
178
+ //# sourceMappingURL=execution.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.mjs","sourceRoot":"","sources":["../../../../src/package-checks/function-metrics/execution.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC/F,OAAO,EAAE,kCAAkC,EAAE,MAAM,uCAAuC,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAkC,MAAM,kBAAkB,CAAC;AAS1F,OAAO,EAAE,mCAAmC,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,oCAAoC,EACpC,6BAA6B,EAG9B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAYnD,4DAA4D;AAC5D,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAA8D;IAE9D,IAAI,CAAC,mCAAmC,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,WAAW,CAAC,iBAAiB,CAAC,CAAC;IACjG,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,WAAW,CAAC,WAAW,CAAC,CAAC;IAE5D,IAAI,QAAgC,CAAC;IACrC,IAAI,CAAC;QACH,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,WAAW,CAAC,WAAW,CAAC,CAAC;IAC5D,OAAO,8BAA8B,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,8BAA8B,CAC3C,OAA8D,EAC9D,QAAgC;IAEhC,IAAI,QAAQ,CAAC,iBAAiB,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC5D,IAAI,QAAQ,CAAC,UAAU,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,sBAAsB,CAAC,EAAE,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAAC;QAC/C,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO;QACnC,KAAK,EAAE,QAAQ,CAAC,UAAU;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IACH,IAAI,WAAW,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACpC,OAAO,0BAA0B,CAC/B,wBAAwB,CAAC,WAAW,CAAC,EACrC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CACnC,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,0BAA0B,CAC/B,WAAW,CAAC,yBAAyB,CAAC,EACtC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CACnC,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,6BAA6B,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACtF,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,0BAA0B,CAC/B,WAAW,CAAC,yBAAyB,CAAC,EACtC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CACnC,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,sBAAsB,CAAC,UAAU,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AACzE,CAAC;AAQD,SAAS,qBAAqB,CAC5B,OAAe,EACf,SAAsD;IAEtD,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;YACxB,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAC/B,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CACzE;YACD,KAAK,EAAE,SAAS,CAAC,KAAK;YACtB,OAAO;SACR,CAAC;QACF,kBAAkB,EAAE,oCAAoC,CACtD,IAAI,GAAG,CACL,CAAC,GAAG,SAAS,CAAC,uBAAuB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC;YACpE,IAAI;YACJ,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;SAC7B,CAAC,CACH,CACF;QACD,iBAAiB,EAAE,SAAS,CAAC,aAAa,CAAC,IAAI;KAChD,CAAC,CAAC;AACL,CAAC;AAQD,SAAS,iBAAiB,CACxB,OAAe,EACf,SAA2E;IAE3E,MAAM,KAAK,GAA+B,EAAE,CAAC;IAC7C,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5D,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CACzE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CACzB,CAAC;IACF,MAAM,WAAW,GAAG,sBAAsB,CACxC,OAAO,EACP,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CACtF,CAAC;IACF,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QACjD,MAAM,eAAe,GAAG,qBAAqB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACrE,KAAK,MAAM,IAAI,IAAI,eAAe;YAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,kCAAkC,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;QACtF,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;YAC3C,MAAM,aAAa,GAAG,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9D,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,uBAAuB,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,SAAS,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACnD,KAAK,CAAC,IAAI,CACR,MAAM,CAAC,MAAM,CAAC;YACZ,kBAAkB,EAAE,SAAS,CAAC,aAAa;YAC3C,QAAQ;YACR,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3B,uBAAuB;QACvB,aAAa;KACd,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAA8D,EAC9D,UAAqD;IAErD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAC7B,gBAAoD,EACpD,kBAA6D;IAE7D,MAAM,UAAU,GAAG,cAAc,CAAC;QAChC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACtC,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ;SAClC,CAAC,CAAC;QACH,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;KAC1E,CAAC,CAAC;IACH,OAAO,0BAA0B,CAAC,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,0BAA0B,CACjC,MAA6C,EAC7C,kBAA0B;IAE1B,IAAI,kBAAkB,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAC5C,MAAM,OAAO,GAAiB,MAAM,CAAC,MAAM,CAAC;QAC1C,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,GAAG,kBAAkB,8JAA8J;KAC7L,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,MAAM;QACT,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;KAC/D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB,CAC/B,WAAqE;IAErE,QAAQ,WAAW,CAAC,IAAI,EAAE,CAAC;QACzB,KAAK,WAAW;YACd,OAAO,WAAW,CAAC,WAAW,CAAC,CAAC;QAClC,KAAK,kBAAkB;YACrB,OAAO,WAAW,CAAC,2BAA2B,CAAC,CAAC;QAClD,KAAK,gBAAgB;YACnB,OAAO,WAAW,CAAC,yBAAyB,CAAC,CAAC;QAChD,KAAK,aAAa;YAChB,OAAO,WAAW,CAAC,iCAAiC,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,qBAAqB,GAAU,WAAW,CAAC;IACjD,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAED,SAAS,WAAW,CAClB,IAA0C;IAE1C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,EAAE,IAAI,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;YACtB,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAgB,EAAE,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;SACpF,CAAC;KACH,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,IAA0C;IACpE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,iBAAiB;YACpB,OAAO,iIAAiI,CAAC;QAC3I,KAAK,WAAW;YACd,OAAO,2IAA2I,CAAC;QACrJ,KAAK,oBAAoB;YACvB,OAAO,sIAAsI,CAAC;QAChJ,KAAK,iCAAiC;YACpC,OAAO,2HAA2H,CAAC;QACrI,KAAK,2BAA2B;YAC9B,OAAO,wGAAwG,CAAC;QAClH,KAAK,yBAAyB;YAC5B,OAAO,6GAA6G,CAAC;IACzH,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,MAAyB;IAC7C,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,KAAa;IAC9C,IAAI,IAAI,GAAG,KAAK;QAAE,OAAO,CAAC,CAAC,CAAC;IAC5B,IAAI,IAAI,GAAG,KAAK;QAAE,OAAO,CAAC,CAAC;IAC3B,OAAO,CAAC,CAAC;AACX,CAAC","sourcesContent":["import type { CheckExecutionContext, CheckMessage, CheckResult } from \"../../check/check.ts\";\nimport { collectProjectFileSets, requireProjectFileSet } from \"../project-files/collection.ts\";\nimport { partitionProjectFilesByEligibility } from \"../project-files/input-eligibility.ts\";\nimport { settleFindings } from \"../code-quality-findings/policy.ts\";\nimport { analyzeFunctionMetrics } from \"./analysis.ts\";\nimport { measureFunctionMetrics, type FunctionMeasurementResult } from \"./measurement.ts\";\nimport type {\n FunctionMetricsAreaInput,\n FunctionMetricsExactInputSet\n} from \"./measurement-model.ts\";\nimport type {\n ResolvedFunctionMetricsCodeAreaOptions,\n ResolvedFunctionMetricsOptions\n} from \"./options.ts\";\nimport { validResolvedFunctionMetricsOptions } from \"./options-validation.ts\";\nimport {\n buildFunctionInputRejectedCandidates,\n buildFunctionRecordCandidates,\n type FunctionInputRejectedCandidate,\n type FunctionRecordCandidate\n} from \"./records.ts\";\nimport { isLizardTarget } from \"./target-files.ts\";\nimport type { FunctionMetricsFinalData } from \"./final-data.ts\";\n\n/** `function-metrics` whole-Check unavailable outcome 的稳定 reason code。 */\nexport type FunctionMetricsUnavailableReasonCode =\n | \"cancelled\"\n | \"external-dependency-unavailable\"\n | \"external-execution-failed\"\n | \"external-result-invalid\"\n | \"invalid-options\"\n | \"source-unavailable\";\n\n/** Default Check callback;一次扫描完整 area exact-input union。 */\nexport async function executeFunctionMetrics(\n context: CheckExecutionContext<ResolvedFunctionMetricsOptions>\n): Promise<CheckResult<FunctionMetricsFinalData>> {\n if (!validResolvedFunctionMetricsOptions(context.options)) return unavailable(\"invalid-options\");\n if (context.signal.aborted) return unavailable(\"cancelled\");\n\n let prepared: PreparedFunctionInputs;\n try {\n prepared = prepareFunctionInputs(context.project.root, context.options.codeAreas);\n } catch {\n return unavailable(\"source-unavailable\");\n }\n if (context.signal.aborted) return unavailable(\"cancelled\");\n return executePreparedFunctionMetrics(context, prepared);\n}\n\nasync function executePreparedFunctionMetrics(\n context: CheckExecutionContext<ResolvedFunctionMetricsOptions>,\n prepared: PreparedFunctionInputs\n): Promise<CheckResult<FunctionMetricsFinalData>> {\n if (prepared.selectedPathCount === 0) {\n return Object.freeze({ status: \"not-applicable\", reason: { code: \"no-eligible-input\" } });\n }\n reportInputRejections(context, prepared.rejectedCandidates);\n if (prepared.exactInput.approvedExactPaths.length === 0) {\n return settleFunctionFindings([], prepared.rejectedCandidates);\n }\n const measurement = await measureFunctionMetrics({\n dependency: context.options.scanner,\n input: prepared.exactInput,\n signal: context.signal\n });\n if (measurement.kind !== \"complete\") {\n return appendInputRejectedMessage(\n directMeasurementFailure(measurement),\n prepared.rejectedCandidates.length\n );\n }\n const analysis = analyzeFunctionMetrics(measurement.metrics);\n if (analysis === undefined) {\n return appendInputRejectedMessage(\n unavailable(\"external-result-invalid\"),\n prepared.rejectedCandidates.length\n );\n }\n const candidates = buildFunctionRecordCandidates(analysis, prepared.exactInput.areas);\n if (candidates === undefined) {\n return appendInputRejectedMessage(\n unavailable(\"external-result-invalid\"),\n prepared.rejectedCandidates.length\n );\n }\n for (const candidate of candidates) {\n context.records.report({ id: candidate.id }, candidate.data);\n }\n return settleFunctionFindings(candidates, prepared.rejectedCandidates);\n}\n\ninterface PreparedFunctionInputs {\n readonly exactInput: FunctionMetricsExactInputSet;\n readonly rejectedCandidates: readonly FunctionInputRejectedCandidate[];\n readonly selectedPathCount: number;\n}\n\nfunction prepareFunctionInputs(\n rootDir: string,\n codeAreas: ResolvedFunctionMetricsOptions[\"codeAreas\"]\n): PreparedFunctionInputs {\n const collected = collectAreaInputs(rootDir, codeAreas);\n return Object.freeze({\n exactInput: Object.freeze({\n approvedExactPaths: Object.freeze(\n uniqueSorted(collected.areas.flatMap((area) => area.approvedExactPaths))\n ),\n areas: collected.areas,\n rootDir\n }),\n rejectedCandidates: buildFunctionInputRejectedCandidates(\n new Map(\n [...collected.rejectedCodeAreasByPath].map(([path, matchingAreas]) => [\n path,\n Object.freeze(matchingAreas)\n ])\n )\n ),\n selectedPathCount: collected.selectedPaths.size\n });\n}\n\ninterface CollectedFunctionAreaInputs {\n readonly areas: readonly FunctionMetricsAreaInput[];\n readonly rejectedCodeAreasByPath: ReadonlyMap<string, readonly string[]>;\n readonly selectedPaths: ReadonlySet<string>;\n}\n\nfunction collectAreaInputs(\n rootDir: string,\n codeAreas: Readonly<Record<string, ResolvedFunctionMetricsCodeAreaOptions>>\n): CollectedFunctionAreaInputs {\n const areas: FunctionMetricsAreaInput[] = [];\n const rejectedCodeAreasByPath = new Map<string, string[]>();\n const selectedPaths = new Set<string>();\n const orderedPolicies = Object.entries(codeAreas).sort(([left], [right]) =>\n compareText(left, right)\n );\n const filesByArea = collectProjectFileSets(\n rootDir,\n Object.fromEntries(orderedPolicies.map(([areaId, policy]) => [areaId, policy.files]))\n );\n for (const [codeArea, policy] of orderedPolicies) {\n const selectedForArea = requireProjectFileSet(filesByArea, codeArea);\n for (const path of selectedForArea) selectedPaths.add(path);\n const partition = partitionProjectFilesByEligibility(selectedForArea, isLizardTarget);\n for (const path of partition.rejectedPaths) {\n const matchingAreas = rejectedCodeAreasByPath.get(path) ?? [];\n matchingAreas.push(codeArea);\n rejectedCodeAreasByPath.set(path, matchingAreas);\n }\n if (partition.acceptedPaths.length === 0) continue;\n areas.push(\n Object.freeze({\n approvedExactPaths: partition.acceptedPaths,\n codeArea,\n findingPolicy: policy.findingPolicy,\n limits: policy.limits\n })\n );\n }\n return Object.freeze({\n areas: Object.freeze(areas),\n rejectedCodeAreasByPath,\n selectedPaths\n });\n}\n\nfunction reportInputRejections(\n context: CheckExecutionContext<ResolvedFunctionMetricsOptions>,\n candidates: readonly FunctionInputRejectedCandidate[]\n): void {\n for (const candidate of candidates) {\n context.records.report({ id: candidate.id }, candidate.data);\n }\n}\n\nfunction settleFunctionFindings(\n metricCandidates: readonly FunctionRecordCandidate[],\n rejectedCandidates: readonly FunctionInputRejectedCandidate[]\n): CheckResult<FunctionMetricsFinalData> {\n const settlement = settleFindings([\n ...metricCandidates.map((candidate) => ({\n actionable: true,\n blocking: candidate.data.blocking\n })),\n ...rejectedCandidates.map(() => ({ actionable: false, blocking: false }))\n ]);\n return appendInputRejectedMessage(settlement, rejectedCandidates.length);\n}\n\nfunction appendInputRejectedMessage(\n result: CheckResult<FunctionMetricsFinalData>,\n rejectedInputCount: number\n): CheckResult<FunctionMetricsFinalData> {\n if (rejectedInputCount === 0) return result;\n const message: CheckMessage = Object.freeze({\n code: \"input-rejected\",\n level: \"warning\",\n message: `${rejectedInputCount} selected functionMetrics input file(s) were rejected because their file type is unsupported; 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 directMeasurementFailure(\n measurement: Exclude<FunctionMeasurementResult, { kind: \"complete\" }>\n): CheckResult<FunctionMetricsFinalData> {\n switch (measurement.kind) {\n case \"cancelled\":\n return unavailable(\"cancelled\");\n case \"execution-failed\":\n return unavailable(\"external-execution-failed\");\n case \"invalid-result\":\n return unavailable(\"external-result-invalid\");\n case \"unavailable\":\n return unavailable(\"external-dependency-unavailable\");\n }\n const exhaustiveMeasurement: never = measurement;\n return exhaustiveMeasurement;\n}\n\nfunction unavailable(\n code: FunctionMetricsUnavailableReasonCode\n): CheckResult<FunctionMetricsFinalData> {\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: FunctionMetricsUnavailableReasonCode): string {\n switch (code) {\n case \"invalid-options\":\n return \"functionMetrics options are invalid; recreate the Check with functionMetrics(options) or restore its complete resolved options.\";\n case \"cancelled\":\n return \"Function metrics was cancelled before it could form a complete result; inspect the caller's cancellation reason and retry if appropriate.\";\n case \"source-unavailable\":\n return \"Function metrics could not collect its configured project files; check the project root, file permissions, and selected file source.\";\n case \"external-dependency-unavailable\":\n return \"The configured Lizard command is unavailable or incompatible; install Lizard 1.23.0 or configure a compatible executable.\";\n case \"external-execution-failed\":\n return \"Lizard did not complete successfully; run the configured command directly and inspect its environment.\";\n case \"external-result-invalid\":\n return \"Lizard output could not form a trusted complete result; check the executable version and CSV compatibility.\";\n }\n}\n\nfunction uniqueSorted(values: readonly string[]): string[] {\n return [...new Set(values)].sort(compareText);\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import { parseFindingSummaryData } from "../final-data-parsing.mjs";
2
+ /** 验证并脱离一份 `function-metrics` canonical final-data object。 */
3
+ export function parseFunctionMetricsData(data) {
4
+ return parseFindingSummaryData(data, "functionMetrics");
5
+ }
6
+ //# sourceMappingURL=final-data.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"final-data.mjs","sourceRoot":"","sources":["../../../../src/package-checks/function-metrics/final-data.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAKnE,8DAA8D;AAC9D,MAAM,UAAU,wBAAwB,CAAC,IAAa;IACpD,OAAO,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AAC1D,CAAC","sourcesContent":["import type { FindingSummary } from \"../code-quality-findings/policy.ts\";\nimport { parseFindingSummaryData } from \"../final-data-parsing.ts\";\n\n/** `function-metrics` 在 passed/failed outcome 中发布的主数据。 */\nexport type FunctionMetricsFinalData = FindingSummary;\n\n/** 验证并脱离一份 `function-metrics` canonical final-data object。 */\nexport function parseFunctionMetricsData(data: unknown): FunctionMetricsFinalData {\n return parseFindingSummaryData(data, \"functionMetrics\");\n}\n"]}
@@ -0,0 +1,64 @@
1
+ import { errorMessage } from "../../host-environment/error-message.mjs";
2
+ import { runProcess } from "../../host-environment/process/command.mjs";
3
+ export async function checkLizard(rootDir, dependency) {
4
+ try {
5
+ const result = await runProcess({
6
+ args: ["--version"],
7
+ command: dependency.executable,
8
+ cwd: rootDir
9
+ });
10
+ return availabilityFromVersionResult(result);
11
+ }
12
+ catch (error) {
13
+ return unavailableLizard({
14
+ error: `lizard version error: ${errorMessage(error)}`,
15
+ reason: "execution-error"
16
+ });
17
+ }
18
+ }
19
+ function availabilityFromVersionResult(result) {
20
+ if (result.signal !== null) {
21
+ const output = commandOutput(result);
22
+ return unavailableLizard({
23
+ error: `lizard --version failed, signal ${result.signal}${output ? `: ${output}` : ""}`,
24
+ reason: "execution-error"
25
+ });
26
+ }
27
+ if (result.error)
28
+ return processErrorAvailability(result.error);
29
+ const output = commandOutput(result);
30
+ if (result.status !== 0) {
31
+ return unavailableLizard({
32
+ error: `lizard --version failed, ${processTermination(result)}${output ? `: ${output}` : ""}`,
33
+ reason: "execution-error"
34
+ });
35
+ }
36
+ if (output === "") {
37
+ return unavailableLizard({
38
+ error: "lizard --version returned empty output",
39
+ reason: "contract-error"
40
+ });
41
+ }
42
+ return Object.freeze({ available: true, version: output });
43
+ }
44
+ function processErrorAvailability(error) {
45
+ const isMissingTool = Object.hasOwn(error, "code") && Reflect.get(error, "code") === "ENOENT";
46
+ return unavailableLizard({
47
+ error: isMissingTool
48
+ ? `lizard command unavailable: ${error.message}`
49
+ : `lizard version error: ${error.message}`,
50
+ reason: isMissingTool ? "tool-unavailable" : "execution-error"
51
+ });
52
+ }
53
+ function unavailableLizard({ error, reason }) {
54
+ return Object.freeze({ available: false, error, reason });
55
+ }
56
+ function commandOutput(result) {
57
+ return (result.stdout || "").trim() || (result.stderr || "").trim();
58
+ }
59
+ function processTermination(result) {
60
+ return typeof result.status === "number"
61
+ ? `exit ${result.status}`
62
+ : `signal ${result.signal || "unknown"}`;
63
+ }
64
+ //# sourceMappingURL=availability.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"availability.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/function-metrics/lizard/availability.ts"],"names":[],"mappings":"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","sourcesContent":["import { errorMessage } from \"../../host-environment/error-message.ts\";\nimport { runProcess } from \"../../host-environment/process/command.ts\";\nimport type { ResolvedFunctionMetricsScannerOptions } from \"../options.ts\";\n\ntype LizardAvailability = Readonly<\n | {\n readonly available: true;\n readonly version: string;\n }\n | {\n readonly available: false;\n readonly error: string;\n readonly reason: \"contract-error\" | \"execution-error\" | \"tool-unavailable\";\n }\n>;\n\ninterface UnavailableLizardInput {\n readonly error: string;\n readonly reason: Extract<LizardAvailability, { available: false }>[\"reason\"];\n}\n\ntype ToolCommandResult = Awaited<ReturnType<typeof runProcess>>;\n\nexport async function checkLizard(\n rootDir: string,\n dependency: ResolvedFunctionMetricsScannerOptions\n): Promise<LizardAvailability> {\n try {\n const result = await runProcess({\n args: [\"--version\"],\n command: dependency.executable,\n cwd: rootDir\n });\n return availabilityFromVersionResult(result);\n } catch (error: unknown) {\n return unavailableLizard({\n error: `lizard version error: ${errorMessage(error)}`,\n reason: \"execution-error\"\n });\n }\n}\n\nfunction availabilityFromVersionResult(result: ToolCommandResult): LizardAvailability {\n if (result.signal !== null) {\n const output = commandOutput(result);\n return unavailableLizard({\n error: `lizard --version failed, signal ${result.signal}${output ? `: ${output}` : \"\"}`,\n reason: \"execution-error\"\n });\n }\n if (result.error) return processErrorAvailability(result.error);\n const output = commandOutput(result);\n if (result.status !== 0) {\n return unavailableLizard({\n error: `lizard --version failed, ${processTermination(result)}${output ? `: ${output}` : \"\"}`,\n reason: \"execution-error\"\n });\n }\n if (output === \"\") {\n return unavailableLizard({\n error: \"lizard --version returned empty output\",\n reason: \"contract-error\"\n });\n }\n return Object.freeze({ available: true, version: output });\n}\n\nfunction processErrorAvailability(error: Error): LizardAvailability {\n const isMissingTool = Object.hasOwn(error, \"code\") && Reflect.get(error, \"code\") === \"ENOENT\";\n return unavailableLizard({\n error: isMissingTool\n ? `lizard command unavailable: ${error.message}`\n : `lizard version error: ${error.message}`,\n reason: isMissingTool ? \"tool-unavailable\" : \"execution-error\"\n });\n}\n\nfunction unavailableLizard({ error, reason }: UnavailableLizardInput): LizardAvailability {\n return Object.freeze({ available: false, error, reason });\n}\n\nfunction commandOutput(result: ToolCommandResult): string {\n return (result.stdout || \"\").trim() || (result.stderr || \"\").trim();\n}\n\nfunction processTermination(result: ToolCommandResult): string {\n return typeof result.status === \"number\"\n ? `exit ${result.status}`\n : `signal ${result.signal || \"unknown\"}`;\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import { parse } from "csv-parse/sync";
2
+ export function parseCsvRows(csv) {
3
+ const records = parse(csv, {
4
+ bom: true,
5
+ relax_column_count: true,
6
+ skip_empty_lines: true,
7
+ trim: true
8
+ });
9
+ if (!Array.isArray(records) || !records.every(isStringRow)) {
10
+ throw new Error("CSV parser returned non-string rows");
11
+ }
12
+ return records;
13
+ }
14
+ function isStringRow(value) {
15
+ return Array.isArray(value) && value.every((item) => typeof item === "string");
16
+ }
17
+ //# sourceMappingURL=csv.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/function-metrics/lizard/csv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,OAAO,GAAY,KAAK,CAAC,GAAG,EAAE;QAClC,GAAG,EAAE,IAAI;QACT,kBAAkB,EAAE,IAAI;QACxB,gBAAgB,EAAE,IAAI;QACtB,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;AACjF,CAAC","sourcesContent":["import { parse } from \"csv-parse/sync\";\n\nexport function parseCsvRows(csv: string): string[][] {\n const records: unknown = parse(csv, {\n bom: true,\n relax_column_count: true,\n skip_empty_lines: true,\n trim: true\n });\n\n if (!Array.isArray(records) || !records.every(isStringRow)) {\n throw new Error(\"CSV parser returned non-string rows\");\n }\n\n return records;\n}\n\nfunction isStringRow(value: unknown): value is string[] {\n return Array.isArray(value) && value.every((item) => typeof item === \"string\");\n}\n"]}
@@ -0,0 +1,138 @@
1
+ import { errorMessage } from "../../host-environment/error-message.mjs";
2
+ import { parseCsvRows } from "./csv.mjs";
3
+ import { normalizeScannerReportedPath } from "../../project-files/reported-path.mjs";
4
+ const LIZARD_COLUMNS = {
5
+ nloc: 0,
6
+ ccn: 1,
7
+ parameterCount: 3,
8
+ filePath: 6,
9
+ functionName: 7,
10
+ startLine: 9,
11
+ endLine: 10
12
+ };
13
+ /**
14
+ * 将 Lizard CSV 输出解析为 FunctionMetric 数组。
15
+ *
16
+ * Lizard 1.23 CSV 列(--csv):
17
+ * NLOC,CCN,token count,parameter count,length,location,file path,function name,long name,start line,end line
18
+ */
19
+ export function parseLizardCSV(csv, cwd) {
20
+ try {
21
+ const measurements = [];
22
+ for (const [index, row] of lizardDataRows(parseCsvRows(csv)).entries()) {
23
+ const measurement = functionMetricFromLizardRow(row, cwd);
24
+ if (!measurement) {
25
+ throw new Error(`invalid Lizard 1.23 CSV row ${index + 1}`);
26
+ }
27
+ measurements.push(measurement);
28
+ }
29
+ measurements.sort((a, b) => compareFunctionMetrics(a.payload, b.payload));
30
+ return { ok: true, measurements };
31
+ }
32
+ catch (error) {
33
+ return {
34
+ ok: false,
35
+ error: `Failed to parse lizard CSV: ${errorMessage(error)}`,
36
+ reason: "invalid-result"
37
+ };
38
+ }
39
+ }
40
+ function lizardDataRows(rows) {
41
+ const header = rows[0] ?? [];
42
+ return isLizard123Header(header) ? rows.slice(1) : rows;
43
+ }
44
+ function functionMetricFromLizardRow(parts, cwd) {
45
+ if (parts.length < 11) {
46
+ return null;
47
+ }
48
+ const values = parseLizardMetricValues(parts);
49
+ if (!values) {
50
+ return null;
51
+ }
52
+ const filePath = (parts[LIZARD_COLUMNS.filePath] ?? "").trim();
53
+ if (filePath.length === 0 || values.endLine < values.startLine) {
54
+ return null;
55
+ }
56
+ const sourcePath = normalizeScannerReportedPath(filePath, cwd);
57
+ return {
58
+ sourcePaths: [sourcePath],
59
+ payload: {
60
+ name: parts[LIZARD_COLUMNS.functionName] || "unknown",
61
+ file: sourcePath,
62
+ startLine: values.startLine,
63
+ endLine: values.endLine,
64
+ lines: values.nloc,
65
+ parameterCount: values.parameterCount,
66
+ cyclomaticComplexity: {
67
+ value: values.ccn,
68
+ source: "lizard"
69
+ }
70
+ }
71
+ };
72
+ }
73
+ function parseLizardMetricValues(parts) {
74
+ const ccnText = parts[LIZARD_COLUMNS.ccn].trim();
75
+ const ccn = ccnText === "" ? null : parseInteger(ccnText, 0);
76
+ const endLine = parseInteger(parts[LIZARD_COLUMNS.endLine], 1);
77
+ const nloc = parseInteger(parts[LIZARD_COLUMNS.nloc], 0);
78
+ const parameterCount = parseInteger(parts[LIZARD_COLUMNS.parameterCount], 0);
79
+ const startLine = parseInteger(parts[LIZARD_COLUMNS.startLine], 1);
80
+ if ((ccnText !== "" && ccn === null) ||
81
+ endLine === null ||
82
+ nloc === null ||
83
+ parameterCount === null ||
84
+ startLine === null) {
85
+ return null;
86
+ }
87
+ return {
88
+ ccn,
89
+ endLine,
90
+ nloc,
91
+ parameterCount,
92
+ startLine
93
+ };
94
+ }
95
+ function compareFunctionMetrics(a, b) {
96
+ for (const comparison of functionMetricComparisons(a, b)) {
97
+ if (comparison !== 0)
98
+ return comparison;
99
+ }
100
+ return 0;
101
+ }
102
+ function functionMetricComparisons(a, b) {
103
+ return [
104
+ compareText(a.file, b.file),
105
+ a.startLine - b.startLine,
106
+ a.endLine - b.endLine,
107
+ compareText(a.name, b.name),
108
+ a.lines - b.lines,
109
+ (a.cyclomaticComplexity.value ?? -1) - (b.cyclomaticComplexity.value ?? -1),
110
+ a.parameterCount - b.parameterCount
111
+ ];
112
+ }
113
+ function compareText(left, right) {
114
+ if (left < right)
115
+ return -1;
116
+ if (left > right)
117
+ return 1;
118
+ return 0;
119
+ }
120
+ function parseInteger(value, minimum) {
121
+ const text = (value ?? "").trim();
122
+ if (!/^\d+$/.test(text)) {
123
+ return null;
124
+ }
125
+ const parsed = Number(text);
126
+ return Number.isSafeInteger(parsed) && parsed >= minimum ? parsed : null;
127
+ }
128
+ function isLizard123Header(parts) {
129
+ return (parts.length >= 11 &&
130
+ parts[LIZARD_COLUMNS.nloc] === "NLOC" &&
131
+ parts[LIZARD_COLUMNS.ccn] === "CCN" &&
132
+ parts[LIZARD_COLUMNS.parameterCount] === "parameter count" &&
133
+ parts[LIZARD_COLUMNS.filePath] === "file path" &&
134
+ parts[LIZARD_COLUMNS.functionName] === "function name" &&
135
+ parts[LIZARD_COLUMNS.startLine] === "start line" &&
136
+ parts[LIZARD_COLUMNS.endLine] === "end line");
137
+ }
138
+ //# sourceMappingURL=parser.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/function-metrics/lizard/parser.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FunctionMetric } from \"../measurement-model.ts\";\nimport type { ExactInputMeasurement } from \"../../project-files/exact-input-measurement.ts\";\nimport { errorMessage } from \"../../host-environment/error-message.ts\";\nimport { parseCsvRows } from \"./csv.ts\";\nimport { normalizeScannerReportedPath } from \"../../project-files/reported-path.ts\";\n\nexport type LizardParseResult =\n | {\n readonly measurements: readonly ExactInputMeasurement<FunctionMetric>[];\n readonly ok: true;\n }\n | {\n readonly error: string;\n readonly ok: false;\n readonly reason: \"invalid-result\";\n };\n\nconst LIZARD_COLUMNS = {\n nloc: 0,\n ccn: 1,\n parameterCount: 3,\n filePath: 6,\n functionName: 7,\n startLine: 9,\n endLine: 10\n} as const;\n\n/**\n * 将 Lizard CSV 输出解析为 FunctionMetric 数组。\n *\n * Lizard 1.23 CSV 列(--csv):\n * NLOC,CCN,token count,parameter count,length,location,file path,function name,long name,start line,end line\n */\nexport function parseLizardCSV(csv: string, cwd: string): LizardParseResult {\n try {\n const measurements: ExactInputMeasurement<FunctionMetric>[] = [];\n\n for (const [index, row] of lizardDataRows(parseCsvRows(csv)).entries()) {\n const measurement = functionMetricFromLizardRow(row, cwd);\n if (!measurement) {\n throw new Error(`invalid Lizard 1.23 CSV row ${index + 1}`);\n }\n measurements.push(measurement);\n }\n\n measurements.sort((a, b) => compareFunctionMetrics(a.payload, b.payload));\n\n return { ok: true, measurements };\n } catch (error: unknown) {\n return {\n ok: false,\n error: `Failed to parse lizard CSV: ${errorMessage(error)}`,\n reason: \"invalid-result\"\n };\n }\n}\n\nfunction lizardDataRows(rows: string[][]): string[][] {\n const header = rows[0] ?? [];\n return isLizard123Header(header) ? rows.slice(1) : rows;\n}\n\nfunction functionMetricFromLizardRow(\n parts: string[],\n cwd: string\n): ExactInputMeasurement<FunctionMetric> | null {\n if (parts.length < 11) {\n return null;\n }\n\n const values = parseLizardMetricValues(parts);\n if (!values) {\n return null;\n }\n\n const filePath = (parts[LIZARD_COLUMNS.filePath] ?? \"\").trim();\n if (filePath.length === 0 || values.endLine < values.startLine) {\n return null;\n }\n const sourcePath = normalizeScannerReportedPath(filePath, cwd);\n\n return {\n sourcePaths: [sourcePath],\n payload: {\n name: parts[LIZARD_COLUMNS.functionName] || \"unknown\",\n file: sourcePath,\n startLine: values.startLine,\n endLine: values.endLine,\n lines: values.nloc,\n parameterCount: values.parameterCount,\n cyclomaticComplexity: {\n value: values.ccn,\n source: \"lizard\"\n }\n }\n };\n}\n\ninterface LizardMetricValues {\n readonly ccn: number | null;\n readonly endLine: number;\n readonly nloc: number;\n readonly parameterCount: number;\n readonly startLine: number;\n}\n\nfunction parseLizardMetricValues(parts: string[]): LizardMetricValues | null {\n const ccnText = parts[LIZARD_COLUMNS.ccn].trim();\n const ccn = ccnText === \"\" ? null : parseInteger(ccnText, 0);\n const endLine = parseInteger(parts[LIZARD_COLUMNS.endLine], 1);\n const nloc = parseInteger(parts[LIZARD_COLUMNS.nloc], 0);\n const parameterCount = parseInteger(parts[LIZARD_COLUMNS.parameterCount], 0);\n const startLine = parseInteger(parts[LIZARD_COLUMNS.startLine], 1);\n\n if (\n (ccnText !== \"\" && ccn === null) ||\n endLine === null ||\n nloc === null ||\n parameterCount === null ||\n startLine === null\n ) {\n return null;\n }\n\n return {\n ccn,\n endLine,\n nloc,\n parameterCount,\n startLine\n };\n}\n\nfunction compareFunctionMetrics(a: FunctionMetric, b: FunctionMetric): number {\n for (const comparison of functionMetricComparisons(a, b)) {\n if (comparison !== 0) return comparison;\n }\n return 0;\n}\n\nfunction functionMetricComparisons(a: FunctionMetric, b: FunctionMetric): readonly number[] {\n return [\n compareText(a.file, b.file),\n a.startLine - b.startLine,\n a.endLine - b.endLine,\n compareText(a.name, b.name),\n a.lines - b.lines,\n (a.cyclomaticComplexity.value ?? -1) - (b.cyclomaticComplexity.value ?? -1),\n a.parameterCount - b.parameterCount\n ];\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n\nfunction parseInteger(value: string | undefined, minimum: number): number | null {\n const text = (value ?? \"\").trim();\n if (!/^\\d+$/.test(text)) {\n return null;\n }\n const parsed = Number(text);\n return Number.isSafeInteger(parsed) && parsed >= minimum ? parsed : null;\n}\n\nfunction isLizard123Header(parts: string[]): boolean {\n return (\n parts.length >= 11 &&\n parts[LIZARD_COLUMNS.nloc] === \"NLOC\" &&\n parts[LIZARD_COLUMNS.ccn] === \"CCN\" &&\n parts[LIZARD_COLUMNS.parameterCount] === \"parameter count\" &&\n parts[LIZARD_COLUMNS.filePath] === \"file path\" &&\n parts[LIZARD_COLUMNS.functionName] === \"function name\" &&\n parts[LIZARD_COLUMNS.startLine] === \"start line\" &&\n parts[LIZARD_COLUMNS.endLine] === \"end line\"\n );\n}\n"]}
@@ -0,0 +1,35 @@
1
+ /** 对 approved exact paths 执行 adapter-owned Lizard CSV 协议。 */
2
+ import { errorMessage } from "../../host-environment/error-message.mjs";
3
+ import { runProcessSync } from "../../host-environment/process/command.mjs";
4
+ import { parseLizardCSV } from "./parser.mjs";
5
+ export function scanWithLizard({ files, cwd, dependency }) {
6
+ try {
7
+ if (files.length === 0)
8
+ return { ok: true, measurements: [] };
9
+ const child = runProcessSync({
10
+ args: [...files, "--csv"],
11
+ command: dependency.executable,
12
+ cwd,
13
+ timeout: 300_000
14
+ });
15
+ if (child.signal !== null) {
16
+ return failedLizardScan(`lizard signal ${child.signal}: ${(child.stderr || child.stdout || "no output").trim()}`);
17
+ }
18
+ if (child.error) {
19
+ return failedLizardScan(`lizard process error: ${child.error.message}`);
20
+ }
21
+ if (child.status !== 0) {
22
+ const stderr = (child.stderr || "").trim();
23
+ const stdout = (child.stdout || "").trim();
24
+ return failedLizardScan(`lizard ${child.status === null ? "invalid process state" : `exit ${child.status}`}: ${stderr || stdout || "no output"}`);
25
+ }
26
+ return parseLizardCSV(child.stdout || "", cwd);
27
+ }
28
+ catch (error) {
29
+ return failedLizardScan(`lizard adapter error: ${errorMessage(error)}`);
30
+ }
31
+ }
32
+ function failedLizardScan(error) {
33
+ return Object.freeze({ error, ok: false, reason: "execution" });
34
+ }
35
+ //# sourceMappingURL=scanner.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.mjs","sourceRoot":"","sources":["../../../../../src/package-checks/function-metrics/lizard/scanner.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAE3E,OAAO,EAAE,cAAc,EAA0B,MAAM,aAAa,CAAC;AAgBrE,MAAM,UAAU,cAAc,CAAC,EAC7B,KAAK,EACL,GAAG,EACH,UAAU,EACY;IACtB,IAAI,CAAC;QACH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;QAE9D,MAAM,KAAK,GAAG,cAAc,CAAC;YAC3B,IAAI,EAAE,CAAC,GAAG,KAAK,EAAE,OAAO,CAAC;YACzB,OAAO,EAAE,UAAU,CAAC,UAAU;YAC9B,GAAG;YACH,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC1B,OAAO,gBAAgB,CACrB,iBAAiB,KAAK,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CACzF,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,gBAAgB,CAAC,yBAAyB,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3C,OAAO,gBAAgB,CACrB,UAAU,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,MAAM,IAAI,MAAM,IAAI,WAAW,EAAE,CACzH,CAAC;QACJ,CAAC;QAED,OAAO,cAAc,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,gBAAgB,CAAC,yBAAyB,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;AAClE,CAAC","sourcesContent":["/** 对 approved exact paths 执行 adapter-owned Lizard CSV 协议。 */\n\nimport { errorMessage } from \"../../host-environment/error-message.ts\";\nimport { runProcessSync } from \"../../host-environment/process/command.ts\";\nimport type { ResolvedFunctionMetricsScannerOptions } from \"../options.ts\";\nimport { parseLizardCSV, type LizardParseResult } from \"./parser.ts\";\n\nexport type LizardScanResult =\n | LizardParseResult\n | Readonly<{\n error: string;\n ok: false;\n reason: \"execution\";\n }>;\n\ninterface ScanWithLizardOptions {\n readonly cwd: string;\n readonly dependency: ResolvedFunctionMetricsScannerOptions;\n readonly files: readonly string[];\n}\n\nexport function scanWithLizard({\n files,\n cwd,\n dependency\n}: ScanWithLizardOptions): LizardScanResult {\n try {\n if (files.length === 0) return { ok: true, measurements: [] };\n\n const child = runProcessSync({\n args: [...files, \"--csv\"],\n command: dependency.executable,\n cwd,\n timeout: 300_000\n });\n\n if (child.signal !== null) {\n return failedLizardScan(\n `lizard signal ${child.signal}: ${(child.stderr || child.stdout || \"no output\").trim()}`\n );\n }\n if (child.error) {\n return failedLizardScan(`lizard process error: ${child.error.message}`);\n }\n\n if (child.status !== 0) {\n const stderr = (child.stderr || \"\").trim();\n const stdout = (child.stdout || \"\").trim();\n return failedLizardScan(\n `lizard ${child.status === null ? \"invalid process state\" : `exit ${child.status}`}: ${stderr || stdout || \"no output\"}`\n );\n }\n\n return parseLizardCSV(child.stdout || \"\", cwd);\n } catch (error: unknown) {\n return failedLizardScan(`lizard adapter error: ${errorMessage(error)}`);\n }\n}\n\nfunction failedLizardScan(error: string): LizardScanResult {\n return Object.freeze({ error, ok: false, reason: \"execution\" });\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=measurement-model.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measurement-model.mjs","sourceRoot":"","sources":["../../../../src/package-checks/function-metrics/measurement-model.ts"],"names":[],"mappings":"","sourcesContent":["import type { FindingPolicy } from \"../code-quality-findings/policy.ts\";\nimport type { ResolvedFunctionMetricsLimits } from \"./options.ts\";\n\nexport interface MetricValue {\n readonly source: \"lizard\";\n readonly value: number | null;\n}\n\nexport interface FunctionMetric {\n readonly cyclomaticComplexity: MetricValue;\n readonly endLine: number;\n readonly file: string;\n readonly lines: number;\n readonly name: string;\n readonly parameterCount: number;\n readonly startLine: number;\n}\n\nexport interface FunctionMetricsAreaInput {\n readonly approvedExactPaths: readonly string[];\n readonly codeArea: string;\n readonly findingPolicy: FindingPolicy;\n readonly limits: ResolvedFunctionMetricsLimits;\n}\n\nexport interface FunctionMetricsExactInputSet {\n readonly approvedExactPaths: readonly string[];\n readonly areas: readonly FunctionMetricsAreaInput[];\n readonly rootDir: string;\n}\n"]}
@@ -0,0 +1,35 @@
1
+ import { acceptExactInputMeasurements } from "../project-files/exact-input-measurement.mjs";
2
+ import { checkLizard } from "./lizard/availability.mjs";
3
+ import { scanWithLizard } from "./lizard/scanner.mjs";
4
+ export async function measureFunctionMetrics({ dependency, input, signal }) {
5
+ if (signal.aborted)
6
+ return Object.freeze({ kind: "cancelled" });
7
+ if (input.approvedExactPaths.length === 0) {
8
+ return Object.freeze({ kind: "complete", metrics: Object.freeze([]) });
9
+ }
10
+ const availability = await checkLizard(input.rootDir, dependency);
11
+ if (signal.aborted)
12
+ return Object.freeze({ kind: "cancelled" });
13
+ if (!availability.available) {
14
+ return Object.freeze({ kind: "unavailable" });
15
+ }
16
+ const measurement = runFunctionScanner(input, dependency);
17
+ return signal.aborted ? Object.freeze({ kind: "cancelled" }) : measurement;
18
+ }
19
+ function runFunctionScanner(input, dependency) {
20
+ const result = scanWithLizard({
21
+ cwd: input.rootDir,
22
+ dependency,
23
+ files: input.approvedExactPaths
24
+ });
25
+ if (!result.ok) {
26
+ return Object.freeze({
27
+ kind: result.reason === "execution" ? "execution-failed" : "invalid-result"
28
+ });
29
+ }
30
+ const accepted = acceptExactInputMeasurements(result.measurements, input.approvedExactPaths);
31
+ return accepted.ok
32
+ ? Object.freeze({ kind: "complete", metrics: Object.freeze([...accepted.payloads]) })
33
+ : Object.freeze({ kind: "invalid-result" });
34
+ }
35
+ //# sourceMappingURL=measurement.mjs.map