@zxyycom/vibe-check 0.0.2 → 0.0.3

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 (670) hide show
  1. package/README.md +36 -5
  2. package/dist/esm/check/check.mjs +4 -0
  3. package/dist/esm/check/check.mjs.map +1 -1
  4. package/dist/esm/check/flag-enablement.mjs +32 -0
  5. package/dist/esm/check/flag-enablement.mjs.map +1 -0
  6. package/dist/esm/check/handoff-provider-identity.mjs +18 -0
  7. package/dist/esm/check/handoff-provider-identity.mjs.map +1 -0
  8. package/dist/esm/check/inherited-collection.mjs +1 -1
  9. package/dist/esm/check/inherited-collection.mjs.map +1 -1
  10. package/dist/esm/check/project-changes.mjs +2 -0
  11. package/dist/esm/check/project-changes.mjs.map +1 -0
  12. package/dist/esm/check/project-context.mjs +2 -0
  13. package/dist/esm/check/project-context.mjs.map +1 -0
  14. package/dist/esm/check-settlement/facts.mjs.map +1 -1
  15. package/dist/esm/check-settlement/record-store.mjs +1 -1
  16. package/dist/esm/check-settlement/record-store.mjs.map +1 -1
  17. package/dist/esm/data-boundary/canonical-data.mjs +36 -7
  18. package/dist/esm/data-boundary/canonical-data.mjs.map +1 -1
  19. package/dist/esm/data-boundary/canonical-json.mjs.map +1 -1
  20. package/dist/esm/data-boundary/closed-values.mjs +28 -4
  21. package/dist/esm/data-boundary/closed-values.mjs.map +1 -1
  22. package/dist/esm/{package-checks/project-files → data-boundary}/config-glob.mjs +3 -3
  23. package/dist/esm/data-boundary/config-glob.mjs.map +1 -0
  24. package/dist/esm/data-boundary/project-path.mjs +19 -0
  25. package/dist/esm/data-boundary/project-path.mjs.map +1 -0
  26. package/dist/esm/index.mjs +12 -5
  27. package/dist/esm/index.mjs.map +1 -1
  28. package/dist/esm/machine-output/v4/atomic-publication.mjs +4 -1
  29. package/dist/esm/machine-output/v4/atomic-publication.mjs.map +1 -1
  30. package/dist/esm/package-checks/check-authoring.mjs +69 -0
  31. package/dist/esm/package-checks/check-authoring.mjs.map +1 -0
  32. package/dist/esm/package-checks/code-quality-findings/finding-waiver-authoring.mjs.map +1 -1
  33. package/dist/esm/package-checks/code-quality-findings/finding-waiver-evidence.mjs.map +1 -1
  34. package/dist/esm/package-checks/command-check/command-check.mjs +55 -0
  35. package/dist/esm/package-checks/command-check/command-check.mjs.map +1 -0
  36. package/dist/esm/package-checks/command-check/contract.mjs +2 -0
  37. package/dist/esm/package-checks/command-check/contract.mjs.map +1 -0
  38. package/dist/esm/package-checks/command-check/execution.mjs +134 -0
  39. package/dist/esm/package-checks/command-check/execution.mjs.map +1 -0
  40. package/dist/esm/package-checks/command-check/options.mjs +284 -0
  41. package/dist/esm/package-checks/command-check/options.mjs.map +1 -0
  42. package/dist/esm/package-checks/command-check/transcript.mjs +26 -0
  43. package/dist/esm/package-checks/command-check/transcript.mjs.map +1 -0
  44. package/dist/esm/package-checks/duplicate-detection/default-check.mjs +9 -11
  45. package/dist/esm/package-checks/duplicate-detection/default-check.mjs.map +1 -1
  46. package/dist/esm/package-checks/duplicate-detection/execution.mjs +2 -4
  47. package/dist/esm/package-checks/duplicate-detection/execution.mjs.map +1 -1
  48. package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs +1 -1
  49. package/dist/esm/package-checks/duplicate-detection/finding-messages.mjs.map +1 -1
  50. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs +1 -1
  51. package/dist/esm/package-checks/duplicate-detection/jscpd/availability.mjs.map +1 -1
  52. package/dist/esm/package-checks/duplicate-detection/options.mjs.map +1 -1
  53. package/dist/esm/package-checks/duplicate-detection/records.mjs.map +1 -1
  54. package/dist/esm/package-checks/file-metrics/constructor.mjs +9 -11
  55. package/dist/esm/package-checks/file-metrics/constructor.mjs.map +1 -1
  56. package/dist/esm/package-checks/file-metrics/execution.mjs +2 -4
  57. package/dist/esm/package-checks/file-metrics/execution.mjs.map +1 -1
  58. package/dist/esm/package-checks/file-metrics/finding-messages.mjs +1 -1
  59. package/dist/esm/package-checks/file-metrics/finding-messages.mjs.map +1 -1
  60. package/dist/esm/package-checks/file-metrics/options.mjs.map +1 -1
  61. package/dist/esm/package-checks/file-metrics/records.mjs.map +1 -1
  62. package/dist/esm/package-checks/file-metrics/scc/availability.mjs +1 -1
  63. package/dist/esm/package-checks/file-metrics/scc/availability.mjs.map +1 -1
  64. package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs +38 -0
  65. package/dist/esm/package-checks/file-metrics/scc/batch-planner.mjs.map +1 -0
  66. package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs +35 -0
  67. package/dist/esm/package-checks/file-metrics/scc/logical-scan-resources.mjs.map +1 -0
  68. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs +102 -29
  69. package/dist/esm/package-checks/file-metrics/scc/scanner.mjs.map +1 -1
  70. package/dist/esm/package-checks/function-metrics/analysis.mjs +7 -2
  71. package/dist/esm/package-checks/function-metrics/analysis.mjs.map +1 -1
  72. package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs +1 -1
  73. package/dist/esm/package-checks/function-metrics/analyzer/analysis-model.mjs.map +1 -1
  74. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs +1 -3
  75. package/dist/esm/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.mjs.map +1 -1
  76. package/dist/esm/package-checks/function-metrics/analyzer/extensions/protocol.mjs.map +1 -1
  77. package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs +3 -2
  78. package/dist/esm/package-checks/function-metrics/analyzer/pipeline.mjs.map +1 -1
  79. package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs +6 -6
  80. package/dist/esm/package-checks/function-metrics/analyzer/readers/erlang.mjs.map +1 -1
  81. package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs +1 -1
  82. package/dist/esm/package-checks/function-metrics/analyzer/readers/fortran.mjs.map +1 -1
  83. package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs +9 -3
  84. package/dist/esm/package-checks/function-metrics/analyzer/readers/objc.mjs.map +1 -1
  85. package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs +12 -7
  86. package/dist/esm/package-checks/function-metrics/analyzer/readers/php-states.mjs.map +1 -1
  87. package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs +6 -6
  88. package/dist/esm/package-checks/function-metrics/analyzer/readers/plsql.mjs.map +1 -1
  89. package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs +5 -3
  90. package/dist/esm/package-checks/function-metrics/analyzer/readers/python.mjs.map +1 -1
  91. package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs +2 -0
  92. package/dist/esm/package-checks/function-metrics/analyzer/readers/r.mjs.map +1 -1
  93. package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs +9 -3
  94. package/dist/esm/package-checks/function-metrics/analyzer/readers/ttcn.mjs.map +1 -1
  95. package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs +9 -3
  96. package/dist/esm/package-checks/function-metrics/analyzer/readers/typescript.mjs.map +1 -1
  97. package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs +3 -1
  98. package/dist/esm/package-checks/function-metrics/analyzer/readers/zig.mjs.map +1 -1
  99. package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs +3 -1
  100. package/dist/esm/package-checks/function-metrics/analyzer/shared/code-reader.mjs.map +1 -1
  101. package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs +12 -5
  102. package/dist/esm/package-checks/function-metrics/analyzer/shared/js-style-regex.mjs.map +1 -1
  103. package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs +20 -8
  104. package/dist/esm/package-checks/function-metrics/analyzer-worker-port.mjs.map +1 -1
  105. package/dist/esm/package-checks/function-metrics/constructor.mjs +9 -11
  106. package/dist/esm/package-checks/function-metrics/constructor.mjs.map +1 -1
  107. package/dist/esm/package-checks/function-metrics/execution.mjs +2 -4
  108. package/dist/esm/package-checks/function-metrics/execution.mjs.map +1 -1
  109. package/dist/esm/package-checks/function-metrics/finding-messages.mjs +1 -1
  110. package/dist/esm/package-checks/function-metrics/finding-messages.mjs.map +1 -1
  111. package/dist/esm/package-checks/function-metrics/measurement.mjs +3 -1
  112. package/dist/esm/package-checks/function-metrics/measurement.mjs.map +1 -1
  113. package/dist/esm/package-checks/function-metrics/options.mjs.map +1 -1
  114. package/dist/esm/package-checks/function-metrics/records.mjs.map +1 -1
  115. package/dist/esm/package-checks/host-environment/git.mjs +11 -0
  116. package/dist/esm/package-checks/host-environment/git.mjs.map +1 -1
  117. package/dist/esm/package-checks/host-environment/path.mjs +1 -17
  118. package/dist/esm/package-checks/host-environment/path.mjs.map +1 -1
  119. package/dist/esm/package-checks/host-environment/process/contract.mjs.map +1 -1
  120. package/dist/esm/package-checks/host-environment/process/result.mjs +43 -17
  121. package/dist/esm/package-checks/host-environment/process/result.mjs.map +1 -1
  122. package/dist/esm/package-checks/host-environment/process/runner.mjs +7 -5
  123. package/dist/esm/package-checks/host-environment/process/runner.mjs.map +1 -1
  124. package/dist/esm/package-checks/json-schema-validation/default-check.mjs +9 -11
  125. package/dist/esm/package-checks/json-schema-validation/default-check.mjs.map +1 -1
  126. package/dist/esm/package-checks/json-schema-validation/options.mjs.map +1 -1
  127. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs +6 -2
  128. package/dist/esm/package-checks/json-schema-validation/reference-resolver.mjs.map +1 -1
  129. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs +11 -3
  130. package/dist/esm/package-checks/json-schema-validation/schema-policy.mjs.map +1 -1
  131. package/dist/esm/package-checks/json-validation/default-check.mjs +9 -11
  132. package/dist/esm/package-checks/json-validation/default-check.mjs.map +1 -1
  133. package/dist/esm/package-checks/json-validation/options.mjs.map +1 -1
  134. package/dist/esm/package-checks/local-cache-options.mjs +28 -0
  135. package/dist/esm/package-checks/local-cache-options.mjs.map +1 -0
  136. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs +37 -45
  137. package/dist/esm/package-checks/maintenance-reminders/maintenance-reminders.mjs.map +1 -1
  138. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs +3 -1
  139. package/dist/esm/package-checks/maintenance-reminders/maintenance-support.mjs.map +1 -1
  140. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs +19 -33
  141. package/dist/esm/package-checks/markdown-link-validation/default-check.mjs.map +1 -1
  142. package/dist/esm/package-checks/markdown-link-validation/execution.mjs +1 -1
  143. package/dist/esm/package-checks/markdown-link-validation/execution.mjs.map +1 -1
  144. package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs +1 -1
  145. package/dist/esm/package-checks/markdown-link-validation/finding-messages.mjs.map +1 -1
  146. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs +1 -3
  147. package/dist/esm/package-checks/markdown-link-validation/markdown-parser.mjs.map +1 -1
  148. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs +3 -18
  149. package/dist/esm/package-checks/markdown-link-validation/options-resolution.mjs.map +1 -1
  150. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs +2 -14
  151. package/dist/esm/package-checks/markdown-link-validation/options-validation.mjs.map +1 -1
  152. package/dist/esm/package-checks/markdown-link-validation/options.mjs.map +1 -1
  153. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs +4 -5
  154. package/dist/esm/package-checks/markdown-link-validation/parse-facts-cache-payload.mjs.map +1 -1
  155. package/dist/esm/package-checks/markdown-lint/adapter.mjs +125 -0
  156. package/dist/esm/package-checks/markdown-lint/adapter.mjs.map +1 -0
  157. package/dist/esm/package-checks/markdown-lint/default-check.mjs +37 -0
  158. package/dist/esm/package-checks/markdown-lint/default-check.mjs.map +1 -0
  159. package/dist/esm/package-checks/markdown-lint/execution.mjs +202 -0
  160. package/dist/esm/package-checks/markdown-lint/execution.mjs.map +1 -0
  161. package/dist/esm/package-checks/markdown-lint/final-data.mjs +16 -0
  162. package/dist/esm/package-checks/markdown-lint/final-data.mjs.map +1 -0
  163. package/dist/esm/package-checks/markdown-lint/finding-messages.mjs +72 -0
  164. package/dist/esm/package-checks/markdown-lint/finding-messages.mjs.map +1 -0
  165. package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs +41 -0
  166. package/dist/esm/package-checks/markdown-lint/finding-waiver-identity.mjs.map +1 -0
  167. package/dist/esm/package-checks/markdown-lint/findings-cache.mjs +110 -0
  168. package/dist/esm/package-checks/markdown-lint/findings-cache.mjs.map +1 -0
  169. package/dist/esm/package-checks/markdown-lint/options-resolution.mjs +74 -0
  170. package/dist/esm/package-checks/markdown-lint/options-resolution.mjs.map +1 -0
  171. package/dist/esm/package-checks/markdown-lint/options-validation.mjs +41 -0
  172. package/dist/esm/package-checks/markdown-lint/options-validation.mjs.map +1 -0
  173. package/dist/esm/package-checks/markdown-lint/options.mjs +13 -0
  174. package/dist/esm/package-checks/markdown-lint/options.mjs.map +1 -0
  175. package/dist/esm/package-checks/markdown-lint/records.mjs +65 -0
  176. package/dist/esm/package-checks/markdown-lint/records.mjs.map +1 -0
  177. package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs +14 -0
  178. package/dist/esm/package-checks/markdown-lint/unavailable-reasons.mjs.map +1 -0
  179. package/dist/esm/package-checks/project-files/collection.mjs +23 -19
  180. package/dist/esm/package-checks/project-files/collection.mjs.map +1 -1
  181. package/dist/esm/package-checks/project-files/configuration.mjs +1 -1
  182. package/dist/esm/package-checks/project-files/configuration.mjs.map +1 -1
  183. package/dist/esm/package-checks/project-files/gitlink-revision.mjs +2 -5
  184. package/dist/esm/package-checks/project-files/gitlink-revision.mjs.map +1 -1
  185. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs +22 -6
  186. package/dist/esm/package-checks/project-files/gitlink-worktree.mjs.map +1 -1
  187. package/dist/esm/package-checks/project-files/public-collection.mjs +1 -1
  188. package/dist/esm/package-checks/project-files/public-collection.mjs.map +1 -1
  189. package/dist/esm/package-checks/project-files/revision-paths.mjs +3 -3
  190. package/dist/esm/package-checks/project-files/revision-paths.mjs.map +1 -1
  191. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs +11 -15
  192. package/dist/esm/package-checks/project-files/revision-worktree-files.mjs.map +1 -1
  193. package/dist/esm/package-checks/secret-detection/default-check.mjs +9 -11
  194. package/dist/esm/package-checks/secret-detection/default-check.mjs.map +1 -1
  195. package/dist/esm/package-checks/secret-detection/execution.mjs +2 -2
  196. package/dist/esm/package-checks/secret-detection/execution.mjs.map +1 -1
  197. package/dist/esm/package-checks/secret-detection/input-preparation.mjs +46 -7
  198. package/dist/esm/package-checks/secret-detection/input-preparation.mjs.map +1 -1
  199. package/dist/esm/package-checks/secret-detection/options.mjs.map +1 -1
  200. package/dist/esm/package-checks/secret-detection/records.mjs.map +1 -1
  201. package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs +3 -4
  202. package/dist/esm/package-checks/secret-detection/secretlint/adapter.mjs.map +1 -1
  203. package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs +10 -0
  204. package/dist/esm/package-tools/admission-policy/define-admission-policy.mjs.map +1 -0
  205. package/dist/esm/{cache → package-tools/cache}/cache-json-by-key.mjs +13 -14
  206. package/dist/esm/package-tools/cache/cache-json-by-key.mjs.map +1 -0
  207. package/dist/esm/package-tools/finding-presentation/finding-presentation.mjs.map +1 -0
  208. package/dist/esm/{finding-waivers → package-tools/finding-waivers}/reconciliation.mjs +14 -5
  209. package/dist/esm/package-tools/finding-waivers/reconciliation.mjs.map +1 -0
  210. package/dist/esm/package-tools/learned-critical-path/critical-path-ranking.mjs.map +1 -0
  211. package/dist/esm/package-tools/learned-critical-path/duration-model/bounded-history.mjs.map +1 -0
  212. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/prediction.mjs +2 -2
  213. package/dist/esm/package-tools/learned-critical-path/duration-model/prediction.mjs.map +1 -0
  214. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/preparation.mjs +4 -2
  215. package/dist/esm/package-tools/learned-critical-path/duration-model/preparation.mjs.map +1 -0
  216. package/dist/esm/package-tools/learned-critical-path/duration-model/recording.mjs.map +1 -0
  217. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/storage.mjs +8 -8
  218. package/dist/esm/package-tools/learned-critical-path/duration-model/storage.mjs.map +1 -0
  219. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/selection-layers.mjs +1 -2
  220. package/dist/esm/package-tools/learned-critical-path/selection-layers.mjs.map +1 -0
  221. package/dist/esm/package-tools/learned-critical-path/static-decision.mjs.map +1 -0
  222. package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/strategy.mjs +3 -3
  223. package/dist/esm/package-tools/learned-critical-path/strategy.mjs.map +1 -0
  224. package/dist/esm/project-definition/check-tree/authoring.mjs +8 -5
  225. package/dist/esm/project-definition/check-tree/authoring.mjs.map +1 -1
  226. package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs +79 -66
  227. package/dist/esm/project-definition/check-tree/check-fields-authoring.mjs.map +1 -1
  228. package/dist/esm/project-definition/check-tree/flag-conditions.mjs +71 -0
  229. package/dist/esm/project-definition/check-tree/flag-conditions.mjs.map +1 -0
  230. package/dist/esm/project-definition/check-tree/materialization.mjs +13 -8
  231. package/dist/esm/project-definition/check-tree/materialization.mjs.map +1 -1
  232. package/dist/esm/project-definition/check-tree/resolution.mjs +7 -6
  233. package/dist/esm/project-definition/check-tree/resolution.mjs.map +1 -1
  234. package/dist/esm/project-definition/declarative-snapshot.mjs +2 -1
  235. package/dist/esm/project-definition/declarative-snapshot.mjs.map +1 -1
  236. package/dist/esm/project-definition/project-changes.mjs +70 -0
  237. package/dist/esm/project-definition/project-changes.mjs.map +1 -0
  238. package/dist/esm/project-definition/project-definition-validation.mjs +40 -8
  239. package/dist/esm/project-definition/project-definition-validation.mjs.map +1 -1
  240. package/dist/esm/project-definition/project-definition.mjs +22 -15
  241. package/dist/esm/project-definition/project-definition.mjs.map +1 -1
  242. package/dist/esm/project-definition/scheduler-policy.mjs.map +1 -1
  243. package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs +9 -6
  244. package/dist/esm/project-run/admission-strategy-provider/custom-strategy-preparation.mjs.map +1 -1
  245. package/dist/esm/project-run/admission-strategy-provider/prepared-admission-strategy.mjs.map +1 -1
  246. package/dist/esm/project-run/aggregation.mjs +42 -59
  247. package/dist/esm/project-run/aggregation.mjs.map +1 -1
  248. package/dist/esm/project-run/changes/git.mjs +161 -0
  249. package/dist/esm/project-run/changes/git.mjs.map +1 -0
  250. package/dist/esm/project-run/check-execution/admitted-check-execution.mjs +41 -0
  251. package/dist/esm/project-run/check-execution/admitted-check-execution.mjs.map +1 -0
  252. package/dist/esm/project-run/check-execution/callback.mjs +3 -2
  253. package/dist/esm/project-run/check-execution/callback.mjs.map +1 -1
  254. package/dist/esm/project-run/check-execution/dependencies.mjs +80 -5
  255. package/dist/esm/project-run/check-execution/dependencies.mjs.map +1 -1
  256. package/dist/esm/project-run/check-execution/execution-finalization.mjs +5 -3
  257. package/dist/esm/project-run/check-execution/execution-finalization.mjs.map +1 -1
  258. package/dist/esm/project-run/check-execution/execution-settlement.mjs +37 -16
  259. package/dist/esm/project-run/check-execution/execution-settlement.mjs.map +1 -1
  260. package/dist/esm/project-run/check-execution/flag-controls.mjs +15 -7
  261. package/dist/esm/project-run/check-execution/flag-controls.mjs.map +1 -1
  262. package/dist/esm/project-run/check-execution/lifecycle.mjs.map +1 -1
  263. package/dist/esm/project-run/check-execution/{preflight-result.mjs → preparation-result.mjs} +24 -24
  264. package/dist/esm/project-run/check-execution/preparation-result.mjs.map +1 -0
  265. package/dist/esm/project-run/check-execution/{preflight.mjs → preparation.mjs} +52 -52
  266. package/dist/esm/project-run/check-execution/preparation.mjs.map +1 -0
  267. package/dist/esm/project-run/check-execution/ready-check-execution.mjs +71 -0
  268. package/dist/esm/project-run/check-execution/ready-check-execution.mjs.map +1 -0
  269. package/dist/esm/project-run/check-execution/resolved-checks.mjs +27 -164
  270. package/dist/esm/project-run/check-execution/resolved-checks.mjs.map +1 -1
  271. package/dist/esm/project-run/check-execution/scheduled-check-run.mjs +79 -0
  272. package/dist/esm/project-run/check-execution/scheduled-check-run.mjs.map +1 -0
  273. package/dist/esm/project-run/check-execution/terminal-result.mjs +70 -25
  274. package/dist/esm/project-run/check-execution/terminal-result.mjs.map +1 -1
  275. package/dist/esm/project-run/completion/completion.mjs +18 -1
  276. package/dist/esm/project-run/completion/completion.mjs.map +1 -1
  277. package/dist/esm/project-run/controls/contract.mjs.map +1 -1
  278. package/dist/esm/project-run/controls/validation.mjs +7 -54
  279. package/dist/esm/project-run/controls/validation.mjs.map +1 -1
  280. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs +3 -3
  281. package/dist/esm/project-run/diagnostic-logging/diagnostic-detail-rendering.mjs.map +1 -1
  282. package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs +1 -1
  283. package/dist/esm/project-run/diagnostic-logging/observation-rendering.mjs.map +1 -1
  284. package/dist/esm/project-run/invocation/candidate.mjs +17 -13
  285. package/dist/esm/project-run/invocation/candidate.mjs.map +1 -1
  286. package/dist/esm/project-run/invocation/candidates.mjs +26 -0
  287. package/dist/esm/project-run/invocation/candidates.mjs.map +1 -0
  288. package/dist/esm/project-run/invocation/creation.mjs +7 -3
  289. package/dist/esm/project-run/invocation/creation.mjs.map +1 -1
  290. package/dist/esm/project-run/invocation/execution.mjs +98 -0
  291. package/dist/esm/project-run/invocation/execution.mjs.map +1 -0
  292. package/dist/esm/project-run/invocation/run.mjs +13 -112
  293. package/dist/esm/project-run/invocation/run.mjs.map +1 -1
  294. package/dist/esm/project-run/invocation/scheduler.mjs +13 -6
  295. package/dist/esm/project-run/invocation/scheduler.mjs.map +1 -1
  296. package/dist/esm/project-run/outputs/status.mjs +12 -12
  297. package/dist/esm/project-run/outputs/status.mjs.map +1 -1
  298. package/dist/esm/project-run/progress-rendering/presentation.mjs +31 -11
  299. package/dist/esm/project-run/progress-rendering/presentation.mjs.map +1 -1
  300. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs +11 -4
  301. package/dist/esm/project-run/progress-rendering/renderer-formatting.mjs.map +1 -1
  302. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs +20 -6
  303. package/dist/esm/project-run/progress-rendering/renderer-lifecycle.mjs.map +1 -1
  304. package/dist/esm/project-run/progress-rendering/renderer.mjs +6 -2
  305. package/dist/esm/project-run/progress-rendering/renderer.mjs.map +1 -1
  306. package/dist/esm/project-run/project-context.mjs +2 -1
  307. package/dist/esm/project-run/project-context.mjs.map +1 -1
  308. package/dist/esm/project-run/result.mjs +2 -2
  309. package/dist/esm/project-run/result.mjs.map +1 -1
  310. package/dist/esm/project-run/run.mjs.map +1 -1
  311. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs +45 -0
  312. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph-lookup.mjs.map +1 -0
  313. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs +9 -4
  314. package/dist/esm/project-run/task-scheduler/admission-core/compiled-graph.mjs.map +1 -1
  315. package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs +3 -5
  316. package/dist/esm/project-run/task-scheduler/admission-core/selection-query.mjs.map +1 -1
  317. package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs +25 -8
  318. package/dist/esm/project-run/task-scheduler/admission-core/selection-seed.mjs.map +1 -1
  319. package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs +8 -8
  320. package/dist/esm/project-run/task-scheduler/admission-core/selection-transition.mjs.map +1 -1
  321. package/dist/esm/project-run/task-scheduler/execution-state.mjs.map +1 -1
  322. package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs +8 -4
  323. package/dist/esm/project-run/task-scheduler/measurement/diagnostics.mjs.map +1 -1
  324. package/dist/esm/project-run/task-scheduler/measurement/timing.mjs +12 -6
  325. package/dist/esm/project-run/task-scheduler/measurement/timing.mjs.map +1 -1
  326. package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs +3 -1
  327. package/dist/esm/project-run/task-scheduler/scheduler-observation.mjs.map +1 -1
  328. package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs +17 -17
  329. package/dist/esm/project-run/task-scheduler/scheduler-terminal-measurement.mjs.map +1 -1
  330. package/dist/esm/project-run/task-scheduler/scheduler.mjs +18 -6
  331. package/dist/esm/project-run/task-scheduler/scheduler.mjs.map +1 -1
  332. package/docs/api-mechanics.md +147 -28
  333. package/docs/changelog.md +145 -2
  334. package/docs/checks/duplicate-detection.md +22 -3
  335. package/docs/checks/file-metrics.md +25 -6
  336. package/docs/checks/function-metrics.md +21 -2
  337. package/docs/checks/json-schema-validation.md +25 -4
  338. package/docs/checks/json-validation.md +24 -5
  339. package/docs/checks/maintenance-reminders.md +30 -6
  340. package/docs/checks/markdown-link-validation.md +24 -4
  341. package/docs/checks/markdown-lint.md +167 -0
  342. package/docs/checks/secret-detection.md +31 -7
  343. package/docs/examples/artifacts/mixed-outcomes/definition.ts +10 -10
  344. package/docs/guides/building-project-gate.md +706 -0
  345. package/docs/guides/callbacks.md +81 -22
  346. package/docs/guides/check-dependencies.md +41 -10
  347. package/docs/guides/collecting-project-files.md +7 -7
  348. package/docs/guides/command-check.md +155 -0
  349. package/docs/guides/data-boundaries.md +140 -0
  350. package/docs/guides/extending-check-lifecycle.md +77 -25
  351. package/docs/guides/finding-waivers.md +43 -1
  352. package/docs/guides/learned-scheduling.md +1 -1
  353. package/docs/guides/run-outputs.md +35 -9
  354. package/docs/guides/scheduling.md +15 -15
  355. package/docs/output.md +6 -5
  356. package/package.json +2 -1
  357. package/src/check/check.ts +332 -92
  358. package/src/check/flag-enablement.ts +76 -0
  359. package/src/check/handoff-provider-identity.ts +34 -0
  360. package/src/check/inherited-collection.ts +1 -1
  361. package/src/check/project-changes.ts +14 -0
  362. package/src/check/project-context.ts +11 -0
  363. package/src/check-settlement/facts.ts +1 -1
  364. package/src/check-settlement/record-store.ts +1 -1
  365. package/src/data-boundary/canonical-data.ts +36 -9
  366. package/src/data-boundary/canonical-json.ts +18 -1
  367. package/src/data-boundary/closed-values.ts +26 -6
  368. package/src/data-boundary/config-glob.ts +17 -0
  369. package/src/data-boundary/project-path.ts +21 -0
  370. package/src/index.ts +72 -11
  371. package/src/machine-output/v4/atomic-publication.ts +3 -1
  372. package/src/package-checks/check-authoring.ts +136 -0
  373. package/src/package-checks/code-quality-findings/finding-waiver-authoring.ts +1 -1
  374. package/src/package-checks/code-quality-findings/finding-waiver-evidence.ts +1 -1
  375. package/src/package-checks/command-check/command-check.ts +152 -0
  376. package/src/package-checks/command-check/contract.ts +168 -0
  377. package/src/package-checks/command-check/execution.ts +211 -0
  378. package/src/package-checks/command-check/options.ts +331 -0
  379. package/src/package-checks/command-check/transcript.ts +35 -0
  380. package/src/package-checks/duplicate-detection/default-check.ts +37 -6
  381. package/src/package-checks/duplicate-detection/execution.ts +2 -4
  382. package/src/package-checks/duplicate-detection/finding-messages.ts +2 -2
  383. package/src/package-checks/duplicate-detection/jscpd/availability.ts +1 -1
  384. package/src/package-checks/duplicate-detection/options.ts +6 -3
  385. package/src/package-checks/duplicate-detection/records.ts +1 -1
  386. package/src/package-checks/file-metrics/constructor.ts +29 -6
  387. package/src/package-checks/file-metrics/execution.ts +2 -4
  388. package/src/package-checks/file-metrics/finding-messages.ts +1 -1
  389. package/src/package-checks/file-metrics/options.ts +6 -3
  390. package/src/package-checks/file-metrics/records.ts +1 -1
  391. package/src/package-checks/file-metrics/scc/availability.ts +1 -1
  392. package/src/package-checks/file-metrics/scc/batch-planner.ts +56 -0
  393. package/src/package-checks/file-metrics/scc/logical-scan-resources.ts +59 -0
  394. package/src/package-checks/file-metrics/scc/scanner.ts +134 -32
  395. package/src/package-checks/function-metrics/analysis.ts +7 -2
  396. package/src/package-checks/function-metrics/analyzer/analysis-model.ts +1 -1
  397. package/src/package-checks/function-metrics/analyzer/extension-output.ts +14 -6
  398. package/src/package-checks/function-metrics/analyzer/extensions/lizardcomplextags.ts +1 -3
  399. package/src/package-checks/function-metrics/analyzer/extensions/protocol.ts +3 -3
  400. package/src/package-checks/function-metrics/analyzer/pipeline.ts +4 -2
  401. package/src/package-checks/function-metrics/analyzer/readers/erlang.ts +6 -6
  402. package/src/package-checks/function-metrics/analyzer/readers/fortran.ts +1 -1
  403. package/src/package-checks/function-metrics/analyzer/readers/objc.ts +9 -3
  404. package/src/package-checks/function-metrics/analyzer/readers/php-states.ts +14 -7
  405. package/src/package-checks/function-metrics/analyzer/readers/plsql.ts +8 -4
  406. package/src/package-checks/function-metrics/analyzer/readers/python.ts +4 -3
  407. package/src/package-checks/function-metrics/analyzer/readers/r.ts +2 -1
  408. package/src/package-checks/function-metrics/analyzer/readers/ttcn.ts +9 -3
  409. package/src/package-checks/function-metrics/analyzer/readers/typescript.ts +9 -3
  410. package/src/package-checks/function-metrics/analyzer/readers/zig.ts +2 -1
  411. package/src/package-checks/function-metrics/analyzer/shared/code-reader.ts +3 -1
  412. package/src/package-checks/function-metrics/analyzer/shared/js-style-regex.ts +10 -5
  413. package/src/package-checks/function-metrics/analyzer-worker-port.ts +20 -6
  414. package/src/package-checks/function-metrics/constructor.ts +30 -7
  415. package/src/package-checks/function-metrics/execution.ts +2 -4
  416. package/src/package-checks/function-metrics/finding-messages.ts +2 -2
  417. package/src/package-checks/function-metrics/measurement.ts +3 -1
  418. package/src/package-checks/function-metrics/options.ts +6 -3
  419. package/src/package-checks/function-metrics/records.ts +1 -1
  420. package/src/package-checks/host-environment/git.ts +11 -0
  421. package/src/package-checks/host-environment/path.ts +1 -20
  422. package/src/package-checks/host-environment/process/contract.ts +17 -9
  423. package/src/package-checks/host-environment/process/result.ts +48 -20
  424. package/src/package-checks/host-environment/process/runner.ts +8 -4
  425. package/src/package-checks/json-schema-validation/default-check.ts +38 -5
  426. package/src/package-checks/json-schema-validation/options.ts +4 -1
  427. package/src/package-checks/json-schema-validation/reference-resolver.ts +6 -2
  428. package/src/package-checks/json-schema-validation/schema-policy.ts +10 -5
  429. package/src/package-checks/json-validation/default-check.ts +27 -6
  430. package/src/package-checks/json-validation/options.ts +4 -1
  431. package/src/package-checks/local-cache-options.ts +40 -0
  432. package/src/package-checks/maintenance-reminders/maintenance-reminders.ts +89 -9
  433. package/src/package-checks/maintenance-reminders/maintenance-support.ts +3 -3
  434. package/src/package-checks/markdown-link-validation/default-check.ts +48 -5
  435. package/src/package-checks/markdown-link-validation/execution.ts +1 -1
  436. package/src/package-checks/markdown-link-validation/finding-messages.ts +1 -1
  437. package/src/package-checks/markdown-link-validation/markdown-parser.ts +1 -5
  438. package/src/package-checks/markdown-link-validation/options-resolution.ts +2 -19
  439. package/src/package-checks/markdown-link-validation/options-validation.ts +2 -17
  440. package/src/package-checks/markdown-link-validation/options.ts +6 -7
  441. package/src/package-checks/markdown-link-validation/parse-facts-cache-payload.ts +4 -5
  442. package/src/package-checks/markdown-lint/adapter.ts +167 -0
  443. package/src/package-checks/markdown-lint/default-check.ts +92 -0
  444. package/src/package-checks/markdown-lint/execution.ts +266 -0
  445. package/src/package-checks/markdown-lint/final-data.ts +33 -0
  446. package/src/package-checks/markdown-lint/finding-messages.ts +87 -0
  447. package/src/package-checks/markdown-lint/finding-waiver-identity.ts +54 -0
  448. package/src/package-checks/markdown-lint/findings-cache.ts +141 -0
  449. package/src/package-checks/markdown-lint/options-resolution.ts +102 -0
  450. package/src/package-checks/markdown-lint/options-validation.ts +50 -0
  451. package/src/package-checks/markdown-lint/options.ts +82 -0
  452. package/src/package-checks/markdown-lint/records.ts +132 -0
  453. package/src/package-checks/markdown-lint/unavailable-reasons.ts +33 -0
  454. package/src/package-checks/project-files/collection.ts +38 -22
  455. package/src/package-checks/project-files/config-glob.ts +1 -17
  456. package/src/package-checks/project-files/configuration.ts +1 -1
  457. package/src/package-checks/project-files/gitlink-revision.ts +4 -6
  458. package/src/package-checks/project-files/gitlink-worktree.ts +35 -7
  459. package/src/package-checks/project-files/public-collection.ts +1 -1
  460. package/src/package-checks/project-files/revision-paths.ts +3 -3
  461. package/src/package-checks/project-files/revision-worktree-files.ts +16 -16
  462. package/src/package-checks/secret-detection/default-check.ts +29 -6
  463. package/src/package-checks/secret-detection/execution.ts +2 -2
  464. package/src/package-checks/secret-detection/input-preparation.ts +64 -7
  465. package/src/package-checks/secret-detection/options.ts +5 -2
  466. package/src/package-checks/secret-detection/records.ts +1 -1
  467. package/src/package-checks/secret-detection/secretlint/adapter.ts +3 -4
  468. package/src/package-tools/admission-policy/define-admission-policy.ts +54 -0
  469. package/src/{cache → package-tools/cache}/cache-json-by-key.ts +13 -17
  470. package/src/{check → package-tools/finding-presentation}/finding-presentation.ts +3 -1
  471. package/src/{finding-waivers → package-tools/finding-waivers}/reconciliation.ts +16 -8
  472. package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/prediction.ts +5 -2
  473. package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/preparation.ts +5 -3
  474. package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/recording.ts +5 -4
  475. package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/storage.ts +9 -10
  476. package/src/{learned-critical-path → package-tools/learned-critical-path}/selection-layers.ts +2 -3
  477. package/src/{learned-critical-path → package-tools/learned-critical-path}/static-decision.ts +1 -1
  478. package/src/{learned-critical-path → package-tools/learned-critical-path}/strategy.ts +7 -4
  479. package/src/project-definition/check-tree/authoring.ts +15 -8
  480. package/src/project-definition/check-tree/check-fields-authoring.ts +106 -91
  481. package/src/project-definition/check-tree/flag-conditions.ts +99 -0
  482. package/src/project-definition/check-tree/materialization.ts +12 -8
  483. package/src/project-definition/check-tree/resolution.ts +13 -15
  484. package/src/project-definition/declarative-snapshot.ts +9 -2
  485. package/src/project-definition/project-changes.ts +112 -0
  486. package/src/project-definition/project-definition-validation.ts +58 -10
  487. package/src/project-definition/project-definition.ts +41 -68
  488. package/src/project-definition/scheduler-policy.ts +6 -3
  489. package/src/project-run/admission-strategy-provider/custom-strategy-preparation.ts +11 -8
  490. package/src/project-run/admission-strategy-provider/prepared-admission-strategy.ts +2 -2
  491. package/src/project-run/aggregation.ts +51 -74
  492. package/src/project-run/changes/git.ts +206 -0
  493. package/src/project-run/check-execution/admitted-check-execution.ts +62 -0
  494. package/src/project-run/check-execution/callback.ts +3 -2
  495. package/src/project-run/check-execution/dependencies.ts +120 -6
  496. package/src/project-run/check-execution/execution-finalization.ts +6 -4
  497. package/src/project-run/check-execution/execution-settlement.ts +88 -29
  498. package/src/project-run/check-execution/flag-controls.ts +22 -8
  499. package/src/project-run/check-execution/lifecycle.ts +14 -6
  500. package/src/project-run/check-execution/{preflight-result.ts → preparation-result.ts} +34 -32
  501. package/src/project-run/check-execution/{preflight.ts → preparation.ts} +92 -84
  502. package/src/project-run/check-execution/ready-check-execution.ts +97 -0
  503. package/src/project-run/check-execution/resolved-checks.ts +40 -219
  504. package/src/project-run/check-execution/scheduled-check-run.ts +119 -0
  505. package/src/project-run/check-execution/terminal-result.ts +108 -29
  506. package/src/project-run/completion/completion.ts +17 -3
  507. package/src/project-run/controls/contract.ts +6 -16
  508. package/src/project-run/controls/validation.ts +7 -60
  509. package/src/project-run/diagnostic-logging/diagnostic-detail-rendering.ts +1 -2
  510. package/src/project-run/diagnostic-logging/observation-rendering.ts +1 -1
  511. package/src/project-run/invocation/candidate.ts +28 -15
  512. package/src/project-run/invocation/candidates.ts +56 -0
  513. package/src/project-run/invocation/creation.ts +7 -3
  514. package/src/project-run/invocation/execution.ts +136 -0
  515. package/src/project-run/invocation/run.ts +15 -179
  516. package/src/project-run/invocation/scheduler.ts +13 -6
  517. package/src/project-run/outputs/status.ts +15 -15
  518. package/src/project-run/progress-rendering/presentation.ts +35 -13
  519. package/src/project-run/progress-rendering/renderer-formatting.ts +20 -7
  520. package/src/project-run/progress-rendering/renderer-lifecycle.ts +23 -6
  521. package/src/project-run/progress-rendering/renderer.ts +10 -4
  522. package/src/project-run/project-context.ts +8 -4
  523. package/src/project-run/result.ts +5 -5
  524. package/src/project-run/run.ts +1 -1
  525. package/src/project-run/task-scheduler/admission-core/compiled-graph-lookup.ts +71 -0
  526. package/src/project-run/task-scheduler/admission-core/compiled-graph.ts +9 -4
  527. package/src/project-run/task-scheduler/admission-core/selection-query.ts +6 -4
  528. package/src/project-run/task-scheduler/admission-core/selection-seed.ts +36 -6
  529. package/src/project-run/task-scheduler/admission-core/selection-transition.ts +17 -8
  530. package/src/project-run/task-scheduler/execution-state.ts +4 -4
  531. package/src/project-run/task-scheduler/measurement/diagnostics.ts +10 -4
  532. package/src/project-run/task-scheduler/measurement/timing.ts +13 -5
  533. package/src/project-run/task-scheduler/scheduler-observation.ts +3 -1
  534. package/src/project-run/task-scheduler/scheduler-terminal-measurement.ts +24 -22
  535. package/src/project-run/task-scheduler/scheduler.ts +23 -6
  536. package/types/check/check.d.ts +178 -67
  537. package/types/check/flag-enablement.d.ts +42 -0
  538. package/types/check/handoff-provider-identity.d.ts +12 -0
  539. package/types/check/project-changes.d.ts +13 -0
  540. package/types/check/project-context.d.ts +10 -0
  541. package/types/check-settlement/facts.d.ts +1 -1
  542. package/types/data-boundary/canonical-data.d.ts +28 -5
  543. package/types/data-boundary/canonical-json.d.ts +18 -1
  544. package/types/data-boundary/closed-values.d.ts +17 -1
  545. package/types/data-boundary/config-glob.d.ts +5 -0
  546. package/types/data-boundary/project-path.d.ts +4 -0
  547. package/types/index.d.ts +27 -11
  548. package/types/package-checks/check-authoring.d.ts +45 -0
  549. package/types/package-checks/code-quality-findings/finding-waiver-authoring.d.ts +1 -1
  550. package/types/package-checks/code-quality-findings/finding-waiver-evidence.d.ts +1 -1
  551. package/types/package-checks/command-check/command-check.d.ts +48 -0
  552. package/types/package-checks/command-check/contract.d.ts +108 -0
  553. package/types/package-checks/command-check/execution.d.ts +7 -0
  554. package/types/package-checks/command-check/options.d.ts +11 -0
  555. package/types/package-checks/command-check/transcript.d.ts +8 -0
  556. package/types/package-checks/duplicate-detection/default-check.d.ts +5 -2
  557. package/types/package-checks/duplicate-detection/finding-messages.d.ts +1 -1
  558. package/types/package-checks/duplicate-detection/options.d.ts +4 -3
  559. package/types/package-checks/duplicate-detection/records.d.ts +1 -1
  560. package/types/package-checks/file-metrics/constructor.d.ts +5 -2
  561. package/types/package-checks/file-metrics/options.d.ts +4 -3
  562. package/types/package-checks/file-metrics/records.d.ts +1 -1
  563. package/types/package-checks/file-metrics/scc/batch-planner.d.ts +18 -0
  564. package/types/package-checks/file-metrics/scc/logical-scan-resources.d.ts +14 -0
  565. package/types/package-checks/function-metrics/analyzer/extensions/protocol.d.ts +3 -3
  566. package/types/package-checks/function-metrics/constructor.d.ts +5 -2
  567. package/types/package-checks/function-metrics/finding-messages.d.ts +1 -1
  568. package/types/package-checks/function-metrics/options.d.ts +4 -3
  569. package/types/package-checks/function-metrics/records.d.ts +1 -1
  570. package/types/package-checks/host-environment/git.d.ts +2 -0
  571. package/types/package-checks/host-environment/path.d.ts +1 -3
  572. package/types/package-checks/host-environment/process/contract.d.ts +17 -9
  573. package/types/package-checks/json-schema-validation/default-check.d.ts +4 -1
  574. package/types/package-checks/json-schema-validation/options.d.ts +2 -1
  575. package/types/package-checks/json-validation/default-check.d.ts +4 -1
  576. package/types/package-checks/json-validation/options.d.ts +2 -1
  577. package/types/package-checks/local-cache-options.d.ts +9 -0
  578. package/types/package-checks/maintenance-reminders/maintenance-reminders.d.ts +11 -2
  579. package/types/package-checks/markdown-link-validation/default-check.d.ts +4 -1
  580. package/types/package-checks/markdown-link-validation/options.d.ts +4 -7
  581. package/types/package-checks/markdown-lint/adapter.d.ts +10 -0
  582. package/types/package-checks/markdown-lint/default-check.d.ts +37 -0
  583. package/types/package-checks/markdown-lint/execution.d.ts +24 -0
  584. package/types/package-checks/markdown-lint/final-data.d.ts +8 -0
  585. package/types/package-checks/markdown-lint/finding-messages.d.ts +6 -0
  586. package/types/package-checks/markdown-lint/finding-waiver-identity.d.ts +3 -0
  587. package/types/package-checks/markdown-lint/findings-cache.d.ts +17 -0
  588. package/types/package-checks/markdown-lint/options-resolution.d.ts +3 -0
  589. package/types/package-checks/markdown-lint/options-validation.d.ts +2 -0
  590. package/types/package-checks/markdown-lint/options.d.ts +65 -0
  591. package/types/package-checks/markdown-lint/records.d.ts +39 -0
  592. package/types/package-checks/markdown-lint/unavailable-reasons.d.ts +3 -0
  593. package/types/package-checks/secret-detection/default-check.d.ts +4 -1
  594. package/types/package-checks/secret-detection/options.d.ts +3 -2
  595. package/types/package-tools/admission-policy/define-admission-policy.d.ts +26 -0
  596. package/types/{check → package-tools/finding-presentation}/finding-presentation.d.ts +3 -1
  597. package/types/{finding-waivers → package-tools/finding-waivers}/reconciliation.d.ts +3 -3
  598. package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/prediction.d.ts +2 -2
  599. package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/preparation.d.ts +1 -1
  600. package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/recording.d.ts +1 -1
  601. package/types/{learned-critical-path → package-tools/learned-critical-path}/selection-layers.d.ts +1 -1
  602. package/types/{learned-critical-path → package-tools/learned-critical-path}/static-decision.d.ts +1 -1
  603. package/types/{learned-critical-path → package-tools/learned-critical-path}/strategy.d.ts +1 -1
  604. package/types/project-definition/check-tree/authoring.d.ts +5 -3
  605. package/types/project-definition/check-tree/check-fields-authoring.d.ts +12 -7
  606. package/types/project-definition/check-tree/flag-conditions.d.ts +5 -0
  607. package/types/project-definition/check-tree/resolution.d.ts +6 -4
  608. package/types/project-definition/declarative-snapshot.d.ts +4 -1
  609. package/types/project-definition/project-changes.d.ts +30 -0
  610. package/types/project-definition/project-definition.d.ts +15 -30
  611. package/types/project-definition/scheduler-policy.d.ts +3 -3
  612. package/types/project-run/admission-strategy-provider/prepared-admission-strategy.d.ts +2 -2
  613. package/types/project-run/aggregation.d.ts +8 -6
  614. package/types/project-run/changes/git.d.ts +14 -0
  615. package/types/project-run/check-execution/admitted-check-execution.d.ts +18 -0
  616. package/types/project-run/check-execution/dependencies.d.ts +3 -0
  617. package/types/project-run/check-execution/execution-finalization.d.ts +1 -1
  618. package/types/project-run/check-execution/execution-settlement.d.ts +15 -7
  619. package/types/project-run/check-execution/flag-controls.d.ts +1 -1
  620. package/types/project-run/check-execution/lifecycle.d.ts +9 -5
  621. package/types/project-run/check-execution/{preflight-result.d.ts → preparation-result.d.ts} +3 -3
  622. package/types/project-run/check-execution/{preflight.d.ts → preparation.d.ts} +10 -9
  623. package/types/project-run/check-execution/ready-check-execution.d.ts +18 -0
  624. package/types/project-run/check-execution/resolved-checks.d.ts +12 -13
  625. package/types/project-run/check-execution/scheduled-check-run.d.ts +10 -0
  626. package/types/project-run/check-execution/terminal-result.d.ts +13 -1
  627. package/types/project-run/completion/completion.d.ts +3 -1
  628. package/types/project-run/controls/contract.d.ts +6 -16
  629. package/types/project-run/invocation/candidates.d.ts +8 -0
  630. package/types/project-run/invocation/execution.d.ts +5 -0
  631. package/types/project-run/invocation/run.d.ts +2 -2
  632. package/types/project-run/outputs/status.d.ts +4 -4
  633. package/types/project-run/progress-rendering/presentation.d.ts +4 -3
  634. package/types/project-run/progress-rendering/renderer-formatting.d.ts +5 -2
  635. package/types/project-run/progress-rendering/renderer-lifecycle.d.ts +2 -0
  636. package/types/project-run/progress-rendering/renderer.d.ts +4 -2
  637. package/types/project-run/project-context.d.ts +3 -3
  638. package/types/project-run/result.d.ts +3 -3
  639. package/types/project-run/run.d.ts +1 -1
  640. package/types/project-run/task-scheduler/admission-core/compiled-graph-lookup.d.ts +10 -0
  641. package/types/project-run/task-scheduler/execution-state.d.ts +4 -4
  642. package/types/project-run/task-scheduler/measurement/diagnostics.d.ts +2 -2
  643. package/types/project-run/task-scheduler/scheduler-terminal-measurement.d.ts +1 -1
  644. package/dist/esm/cache/cache-json-by-key.mjs.map +0 -1
  645. package/dist/esm/check/finding-presentation.mjs.map +0 -1
  646. package/dist/esm/finding-waivers/reconciliation.mjs.map +0 -1
  647. package/dist/esm/learned-critical-path/duration-model/bounded-history.mjs.map +0 -1
  648. package/dist/esm/learned-critical-path/duration-model/prediction.mjs.map +0 -1
  649. package/dist/esm/learned-critical-path/duration-model/preparation.mjs.map +0 -1
  650. package/dist/esm/learned-critical-path/duration-model/recording.mjs.map +0 -1
  651. package/dist/esm/learned-critical-path/duration-model/storage.mjs.map +0 -1
  652. package/dist/esm/learned-critical-path/selection-layers.mjs.map +0 -1
  653. package/dist/esm/learned-critical-path/static-decision.mjs.map +0 -1
  654. package/dist/esm/learned-critical-path/strategy.mjs.map +0 -1
  655. package/dist/esm/package-checks/project-files/config-glob.mjs.map +0 -1
  656. package/dist/esm/project-run/check-execution/preflight-result.mjs.map +0 -1
  657. package/dist/esm/project-run/check-execution/preflight.mjs.map +0 -1
  658. package/dist/esm/project-run/task-scheduler/critical-path-ranking.mjs.map +0 -1
  659. package/types/package-checks/project-files/config-glob.d.ts +0 -5
  660. /package/dist/esm/{check → package-tools/finding-presentation}/finding-presentation.mjs +0 -0
  661. /package/dist/esm/{project-run/task-scheduler → package-tools/learned-critical-path}/critical-path-ranking.mjs +0 -0
  662. /package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/bounded-history.mjs +0 -0
  663. /package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/duration-model/recording.mjs +0 -0
  664. /package/dist/esm/{learned-critical-path → package-tools/learned-critical-path}/static-decision.mjs +0 -0
  665. /package/src/{project-run/task-scheduler → package-tools/learned-critical-path}/critical-path-ranking.ts +0 -0
  666. /package/src/{learned-critical-path → package-tools/learned-critical-path}/duration-model/bounded-history.ts +0 -0
  667. /package/types/{cache → package-tools/cache}/cache-json-by-key.d.ts +0 -0
  668. /package/types/{project-run/task-scheduler → package-tools/learned-critical-path}/critical-path-ranking.d.ts +0 -0
  669. /package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/bounded-history.d.ts +0 -0
  670. /package/types/{learned-critical-path → package-tools/learned-critical-path}/duration-model/storage.d.ts +0 -0
@@ -0,0 +1,134 @@
1
+ import { isAbsolute, resolve } from "node:path";
2
+ import { runProcess } from "../host-environment/process.mjs";
3
+ import { isValidResolvedCommandCheckOptions, resolveCommandCheckEnvironment } from "./options.mjs";
4
+ import { closedTranscript, runningTranscript, writeCommandTranscript } from "./transcript.mjs";
5
+ /** Executes one validated no-shell command and releases all child material after optional transcript persistence. */
6
+ export async function executeCommandCheck(context, executionExtensions = {}) {
7
+ if (!isValidResolvedCommandCheckOptions(context.options))
8
+ return unavailable("invalid-options");
9
+ const environment = await resolveExecutionEnvironment(context, executionExtensions.resolveEnvironment);
10
+ if (environment === undefined)
11
+ return unavailable("command-environment-resolution-failed");
12
+ return executeResolvedCommand(context, environment, executionExtensions.afterCommand);
13
+ }
14
+ /** Runs one resolved command, preserving requested transcripts before caller-owned settlement. */
15
+ async function executeResolvedCommand(context, environment, afterCommand) {
16
+ const { options } = context;
17
+ if (!(await writeRunningCommandTranscript(context.artifactDirectory, options.output.mode))) {
18
+ return unavailable("command-transcript-unavailable");
19
+ }
20
+ const result = await runProcess({
21
+ args: options.arguments,
22
+ cancelSignal: context.signal,
23
+ command: options.executable,
24
+ cwd: resolveWorkingDirectory(options.workingDirectory, context.project.root),
25
+ env: executionEnvironment(environment),
26
+ extendEnv: false,
27
+ label: "command Check",
28
+ maxBuffer: options.outputByteLimit,
29
+ timeout: options.timeoutMs
30
+ });
31
+ const terminal = terminalResult(result);
32
+ if (!(await writeClosedCommandTranscript(context.artifactDirectory, options.output.mode, terminal.status, result))) {
33
+ return unavailable("command-transcript-unavailable");
34
+ }
35
+ return settleCommandResult(context, result, terminal.result, afterCommand);
36
+ }
37
+ /** Writes the running marker only where output policy and artifact capability both allow it. */
38
+ async function writeRunningCommandTranscript(artifactDirectory, outputMode) {
39
+ if (outputMode === "discard")
40
+ return true;
41
+ return (artifactDirectory !== null && writeCommandTranscript(artifactDirectory, runningTranscript()));
42
+ }
43
+ /** Replaces the running marker with final child material before any caller-owned callback observes it. */
44
+ async function writeClosedCommandTranscript(artifactDirectory, outputMode, status, result) {
45
+ if (outputMode === "discard")
46
+ return true;
47
+ return (artifactDirectory !== null &&
48
+ writeCommandTranscript(artifactDirectory, closedTranscript({ status, stderr: result.stderr, stdout: result.stdout })));
49
+ }
50
+ /** Lets the caller settle only complete numeric exits; all other terminal causes remain Product-owned. */
51
+ function settleCommandResult(context, result, defaultResult, afterCommand) {
52
+ if (afterCommand === undefined || !isCompleteCommandResult(result))
53
+ return defaultResult;
54
+ return afterCommand.execute(Object.freeze({
55
+ ...context,
56
+ command: Object.freeze({
57
+ exitCode: result.status,
58
+ stderr: result.stderr,
59
+ stdout: result.stdout
60
+ })
61
+ }));
62
+ }
63
+ async function resolveExecutionEnvironment(context, resolver) {
64
+ if (resolver === undefined)
65
+ return context.options.environment;
66
+ try {
67
+ const environment = await resolver(Object.freeze({
68
+ dependencies: context.dependencies,
69
+ options: context.options,
70
+ project: context.project,
71
+ signal: context.signal
72
+ }));
73
+ return resolveCommandCheckEnvironment(environment);
74
+ }
75
+ catch {
76
+ return undefined;
77
+ }
78
+ }
79
+ function resolveWorkingDirectory(workingDirectory, projectRoot) {
80
+ if (workingDirectory === null)
81
+ return projectRoot;
82
+ if (isAbsolute(workingDirectory))
83
+ return workingDirectory;
84
+ return resolve(projectRoot, workingDirectory);
85
+ }
86
+ function executionEnvironment(environment) {
87
+ if (environment.mode === "exact")
88
+ return { ...environment.variables };
89
+ const inherited = { ...process.env };
90
+ for (const [name, value] of Object.entries(environment.overrides)) {
91
+ if (value === null)
92
+ delete inherited[name];
93
+ else
94
+ inherited[name] = value;
95
+ }
96
+ return inherited;
97
+ }
98
+ function isCompleteCommandResult(result) {
99
+ return (typeof result.status === "number" &&
100
+ result.isCanceled !== true &&
101
+ result.isMaxBuffer !== true &&
102
+ result.timedOut !== true &&
103
+ result.signal === null);
104
+ }
105
+ function terminalResult(result) {
106
+ if (typeof result.status === "number" && result.status !== 0) {
107
+ return completedTerminal("failed", result.status);
108
+ }
109
+ if (result.isCanceled === true)
110
+ return unavailableTerminal("command-terminated-by-signal");
111
+ if (result.timedOut === true)
112
+ return unavailableTerminal("command-timeout");
113
+ if (result.isMaxBuffer === true)
114
+ return unavailableTerminal("command-output-limit-exceeded");
115
+ if (result.signal !== null)
116
+ return unavailableTerminal("command-terminated-by-signal");
117
+ if (result.status === 0) {
118
+ return completedTerminal("passed", 0);
119
+ }
120
+ return unavailableTerminal("command-start-failed");
121
+ }
122
+ function completedTerminal(status, exitCode) {
123
+ const result = status === "passed"
124
+ ? Object.freeze({ status: "passed", data: Object.freeze({ exitCode }) })
125
+ : Object.freeze({ status: "failed", data: Object.freeze({ exitCode }) });
126
+ return Object.freeze({ result, status });
127
+ }
128
+ function unavailableTerminal(code) {
129
+ return Object.freeze({ result: unavailable(code), status: "unavailable" });
130
+ }
131
+ function unavailable(code) {
132
+ return Object.freeze({ status: "unavailable", reason: Object.freeze({ code }) });
133
+ }
134
+ //# sourceMappingURL=execution.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.mjs","sourceRoot":"","sources":["../../../../src/package-checks/command-check/execution.ts"],"names":[],"mappings":"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","sourcesContent":["import { isAbsolute, resolve } from \"node:path\";\n\nimport type { CheckExecutionContext, CheckResult } from \"../../check/check.ts\";\nimport { runProcess } from \"../host-environment/process.ts\";\nimport { isValidResolvedCommandCheckOptions, resolveCommandCheckEnvironment } from \"./options.ts\";\nimport { closedTranscript, runningTranscript, writeCommandTranscript } from \"./transcript.ts\";\nimport type {\n AfterCommand,\n CommandCheckFinalData,\n CommandEnvironmentResolver,\n CommandCheckUnavailableReasonCode,\n ResolvedCommandCheckOptions\n} from \"./contract.ts\";\n\ntype CommandProcessResult = Awaited<ReturnType<typeof runProcess>> &\n Readonly<{ readonly isCanceled?: true; readonly isMaxBuffer?: true; readonly timedOut?: true }>;\n\n/** Executes one validated no-shell command and releases all child material after optional transcript persistence. */\nexport async function executeCommandCheck(\n context: CheckExecutionContext<ResolvedCommandCheckOptions>,\n executionExtensions: Readonly<{\n readonly afterCommand?: AfterCommand | undefined;\n readonly resolveEnvironment?: CommandEnvironmentResolver | undefined;\n }> = {}\n): Promise<CheckResult> {\n if (!isValidResolvedCommandCheckOptions(context.options)) return unavailable(\"invalid-options\");\n\n const environment = await resolveExecutionEnvironment(\n context,\n executionExtensions.resolveEnvironment\n );\n if (environment === undefined) return unavailable(\"command-environment-resolution-failed\");\n\n return executeResolvedCommand(context, environment, executionExtensions.afterCommand);\n}\n\n/** Runs one resolved command, preserving requested transcripts before caller-owned settlement. */\nasync function executeResolvedCommand(\n context: CheckExecutionContext<ResolvedCommandCheckOptions>,\n environment: ResolvedCommandCheckOptions[\"environment\"],\n afterCommand: AfterCommand | undefined\n): Promise<CheckResult> {\n const { options } = context;\n if (!(await writeRunningCommandTranscript(context.artifactDirectory, options.output.mode))) {\n return unavailable(\"command-transcript-unavailable\");\n }\n\n const result = await runProcess({\n args: options.arguments,\n cancelSignal: context.signal,\n command: options.executable,\n cwd: resolveWorkingDirectory(options.workingDirectory, context.project.root),\n env: executionEnvironment(environment),\n extendEnv: false,\n label: \"command Check\",\n maxBuffer: options.outputByteLimit,\n timeout: options.timeoutMs\n });\n const terminal = terminalResult(result);\n if (\n !(await writeClosedCommandTranscript(\n context.artifactDirectory,\n options.output.mode,\n terminal.status,\n result\n ))\n ) {\n return unavailable(\"command-transcript-unavailable\");\n }\n return settleCommandResult(context, result, terminal.result, afterCommand);\n}\n\n/** Writes the running marker only where output policy and artifact capability both allow it. */\nasync function writeRunningCommandTranscript(\n artifactDirectory: string | null,\n outputMode: ResolvedCommandCheckOptions[\"output\"][\"mode\"]\n): Promise<boolean> {\n if (outputMode === \"discard\") return true;\n return (\n artifactDirectory !== null && writeCommandTranscript(artifactDirectory, runningTranscript())\n );\n}\n\n/** Replaces the running marker with final child material before any caller-owned callback observes it. */\nasync function writeClosedCommandTranscript(\n artifactDirectory: string | null,\n outputMode: ResolvedCommandCheckOptions[\"output\"][\"mode\"],\n status: \"passed\" | \"failed\" | \"unavailable\",\n result: CommandProcessResult\n): Promise<boolean> {\n if (outputMode === \"discard\") return true;\n return (\n artifactDirectory !== null &&\n writeCommandTranscript(\n artifactDirectory,\n closedTranscript({ status, stderr: result.stderr, stdout: result.stdout })\n )\n );\n}\n\n/** Lets the caller settle only complete numeric exits; all other terminal causes remain Product-owned. */\nfunction settleCommandResult(\n context: CheckExecutionContext<ResolvedCommandCheckOptions>,\n result: CommandProcessResult,\n defaultResult: CheckResult<CommandCheckFinalData>,\n afterCommand: AfterCommand | undefined\n): CheckResult | Promise<CheckResult> {\n if (afterCommand === undefined || !isCompleteCommandResult(result)) return defaultResult;\n return afterCommand.execute(\n Object.freeze({\n ...context,\n command: Object.freeze({\n exitCode: result.status,\n stderr: result.stderr,\n stdout: result.stdout\n })\n })\n );\n}\n\nasync function resolveExecutionEnvironment(\n context: CheckExecutionContext<ResolvedCommandCheckOptions>,\n resolver: CommandEnvironmentResolver | undefined\n): Promise<ResolvedCommandCheckOptions[\"environment\"] | undefined> {\n if (resolver === undefined) return context.options.environment;\n try {\n const environment = await resolver(\n Object.freeze({\n dependencies: context.dependencies,\n options: context.options,\n project: context.project,\n signal: context.signal\n })\n );\n return resolveCommandCheckEnvironment(environment);\n } catch {\n return undefined;\n }\n}\n\nfunction resolveWorkingDirectory(workingDirectory: string | null, projectRoot: string): string {\n if (workingDirectory === null) return projectRoot;\n if (isAbsolute(workingDirectory)) return workingDirectory;\n return resolve(projectRoot, workingDirectory);\n}\n\nfunction executionEnvironment(\n environment: ResolvedCommandCheckOptions[\"environment\"]\n): NodeJS.ProcessEnv {\n if (environment.mode === \"exact\") return { ...environment.variables };\n const inherited: NodeJS.ProcessEnv = { ...process.env };\n for (const [name, value] of Object.entries(environment.overrides)) {\n if (value === null) delete inherited[name];\n else inherited[name] = value;\n }\n return inherited;\n}\n\nfunction isCompleteCommandResult(result: CommandProcessResult): result is CommandProcessResult & {\n readonly status: number;\n} {\n return (\n typeof result.status === \"number\" &&\n result.isCanceled !== true &&\n result.isMaxBuffer !== true &&\n result.timedOut !== true &&\n result.signal === null\n );\n}\n\nfunction terminalResult(result: CommandProcessResult): Readonly<{\n readonly result: CheckResult<CommandCheckFinalData>;\n readonly status: \"passed\" | \"failed\" | \"unavailable\";\n}> {\n if (typeof result.status === \"number\" && result.status !== 0) {\n return completedTerminal(\"failed\", result.status);\n }\n if (result.isCanceled === true) return unavailableTerminal(\"command-terminated-by-signal\");\n if (result.timedOut === true) return unavailableTerminal(\"command-timeout\");\n if (result.isMaxBuffer === true) return unavailableTerminal(\"command-output-limit-exceeded\");\n if (result.signal !== null) return unavailableTerminal(\"command-terminated-by-signal\");\n if (result.status === 0) {\n return completedTerminal(\"passed\", 0);\n }\n return unavailableTerminal(\"command-start-failed\");\n}\n\nfunction completedTerminal(\n status: \"passed\" | \"failed\",\n exitCode: number\n): Readonly<{\n readonly result: CheckResult<CommandCheckFinalData>;\n readonly status: \"passed\" | \"failed\";\n}> {\n const result: CheckResult<CommandCheckFinalData> =\n status === \"passed\"\n ? Object.freeze({ status: \"passed\" as const, data: Object.freeze({ exitCode }) })\n : Object.freeze({ status: \"failed\" as const, data: Object.freeze({ exitCode }) });\n return Object.freeze({ result, status });\n}\n\nfunction unavailableTerminal(code: CommandCheckUnavailableReasonCode): Readonly<{\n readonly result: CheckResult<CommandCheckFinalData>;\n readonly status: \"unavailable\";\n}> {\n return Object.freeze({ result: unavailable(code), status: \"unavailable\" });\n}\n\nfunction unavailable(code: CommandCheckUnavailableReasonCode): CheckResult<CommandCheckFinalData> {\n return Object.freeze({ status: \"unavailable\", reason: Object.freeze({ code }) });\n}\n"]}
@@ -0,0 +1,284 @@
1
+ import { snapshotClosedArray, snapshotClosedPolicyRecord, snapshotClosedRecord, snapshotExactClosedRecord } from "../../data-boundary/closed-values.mjs";
2
+ import { isNonEmptyString, isPositiveSafeInteger } from "../../data-boundary/value-shapes.mjs";
3
+ const COMMAND_INPUT_OPTIONAL_KEYS = [
4
+ "admissionPriority",
5
+ "afterCommand",
6
+ "arguments",
7
+ "checks",
8
+ "dependsOn",
9
+ "enabledByFlags",
10
+ "environment",
11
+ "maxParallel",
12
+ "mutex",
13
+ "observes",
14
+ "omitQuietPassedRow",
15
+ "output",
16
+ "resourceClaims",
17
+ "resolveEnvironment",
18
+ "workingDirectory"
19
+ ];
20
+ const COMMAND_INPUT_REQUIRED_KEYS = [
21
+ "checkId",
22
+ "displayName",
23
+ "executable",
24
+ "outputByteLimit",
25
+ "timeoutMs"
26
+ ];
27
+ const RESOLVED_OPTION_KEYS = [
28
+ "arguments",
29
+ "environment",
30
+ "executable",
31
+ "output",
32
+ "outputByteLimit",
33
+ "timeoutMs",
34
+ "workingDirectory"
35
+ ];
36
+ /** Snapshots one closed constructor input and materializes every command-owned omission. */
37
+ export function resolveCommandCheckInput(input) {
38
+ const snapshot = snapshotClosedPolicyRecord(input, {
39
+ optional: COMMAND_INPUT_OPTIONAL_KEYS,
40
+ required: COMMAND_INPUT_REQUIRED_KEYS
41
+ });
42
+ if (snapshot === undefined)
43
+ return undefined;
44
+ const afterCommand = resolveAfterCommand(snapshot.afterCommand);
45
+ const environmentResolver = resolveEnvironmentResolver(snapshot.resolveEnvironment);
46
+ if ((snapshot.afterCommand !== undefined && afterCommand === undefined) ||
47
+ (snapshot.resolveEnvironment !== undefined && environmentResolver === undefined) ||
48
+ (snapshot.environment !== undefined && snapshot.resolveEnvironment !== undefined)) {
49
+ return undefined;
50
+ }
51
+ const options = resolveCommandOptions(snapshot);
52
+ return options === undefined
53
+ ? undefined
54
+ : Object.freeze({
55
+ afterCommand,
56
+ options,
57
+ resolveEnvironment: environmentResolver
58
+ });
59
+ }
60
+ /** Resolves one callback-produced environment to the same complete closed shape as static input. */
61
+ export function resolveCommandCheckEnvironment(value) {
62
+ if (value === undefined)
63
+ return undefined;
64
+ return resolveEnvironment(value);
65
+ }
66
+ /** Revalidates the complete resolved shape before execution. */
67
+ export function isValidResolvedCommandCheckOptions(value) {
68
+ const options = snapshotExactClosedRecord(value, RESOLVED_OPTION_KEYS);
69
+ return (options !== undefined &&
70
+ validCommandText(options.executable) &&
71
+ validArguments(options.arguments) &&
72
+ validWorkingDirectory(options.workingDirectory) &&
73
+ validEnvironment(options.environment) &&
74
+ validOutput(options.output) &&
75
+ isPositiveSafeInteger(options.timeoutMs) &&
76
+ isPositiveSafeInteger(options.outputByteLimit));
77
+ }
78
+ function resolveCommandOptions(input) {
79
+ if (!isNonEmptyString(input.checkId) || !isNonEmptyString(input.displayName))
80
+ return undefined;
81
+ const options = resolveCommandExecutionOptions(input);
82
+ if (options === undefined)
83
+ return undefined;
84
+ return isValidResolvedCommandCheckOptions(options) ? options : undefined;
85
+ }
86
+ function resolveAfterCommand(value) {
87
+ if (value === undefined)
88
+ return undefined;
89
+ const afterCommand = snapshotClosedPolicyRecord(value, {
90
+ optional: ["parseData"],
91
+ required: ["execute"]
92
+ });
93
+ if (afterCommand === undefined || !isAfterCommandExecution(afterCommand.execute))
94
+ return undefined;
95
+ if (afterCommand.parseData !== undefined && !isCheckDataParser(afterCommand.parseData)) {
96
+ return undefined;
97
+ }
98
+ return Object.freeze({
99
+ execute: afterCommand.execute,
100
+ ...(afterCommand.parseData === undefined ? {} : { parseData: afterCommand.parseData })
101
+ });
102
+ }
103
+ function resolveEnvironmentResolver(value) {
104
+ return isCommandEnvironmentResolver(value) ? value : undefined;
105
+ }
106
+ function isAfterCommandExecution(value) {
107
+ return typeof value === "function";
108
+ }
109
+ function isCheckDataParser(value) {
110
+ return typeof value === "function";
111
+ }
112
+ function isCommandEnvironmentResolver(value) {
113
+ return typeof value === "function";
114
+ }
115
+ /** Resolves command-owned execution fields after the ordinary Check identity is known valid. */
116
+ function resolveCommandExecutionOptions(input) {
117
+ const argumentsSnapshot = resolveArguments(input.arguments);
118
+ const environment = resolveEnvironment(input.environment);
119
+ const output = resolveOutput(input.output);
120
+ const workingDirectory = resolveWorkingDirectory(input.workingDirectory);
121
+ if (!validCommandText(input.executable) ||
122
+ argumentsSnapshot === undefined ||
123
+ environment === undefined ||
124
+ output === undefined ||
125
+ workingDirectory === undefined ||
126
+ !isPositiveSafeInteger(input.timeoutMs) ||
127
+ !isPositiveSafeInteger(input.outputByteLimit)) {
128
+ return undefined;
129
+ }
130
+ return Object.freeze({
131
+ arguments: argumentsSnapshot,
132
+ environment,
133
+ executable: input.executable,
134
+ output,
135
+ outputByteLimit: input.outputByteLimit,
136
+ timeoutMs: input.timeoutMs,
137
+ workingDirectory
138
+ });
139
+ }
140
+ function resolveArguments(value) {
141
+ if (value === undefined)
142
+ return Object.freeze([]);
143
+ const argumentsSnapshot = snapshotClosedArray(value);
144
+ if (argumentsSnapshot === undefined)
145
+ return undefined;
146
+ const argumentsCopy = [];
147
+ for (const argument of argumentsSnapshot) {
148
+ if (!validArgument(argument))
149
+ return undefined;
150
+ argumentsCopy.push(argument);
151
+ }
152
+ return Object.freeze(argumentsCopy);
153
+ }
154
+ function validArguments(value) {
155
+ const argumentsSnapshot = snapshotClosedArray(value);
156
+ return argumentsSnapshot?.every(validArgument) === true;
157
+ }
158
+ function validArgument(value) {
159
+ return typeof value === "string" && !value.includes("\0");
160
+ }
161
+ function resolveWorkingDirectory(value) {
162
+ if (value === undefined)
163
+ return null;
164
+ return validCommandText(value) ? value : undefined;
165
+ }
166
+ function validWorkingDirectory(value) {
167
+ return value === null || validCommandText(value);
168
+ }
169
+ function validCommandText(value) {
170
+ return isNonEmptyString(value) && !value.includes("\0");
171
+ }
172
+ function resolveEnvironment(value) {
173
+ if (value === undefined)
174
+ return Object.freeze({ mode: "exact", variables: Object.freeze({}) });
175
+ const environment = snapshotClosedRecord(value);
176
+ if (environment === undefined || typeof environment.mode !== "string")
177
+ return undefined;
178
+ if (environment.mode === "exact")
179
+ return resolveExactEnvironment(environment);
180
+ if (environment.mode === "inherit")
181
+ return resolveInheritedEnvironment(environment);
182
+ return undefined;
183
+ }
184
+ function resolveExactEnvironment(environment) {
185
+ const exact = snapshotClosedPolicyRecord(environment, {
186
+ optional: ["variables"],
187
+ required: ["mode"]
188
+ });
189
+ if (exact === undefined)
190
+ return undefined;
191
+ const variables = Object.hasOwn(exact, "variables")
192
+ ? resolveExactVariables(exact.variables)
193
+ : Object.freeze({});
194
+ if (variables === undefined)
195
+ return undefined;
196
+ return Object.freeze({ mode: "exact", variables });
197
+ }
198
+ function resolveInheritedEnvironment(environment) {
199
+ const inherited = snapshotClosedPolicyRecord(environment, {
200
+ optional: ["overrides"],
201
+ required: ["mode"]
202
+ });
203
+ if (inherited === undefined)
204
+ return undefined;
205
+ const overrides = Object.hasOwn(inherited, "overrides")
206
+ ? resolveOverrides(inherited.overrides)
207
+ : Object.freeze({});
208
+ if (overrides === undefined)
209
+ return undefined;
210
+ return Object.freeze({ mode: "inherit", overrides });
211
+ }
212
+ function validEnvironment(value) {
213
+ const environment = snapshotClosedRecord(value);
214
+ if (environment === undefined || typeof environment.mode !== "string")
215
+ return false;
216
+ if (environment.mode === "exact") {
217
+ const exact = snapshotExactClosedRecord(environment, ["mode", "variables"]);
218
+ return exact !== undefined && validVariableMap(exact.variables, false);
219
+ }
220
+ if (environment.mode === "inherit") {
221
+ const inherited = snapshotExactClosedRecord(environment, ["mode", "overrides"]);
222
+ return inherited !== undefined && validVariableMap(inherited.overrides, true);
223
+ }
224
+ return false;
225
+ }
226
+ function resolveExactVariables(value) {
227
+ const variables = snapshotClosedRecord(value);
228
+ if (variables === undefined)
229
+ return undefined;
230
+ const copied = {};
231
+ for (const [name, variable] of Object.entries(variables)) {
232
+ if (name.includes("\0") || typeof variable !== "string" || variable.includes("\0"))
233
+ return undefined;
234
+ Object.defineProperty(copied, name, {
235
+ configurable: false,
236
+ enumerable: true,
237
+ value: variable,
238
+ writable: false
239
+ });
240
+ }
241
+ return Object.freeze(copied);
242
+ }
243
+ function resolveOverrides(value) {
244
+ const overrides = snapshotClosedRecord(value);
245
+ if (overrides === undefined)
246
+ return undefined;
247
+ const copied = {};
248
+ for (const [name, override] of Object.entries(overrides)) {
249
+ if (name.includes("\0") ||
250
+ (override !== null && (typeof override !== "string" || override.includes("\0")))) {
251
+ return undefined;
252
+ }
253
+ Object.defineProperty(copied, name, {
254
+ configurable: false,
255
+ enumerable: true,
256
+ value: override,
257
+ writable: false
258
+ });
259
+ }
260
+ return Object.freeze(copied);
261
+ }
262
+ function validVariableMap(value, acceptsNull) {
263
+ const variables = snapshotClosedRecord(value);
264
+ return variables !== undefined && validVariableEntries(variables, acceptsNull);
265
+ }
266
+ function validVariableEntries(variables, acceptsNull) {
267
+ return Object.entries(variables).every(([name, variable]) => !name.includes("\0") &&
268
+ (typeof variable === "string" ? !variable.includes("\0") : acceptsNull && variable === null));
269
+ }
270
+ function resolveOutput(value) {
271
+ if (value === undefined)
272
+ return Object.freeze({ mode: "discard" });
273
+ const output = snapshotExactClosedRecord(value, ["mode"]);
274
+ if (output === undefined)
275
+ return undefined;
276
+ if (output.mode !== "discard" && output.mode !== "transcript")
277
+ return undefined;
278
+ return Object.freeze({ mode: output.mode });
279
+ }
280
+ function validOutput(value) {
281
+ const output = snapshotExactClosedRecord(value, ["mode"]);
282
+ return output !== undefined && (output.mode === "discard" || output.mode === "transcript");
283
+ }
284
+ //# sourceMappingURL=options.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.mjs","sourceRoot":"","sources":["../../../../src/package-checks/command-check/options.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAO9F,MAAM,2BAA2B,GAAG;IAClC,mBAAmB;IACnB,cAAc;IACd,WAAW;IACX,QAAQ;IACR,WAAW;IACX,gBAAgB;IAChB,aAAa;IACb,aAAa;IACb,OAAO;IACP,UAAU;IACV,oBAAoB;IACpB,QAAQ;IACR,gBAAgB;IAChB,oBAAoB;IACpB,kBAAkB;CACV,CAAC;AACX,MAAM,2BAA2B,GAAG;IAClC,SAAS;IACT,aAAa;IACb,YAAY;IACZ,iBAAiB;IACjB,WAAW;CACH,CAAC;AACX,MAAM,oBAAoB,GAAG;IAC3B,WAAW;IACX,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,iBAAiB;IACjB,WAAW;IACX,kBAAkB;CACV,CAAC;AAEX,4FAA4F;AAC5F,MAAM,UAAU,wBAAwB,CAAC,KAAc;IAOrD,MAAM,QAAQ,GAAG,0BAA0B,CAAC,KAAK,EAAE;QACjD,QAAQ,EAAE,2BAA2B;QACrC,QAAQ,EAAE,2BAA2B;KACtC,CAAC,CAAC;IACH,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC7C,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAChE,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACpF,IACE,CAAC,QAAQ,CAAC,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS,CAAC;QACnE,CAAC,QAAQ,CAAC,kBAAkB,KAAK,SAAS,IAAI,mBAAmB,KAAK,SAAS,CAAC;QAChF,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,IAAI,QAAQ,CAAC,kBAAkB,KAAK,SAAS,CAAC,EACjF,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChD,OAAO,OAAO,KAAK,SAAS;QAC1B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACZ,YAAY;YACZ,OAAO;YACP,kBAAkB,EAAE,mBAAmB;SACxC,CAAC,CAAC;AACT,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,8BAA8B,CAC5C,KAAc;IAEd,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,kCAAkC,CAChD,KAAc;IAEd,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IACvE,OAAO,CACL,OAAO,KAAK,SAAS;QACrB,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC;QACpC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC;QACjC,qBAAqB,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAC/C,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC;QACrC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;QAC3B,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC;QACxC,qBAAqB,CAAC,OAAO,CAAC,eAAe,CAAC,CAC/C,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAwC;IAExC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/F,MAAM,OAAO,GAAG,8BAA8B,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC5C,OAAO,kCAAkC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,YAAY,GAAG,0BAA0B,CAAC,KAAK,EAAE;QACrD,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB,CAAC,CAAC;IACH,IAAI,YAAY,KAAK,SAAS,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,OAAO,CAAC;QAC9E,OAAO,SAAS,CAAC;IACnB,IAAI,YAAY,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;QACvF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,YAAY,CAAC,OAAO;QAC7B,GAAG,CAAC,YAAY,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC;KACvF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAc;IAChD,OAAO,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC;AACrC,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC;AACrC,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAc;IAClD,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC;AACrC,CAAC;AAED,gGAAgG;AAChG,SAAS,8BAA8B,CACrC,KAAwC;IAExC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACzE,IACE,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC;QACnC,iBAAiB,KAAK,SAAS;QAC/B,WAAW,KAAK,SAAS;QACzB,MAAM,KAAK,SAAS;QACpB,gBAAgB,KAAK,SAAS;QAC9B,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC;QACvC,CAAC,qBAAqB,CAAC,KAAK,CAAC,eAAe,CAAC,EAC7C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,SAAS,EAAE,iBAAiB;QAC5B,WAAW;QACX,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM;QACN,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,gBAAgB;KACjB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClD,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACrD,IAAI,iBAAiB,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACtD,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE,CAAC;QACzC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;YAAE,OAAO,SAAS,CAAC;QAC/C,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACrD,OAAO,iBAAiB,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;AAC1D,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,OAAO,KAAK,KAAK,IAAI,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAc;IAEd,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/F,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,WAAW,KAAK,SAAS,IAAI,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACxF,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,uBAAuB,CAAC,WAAW,CAAC,CAAC;IAC9E,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,2BAA2B,CAAC,WAAW,CAAC,CAAC;IACpF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,uBAAuB,CAC9B,WAA8C;IAE9C,MAAM,KAAK,GAAG,0BAA0B,CAAC,WAAW,EAAE;QACpD,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC;QACjD,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC;QACxC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACtB,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,2BAA2B,CAClC,WAA8C;IAE9C,MAAM,SAAS,GAAG,0BAA0B,CAAC,WAAW,EAAE;QACxD,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC;QACrD,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC;QACvC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACtB,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,WAAW,KAAK,SAAS,IAAI,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACpF,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,yBAAyB,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;QAC5E,OAAO,KAAK,KAAK,SAAS,IAAI,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,yBAAyB,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;QAChF,OAAO,SAAS,KAAK,SAAS,IAAI,gBAAgB,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;YAChF,OAAO,SAAS,CAAC;QACnB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE;YAClC,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,MAAM,MAAM,GAAkC,EAAE,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACzD,IACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACnB,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAChF,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE;YAClC,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc,EAAE,WAAoB;IAC5D,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,SAAS,KAAK,SAAS,IAAI,oBAAoB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,oBAAoB,CAC3B,SAA4C,EAC5C,WAAoB;IAEpB,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CACpC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,CACnB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpB,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,QAAQ,KAAK,IAAI,CAAC,CAC/F,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,SAAS,CAAC;IAChF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,OAAO,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;AAC7F,CAAC","sourcesContent":["import {\n snapshotClosedArray,\n snapshotClosedPolicyRecord,\n snapshotClosedRecord,\n snapshotExactClosedRecord\n} from \"../../data-boundary/closed-values.ts\";\nimport { isNonEmptyString, isPositiveSafeInteger } from \"../../data-boundary/value-shapes.ts\";\nimport type {\n AfterCommand,\n CommandEnvironmentResolver,\n ResolvedCommandCheckOptions\n} from \"./contract.ts\";\n\nconst COMMAND_INPUT_OPTIONAL_KEYS = [\n \"admissionPriority\",\n \"afterCommand\",\n \"arguments\",\n \"checks\",\n \"dependsOn\",\n \"enabledByFlags\",\n \"environment\",\n \"maxParallel\",\n \"mutex\",\n \"observes\",\n \"omitQuietPassedRow\",\n \"output\",\n \"resourceClaims\",\n \"resolveEnvironment\",\n \"workingDirectory\"\n] as const;\nconst COMMAND_INPUT_REQUIRED_KEYS = [\n \"checkId\",\n \"displayName\",\n \"executable\",\n \"outputByteLimit\",\n \"timeoutMs\"\n] as const;\nconst RESOLVED_OPTION_KEYS = [\n \"arguments\",\n \"environment\",\n \"executable\",\n \"output\",\n \"outputByteLimit\",\n \"timeoutMs\",\n \"workingDirectory\"\n] as const;\n\n/** Snapshots one closed constructor input and materializes every command-owned omission. */\nexport function resolveCommandCheckInput(input: unknown):\n | Readonly<{\n readonly afterCommand: AfterCommand | undefined;\n readonly options: ResolvedCommandCheckOptions;\n readonly resolveEnvironment: CommandEnvironmentResolver | undefined;\n }>\n | undefined {\n const snapshot = snapshotClosedPolicyRecord(input, {\n optional: COMMAND_INPUT_OPTIONAL_KEYS,\n required: COMMAND_INPUT_REQUIRED_KEYS\n });\n if (snapshot === undefined) return undefined;\n const afterCommand = resolveAfterCommand(snapshot.afterCommand);\n const environmentResolver = resolveEnvironmentResolver(snapshot.resolveEnvironment);\n if (\n (snapshot.afterCommand !== undefined && afterCommand === undefined) ||\n (snapshot.resolveEnvironment !== undefined && environmentResolver === undefined) ||\n (snapshot.environment !== undefined && snapshot.resolveEnvironment !== undefined)\n ) {\n return undefined;\n }\n const options = resolveCommandOptions(snapshot);\n return options === undefined\n ? undefined\n : Object.freeze({\n afterCommand,\n options,\n resolveEnvironment: environmentResolver\n });\n}\n\n/** Resolves one callback-produced environment to the same complete closed shape as static input. */\nexport function resolveCommandCheckEnvironment(\n value: unknown\n): ResolvedCommandCheckOptions[\"environment\"] | undefined {\n if (value === undefined) return undefined;\n return resolveEnvironment(value);\n}\n\n/** Revalidates the complete resolved shape before execution. */\nexport function isValidResolvedCommandCheckOptions(\n value: unknown\n): value is ResolvedCommandCheckOptions {\n const options = snapshotExactClosedRecord(value, RESOLVED_OPTION_KEYS);\n return (\n options !== undefined &&\n validCommandText(options.executable) &&\n validArguments(options.arguments) &&\n validWorkingDirectory(options.workingDirectory) &&\n validEnvironment(options.environment) &&\n validOutput(options.output) &&\n isPositiveSafeInteger(options.timeoutMs) &&\n isPositiveSafeInteger(options.outputByteLimit)\n );\n}\n\nfunction resolveCommandOptions(\n input: Readonly<Record<string, unknown>>\n): ResolvedCommandCheckOptions | undefined {\n if (!isNonEmptyString(input.checkId) || !isNonEmptyString(input.displayName)) return undefined;\n const options = resolveCommandExecutionOptions(input);\n if (options === undefined) return undefined;\n return isValidResolvedCommandCheckOptions(options) ? options : undefined;\n}\n\nfunction resolveAfterCommand(value: unknown): AfterCommand | undefined {\n if (value === undefined) return undefined;\n const afterCommand = snapshotClosedPolicyRecord(value, {\n optional: [\"parseData\"],\n required: [\"execute\"]\n });\n if (afterCommand === undefined || !isAfterCommandExecution(afterCommand.execute))\n return undefined;\n if (afterCommand.parseData !== undefined && !isCheckDataParser(afterCommand.parseData)) {\n return undefined;\n }\n return Object.freeze({\n execute: afterCommand.execute,\n ...(afterCommand.parseData === undefined ? {} : { parseData: afterCommand.parseData })\n });\n}\n\nfunction resolveEnvironmentResolver(value: unknown): CommandEnvironmentResolver | undefined {\n return isCommandEnvironmentResolver(value) ? value : undefined;\n}\n\nfunction isAfterCommandExecution(value: unknown): value is AfterCommand[\"execute\"] {\n return typeof value === \"function\";\n}\n\nfunction isCheckDataParser(value: unknown): value is NonNullable<AfterCommand[\"parseData\"]> {\n return typeof value === \"function\";\n}\n\nfunction isCommandEnvironmentResolver(value: unknown): value is CommandEnvironmentResolver {\n return typeof value === \"function\";\n}\n\n/** Resolves command-owned execution fields after the ordinary Check identity is known valid. */\nfunction resolveCommandExecutionOptions(\n input: Readonly<Record<string, unknown>>\n): ResolvedCommandCheckOptions | undefined {\n const argumentsSnapshot = resolveArguments(input.arguments);\n const environment = resolveEnvironment(input.environment);\n const output = resolveOutput(input.output);\n const workingDirectory = resolveWorkingDirectory(input.workingDirectory);\n if (\n !validCommandText(input.executable) ||\n argumentsSnapshot === undefined ||\n environment === undefined ||\n output === undefined ||\n workingDirectory === undefined ||\n !isPositiveSafeInteger(input.timeoutMs) ||\n !isPositiveSafeInteger(input.outputByteLimit)\n ) {\n return undefined;\n }\n return Object.freeze({\n arguments: argumentsSnapshot,\n environment,\n executable: input.executable,\n output,\n outputByteLimit: input.outputByteLimit,\n timeoutMs: input.timeoutMs,\n workingDirectory\n });\n}\n\nfunction resolveArguments(value: unknown): readonly string[] | undefined {\n if (value === undefined) return Object.freeze([]);\n const argumentsSnapshot = snapshotClosedArray(value);\n if (argumentsSnapshot === undefined) return undefined;\n const argumentsCopy: string[] = [];\n for (const argument of argumentsSnapshot) {\n if (!validArgument(argument)) return undefined;\n argumentsCopy.push(argument);\n }\n return Object.freeze(argumentsCopy);\n}\n\nfunction validArguments(value: unknown): boolean {\n const argumentsSnapshot = snapshotClosedArray(value);\n return argumentsSnapshot?.every(validArgument) === true;\n}\n\nfunction validArgument(value: unknown): value is string {\n return typeof value === \"string\" && !value.includes(\"\\0\");\n}\n\nfunction resolveWorkingDirectory(value: unknown): string | null | undefined {\n if (value === undefined) return null;\n return validCommandText(value) ? value : undefined;\n}\n\nfunction validWorkingDirectory(value: unknown): value is string | null {\n return value === null || validCommandText(value);\n}\n\nfunction validCommandText(value: unknown): value is string {\n return isNonEmptyString(value) && !value.includes(\"\\0\");\n}\n\nfunction resolveEnvironment(\n value: unknown\n): ResolvedCommandCheckOptions[\"environment\"] | undefined {\n if (value === undefined) return Object.freeze({ mode: \"exact\", variables: Object.freeze({}) });\n const environment = snapshotClosedRecord(value);\n if (environment === undefined || typeof environment.mode !== \"string\") return undefined;\n if (environment.mode === \"exact\") return resolveExactEnvironment(environment);\n if (environment.mode === \"inherit\") return resolveInheritedEnvironment(environment);\n return undefined;\n}\n\nfunction resolveExactEnvironment(\n environment: Readonly<Record<string, unknown>>\n): ResolvedCommandCheckOptions[\"environment\"] | undefined {\n const exact = snapshotClosedPolicyRecord(environment, {\n optional: [\"variables\"],\n required: [\"mode\"]\n });\n if (exact === undefined) return undefined;\n const variables = Object.hasOwn(exact, \"variables\")\n ? resolveExactVariables(exact.variables)\n : Object.freeze({});\n if (variables === undefined) return undefined;\n return Object.freeze({ mode: \"exact\", variables });\n}\n\nfunction resolveInheritedEnvironment(\n environment: Readonly<Record<string, unknown>>\n): ResolvedCommandCheckOptions[\"environment\"] | undefined {\n const inherited = snapshotClosedPolicyRecord(environment, {\n optional: [\"overrides\"],\n required: [\"mode\"]\n });\n if (inherited === undefined) return undefined;\n const overrides = Object.hasOwn(inherited, \"overrides\")\n ? resolveOverrides(inherited.overrides)\n : Object.freeze({});\n if (overrides === undefined) return undefined;\n return Object.freeze({ mode: \"inherit\", overrides });\n}\n\nfunction validEnvironment(value: unknown): boolean {\n const environment = snapshotClosedRecord(value);\n if (environment === undefined || typeof environment.mode !== \"string\") return false;\n if (environment.mode === \"exact\") {\n const exact = snapshotExactClosedRecord(environment, [\"mode\", \"variables\"]);\n return exact !== undefined && validVariableMap(exact.variables, false);\n }\n if (environment.mode === \"inherit\") {\n const inherited = snapshotExactClosedRecord(environment, [\"mode\", \"overrides\"]);\n return inherited !== undefined && validVariableMap(inherited.overrides, true);\n }\n return false;\n}\n\nfunction resolveExactVariables(value: unknown): Readonly<Record<string, string>> | undefined {\n const variables = snapshotClosedRecord(value);\n if (variables === undefined) return undefined;\n const copied: Record<string, string> = {};\n for (const [name, variable] of Object.entries(variables)) {\n if (name.includes(\"\\0\") || typeof variable !== \"string\" || variable.includes(\"\\0\"))\n return undefined;\n Object.defineProperty(copied, name, {\n configurable: false,\n enumerable: true,\n value: variable,\n writable: false\n });\n }\n return Object.freeze(copied);\n}\n\nfunction resolveOverrides(value: unknown): Readonly<Record<string, string | null>> | undefined {\n const overrides = snapshotClosedRecord(value);\n if (overrides === undefined) return undefined;\n const copied: Record<string, string | null> = {};\n for (const [name, override] of Object.entries(overrides)) {\n if (\n name.includes(\"\\0\") ||\n (override !== null && (typeof override !== \"string\" || override.includes(\"\\0\")))\n ) {\n return undefined;\n }\n Object.defineProperty(copied, name, {\n configurable: false,\n enumerable: true,\n value: override,\n writable: false\n });\n }\n return Object.freeze(copied);\n}\n\nfunction validVariableMap(value: unknown, acceptsNull: boolean): boolean {\n const variables = snapshotClosedRecord(value);\n return variables !== undefined && validVariableEntries(variables, acceptsNull);\n}\n\nfunction validVariableEntries(\n variables: Readonly<Record<string, unknown>>,\n acceptsNull: boolean\n): boolean {\n return Object.entries(variables).every(\n ([name, variable]) =>\n !name.includes(\"\\0\") &&\n (typeof variable === \"string\" ? !variable.includes(\"\\0\") : acceptsNull && variable === null)\n );\n}\n\nfunction resolveOutput(value: unknown): ResolvedCommandCheckOptions[\"output\"] | undefined {\n if (value === undefined) return Object.freeze({ mode: \"discard\" });\n const output = snapshotExactClosedRecord(value, [\"mode\"]);\n if (output === undefined) return undefined;\n if (output.mode !== \"discard\" && output.mode !== \"transcript\") return undefined;\n return Object.freeze({ mode: output.mode });\n}\n\nfunction validOutput(value: unknown): boolean {\n const output = snapshotExactClosedRecord(value, [\"mode\"]);\n return output !== undefined && (output.mode === \"discard\" || output.mode === \"transcript\");\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { promises as fs } from "node:fs";
3
+ import { join } from "node:path";
4
+ const TRANSCRIPT_FILE_NAME = "process.log";
5
+ /** Atomically replaces this Check-local fixed transcript without exposing command inputs or native errors. */
6
+ export async function writeCommandTranscript(artifactDirectory, contents) {
7
+ const targetPath = join(artifactDirectory, TRANSCRIPT_FILE_NAME);
8
+ const temporaryPath = join(artifactDirectory, `.process-${randomUUID()}.tmp`);
9
+ try {
10
+ await fs.mkdir(artifactDirectory, { recursive: true });
11
+ await fs.writeFile(temporaryPath, contents, { encoding: "utf8", flag: "wx" });
12
+ await fs.rename(temporaryPath, targetPath);
13
+ return true;
14
+ }
15
+ catch {
16
+ await fs.rm(temporaryPath, { force: true }).catch(() => undefined);
17
+ return false;
18
+ }
19
+ }
20
+ export function runningTranscript() {
21
+ return "status=running\n";
22
+ }
23
+ export function closedTranscript(input) {
24
+ return `status=${input.status}\nstdout:\n${input.stdout}\nstderr:\n${input.stderr}`;
25
+ }
26
+ //# sourceMappingURL=transcript.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript.mjs","sourceRoot":"","sources":["../../../../src/package-checks/command-check/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAE3C,8GAA8G;AAC9G,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,iBAAyB,EACzB,QAAgB;IAEhB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE,YAAY,UAAU,EAAE,MAAM,CAAC,CAAC;IAC9E,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9E,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAIhC;IACC,OAAO,UAAU,KAAK,CAAC,MAAM,cAAc,KAAK,CAAC,MAAM,cAAc,KAAK,CAAC,MAAM,EAAE,CAAC;AACtF,CAAC","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { promises as fs } from \"node:fs\";\nimport { join } from \"node:path\";\n\nconst TRANSCRIPT_FILE_NAME = \"process.log\";\n\n/** Atomically replaces this Check-local fixed transcript without exposing command inputs or native errors. */\nexport async function writeCommandTranscript(\n artifactDirectory: string,\n contents: string\n): Promise<boolean> {\n const targetPath = join(artifactDirectory, TRANSCRIPT_FILE_NAME);\n const temporaryPath = join(artifactDirectory, `.process-${randomUUID()}.tmp`);\n try {\n await fs.mkdir(artifactDirectory, { recursive: true });\n await fs.writeFile(temporaryPath, contents, { encoding: \"utf8\", flag: \"wx\" });\n await fs.rename(temporaryPath, targetPath);\n return true;\n } catch {\n await fs.rm(temporaryPath, { force: true }).catch(() => undefined);\n return false;\n }\n}\n\nexport function runningTranscript(): string {\n return \"status=running\\n\";\n}\n\nexport function closedTranscript(input: {\n readonly status: \"passed\" | \"failed\" | \"unavailable\";\n readonly stderr: string;\n readonly stdout: string;\n}): string {\n return `status=${input.status}\\nstdout:\\n${input.stdout}\\nstderr:\\n${input.stderr}`;\n}\n"]}
@@ -1,25 +1,23 @@
1
1
  import { defineCheck } from "../../check/check.mjs";
2
+ import { resolvePackageCheckAuthoringInput } from "../check-authoring.mjs";
2
3
  import { DUPLICATE_DETECTION_CHECK_DEFINITION, executeDuplicateDetection } from "./execution.mjs";
3
4
  import { parseDuplicateDetectionData } from "./final-data.mjs";
4
5
  import { resolveDuplicateDetectionOptions } from "./options-resolution.mjs";
5
6
  import { validResolvedDuplicateDetectionOptions } from "./options-validation.mjs";
6
- /**
7
- * 使用可省略的区域、cache 与 scanner policy 构造一个完整 duplicate-detection Check。
8
- *
9
- * @param options - 省略字段由 package 补齐;显式 files 数组作为对应字段的完整替换值。
10
- * @returns 固定 `duplicate-detection` identity、完整冻结 options、preflight 与 execution。
11
- * @throws {TypeError} input 含未知字段、空 area、非法阈值、非法 cache 或 scanner policy 时抛出。
12
- */
13
7
  export function duplicateDetection(options = {}) {
14
- const resolvedOptions = resolveDuplicateDetectionOptions(options);
8
+ const input = resolvePackageCheckAuthoringInput(options, ["codeAreas", "cache", "findingPolicy", "findingWaivers", "scanner"], DUPLICATE_DETECTION_CHECK_DEFINITION);
9
+ if (input === undefined) {
10
+ throw new TypeError("duplicateDetection options are invalid; use the documented closed constructor policy including exact finding waivers");
11
+ }
12
+ const resolvedOptions = resolveDuplicateDetectionOptions(input.domainOptions);
15
13
  if (resolvedOptions === undefined) {
16
14
  throw new TypeError("duplicateDetection options are invalid; use the documented closed constructor policy including exact finding waivers");
17
15
  }
18
16
  return defineCheck({
19
- ...DUPLICATE_DETECTION_CHECK_DEFINITION,
20
- execution: executeDuplicateDetection,
17
+ ...input.definition,
18
+ execute: executeDuplicateDetection,
21
19
  parseData: parseDuplicateDetectionData,
22
- preflight: (preparedOptions) => validResolvedDuplicateDetectionOptions(preparedOptions)
20
+ prepare: (preparedOptions) => validResolvedDuplicateDetectionOptions(preparedOptions)
23
21
  ? { status: "success", preparedOptions }
24
22
  : {
25
23
  status: "failure",
@@ -1 +1 @@
1
- {"version":3,"file":"default-check.mjs","sourceRoot":"","sources":["../../../../src/package-checks/duplicate-detection/default-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA8B,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,oCAAoC,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AACjG,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,sCAAsC,EAAE,MAAM,yBAAyB,CAAC;AAEjF;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAO,GAA8B,EAAE;IAMvC,MAAM,eAAe,GAAG,gCAAgC,CAAC,OAAO,CAAC,CAAC;IAClE,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,IAAI,SAAS,CACjB,sHAAsH,CACvH,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC;QACjB,GAAG,oCAAoC;QACvC,SAAS,EAAE,yBAAyB;QACpC,SAAS,EAAE,2BAA2B;QACtC,SAAS,EAAE,CAAC,eAAe,EAAE,EAAE,CAC7B,sCAAsC,CAAC,eAAe,CAAC;YACrD,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,uIAAuI;qBAC1I;iBACF;aACF;QACP,OAAO,EAAE,eAAe;KACzB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { defineCheck, type TypedCheckWithOptions } from \"../../check/check.ts\";\nimport { DUPLICATE_DETECTION_CHECK_DEFINITION, executeDuplicateDetection } from \"./execution.ts\";\nimport { parseDuplicateDetectionData } from \"./final-data.ts\";\nimport type { DuplicateDetectionOptions, ResolvedDuplicateDetectionOptions } from \"./options.ts\";\nimport { resolveDuplicateDetectionOptions } from \"./options-resolution.ts\";\nimport { validResolvedDuplicateDetectionOptions } from \"./options-validation.ts\";\n\n/**\n * 使用可省略的区域、cache 与 scanner policy 构造一个完整 duplicate-detection Check。\n *\n * @param options - 省略字段由 package 补齐;显式 files 数组作为对应字段的完整替换值。\n * @returns 固定 `duplicate-detection` identity、完整冻结 options、preflight 与 execution。\n * @throws {TypeError} input 含未知字段、空 area、非法阈值、非法 cache 或 scanner policy 时抛出。\n */\nexport function duplicateDetection(\n options: DuplicateDetectionOptions = {}\n): TypedCheckWithOptions<\n \"duplicate-detection\",\n ResolvedDuplicateDetectionOptions,\n typeof parseDuplicateDetectionData\n> {\n const resolvedOptions = resolveDuplicateDetectionOptions(options);\n if (resolvedOptions === undefined) {\n throw new TypeError(\n \"duplicateDetection options are invalid; use the documented closed constructor policy including exact finding waivers\"\n );\n }\n return defineCheck({\n ...DUPLICATE_DETECTION_CHECK_DEFINITION,\n execution: executeDuplicateDetection,\n parseData: parseDuplicateDetectionData,\n preflight: (preparedOptions) =>\n validResolvedDuplicateDetectionOptions(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 \"duplicateDetection options are invalid; recreate the Check with duplicateDetection(options) or restore its complete resolved options.\"\n }\n ]\n },\n options: resolvedOptions\n });\n}\n"]}
1
+ {"version":3,"file":"default-check.mjs","sourceRoot":"","sources":["../../../../src/package-checks/duplicate-detection/default-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA8B,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,iCAAiC,EAElC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oCAAoC,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AACjG,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,sCAAsC,EAAE,MAAM,yBAAyB,CAAC;AA0BjF,MAAM,UAAU,kBAAkB,CAChC,OAAO,GAA8B,EAAE;IAMvC,MAAM,KAAK,GAAG,iCAAiC,CAC7C,OAAO,EACP,CAAC,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,SAAS,CAAC,EACpE,oCAAoC,CACrC,CAAC;IACF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,SAAS,CACjB,sHAAsH,CACvH,CAAC;IACJ,CAAC;IACD,MAAM,eAAe,GAAG,gCAAgC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC9E,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,IAAI,SAAS,CACjB,sHAAsH,CACvH,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC;QACjB,GAAG,KAAK,CAAC,UAAU;QACnB,OAAO,EAAE,yBAAyB;QAClC,SAAS,EAAE,2BAA2B;QACtC,OAAO,EAAE,CAAC,eAAe,EAAE,EAAE,CAC3B,sCAAsC,CAAC,eAAe,CAAC;YACrD,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,uIAAuI;qBAC1I;iBACF;aACF;QACP,OAAO,EAAE,eAAe;KACzB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { defineCheck, type TypedCheckWithOptions } from \"../../check/check.ts\";\nimport {\n resolvePackageCheckAuthoringInput,\n type PackageCheckIdentityInput\n} from \"../check-authoring.ts\";\nimport { DUPLICATE_DETECTION_CHECK_DEFINITION, executeDuplicateDetection } from \"./execution.ts\";\nimport { parseDuplicateDetectionData } from \"./final-data.ts\";\nimport type { DuplicateDetectionOptions, ResolvedDuplicateDetectionOptions } from \"./options.ts\";\nimport { resolveDuplicateDetectionOptions } from \"./options-resolution.ts\";\nimport { validResolvedDuplicateDetectionOptions } from \"./options-validation.ts\";\n\n/**\n * 使用可省略的区域、cache 与 scanner policy 构造一个完整 duplicate-detection Check。\n *\n * @param options - 省略字段由 package 补齐;显式 files 数组作为对应字段的完整替换值。\n * @returns 固定 `duplicate-detection` identity、完整冻结 options、preparation 与 execution。\n * @throws {TypeError} input 含未知字段、空 area、非法阈值、非法 cache 或 scanner policy 时抛出。\n */\nexport function duplicateDetection(\n options?: DuplicateDetectionOptions<\"duplicate-detection\">\n): TypedCheckWithOptions<\n \"duplicate-detection\",\n ResolvedDuplicateDetectionOptions,\n typeof parseDuplicateDetectionData\n>;\nexport function duplicateDetection<const Id extends string>(\n options: DuplicateDetectionOptions<Id> & PackageCheckIdentityInput<Id>\n): TypedCheckWithOptions<Id, ResolvedDuplicateDetectionOptions, typeof parseDuplicateDetectionData>;\nexport function duplicateDetection(\n options: DuplicateDetectionOptions\n): TypedCheckWithOptions<\n string,\n ResolvedDuplicateDetectionOptions,\n typeof parseDuplicateDetectionData\n>;\nexport function duplicateDetection(\n options: DuplicateDetectionOptions = {}\n): TypedCheckWithOptions<\n string,\n ResolvedDuplicateDetectionOptions,\n typeof parseDuplicateDetectionData\n> {\n const input = resolvePackageCheckAuthoringInput(\n options,\n [\"codeAreas\", \"cache\", \"findingPolicy\", \"findingWaivers\", \"scanner\"],\n DUPLICATE_DETECTION_CHECK_DEFINITION\n );\n if (input === undefined) {\n throw new TypeError(\n \"duplicateDetection options are invalid; use the documented closed constructor policy including exact finding waivers\"\n );\n }\n const resolvedOptions = resolveDuplicateDetectionOptions(input.domainOptions);\n if (resolvedOptions === undefined) {\n throw new TypeError(\n \"duplicateDetection options are invalid; use the documented closed constructor policy including exact finding waivers\"\n );\n }\n return defineCheck({\n ...input.definition,\n execute: executeDuplicateDetection,\n parseData: parseDuplicateDetectionData,\n prepare: (preparedOptions) =>\n validResolvedDuplicateDetectionOptions(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 \"duplicateDetection options are invalid; recreate the Check with duplicateDetection(options) or restore its complete resolved options.\"\n }\n ]\n },\n options: resolvedOptions\n });\n}\n"]}
@@ -1,10 +1,10 @@
1
1
  import { resolve } from "node:path";
2
- import { reconcileFindingWaivers } from "../../finding-waivers/reconciliation.mjs";
2
+ import { reconcileFindingWaivers } from "../../package-tools/finding-waivers/reconciliation.mjs";
3
3
  import { collectProjectFileSets, requireProjectFileSet } from "../project-files/collection.mjs";
4
4
  import { fingerprintProjectFiles } from "../project-files/file-fingerprint.mjs";
5
5
  import { settleFindings } from "../code-quality-findings/policy.mjs";
6
6
  import { reportFindingWaiverAudits, reportReconciledCodeQualityFindingRecords } from "../code-quality-findings/finding-waiver-evidence.mjs";
7
- import { appendCheckMessages } from "../../check/finding-presentation.mjs";
7
+ import { appendCheckMessages } from "../../package-tools/finding-presentation/finding-presentation.mjs";
8
8
  import { duplicateFindingMessages, duplicateWaiverMessages } from "./finding-messages.mjs";
9
9
  import { getGitSha } from "./project-revision.mjs";
10
10
  import { measureDuplicateDetection } from "./measurement.mjs";
@@ -119,8 +119,6 @@ function directMeasurementFailure(measurement) {
119
119
  case "unavailable":
120
120
  return unavailable("external-dependency-unavailable");
121
121
  }
122
- const exhaustiveMeasurement = measurement;
123
- return exhaustiveMeasurement;
124
122
  }
125
123
  function unavailable(code) {
126
124
  return Object.freeze({