@hominis/fireforge 0.45.0 → 0.46.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (662) hide show
  1. package/CHANGELOG.md +409 -446
  2. package/dist/bin/fireforge.d.ts +1 -1
  3. package/dist/bin/fireforge.js +21 -15
  4. package/dist/build-info.json +4 -4
  5. package/dist/src/cli-usage-error.d.ts +46 -0
  6. package/dist/src/cli-usage-error.js +81 -0
  7. package/dist/src/cli.d.ts +7 -2
  8. package/dist/src/cli.js +47 -47
  9. package/dist/src/commands/bootstrap-checks.js +2 -1
  10. package/dist/src/commands/bootstrap.js +3 -4
  11. package/dist/src/commands/build.js +27 -17
  12. package/dist/src/commands/config.js +9 -9
  13. package/dist/src/commands/destructive-decision.d.ts +19 -0
  14. package/dist/src/commands/destructive-decision.js +31 -0
  15. package/dist/src/commands/discard.js +5 -5
  16. package/dist/src/commands/doctor-check-core.d.ts +4 -10
  17. package/dist/src/commands/doctor-check-core.js +0 -8
  18. package/dist/src/commands/doctor-external-toolchains.js +2 -2
  19. package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
  20. package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
  21. package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
  22. package/dist/src/commands/doctor-furnace-jar.js +1 -1
  23. package/dist/src/commands/doctor-furnace.js +22 -22
  24. package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -17
  25. package/dist/src/commands/doctor-orphaned-harness.js +14 -23
  26. package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
  27. package/dist/src/commands/doctor-patch-manifest.js +7 -6
  28. package/dist/src/commands/doctor-post-rebase-audit.js +3 -3
  29. package/dist/src/commands/doctor-source-pin.d.ts +12 -12
  30. package/dist/src/commands/doctor-source-pin.js +14 -14
  31. package/dist/src/commands/doctor-working-tree.d.ts +3 -3
  32. package/dist/src/commands/doctor-working-tree.js +3 -3
  33. package/dist/src/commands/doctor.d.ts +3 -1
  34. package/dist/src/commands/doctor.js +15 -16
  35. package/dist/src/commands/download.js +50 -37
  36. package/dist/src/commands/export-all.js +29 -12
  37. package/dist/src/commands/export-flow.d.ts +5 -5
  38. package/dist/src/commands/export-flow.js +29 -59
  39. package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
  40. package/dist/src/commands/export-placement-conflicts.js +12 -12
  41. package/dist/src/commands/export-placement-gate.d.ts +2 -2
  42. package/dist/src/commands/export-placement-gate.js +7 -13
  43. package/dist/src/commands/export-placement-policy.d.ts +1 -1
  44. package/dist/src/commands/export-placement-policy.js +4 -6
  45. package/dist/src/commands/export-shared.d.ts +51 -32
  46. package/dist/src/commands/export-shared.js +17 -32
  47. package/dist/src/commands/export.js +14 -5
  48. package/dist/src/commands/furnace/apply.js +16 -16
  49. package/dist/src/commands/furnace/authoring-config.d.ts +13 -0
  50. package/dist/src/commands/furnace/authoring-config.js +19 -0
  51. package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
  52. package/dist/src/commands/furnace/chrome-doc-remove.js +2 -2
  53. package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
  54. package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
  55. package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
  56. package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
  57. package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
  58. package/dist/src/commands/furnace/chrome-doc.js +18 -18
  59. package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
  60. package/dist/src/commands/furnace/create-browser-test.js +7 -12
  61. package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
  62. package/dist/src/commands/furnace/create-dry-run.js +6 -9
  63. package/dist/src/commands/furnace/create-features.d.ts +2 -2
  64. package/dist/src/commands/furnace/create-features.js +2 -2
  65. package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
  66. package/dist/src/commands/furnace/create-mochikit.js +7 -7
  67. package/dist/src/commands/furnace/create-templates.d.ts +31 -15
  68. package/dist/src/commands/furnace/create-templates.js +20 -19
  69. package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
  70. package/dist/src/commands/furnace/create-xpcshell.js +8 -8
  71. package/dist/src/commands/furnace/create.d.ts +1 -1
  72. package/dist/src/commands/furnace/create.js +35 -29
  73. package/dist/src/commands/furnace/deploy.js +15 -6
  74. package/dist/src/commands/furnace/diff.js +7 -7
  75. package/dist/src/commands/furnace/index.js +1 -1
  76. package/dist/src/commands/furnace/init.js +17 -16
  77. package/dist/src/commands/furnace/list.js +2 -2
  78. package/dist/src/commands/furnace/override.d.ts +1 -1
  79. package/dist/src/commands/furnace/override.js +43 -34
  80. package/dist/src/commands/furnace/preview.js +17 -17
  81. package/dist/src/commands/furnace/refresh.js +15 -7
  82. package/dist/src/commands/furnace/remove-mutations.d.ts +9 -10
  83. package/dist/src/commands/furnace/remove-mutations.js +19 -19
  84. package/dist/src/commands/furnace/remove-state.d.ts +1 -1
  85. package/dist/src/commands/furnace/remove-state.js +1 -1
  86. package/dist/src/commands/furnace/remove.js +4 -8
  87. package/dist/src/commands/furnace/rename-browser-test.js +10 -15
  88. package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
  89. package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
  90. package/dist/src/commands/furnace/rename.js +36 -36
  91. package/dist/src/commands/furnace/scan.js +3 -3
  92. package/dist/src/commands/furnace/status.js +19 -16
  93. package/dist/src/commands/furnace/sync.js +6 -6
  94. package/dist/src/commands/furnace/test-file-name.d.ts +28 -0
  95. package/dist/src/commands/furnace/test-file-name.js +39 -0
  96. package/dist/src/commands/furnace/validate.js +11 -12
  97. package/dist/src/commands/furnace/validation-output.d.ts +21 -9
  98. package/dist/src/commands/furnace/validation-output.js +3 -8
  99. package/dist/src/commands/import.js +22 -29
  100. package/dist/src/commands/lint-per-patch.d.ts +2 -2
  101. package/dist/src/commands/lint-per-patch.js +27 -12
  102. package/dist/src/commands/lint-per-run-checkjs.d.ts +14 -15
  103. package/dist/src/commands/lint-per-run-checkjs.js +14 -15
  104. package/dist/src/commands/lint-report.d.ts +3 -3
  105. package/dist/src/commands/lint-report.js +4 -4
  106. package/dist/src/commands/lint.d.ts +5 -4
  107. package/dist/src/commands/lint.js +36 -36
  108. package/dist/src/commands/manifest.d.ts +4 -4
  109. package/dist/src/commands/manifest.js +1 -1
  110. package/dist/src/commands/package.js +4 -6
  111. package/dist/src/commands/patch/compact.d.ts +2 -2
  112. package/dist/src/commands/patch/compact.js +19 -20
  113. package/dist/src/commands/patch/delete.d.ts +1 -1
  114. package/dist/src/commands/patch/delete.js +23 -33
  115. package/dist/src/commands/patch/entry-projection.d.ts +13 -0
  116. package/dist/src/commands/patch/entry-projection.js +24 -0
  117. package/dist/src/commands/patch/lint-ignore.d.ts +3 -12
  118. package/dist/src/commands/patch/lint-ignore.js +33 -44
  119. package/dist/src/commands/patch/move-files-create.d.ts +2 -2
  120. package/dist/src/commands/patch/move-files-create.js +29 -15
  121. package/dist/src/commands/patch/move-files-into.d.ts +2 -2
  122. package/dist/src/commands/patch/move-files-into.js +41 -37
  123. package/dist/src/commands/patch/move-files.js +5 -14
  124. package/dist/src/commands/patch/patch-context.d.ts +1 -1
  125. package/dist/src/commands/patch/rename.d.ts +4 -4
  126. package/dist/src/commands/patch/rename.js +35 -49
  127. package/dist/src/commands/patch/reorder.js +35 -48
  128. package/dist/src/commands/patch/split-plan.d.ts +7 -8
  129. package/dist/src/commands/patch/split-plan.js +10 -13
  130. package/dist/src/commands/patch/split.d.ts +2 -2
  131. package/dist/src/commands/patch/split.js +50 -48
  132. package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
  133. package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
  134. package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
  135. package/dist/src/commands/patch/staged-dependency.js +22 -28
  136. package/dist/src/commands/patch/tier.d.ts +2 -2
  137. package/dist/src/commands/patch/tier.js +20 -30
  138. package/dist/src/commands/patch-rename-map.d.ts +19 -0
  139. package/dist/src/commands/patch-rename-map.js +36 -0
  140. package/dist/src/commands/pending-resolution.d.ts +15 -0
  141. package/dist/src/commands/pending-resolution.js +25 -0
  142. package/dist/src/commands/re-export-adjacent.d.ts +25 -3
  143. package/dist/src/commands/re-export-adjacent.js +40 -24
  144. package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
  145. package/dist/src/commands/re-export-bulk-scan.js +23 -27
  146. package/dist/src/commands/re-export-drift.d.ts +10 -10
  147. package/dist/src/commands/re-export-drift.js +33 -33
  148. package/dist/src/commands/re-export-files.d.ts +2 -3
  149. package/dist/src/commands/re-export-files.js +52 -44
  150. package/dist/src/commands/re-export-lint.d.ts +29 -30
  151. package/dist/src/commands/re-export-lint.js +36 -29
  152. package/dist/src/commands/re-export-options.d.ts +1 -1
  153. package/dist/src/commands/re-export-options.js +1 -1
  154. package/dist/src/commands/re-export-register.d.ts +1 -1
  155. package/dist/src/commands/re-export-register.js +1 -1
  156. package/dist/src/commands/re-export-scan.d.ts +1 -1
  157. package/dist/src/commands/re-export-scan.js +12 -9
  158. package/dist/src/commands/re-export-single.d.ts +23 -4
  159. package/dist/src/commands/re-export-single.js +39 -31
  160. package/dist/src/commands/re-export.js +35 -17
  161. package/dist/src/commands/rebase/abort.js +9 -14
  162. package/dist/src/commands/rebase/continue.js +20 -19
  163. package/dist/src/commands/rebase/index.d.ts +1 -1
  164. package/dist/src/commands/rebase/index.js +5 -5
  165. package/dist/src/commands/rebase/patch-loop.d.ts +2 -2
  166. package/dist/src/commands/rebase/patch-loop.js +20 -24
  167. package/dist/src/commands/register.js +5 -5
  168. package/dist/src/commands/reset.js +1 -1
  169. package/dist/src/commands/resolve.d.ts +2 -2
  170. package/dist/src/commands/resolve.js +21 -13
  171. package/dist/src/commands/run.d.ts +0 -13
  172. package/dist/src/commands/run.js +38 -51
  173. package/dist/src/commands/setup-support.d.ts +16 -4
  174. package/dist/src/commands/setup-support.js +20 -20
  175. package/dist/src/commands/setup.js +4 -10
  176. package/dist/src/commands/source.js +9 -2
  177. package/dist/src/commands/status-check.d.ts +3 -3
  178. package/dist/src/commands/status-check.js +6 -6
  179. package/dist/src/commands/status-json.d.ts +14 -13
  180. package/dist/src/commands/status-json.js +9 -8
  181. package/dist/src/commands/status-output.d.ts +3 -3
  182. package/dist/src/commands/status-output.js +5 -5
  183. package/dist/src/commands/status-ownership.d.ts +3 -3
  184. package/dist/src/commands/status-ownership.js +3 -3
  185. package/dist/src/commands/status.js +25 -26
  186. package/dist/src/commands/test-build-phase.d.ts +3 -3
  187. package/dist/src/commands/test-build-phase.js +48 -24
  188. package/dist/src/commands/test-diagnose.d.ts +1 -1
  189. package/dist/src/commands/test-diagnose.js +20 -20
  190. package/dist/src/commands/test-modes.d.ts +4 -4
  191. package/dist/src/commands/test-modes.js +4 -5
  192. package/dist/src/commands/test-register.js +5 -3
  193. package/dist/src/commands/test-run.d.ts +11 -11
  194. package/dist/src/commands/test-run.js +40 -33
  195. package/dist/src/commands/test-stale-gate.d.ts +12 -12
  196. package/dist/src/commands/test-stale-gate.js +17 -17
  197. package/dist/src/commands/test-verdict.d.ts +19 -5
  198. package/dist/src/commands/test-verdict.js +26 -11
  199. package/dist/src/commands/test.d.ts +3 -3
  200. package/dist/src/commands/test.js +73 -36
  201. package/dist/src/commands/token-coverage.js +3 -3
  202. package/dist/src/commands/token-list.d.ts +26 -0
  203. package/dist/src/commands/token-list.js +153 -0
  204. package/dist/src/commands/token.js +26 -10
  205. package/dist/src/commands/tree.js +26 -21
  206. package/dist/src/commands/typecheck.d.ts +6 -6
  207. package/dist/src/commands/typecheck.js +16 -16
  208. package/dist/src/commands/verify.d.ts +3 -3
  209. package/dist/src/commands/verify.js +10 -10
  210. package/dist/src/commands/watch.js +11 -11
  211. package/dist/src/commands/wire.js +17 -16
  212. package/dist/src/core/ast-utils.d.ts +7 -7
  213. package/dist/src/core/ast-utils.js +8 -8
  214. package/dist/src/core/branding.d.ts +5 -12
  215. package/dist/src/core/branding.js +6 -5
  216. package/dist/src/core/browser-wire.d.ts +1 -1
  217. package/dist/src/core/browser-wire.js +10 -7
  218. package/dist/src/core/build-audit-platform.d.ts +32 -3
  219. package/dist/src/core/build-audit-platform.js +153 -13
  220. package/dist/src/core/build-audit-registration.d.ts +5 -5
  221. package/dist/src/core/build-audit-registration.js +10 -9
  222. package/dist/src/core/build-audit-resolve.d.ts +5 -5
  223. package/dist/src/core/build-audit-resolve.js +6 -6
  224. package/dist/src/core/build-audit-skip.d.ts +57 -0
  225. package/dist/src/core/build-audit-skip.js +112 -0
  226. package/dist/src/core/build-audit-transforms.d.ts +2 -2
  227. package/dist/src/core/build-audit-transforms.js +3 -3
  228. package/dist/src/core/build-audit.d.ts +21 -8
  229. package/dist/src/core/build-audit.js +142 -40
  230. package/dist/src/core/build-baseline-types.d.ts +19 -18
  231. package/dist/src/core/build-baseline-types.js +1 -1
  232. package/dist/src/core/build-baseline.d.ts +48 -31
  233. package/dist/src/core/build-baseline.js +20 -43
  234. package/dist/src/core/build-jar-escalation.d.ts +8 -8
  235. package/dist/src/core/build-jar-escalation.js +18 -17
  236. package/dist/src/core/build-overwrite-guard.d.ts +4 -4
  237. package/dist/src/core/build-overwrite-guard.js +14 -14
  238. package/dist/src/core/build-prepare.d.ts +4 -12
  239. package/dist/src/core/build-prepare.js +22 -26
  240. package/dist/src/core/config-mutate.js +4 -4
  241. package/dist/src/core/config-paths.d.ts +2 -6
  242. package/dist/src/core/config-paths.js +4 -2
  243. package/dist/src/core/config-state.d.ts +0 -6
  244. package/dist/src/core/config-state.js +3 -21
  245. package/dist/src/core/config-validate-build-audit.d.ts +8 -0
  246. package/dist/src/core/config-validate-build-audit.js +80 -0
  247. package/dist/src/core/config-validate-file-size.d.ts +1 -1
  248. package/dist/src/core/config-validate-file-size.js +3 -3
  249. package/dist/src/core/config-validate-patch-policy.d.ts +2 -2
  250. package/dist/src/core/config-validate-patch-policy.js +3 -3
  251. package/dist/src/core/config-validate-test-toolchains.d.ts +2 -2
  252. package/dist/src/core/config-validate-test-toolchains.js +4 -5
  253. package/dist/src/core/config-validate.js +22 -12
  254. package/dist/src/core/config.d.ts +12 -12
  255. package/dist/src/core/config.js +21 -25
  256. package/dist/src/core/coverage-extend.d.ts +16 -16
  257. package/dist/src/core/coverage-extend.js +20 -20
  258. package/dist/src/core/destructive.d.ts +14 -14
  259. package/dist/src/core/destructive.js +9 -9
  260. package/dist/src/core/diff-hunks.d.ts +2 -2
  261. package/dist/src/core/diff-hunks.js +7 -7
  262. package/dist/src/core/discard-baseline.d.ts +10 -10
  263. package/dist/src/core/discard-baseline.js +22 -23
  264. package/dist/src/core/display-state.d.ts +11 -11
  265. package/dist/src/core/display-state.js +12 -12
  266. package/dist/src/core/engine-changes.d.ts +2 -2
  267. package/dist/src/core/engine-changes.js +2 -2
  268. package/dist/src/core/engine-precondition.d.ts +5 -13
  269. package/dist/src/core/engine-precondition.js +5 -10
  270. package/dist/src/core/engine-session-lock.d.ts +18 -18
  271. package/dist/src/core/engine-session-lock.js +50 -54
  272. package/dist/src/core/export-moved-code-shape.d.ts +7 -7
  273. package/dist/src/core/export-moved-code-shape.js +10 -10
  274. package/dist/src/core/file-lock-owner.d.ts +103 -0
  275. package/dist/src/core/file-lock-owner.js +259 -0
  276. package/dist/src/core/file-lock.d.ts +14 -19
  277. package/dist/src/core/file-lock.js +90 -128
  278. package/dist/src/core/firefox-cache.d.ts +13 -1
  279. package/dist/src/core/firefox-cache.js +61 -36
  280. package/dist/src/core/firefox-download.d.ts +15 -0
  281. package/dist/src/core/firefox-download.js +38 -22
  282. package/dist/src/core/firefox-extract.d.ts +8 -7
  283. package/dist/src/core/firefox-extract.js +45 -27
  284. package/dist/src/core/firefox.d.ts +34 -36
  285. package/dist/src/core/firefox.js +13 -44
  286. package/dist/src/core/furnace-apply-dry-run.d.ts +1 -6
  287. package/dist/src/core/furnace-apply-dry-run.js +2 -8
  288. package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
  289. package/dist/src/core/furnace-apply-ftl.js +8 -8
  290. package/dist/src/core/furnace-apply-helpers.d.ts +9 -20
  291. package/dist/src/core/furnace-apply-helpers.js +28 -39
  292. package/dist/src/core/furnace-apply-output.js +1 -1
  293. package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
  294. package/dist/src/core/furnace-apply-overwrite-warn.js +13 -11
  295. package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
  296. package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
  297. package/dist/src/core/furnace-apply.d.ts +4 -4
  298. package/dist/src/core/furnace-apply.js +50 -29
  299. package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
  300. package/dist/src/core/furnace-checksum-utils.js +5 -5
  301. package/dist/src/core/furnace-config-custom.d.ts +1 -1
  302. package/dist/src/core/furnace-config-custom.js +2 -2
  303. package/dist/src/core/furnace-config-order.js +1 -1
  304. package/dist/src/core/furnace-config-tokens.d.ts +3 -3
  305. package/dist/src/core/furnace-config-tokens.js +3 -3
  306. package/dist/src/core/furnace-config-validate.js +2 -2
  307. package/dist/src/core/furnace-config.d.ts +5 -5
  308. package/dist/src/core/furnace-config.js +40 -53
  309. package/dist/src/core/furnace-constants.d.ts +6 -6
  310. package/dist/src/core/furnace-constants.js +9 -8
  311. package/dist/src/core/furnace-css-fragments.d.ts +6 -6
  312. package/dist/src/core/furnace-css-fragments.js +11 -11
  313. package/dist/src/core/furnace-dir-entry.d.ts +20 -0
  314. package/dist/src/core/furnace-dir-entry.js +21 -0
  315. package/dist/src/core/furnace-jsconfig.d.ts +7 -7
  316. package/dist/src/core/furnace-jsconfig.js +22 -20
  317. package/dist/src/core/furnace-operation.d.ts +22 -19
  318. package/dist/src/core/furnace-operation.js +38 -34
  319. package/dist/src/core/furnace-precondition.d.ts +10 -10
  320. package/dist/src/core/furnace-precondition.js +8 -8
  321. package/dist/src/core/furnace-refresh.d.ts +18 -6
  322. package/dist/src/core/furnace-refresh.js +5 -8
  323. package/dist/src/core/furnace-registration-ast.d.ts +2 -3
  324. package/dist/src/core/furnace-registration-ast.js +9 -12
  325. package/dist/src/core/furnace-registration-remove.d.ts +4 -4
  326. package/dist/src/core/furnace-registration-remove.js +6 -6
  327. package/dist/src/core/furnace-registration-validate.d.ts +2 -2
  328. package/dist/src/core/furnace-registration-validate.js +2 -2
  329. package/dist/src/core/furnace-registration.d.ts +7 -6
  330. package/dist/src/core/furnace-registration.js +29 -36
  331. package/dist/src/core/furnace-rollback.d.ts +1 -1
  332. package/dist/src/core/furnace-rollback.js +5 -5
  333. package/dist/src/core/furnace-scanner.js +3 -6
  334. package/dist/src/core/furnace-stale-export.d.ts +17 -16
  335. package/dist/src/core/furnace-stale-export.js +16 -15
  336. package/dist/src/core/furnace-staleness.d.ts +2 -2
  337. package/dist/src/core/furnace-staleness.js +2 -2
  338. package/dist/src/core/furnace-state-persist.d.ts +12 -12
  339. package/dist/src/core/furnace-state-persist.js +10 -10
  340. package/dist/src/core/furnace-step-errors.d.ts +6 -6
  341. package/dist/src/core/furnace-step-errors.js +6 -6
  342. package/dist/src/core/furnace-validate-accessibility.js +14 -14
  343. package/dist/src/core/furnace-validate-compatibility.js +9 -9
  344. package/dist/src/core/furnace-validate-registration.d.ts +2 -2
  345. package/dist/src/core/furnace-validate-registration.js +18 -20
  346. package/dist/src/core/furnace-validate-structure.d.ts +1 -1
  347. package/dist/src/core/furnace-validate-structure.js +4 -4
  348. package/dist/src/core/furnace-validate.js +9 -9
  349. package/dist/src/core/furnace-version-drift.d.ts +5 -5
  350. package/dist/src/core/furnace-version-drift.js +5 -5
  351. package/dist/src/core/git-base.d.ts +6 -4
  352. package/dist/src/core/git-base.js +29 -7
  353. package/dist/src/core/git-diff-new-file.d.ts +40 -0
  354. package/dist/src/core/git-diff-new-file.js +119 -0
  355. package/dist/src/core/git-diff.d.ts +13 -13
  356. package/dist/src/core/git-diff.js +121 -189
  357. package/dist/src/core/git-file-ops.d.ts +6 -13
  358. package/dist/src/core/git-file-ops.js +11 -35
  359. package/dist/src/core/git-readonly-index.d.ts +12 -14
  360. package/dist/src/core/git-readonly-index.js +12 -16
  361. package/dist/src/core/git-status.d.ts +9 -2
  362. package/dist/src/core/git-status.js +23 -11
  363. package/dist/src/core/git.d.ts +3 -9
  364. package/dist/src/core/git.js +28 -57
  365. package/dist/src/core/harness-orphans.d.ts +17 -17
  366. package/dist/src/core/harness-orphans.js +28 -27
  367. package/dist/src/core/history-log.d.ts +19 -0
  368. package/dist/src/core/history-log.js +29 -0
  369. package/dist/src/core/license-headers.d.ts +19 -18
  370. package/dist/src/core/license-headers.js +29 -28
  371. package/dist/src/core/mach-build-artifacts.d.ts +21 -21
  372. package/dist/src/core/mach-build-artifacts.js +23 -23
  373. package/dist/src/core/mach-error-hints.d.ts +5 -10
  374. package/dist/src/core/mach-error-hints.js +14 -14
  375. package/dist/src/core/mach-known-noise-filter.d.ts +42 -38
  376. package/dist/src/core/mach-known-noise-filter.js +57 -56
  377. package/dist/src/core/mach-mozconfig.d.ts +6 -6
  378. package/dist/src/core/mach-mozconfig.js +17 -16
  379. package/dist/src/core/mach-python.d.ts +3 -0
  380. package/dist/src/core/mach-python.js +13 -7
  381. package/dist/src/core/mach-resource-shim.d.ts +24 -12
  382. package/dist/src/core/mach-resource-shim.js +124 -21
  383. package/dist/src/core/mach.d.ts +59 -73
  384. package/dist/src/core/mach.js +47 -115
  385. package/dist/src/core/marionette-port.d.ts +15 -30
  386. package/dist/src/core/marionette-port.js +46 -89
  387. package/dist/src/core/marionette-preflight.d.ts +6 -6
  388. package/dist/src/core/marionette-preflight.js +32 -50
  389. package/dist/src/core/markdown-table.d.ts +9 -9
  390. package/dist/src/core/markdown-table.js +14 -14
  391. package/dist/src/core/mochitest-server-port.d.ts +8 -8
  392. package/dist/src/core/mochitest-server-port.js +17 -17
  393. package/dist/src/core/module-resolution-preflight.d.ts +8 -8
  394. package/dist/src/core/module-resolution-preflight.js +11 -11
  395. package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
  396. package/dist/src/core/moz-manifest-helpers.js +7 -7
  397. package/dist/src/core/moz-manifest-register.d.ts +1 -1
  398. package/dist/src/core/moz-manifest-register.js +2 -2
  399. package/dist/src/core/moz-manifest-rules.js +46 -42
  400. package/dist/src/core/moz-manifest-tokenizers.js +1 -1
  401. package/dist/src/core/ownership-table.d.ts +5 -5
  402. package/dist/src/core/ownership-table.js +7 -7
  403. package/dist/src/core/parser-fallback.d.ts +3 -3
  404. package/dist/src/core/parser-fallback.js +3 -3
  405. package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
  406. package/dist/src/core/patch-apply-fuzz.js +13 -13
  407. package/dist/src/core/patch-apply.d.ts +13 -14
  408. package/dist/src/core/patch-apply.js +36 -42
  409. package/dist/src/core/patch-export-coverage.d.ts +0 -9
  410. package/dist/src/core/patch-export-coverage.js +1 -30
  411. package/dist/src/core/patch-export-update.d.ts +21 -4
  412. package/dist/src/core/patch-export-update.js +7 -6
  413. package/dist/src/core/patch-export.d.ts +20 -30
  414. package/dist/src/core/patch-export.js +55 -77
  415. package/dist/src/core/patch-files.d.ts +0 -4
  416. package/dist/src/core/patch-files.js +0 -11
  417. package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
  418. package/dist/src/core/patch-identifier-suggest.js +4 -4
  419. package/dist/src/core/patch-lint-binary.d.ts +12 -18
  420. package/dist/src/core/patch-lint-cache.d.ts +18 -2
  421. package/dist/src/core/patch-lint-cache.js +16 -19
  422. package/dist/src/core/patch-lint-checkjs.d.ts +55 -38
  423. package/dist/src/core/patch-lint-checkjs.js +78 -64
  424. package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
  425. package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
  426. package/dist/src/core/patch-lint-creators.d.ts +5 -9
  427. package/dist/src/core/patch-lint-creators.js +3 -3
  428. package/dist/src/core/patch-lint-cross.d.ts +27 -19
  429. package/dist/src/core/patch-lint-cross.js +67 -110
  430. package/dist/src/core/patch-lint-css.d.ts +1 -1
  431. package/dist/src/core/patch-lint-css.js +15 -11
  432. package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
  433. package/dist/src/core/patch-lint-diff-tag.js +5 -5
  434. package/dist/src/core/patch-lint-diff.d.ts +4 -4
  435. package/dist/src/core/patch-lint-diff.js +4 -4
  436. package/dist/src/core/patch-lint-file-size.d.ts +3 -3
  437. package/dist/src/core/patch-lint-file-size.js +6 -6
  438. package/dist/src/core/patch-lint-forward-registration.d.ts +58 -0
  439. package/dist/src/core/patch-lint-forward-registration.js +210 -0
  440. package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
  441. package/dist/src/core/patch-lint-jsdoc.js +46 -46
  442. package/dist/src/core/patch-lint-module-registration.d.ts +3 -9
  443. package/dist/src/core/patch-lint-module-registration.js +1 -1
  444. package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
  445. package/dist/src/core/patch-lint-mozbuild.js +10 -10
  446. package/dist/src/core/patch-lint-observer.d.ts +3 -3
  447. package/dist/src/core/patch-lint-observer.js +7 -7
  448. package/dist/src/core/patch-lint-ownership.d.ts +6 -6
  449. package/dist/src/core/patch-lint-ownership.js +6 -6
  450. package/dist/src/core/patch-lint-prettier.d.ts +6 -6
  451. package/dist/src/core/patch-lint-prettier.js +7 -7
  452. package/dist/src/core/patch-lint-queue-types.d.ts +60 -0
  453. package/dist/src/core/patch-lint-queue-types.js +12 -0
  454. package/dist/src/core/patch-lint-staged-registration.d.ts +61 -0
  455. package/dist/src/core/patch-lint-staged-registration.js +90 -0
  456. package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
  457. package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
  458. package/dist/src/core/patch-lint.d.ts +41 -35
  459. package/dist/src/core/patch-lint.js +52 -49
  460. package/dist/src/core/patch-lock.d.ts +1 -1
  461. package/dist/src/core/patch-lock.js +11 -11
  462. package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
  463. package/dist/src/core/patch-manifest-consistency.js +16 -17
  464. package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
  465. package/dist/src/core/patch-manifest-files-affected.js +3 -3
  466. package/dist/src/core/patch-manifest-io.d.ts +14 -14
  467. package/dist/src/core/patch-manifest-io.js +35 -34
  468. package/dist/src/core/patch-manifest-query.d.ts +1 -1
  469. package/dist/src/core/patch-manifest-query.js +4 -4
  470. package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
  471. package/dist/src/core/patch-manifest-resolve.js +7 -7
  472. package/dist/src/core/patch-manifest-validate.js +3 -3
  473. package/dist/src/core/patch-manifest.d.ts +2 -2
  474. package/dist/src/core/patch-manifest.js +2 -2
  475. package/dist/src/core/patch-parse.d.ts +32 -21
  476. package/dist/src/core/patch-parse.js +40 -15
  477. package/dist/src/core/patch-policy.js +15 -27
  478. package/dist/src/core/patch-registration-refs.d.ts +4 -4
  479. package/dist/src/core/patch-registration-refs.js +7 -7
  480. package/dist/src/core/patch-source-metadata.d.ts +1 -3
  481. package/dist/src/core/patch-source-metadata.js +0 -4
  482. package/dist/src/core/patch-transform.d.ts +8 -16
  483. package/dist/src/core/patch-transform.js +13 -23
  484. package/dist/src/core/process-cpu-time.d.ts +1 -1
  485. package/dist/src/core/process-cpu-time.js +6 -6
  486. package/dist/src/core/rebase-session.d.ts +9 -15
  487. package/dist/src/core/rebase-session.js +13 -25
  488. package/dist/src/core/register-browser-content.js +3 -2
  489. package/dist/src/core/register-browser-test.js +2 -1
  490. package/dist/src/core/register-module.js +2 -1
  491. package/dist/src/core/register-result.d.ts +1 -1
  492. package/dist/src/core/register-result.js +1 -1
  493. package/dist/src/core/register-scaffold.d.ts +2 -2
  494. package/dist/src/core/register-scaffold.js +8 -7
  495. package/dist/src/core/register-shared-css.d.ts +3 -3
  496. package/dist/src/core/register-shared-css.js +6 -5
  497. package/dist/src/core/register-xpcshell-test.d.ts +2 -2
  498. package/dist/src/core/register-xpcshell-test.js +2 -2
  499. package/dist/src/core/run-log-redact.d.ts +38 -0
  500. package/dist/src/core/run-log-redact.js +69 -0
  501. package/dist/src/core/run-log.d.ts +21 -10
  502. package/dist/src/core/run-log.js +76 -27
  503. package/dist/src/core/shared-ftl.d.ts +2 -2
  504. package/dist/src/core/shared-ftl.js +6 -6
  505. package/dist/src/core/signal-critical.d.ts +2 -2
  506. package/dist/src/core/signal-critical.js +4 -6
  507. package/dist/src/core/smoke-patterns.d.ts +5 -6
  508. package/dist/src/core/smoke-patterns.js +15 -20
  509. package/dist/src/core/state-file.d.ts +15 -4
  510. package/dist/src/core/state-file.js +14 -1
  511. package/dist/src/core/status-binary.d.ts +8 -8
  512. package/dist/src/core/status-binary.js +12 -12
  513. package/dist/src/core/status-classify.d.ts +17 -17
  514. package/dist/src/core/status-classify.js +13 -12
  515. package/dist/src/core/test-changed-prefs.d.ts +12 -12
  516. package/dist/src/core/test-changed-prefs.js +40 -25
  517. package/dist/src/core/test-harness-crash.d.ts +39 -39
  518. package/dist/src/core/test-harness-crash.js +69 -69
  519. package/dist/src/core/test-harness-output.d.ts +7 -7
  520. package/dist/src/core/test-harness-output.js +7 -7
  521. package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
  522. package/dist/src/core/test-harness-verdict-notes.js +4 -4
  523. package/dist/src/core/test-path-scope.d.ts +8 -8
  524. package/dist/src/core/test-path-scope.js +11 -11
  525. package/dist/src/core/test-stale-check.d.ts +22 -23
  526. package/dist/src/core/test-stale-check.js +31 -30
  527. package/dist/src/core/test-stale-symlink.d.ts +1 -1
  528. package/dist/src/core/test-stale-symlink.js +1 -1
  529. package/dist/src/core/test-stall-triage.d.ts +9 -9
  530. package/dist/src/core/test-stall-triage.js +22 -22
  531. package/dist/src/core/test-xpcshell-retry.d.ts +26 -7
  532. package/dist/src/core/test-xpcshell-retry.js +14 -11
  533. package/dist/src/core/token-category.d.ts +35 -2
  534. package/dist/src/core/token-category.js +67 -58
  535. package/dist/src/core/token-coverage.js +4 -5
  536. package/dist/src/core/token-dark-mode.d.ts +9 -9
  537. package/dist/src/core/token-dark-mode.js +13 -25
  538. package/dist/src/core/token-docs.d.ts +1 -1
  539. package/dist/src/core/token-inventory.d.ts +56 -0
  540. package/dist/src/core/token-inventory.js +109 -0
  541. package/dist/src/core/token-manager.d.ts +4 -4
  542. package/dist/src/core/token-manager.js +22 -22
  543. package/dist/src/core/token-scaffold.d.ts +4 -4
  544. package/dist/src/core/token-scaffold.js +4 -4
  545. package/dist/src/core/token-variant.d.ts +14 -14
  546. package/dist/src/core/token-variant.js +52 -53
  547. package/dist/src/core/toolchain-preflight.d.ts +15 -15
  548. package/dist/src/core/toolchain-preflight.js +23 -23
  549. package/dist/src/core/tree-cow.d.ts +3 -5
  550. package/dist/src/core/tree-cow.js +8 -8
  551. package/dist/src/core/tree-guard.d.ts +3 -3
  552. package/dist/src/core/tree-guard.js +23 -23
  553. package/dist/src/core/tree-store.d.ts +15 -15
  554. package/dist/src/core/tree-store.js +39 -38
  555. package/dist/src/core/typecheck-shim.d.ts +16 -15
  556. package/dist/src/core/typecheck-shim.js +26 -25
  557. package/dist/src/core/typecheck.d.ts +12 -12
  558. package/dist/src/core/typecheck.js +33 -33
  559. package/dist/src/core/wire-destroy.d.ts +2 -2
  560. package/dist/src/core/wire-destroy.js +5 -5
  561. package/dist/src/core/wire-dom-fragment.d.ts +3 -3
  562. package/dist/src/core/wire-dom-fragment.js +12 -23
  563. package/dist/src/core/wire-init.d.ts +2 -2
  564. package/dist/src/core/wire-init.js +7 -7
  565. package/dist/src/core/wire-subscript.d.ts +1 -1
  566. package/dist/src/core/wire-subscript.js +3 -3
  567. package/dist/src/core/wire-utils.d.ts +9 -9
  568. package/dist/src/core/wire-utils.js +16 -28
  569. package/dist/src/core/xpcshell-appdir.d.ts +20 -20
  570. package/dist/src/core/xpcshell-appdir.js +28 -30
  571. package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
  572. package/dist/src/core/xpcshell-profile-dir.js +7 -7
  573. package/dist/src/errors/base.d.ts +69 -16
  574. package/dist/src/errors/base.js +95 -26
  575. package/dist/src/errors/build.d.ts +6 -6
  576. package/dist/src/errors/build.js +26 -34
  577. package/dist/src/errors/codes.d.ts +10 -10
  578. package/dist/src/errors/codes.js +10 -10
  579. package/dist/src/errors/config.d.ts +0 -14
  580. package/dist/src/errors/config.js +13 -34
  581. package/dist/src/errors/download.d.ts +13 -0
  582. package/dist/src/errors/download.js +53 -24
  583. package/dist/src/errors/furnace.d.ts +2 -2
  584. package/dist/src/errors/furnace.js +8 -9
  585. package/dist/src/errors/git.d.ts +9 -9
  586. package/dist/src/errors/git.js +21 -31
  587. package/dist/src/errors/patch.d.ts +3 -3
  588. package/dist/src/errors/patch.js +11 -13
  589. package/dist/src/errors/rebase.d.ts +1 -1
  590. package/dist/src/errors/rebase.js +8 -8
  591. package/dist/src/errors/run.d.ts +1 -1
  592. package/dist/src/errors/run.js +1 -1
  593. package/dist/src/index.d.ts +4 -4
  594. package/dist/src/index.js +4 -4
  595. package/dist/src/types/commands/options.d.ts +155 -200
  596. package/dist/src/types/commands/patches.d.ts +19 -19
  597. package/dist/src/types/commands/project.d.ts +3 -3
  598. package/dist/src/types/config.d.ts +52 -19
  599. package/dist/src/types/furnace.d.ts +17 -17
  600. package/dist/src/types/index.d.ts +0 -1
  601. package/dist/src/types/json.d.ts +3 -3
  602. package/dist/src/types/json.js +2 -2
  603. package/dist/src/types/typecheck.d.ts +3 -3
  604. package/dist/src/utils/assert.d.ts +4 -16
  605. package/dist/src/utils/assert.js +7 -24
  606. package/dist/src/utils/build-info.d.ts +6 -6
  607. package/dist/src/utils/build-info.js +6 -6
  608. package/dist/src/utils/child-env.d.ts +7 -6
  609. package/dist/src/utils/child-env.js +5 -5
  610. package/dist/src/utils/concurrency.d.ts +2 -2
  611. package/dist/src/utils/concurrency.js +2 -2
  612. package/dist/src/utils/elapsed.js +10 -1
  613. package/dist/src/utils/errors.d.ts +8 -8
  614. package/dist/src/utils/errors.js +8 -8
  615. package/dist/src/utils/fs.d.ts +1 -1
  616. package/dist/src/utils/fs.js +15 -20
  617. package/dist/src/utils/hash.d.ts +12 -0
  618. package/dist/src/utils/hash.js +16 -0
  619. package/dist/src/utils/line-dispatch.d.ts +15 -0
  620. package/dist/src/utils/line-dispatch.js +48 -0
  621. package/dist/src/utils/logger.d.ts +4 -4
  622. package/dist/src/utils/logger.js +11 -11
  623. package/dist/src/utils/machine-output.js +2 -2
  624. package/dist/src/utils/options.d.ts +14 -20
  625. package/dist/src/utils/options.js +26 -27
  626. package/dist/src/utils/package-root.js +5 -14
  627. package/dist/src/utils/paths.d.ts +4 -4
  628. package/dist/src/utils/paths.js +4 -4
  629. package/dist/src/utils/platform.d.ts +0 -4
  630. package/dist/src/utils/process-group.d.ts +10 -9
  631. package/dist/src/utils/process-group.js +37 -36
  632. package/dist/src/utils/process.d.ts +70 -55
  633. package/dist/src/utils/process.js +129 -179
  634. package/dist/src/utils/ps-duration.d.ts +4 -4
  635. package/dist/src/utils/ps-duration.js +9 -9
  636. package/dist/src/utils/regex.d.ts +4 -4
  637. package/dist/src/utils/regex.js +7 -7
  638. package/dist/src/utils/sleep.d.ts +26 -0
  639. package/dist/src/utils/sleep.js +31 -0
  640. package/dist/src/utils/stdio-drain.d.ts +7 -7
  641. package/dist/src/utils/stdio-drain.js +8 -8
  642. package/dist/src/utils/validation.d.ts +12 -49
  643. package/dist/src/utils/validation.js +26 -36
  644. package/docs/README.md +2 -2
  645. package/docs/configuration.md +163 -69
  646. package/docs/exit-codes.md +66 -49
  647. package/docs/furnace.md +20 -19
  648. package/docs/lifecycle-invariants.md +414 -247
  649. package/docs/machine-output.md +58 -34
  650. package/docs/patch-workflow.md +48 -44
  651. package/docs/run-logs.md +72 -28
  652. package/docs/testing.md +105 -98
  653. package/docs/verification-trees.md +23 -22
  654. package/package.json +7 -6
  655. package/dist/src/commands/rebase.d.ts +0 -4
  656. package/dist/src/commands/rebase.js +0 -5
  657. package/dist/src/core/patch-artifact-normalize.d.ts +0 -21
  658. package/dist/src/core/patch-artifact-normalize.js +0 -24
  659. package/dist/src/core/patch-lint-reexports.d.ts +0 -7
  660. package/dist/src/core/patch-lint-reexports.js +0 -8
  661. package/dist/src/core/wire-targets.d.ts +0 -7
  662. package/dist/src/core/wire-targets.js +0 -8
@@ -3,17 +3,17 @@
3
3
  *
4
4
  * Loads the TypeScript compiler API via dynamic import so it is only
5
5
  * required when `patchLint.checkJs` is enabled in `fireforge.json`.
6
- * TypeScript remains a dev-dependency — if a user enables checkJs
6
+ * TypeScript remains a dev-dependency. If a user enables checkJs
7
7
  * without installing it, the pass emits a clear error explaining
8
8
  * how to fix it.
9
9
  *
10
10
  * Separated from `patch-lint.ts` to keep both files within the
11
11
  * project's per-file line budget. The shim itself and the suppressed
12
12
  * diagnostic code list now live in `typecheck-shim.ts` and are shared
13
- * with the whole-project `fireforge typecheck` command — keeping a
13
+ * with the whole-project `fireforge typecheck` command, keeping a
14
14
  * single source of truth for the Firefox-globals coverage.
15
15
  * `patchLint.checkJsStrict` only tightens `strict` / `noImplicitAny`
16
- * and optional allowlisted `checkJsCompilerOptions`; it does not change
16
+ * and optional allowlisted `checkJsCompilerOptions`. It does not change
17
17
  * shim composition or suppressed diagnostic codes.
18
18
  *
19
19
  * Resolution scope vs reporting scope: the TS program is built over a
@@ -26,57 +26,74 @@
26
26
  */
27
27
  import type { PatchLintIssue } from '../types/commands/index.js';
28
28
  import type { PatchLintCheckJsCompilerOptions, PatchLintConfig, PatchLintSeverityGate } from '../types/config.js';
29
- /** How a checkJs run controls reporting and resolution; see module docs. */
29
+ /** How a checkJs run controls reporting and resolution. See module docs. */
30
30
  export interface CheckJsMode {
31
31
  strict: boolean;
32
32
  compilerOptions?: PatchLintCheckJsCompilerOptions;
33
33
  /**
34
34
  * How to report undefined free identifiers (TS2304/TS2552). Default
35
- * 'warning' — see `patchLint.undefinedIdentifiers`.
35
+ * 'warning'. See `patchLint.undefinedIdentifiers`.
36
36
  */
37
37
  undefinedIdentifiers?: PatchLintSeverityGate;
38
38
  }
39
39
  /**
40
40
  * Result of {@link runCheckJsGrouped}: diagnostics attributed to the
41
41
  * patch-owned file they originate in (`byFile`, keyed by repo-relative
42
- * path), plus run-level errors that have no owning file (`global` — e.g.
42
+ * path), plus run-level errors that have no owning file (`global`, e.g.
43
43
  * TypeScript missing or an unreadable extra shim).
44
44
  */
45
45
  export interface GroupedCheckJsResult {
46
46
  byFile: Map<string, PatchLintIssue[]>;
47
47
  global: PatchLintIssue[];
48
48
  }
49
+ /** Inputs for {@link runCheckJsGrouped}. */
50
+ export interface RunCheckJsGroupedInput {
51
+ /** Absolute engine (repository) directory. */
52
+ repoDir: string;
53
+ /**
54
+ * Patch-owned `.sys.mjs` paths (relative to `repoDir`) the program should
55
+ * see and resolve against.
56
+ */
57
+ resolutionOwned: Set<string>;
58
+ /**
59
+ * Optional project-relative extra `.d.ts` appended to the built-in
60
+ * Firefox-globals shim (from `patchLint.checkJsExtraShim`).
61
+ */
62
+ extraShimPath?: string;
63
+ /** Absolute project root for resolving `extraShimPath`. */
64
+ projectRoot?: string;
65
+ /** Strictness preset plus allowlisted compiler-option overrides. */
66
+ mode?: CheckJsMode;
67
+ /** Optional shim text appended after the consumer shim. */
68
+ builtinShimSuffix?: string;
69
+ /**
70
+ * When set, only these repo-relative files become program roots.
71
+ * Resolution (and the host allowlist) still spans all of
72
+ * `resolutionOwned`, so a subset root's cross-patch imports type-check
73
+ * against the real owning sources while unrelated owned files are never
74
+ * parsed. `.mjs` files are module-scoped, so a root's diagnostics are
75
+ * identical whether other owned files are roots or mere resolution
76
+ * targets.
77
+ */
78
+ rootScope?: ReadonlySet<string>;
79
+ }
49
80
  /**
50
- * Builds the checkJs program **once** over `resolutionOwned` and returns its
81
+ * Builds the checkJs program once over `resolutionOwned` and returns its
51
82
  * diagnostics grouped by originating file. Callers slice the result by their
52
- * own report scope — per-patch lint attributes each file to its owning patch,
83
+ * own report scope: per-patch lint attributes each file to its owning patch,
53
84
  * export/re-export keeps only the patch under export. Resolution always spans
54
85
  * every file in `resolutionOwned`, so cross-patch `resource:///`/`chrome://`
55
86
  * imports resolve to real sources.
56
87
  *
57
- * @param repoDir - Absolute engine (repository) directory
58
- * @param resolutionOwned - Patch-owned `.sys.mjs` paths (relative to repoDir)
59
- * the program should see and resolve against
60
- * @param extraShimPath - Optional project-relative extra `.d.ts` appended to
61
- * the built-in Firefox-globals shim (from `patchLint.checkJsExtraShim`)
62
- * @param projectRoot - Absolute project root for resolving `extraShimPath`
63
- * @param mode - Strictness preset plus allowlisted compiler-option overrides
64
- * @param builtinShimSuffix - Optional shim text appended AFTER the consumer
65
- * shim
66
- * @param rootScope - When set, only these repo-relative files become program
67
- * ROOTS; resolution (and the host allowlist) still spans all of
68
- * `resolutionOwned`, so a subset root's cross-patch imports type-check
69
- * against the real owning sources while unrelated owned files are never
70
- * parsed. `.mjs` files are module-scoped, so a root's diagnostics are
71
- * identical whether other owned files are roots or mere resolution targets.
88
+ * @param input - Program inputs. See {@link RunCheckJsGroupedInput}
72
89
  * @returns Diagnostics grouped per owning file plus run-level errors
73
90
  */
74
- export declare function runCheckJsGrouped(repoDir: string, resolutionOwned: Set<string>, extraShimPath?: string, projectRoot?: string, mode?: CheckJsMode, builtinShimSuffix?: string, rootScope?: ReadonlySet<string>): Promise<GroupedCheckJsResult>;
91
+ export declare function runCheckJsGrouped(input: RunCheckJsGroupedInput): Promise<GroupedCheckJsResult>;
75
92
  /**
76
93
  * Flattens a {@link runCheckJsGrouped} run into a single issue list. When
77
94
  * `reportScope` is supplied, only diagnostics from files in that set are
78
- * returned (resolution still spans every owned file); omitting it reports
79
- * every owned file's diagnostics — the historical whole-set behaviour.
95
+ * returned (resolution still spans every owned file). Omitting it reports
96
+ * every owned file's diagnostics, the historical whole-set behaviour.
80
97
  *
81
98
  * @param repoDir - Absolute engine (repository) directory
82
99
  * @param patchOwnedFiles - Patch-owned `.sys.mjs` paths to resolve against
@@ -103,15 +120,15 @@ export declare function runCheckJs(repoDir: string, patchOwnedFiles: Set<string>
103
120
  export declare function invokePatchLintCheckJs(repoDir: string, patchOwnedFiles: Set<string>, patchLint: PatchLintConfig, projectRoot: string, reportScope?: ReadonlySet<string>): Promise<PatchLintIssue[]>;
104
121
  /**
105
122
  * Runs the checkJs pass over patch-owned test `.js` files (
106
- * `patchLint.checkJsTestFiles`). Each test file gets its OWN small
107
- * program — mochitest scripts share top-level scope only with their
108
- * directory's `head*.js` helpers, so one multi-script program would emit
109
- * false cross-file redeclaration errors — with roots = the test file plus
110
- * any same-directory patch-owned `head*.js`, checked against the built-in
111
- * Firefox shim + {@link TEST_HARNESS_SHIM} + the optional consumer
112
- * `checkJsTestShim`. Only the target file's diagnostics are reported per
113
- * program (head helpers report from their own program), and run-level
114
- * errors are de-duplicated across programs.
123
+ * `patchLint.checkJsTestFiles`). Each test file gets its own small
124
+ * program, with roots = the test file plus any same-directory patch-owned
125
+ * `head*.js`, checked against the built-in Firefox shim +
126
+ * {@link TEST_HARNESS_SHIM} + the optional consumer `checkJsTestShim`.
127
+ * Mochitest scripts share top-level scope only with their directory's
128
+ * `head*.js` helpers, so one multi-script program would emit false
129
+ * cross-file redeclaration errors. Only the target file's diagnostics are
130
+ * reported per program (head helpers report from their own program), and
131
+ * run-level errors are de-duplicated across programs.
115
132
  *
116
133
  * @param repoDir - Absolute engine (repository) directory
117
134
  * @param testFiles - Patch-owned test-script paths (repo-relative)
@@ -122,7 +139,7 @@ export declare function runCheckJsTestFilesGrouped(repoDir: string, testFiles: S
122
139
  /**
123
140
  * Grouped variant of {@link invokePatchLintCheckJs}: builds one queue-wide
124
141
  * checkJs program over `patchOwnedFiles` and returns its findings grouped by
125
- * owning file. The per-patch lint orchestrator calls this **once per run**
142
+ * owning file. The per-patch lint orchestrator calls this once per run
126
143
  * and attributes each file's findings to its owning patch, instead of
127
144
  * rebuilding the same program for every patch in the queue.
128
145
  *
@@ -131,12 +148,12 @@ export declare function runCheckJsTestFilesGrouped(repoDir: string, testFiles: S
131
148
  * @param patchLint - The resolved `patchLint` config block
132
149
  * @param projectRoot - FireForge project root for shim resolution
133
150
  * @param rootScope - Optional subset of files to use as program roots
134
- * (`--patches`); resolution still spans the whole queue
151
+ * (`--patches`). Resolution still spans the whole queue
135
152
  */
136
153
  export declare function invokePatchLintCheckJsGrouped(repoDir: string, patchOwnedFiles: Set<string>, patchLint: PatchLintConfig, projectRoot: string, rootScope?: ReadonlySet<string>): Promise<GroupedCheckJsResult>;
137
154
  /**
138
155
  * Cheap probe reproducing the only run-level ("global") checkJs findings the
139
- * build path can produce — a missing `typescript` package and an unreadable
156
+ * build path can produce: a missing `typescript` package and an unreadable
140
157
  * consumer shim (`checkJsExtraShim`, and `checkJsTestShim` when
141
158
  * `checkJsTestFiles` is on). The built program itself never contributes
142
159
  * globals (see {@link runCheckJsGrouped}), so a warm all-cache-hit run can
@@ -4,17 +4,17 @@
4
4
  *
5
5
  * Loads the TypeScript compiler API via dynamic import so it is only
6
6
  * required when `patchLint.checkJs` is enabled in `fireforge.json`.
7
- * TypeScript remains a dev-dependency — if a user enables checkJs
7
+ * TypeScript remains a dev-dependency. If a user enables checkJs
8
8
  * without installing it, the pass emits a clear error explaining
9
9
  * how to fix it.
10
10
  *
11
11
  * Separated from `patch-lint.ts` to keep both files within the
12
12
  * project's per-file line budget. The shim itself and the suppressed
13
13
  * diagnostic code list now live in `typecheck-shim.ts` and are shared
14
- * with the whole-project `fireforge typecheck` command — keeping a
14
+ * with the whole-project `fireforge typecheck` command, keeping a
15
15
  * single source of truth for the Firefox-globals coverage.
16
16
  * `patchLint.checkJsStrict` only tightens `strict` / `noImplicitAny`
17
- * and optional allowlisted `checkJsCompilerOptions`; it does not change
17
+ * and optional allowlisted `checkJsCompilerOptions`. It does not change
18
18
  * shim composition or suppressed diagnostic codes.
19
19
  *
20
20
  * Resolution scope vs reporting scope: the TS program is built over a
@@ -39,11 +39,12 @@ import { composeShimSource, SHIM_FILENAME, SUPPRESSED_DIAGNOSTIC_CODES, TEST_HAR
39
39
  * Converts a native path into the form TypeScript uses for `fileName`.
40
40
  *
41
41
  * TypeScript normalizes every path it hands a `CompilerHost` to forward
42
- * slashes on ALL platforms, while `resolve()` here yields the platform
42
+ * slashes on all platforms, while `resolve()` here yields the platform
43
43
  * separator. On Windows that mismatch made every `ownedAbsolute.has(fileName)`
44
44
  * and `relByAbsolute.get(fileName)` lookup miss, so the host served an empty
45
- * source file for each owned file and the whole pass reported zero findings —
46
- * silently, because "no diagnostics" is indistinguishable from "clean code".
45
+ * source file for each owned file and the whole pass reported zero findings.
46
+ * It did so silently, because "no diagnostics" is indistinguishable from
47
+ * "clean code".
47
48
  * Every path that crosses the TS boundary goes through here.
48
49
  */
49
50
  function toTsPath(path) {
@@ -55,8 +56,8 @@ function toTsPath(path) {
55
56
  * segment uniquely matches an owned file. URL specifiers
56
57
  * (chrome://browser/content/Foo.sys.mjs, resource:///modules/Foo.sys.mjs)
57
58
  * are matched by basename, with a `.mjs` → `.sys.mjs` fallback for deployed
58
- * widget URLs. Ambiguous or unknown basenames stay unresolved — loose
59
- * wildcard typing beats guessing the wrong module — and relative specifiers
59
+ * widget URLs. Ambiguous or unknown basenames stay unresolved (loose
60
+ * wildcard typing beats guessing the wrong module), and relative specifiers
60
61
  * are left to fail resolution (the relative-import lint rule bans them).
61
62
  */
62
63
  function createOwnedSpecifierResolver(ts, ownedAbsolute) {
@@ -105,8 +106,8 @@ function extensionForFile(ts, file) {
105
106
  }
106
107
  /**
107
108
  * Builds a resolver for a reviewed `paths` mapping (route 2 of the
108
- * cross-patch resolution work). Each pattern may contain a single `*`;
109
- * matching targets are resolved relative to `baseDir` (the engine dir, like
109
+ * cross-patch resolution work). Each pattern may contain a single `*`.
110
+ * Matching targets are resolved relative to `baseDir` (the engine dir, like
110
111
  * the rest of `patchLint` which is engine-relative). Resolved files are
111
112
  * recorded via `onResolved` so the compiler host knows to read them from
112
113
  * disk rather than returning empty content. No `baseUrl` is set, so this is
@@ -134,7 +135,7 @@ function createPathsResolver(ts, paths, baseDir, fileExists, onResolved) {
134
135
  }
135
136
  for (const target of targets) {
136
137
  // A `paths` target carries at most one `*`, and TypeScript substitutes
137
- // that one wildcard — spelled as index arithmetic (mirroring the
138
+ // that one wildcard. It is spelled as index arithmetic (mirroring the
138
139
  // prefix/suffix split on the pattern side above) rather than
139
140
  // `replace('*', …)`, whose first-occurrence-only behaviour reads as an
140
141
  // incomplete rewrite (CodeQL `js/incomplete-sanitization`).
@@ -155,35 +156,22 @@ function createPathsResolver(ts, paths, baseDir, fileExists, onResolved) {
155
156
  };
156
157
  }
157
158
  /**
158
- * Builds the checkJs program **once** over `resolutionOwned` and returns its
159
+ * Builds the checkJs program once over `resolutionOwned` and returns its
159
160
  * diagnostics grouped by originating file. Callers slice the result by their
160
- * own report scope — per-patch lint attributes each file to its owning patch,
161
+ * own report scope: per-patch lint attributes each file to its owning patch,
161
162
  * export/re-export keeps only the patch under export. Resolution always spans
162
163
  * every file in `resolutionOwned`, so cross-patch `resource:///`/`chrome://`
163
164
  * imports resolve to real sources.
164
165
  *
165
- * @param repoDir - Absolute engine (repository) directory
166
- * @param resolutionOwned - Patch-owned `.sys.mjs` paths (relative to repoDir)
167
- * the program should see and resolve against
168
- * @param extraShimPath - Optional project-relative extra `.d.ts` appended to
169
- * the built-in Firefox-globals shim (from `patchLint.checkJsExtraShim`)
170
- * @param projectRoot - Absolute project root for resolving `extraShimPath`
171
- * @param mode - Strictness preset plus allowlisted compiler-option overrides
172
- * @param builtinShimSuffix - Optional shim text appended AFTER the consumer
173
- * shim
174
- * @param rootScope - When set, only these repo-relative files become program
175
- * ROOTS; resolution (and the host allowlist) still spans all of
176
- * `resolutionOwned`, so a subset root's cross-patch imports type-check
177
- * against the real owning sources while unrelated owned files are never
178
- * parsed. `.mjs` files are module-scoped, so a root's diagnostics are
179
- * identical whether other owned files are roots or mere resolution targets.
166
+ * @param input - Program inputs. See {@link RunCheckJsGroupedInput}
180
167
  * @returns Diagnostics grouped per owning file plus run-level errors
181
168
  */
182
- export async function runCheckJsGrouped(repoDir, resolutionOwned, extraShimPath, projectRoot, mode, builtinShimSuffix, rootScope) {
169
+ export async function runCheckJsGrouped(input) {
170
+ const { repoDir, resolutionOwned, extraShimPath, rootScope } = input;
183
171
  const empty = { byFile: new Map(), global: [] };
184
172
  if (resolutionOwned.size === 0)
185
173
  return empty;
186
- // Dynamic import — typescript stays as a dev dependency
174
+ // Dynamic import: typescript stays as a dev dependency
187
175
  let ts;
188
176
  try {
189
177
  ts = await import('typescript');
@@ -204,7 +192,7 @@ export async function runCheckJsGrouped(repoDir, resolutionOwned, extraShimPath,
204
192
  }
205
193
  // Resolve absolute paths for root files, filtering to files that exist.
206
194
  // Under a rootScope, non-scoped owned files stay resolvable (host
207
- // allowlist + relByAbsolute) but are not program roots — they are only
195
+ // allowlist + relByAbsolute) but are not program roots. They are only
208
196
  // parsed if a scoped root's import closure reaches them.
209
197
  const rootFiles = [];
210
198
  const ownedAbsolute = new Set();
@@ -221,18 +209,20 @@ export async function runCheckJsGrouped(repoDir, resolutionOwned, extraShimPath,
221
209
  if (rootFiles.length === 0)
222
210
  return empty;
223
211
  // Compose the shim. `extraShimPath` is project-relative (validated
224
- // by config-validate); resolve it against `projectRoot`. When the
225
- // caller passes neither, fall back to `repoDir` — the only way the
212
+ // by config-validate). Resolve it against `projectRoot`. When the
213
+ // caller passes neither, fall back to `repoDir`. The only way the
226
214
  // shim path is ever read in that case is when extraShimPath is
227
215
  // also undefined, so the resolution target is irrelevant.
228
216
  let shimSource;
229
217
  try {
230
- const composed = await composeShimSource(projectRoot ?? repoDir, extraShimPath);
218
+ const composed = await composeShimSource(input.projectRoot ?? repoDir, extraShimPath);
231
219
  // The suffix (e.g. the loose test-harness baseline) goes
232
- // AFTER the consumer's extra shim: TypeScript resolves conflicting
233
- // `declare var` redeclarations to the FIRST declaration, so a typed
220
+ // after the consumer's extra shim: TypeScript resolves conflicting
221
+ // `declare var` redeclarations to the first declaration, so a typed
234
222
  // consumer declaration must precede the loose fallback to win.
235
- shimSource = builtinShimSuffix ? `${composed.source}\n${builtinShimSuffix}` : composed.source;
223
+ shimSource = input.builtinShimSuffix
224
+ ? `${composed.source}\n${input.builtinShimSuffix}`
225
+ : composed.source;
236
226
  if (composed.extraShimAppended) {
237
227
  verbose(`checkJs: extra shim ${extraShimPath ?? ''} appended to Firefox globals shim`);
238
228
  }
@@ -252,21 +242,21 @@ export async function runCheckJsGrouped(repoDir, resolutionOwned, extraShimPath,
252
242
  }
253
243
  const shimPath = toTsPath(resolve(repoDir, SHIM_FILENAME));
254
244
  rootFiles.push(shimPath);
255
- const strict = mode?.strict === true;
245
+ const strict = input.mode?.strict === true;
256
246
  const strictness = strict
257
247
  ? { strict: true, noImplicitAny: true }
258
248
  : {
259
- // Loose default — implicit `any` is allowed unless `patchLint.checkJsStrict`.
249
+ // Loose default: implicit `any` is allowed unless `patchLint.checkJsStrict`.
260
250
  strict: false,
261
251
  noImplicitAny: false,
262
252
  };
263
- // Allowlisted overrides. Booleans merge directly; a reviewed `paths`
264
- // mapping is applied to the compiler options AND wired into the host
253
+ // Allowlisted overrides. Booleans merge directly. A reviewed `paths`
254
+ // mapping is applied to the compiler options and wired into the host
265
255
  // resolver below so patch-owned modules can be typed from their real
266
256
  // sources without a hand-generated ambient stub shim.
267
257
  const overrides = {};
268
258
  let pathsMapping;
269
- const co = mode?.compilerOptions;
259
+ const co = input.mode?.compilerOptions;
270
260
  if (co) {
271
261
  for (const key of Object.keys(co)) {
272
262
  const v = co[key];
@@ -292,10 +282,10 @@ export async function runCheckJsGrouped(repoDir, resolutionOwned, extraShimPath,
292
282
  // Module resolution is host-controlled (see resolveOwnedSpecifier
293
283
  // below): imports that match a patch-owned file resolve to the real
294
284
  // source so JSDoc type-guard predicates and @template generics
295
- // survive the module boundary; everything else deliberately fails
285
+ // survive the module boundary. Everything else is left to fail
296
286
  // resolution, falling back to the chrome:*/resource:* ambient
297
287
  // wildcards plus the suppressed "cannot find module" codes. The
298
- // host resolver is authoritative — TS never crawls the Firefox
288
+ // host resolver is authoritative: TS never crawls the Firefox
299
289
  // tree looking for upstream modules.
300
290
  ...strictness,
301
291
  ...overrides,
@@ -305,7 +295,7 @@ export async function runCheckJsGrouped(repoDir, resolutionOwned, extraShimPath,
305
295
  // the shim for the shim path, and returns empty content for
306
296
  // anything else to avoid reading the full Firefox tree.
307
297
  const defaultHost = ts.createCompilerHost(options);
308
- // Files pulled in via a reviewed `paths` mapping — outside the owned set
298
+ // Files pulled in via a reviewed `paths` mapping: outside the owned set
309
299
  // but read from disk so the resolver's targets actually type-check.
310
300
  const pathsResolved = new Set();
311
301
  const resolveViaPaths = pathsMapping
@@ -351,7 +341,7 @@ export async function runCheckJsGrouped(repoDir, resolutionOwned, extraShimPath,
351
341
  },
352
342
  };
353
343
  const program = ts.createProgram(rootFiles, options, host);
354
- const byFile = groupOwnedDiagnostics(ts, [...program.getSemanticDiagnostics(), ...program.getSyntacticDiagnostics()], relByAbsolute, mode?.undefinedIdentifiers ?? 'warning');
344
+ const byFile = groupOwnedDiagnostics(ts, [...program.getSemanticDiagnostics(), ...program.getSyntacticDiagnostics()], relByAbsolute, input.mode?.undefinedIdentifiers ?? 'warning');
355
345
  verbose(`checkJs: analyzed ${rootFiles.length - 1} file(s) across ${byFile.size} owning file(s)`);
356
346
  return { byFile, global: [] };
357
347
  }
@@ -359,7 +349,7 @@ export async function runCheckJsGrouped(repoDir, resolutionOwned, extraShimPath,
359
349
  * Groups TS diagnostics by the patch-owned file they originate in,
360
350
  * suppressing module-resolution / unknown-name noise inherent to checking
361
351
  * Firefox JS outside Mozilla's build system. Diagnostics from `paths`-resolved
362
- * or shim files are dropped — only owned files (in `relByAbsolute`) carry
352
+ * or shim files are dropped. Only owned files (in `relByAbsolute`) carry
363
353
  * findings.
364
354
  */
365
355
  function groupOwnedDiagnostics(ts, diagnostics, relByAbsolute, undefinedIdentifiers = 'warning') {
@@ -404,8 +394,8 @@ function groupOwnedDiagnostics(ts, diagnostics, relByAbsolute, undefinedIdentifi
404
394
  /**
405
395
  * Flattens a {@link runCheckJsGrouped} run into a single issue list. When
406
396
  * `reportScope` is supplied, only diagnostics from files in that set are
407
- * returned (resolution still spans every owned file); omitting it reports
408
- * every owned file's diagnostics — the historical whole-set behaviour.
397
+ * returned (resolution still spans every owned file). Omitting it reports
398
+ * every owned file's diagnostics, the historical whole-set behaviour.
409
399
  *
410
400
  * @param repoDir - Absolute engine (repository) directory
411
401
  * @param patchOwnedFiles - Patch-owned `.sys.mjs` paths to resolve against
@@ -417,7 +407,13 @@ function groupOwnedDiagnostics(ts, diagnostics, relByAbsolute, undefinedIdentifi
417
407
  * @returns Array of lint issues from TS diagnostics
418
408
  */
419
409
  export async function runCheckJs(repoDir, patchOwnedFiles, extraShimPath, projectRoot, mode, reportScope) {
420
- const { byFile, global } = await runCheckJsGrouped(repoDir, patchOwnedFiles, extraShimPath, projectRoot, mode);
410
+ const { byFile, global } = await runCheckJsGrouped({
411
+ repoDir,
412
+ resolutionOwned: patchOwnedFiles,
413
+ ...(extraShimPath !== undefined ? { extraShimPath } : {}),
414
+ ...(projectRoot !== undefined ? { projectRoot } : {}),
415
+ ...(mode !== undefined ? { mode } : {}),
416
+ });
421
417
  const issues = [...global];
422
418
  for (const [rel, list] of byFile) {
423
419
  if (reportScope && !reportScope.has(rel))
@@ -443,15 +439,15 @@ export async function invokePatchLintCheckJs(repoDir, patchOwnedFiles, patchLint
443
439
  }
444
440
  /**
445
441
  * Runs the checkJs pass over patch-owned test `.js` files (
446
- * `patchLint.checkJsTestFiles`). Each test file gets its OWN small
447
- * program — mochitest scripts share top-level scope only with their
448
- * directory's `head*.js` helpers, so one multi-script program would emit
449
- * false cross-file redeclaration errors — with roots = the test file plus
450
- * any same-directory patch-owned `head*.js`, checked against the built-in
451
- * Firefox shim + {@link TEST_HARNESS_SHIM} + the optional consumer
452
- * `checkJsTestShim`. Only the target file's diagnostics are reported per
453
- * program (head helpers report from their own program), and run-level
454
- * errors are de-duplicated across programs.
442
+ * `patchLint.checkJsTestFiles`). Each test file gets its own small
443
+ * program, with roots = the test file plus any same-directory patch-owned
444
+ * `head*.js`, checked against the built-in Firefox shim +
445
+ * {@link TEST_HARNESS_SHIM} + the optional consumer `checkJsTestShim`.
446
+ * Mochitest scripts share top-level scope only with their directory's
447
+ * `head*.js` helpers, so one multi-script program would emit false
448
+ * cross-file redeclaration errors. Only the target file's diagnostics are
449
+ * reported per program (head helpers report from their own program), and
450
+ * run-level errors are de-duplicated across programs.
455
451
  *
456
452
  * @param repoDir - Absolute engine (repository) directory
457
453
  * @param testFiles - Patch-owned test-script paths (repo-relative)
@@ -482,7 +478,16 @@ export async function runCheckJsTestFilesGrouped(repoDir, testFiles, patchLint,
482
478
  roots.add(candidate);
483
479
  }
484
480
  }
485
- const result = await runCheckJsGrouped(repoDir, roots, patchLint.checkJsTestShim, projectRoot, mode, TEST_HARNESS_SHIM);
481
+ const result = await runCheckJsGrouped({
482
+ repoDir,
483
+ resolutionOwned: roots,
484
+ ...(patchLint.checkJsTestShim !== undefined
485
+ ? { extraShimPath: patchLint.checkJsTestShim }
486
+ : {}),
487
+ projectRoot,
488
+ mode,
489
+ builtinShimSuffix: TEST_HARNESS_SHIM,
490
+ });
486
491
  const own = result.byFile.get(file);
487
492
  if (own && own.length > 0) {
488
493
  merged.byFile.set(file, [
@@ -515,7 +520,7 @@ function modeFromPatchLintConfig(patchLint) {
515
520
  /**
516
521
  * Grouped variant of {@link invokePatchLintCheckJs}: builds one queue-wide
517
522
  * checkJs program over `patchOwnedFiles` and returns its findings grouped by
518
- * owning file. The per-patch lint orchestrator calls this **once per run**
523
+ * owning file. The per-patch lint orchestrator calls this once per run
519
524
  * and attributes each file's findings to its owning patch, instead of
520
525
  * rebuilding the same program for every patch in the queue.
521
526
  *
@@ -524,14 +529,23 @@ function modeFromPatchLintConfig(patchLint) {
524
529
  * @param patchLint - The resolved `patchLint` config block
525
530
  * @param projectRoot - FireForge project root for shim resolution
526
531
  * @param rootScope - Optional subset of files to use as program roots
527
- * (`--patches`); resolution still spans the whole queue
532
+ * (`--patches`). Resolution still spans the whole queue
528
533
  */
529
534
  export async function invokePatchLintCheckJsGrouped(repoDir, patchOwnedFiles, patchLint, projectRoot, rootScope) {
530
- return runCheckJsGrouped(repoDir, patchOwnedFiles, patchLint.checkJsExtraShim, projectRoot, modeFromPatchLintConfig(patchLint), undefined, rootScope);
535
+ return runCheckJsGrouped({
536
+ repoDir,
537
+ resolutionOwned: patchOwnedFiles,
538
+ ...(patchLint.checkJsExtraShim !== undefined
539
+ ? { extraShimPath: patchLint.checkJsExtraShim }
540
+ : {}),
541
+ projectRoot,
542
+ mode: modeFromPatchLintConfig(patchLint),
543
+ ...(rootScope !== undefined ? { rootScope } : {}),
544
+ });
531
545
  }
532
546
  /**
533
547
  * Cheap probe reproducing the only run-level ("global") checkJs findings the
534
- * build path can produce — a missing `typescript` package and an unreadable
548
+ * build path can produce: a missing `typescript` package and an unreadable
535
549
  * consumer shim (`checkJsExtraShim`, and `checkJsTestShim` when
536
550
  * `checkJsTestFiles` is on). The built program itself never contributes
537
551
  * globals (see {@link runCheckJsGrouped}), so a warm all-cache-hit run can
@@ -4,30 +4,29 @@
4
4
  * `.js` files loaded via `Services.scriptloader.loadSubScript`).
5
5
  *
6
6
  * Why a separate module from {@link ./patch-lint-jsdoc.ts}: chrome
7
- * subscripts are NOT ES modules. They are parsed as scripts (no static
7
+ * subscripts are not ES modules. They are parsed as scripts (no static
8
8
  * `export`) and their top-level `class`/`function` declarations are
9
9
  * exposed to the loading window as globals rather than declared exports.
10
10
  * The export-walker in `patch-lint-jsdoc.ts` would never visit them.
11
11
  *
12
- * The rule shape — "every top-level class needs a JSDoc, every method
13
- * needs one when `chromeScriptJsDoc` is at `warning`/`error`, every
14
- * top-level function needs a matching @param/@returns block" — is
15
- * identical to the `.sys.mjs` rule once you remove the `export` framing,
16
- * so the per-declaration validators are reused verbatim from the export
17
- * module.
12
+ * The rule shape is identical to the `.sys.mjs` rule once you remove the
13
+ * `export` framing: every top-level class needs a JSDoc, every method
14
+ * needs one when `chromeScriptJsDoc` is at `warning`/`error`, and every
15
+ * top-level function needs a matching @param/@returns block. So the
16
+ * per-declaration validators are reused verbatim from the export module.
18
17
  */
19
18
  import type { PatchLintIssue } from '../types/commands/index.js';
20
19
  import type { PatchLintSeverityGate } from '../types/config.js';
21
20
  import type { JsDocIssue, ValidateExportJsDocOptions } from './patch-lint-jsdoc.js';
22
21
  /**
23
22
  * Validates JSDoc on top-level declarations in a chrome-subscript `.js`
24
- * source file. A parse failure returns an empty issue list — chrome
23
+ * source file. A parse failure returns an empty issue list. Chrome
25
24
  * subscripts that use module-only syntax (rare) silently disable the
26
25
  * rule rather than emitting confusing parse-error issues.
27
26
  *
28
27
  * @param source - File content
29
28
  * @param options - Optional gates (e.g. class-method JSDoc severity).
30
- * `classMethodMode` defaults to `'off'` — the orchestrator passes the
29
+ * `classMethodMode` defaults to `'off'`. The orchestrator passes the
31
30
  * `chromeScriptJsDoc` severity here so a single knob controls both
32
31
  * class-level and method-level enforcement.
33
32
  * @returns Array of JSDoc issues found
@@ -5,29 +5,28 @@
5
5
  * `.js` files loaded via `Services.scriptloader.loadSubScript`).
6
6
  *
7
7
  * Why a separate module from {@link ./patch-lint-jsdoc.ts}: chrome
8
- * subscripts are NOT ES modules. They are parsed as scripts (no static
8
+ * subscripts are not ES modules. They are parsed as scripts (no static
9
9
  * `export`) and their top-level `class`/`function` declarations are
10
10
  * exposed to the loading window as globals rather than declared exports.
11
11
  * The export-walker in `patch-lint-jsdoc.ts` would never visit them.
12
12
  *
13
- * The rule shape — "every top-level class needs a JSDoc, every method
14
- * needs one when `chromeScriptJsDoc` is at `warning`/`error`, every
15
- * top-level function needs a matching @param/@returns block" — is
16
- * identical to the `.sys.mjs` rule once you remove the `export` framing,
17
- * so the per-declaration validators are reused verbatim from the export
18
- * module.
13
+ * The rule shape is identical to the `.sys.mjs` rule once you remove the
14
+ * `export` framing: every top-level class needs a JSDoc, every method
15
+ * needs one when `chromeScriptJsDoc` is at `warning`/`error`, and every
16
+ * top-level function needs a matching @param/@returns block. So the
17
+ * per-declaration validators are reused verbatim from the export module.
19
18
  */
20
19
  import { parseScript } from './ast-utils.js';
21
20
  import { validateClassDecl, validateClassMethods, validateFunctionDecl, } from './patch-lint-jsdoc.js';
22
21
  /**
23
22
  * Validates JSDoc on top-level declarations in a chrome-subscript `.js`
24
- * source file. A parse failure returns an empty issue list — chrome
23
+ * source file. A parse failure returns an empty issue list. Chrome
25
24
  * subscripts that use module-only syntax (rare) silently disable the
26
25
  * rule rather than emitting confusing parse-error issues.
27
26
  *
28
27
  * @param source - File content
29
28
  * @param options - Optional gates (e.g. class-method JSDoc severity).
30
- * `classMethodMode` defaults to `'off'` — the orchestrator passes the
29
+ * `classMethodMode` defaults to `'off'`. The orchestrator passes the
31
30
  * `chromeScriptJsDoc` severity here so a single knob controls both
32
31
  * class-level and method-level enforcement.
33
32
  * @returns Array of JSDoc issues found
@@ -43,7 +42,7 @@ export function validateChromeScriptJsDoc(source, options) {
43
42
  // Deliberate carve-out, unlike the `.sys.mjs` walker in
44
43
  // `patch-lint-jsdoc.ts` (which reports a parse failure as an issue).
45
44
  // `parseScript` rejects `import`/`export`, so a chrome subscript that was
46
- // misclassified as a `.js` file — or that mistakenly uses module syntax —
45
+ // misclassified as a `.js` file (or that mistakenly uses module syntax)
47
46
  // would emit a pseudo-issue for every rule here. The orchestrator already
48
47
  // runs the export walker on `.sys.mjs` separately, so silently declining
49
48
  // to lint an unparseable script is the correct degradation for this file
@@ -63,7 +62,7 @@ export function validateChromeScriptJsDoc(source, options) {
63
62
  }
64
63
  }
65
64
  // Top-level `var Foo = class {...}` / `let Foo = function() {...}`
66
- // patterns are intentionally out of scope for V1 — chrome subscripts
65
+ // patterns are out of scope for V1: chrome subscripts
67
66
  // overwhelmingly use bare `class`/`function` declarations and the
68
67
  // variable-init form would require unwrapping the initializer. Add
69
68
  // it later if a real chrome subscript uses that shape.
@@ -6,17 +6,13 @@
6
6
  *
7
7
  * Memoised per context object: ownership resolution and cache-key
8
8
  * fingerprints call this 2-3× per linted patch, and each call otherwise
9
- * re-runs `detectNewFilesInDiff` over EVERY queue entry's diff. Keyed weakly
10
- * so a discarded context frees its map; a caller that mutates a context
9
+ * re-runs `detectNewFilesInDiff` over every queue entry's diff. Keyed weakly
10
+ * so a discarded context frees its map. A caller that mutates a context
11
11
  * entry in place must call {@link invalidateNewFileCreatorsCache}.
12
12
  */
13
+ import type { PatchQueueBodyEntry, PatchQueueView } from './patch-lint-queue-types.js';
13
14
  /** The slice of a queue context the creators map is derived from. */
14
- interface CreatorsContext {
15
- entries: {
16
- filename: string;
17
- diff: string;
18
- }[];
19
- }
15
+ type CreatorsContext = PatchQueueView<PatchQueueBodyEntry>;
20
16
  /** Drops the memoised creators map after an in-place context entry update. */
21
17
  export declare function invalidateNewFileCreatorsCache(ctx: CreatorsContext): void;
22
18
  /**
@@ -24,7 +20,7 @@ export declare function invalidateNewFileCreatorsCache(ctx: CreatorsContext): vo
24
20
  * mode` by at least one patch in the queue. Paths created by only one
25
21
  * patch are also included so callers can distinguish "no creator" from
26
22
  * "exactly one creator" without re-scanning the diffs. The returned map
27
- * is memoised and shared — treat it as read-only.
23
+ * is memoised and shared, so treat it as read-only.
28
24
  */
29
25
  export declare function collectNewFileCreatorsByPath(ctx: CreatorsContext): Map<string, string[]>;
30
26
  export {};
@@ -7,8 +7,8 @@
7
7
  *
8
8
  * Memoised per context object: ownership resolution and cache-key
9
9
  * fingerprints call this 2-3× per linted patch, and each call otherwise
10
- * re-runs `detectNewFilesInDiff` over EVERY queue entry's diff. Keyed weakly
11
- * so a discarded context frees its map; a caller that mutates a context
10
+ * re-runs `detectNewFilesInDiff` over every queue entry's diff. Keyed weakly
11
+ * so a discarded context frees its map. A caller that mutates a context
12
12
  * entry in place must call {@link invalidateNewFileCreatorsCache}.
13
13
  */
14
14
  import { detectNewFilesInDiff } from './patch-lint-diff.js';
@@ -22,7 +22,7 @@ export function invalidateNewFileCreatorsCache(ctx) {
22
22
  * mode` by at least one patch in the queue. Paths created by only one
23
23
  * patch are also included so callers can distinguish "no creator" from
24
24
  * "exactly one creator" without re-scanning the diffs. The returned map
25
- * is memoised and shared — treat it as read-only.
25
+ * is memoised and shared, so treat it as read-only.
26
26
  */
27
27
  export function collectNewFileCreatorsByPath(ctx) {
28
28
  const memoised = newFileCreatorsMemo.get(ctx);