@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
@@ -5,7 +5,7 @@
5
5
  * `fireforge typecheck` command (`typecheck.ts`).
6
6
  *
7
7
  * Centralised so both flows agree on the same Firefox-globals shim
8
- * and the same set of suppressed diagnostic codes — drift between the
8
+ * and the same set of suppressed diagnostic codes. Drift between the
9
9
  * two would mean a patch could lint clean under `fireforge lint` but
10
10
  * still fail `fireforge typecheck`, or vice versa, for reasons the
11
11
  * operator could not infer from the rule names.
@@ -17,7 +17,7 @@ export const SHIM_FILENAME = '__fireforge_firefox_globals.d.ts';
17
17
  /**
18
18
  * Minimal `.d.ts` shim for Firefox privileged-scope globals.
19
19
  *
20
- * Firefox source is plain JS — no TypeScript allowed. The shim lets
20
+ * Firefox source is plain JS, with no TypeScript allowed. The shim lets
21
21
  * TS-driven type checking run without reporting "cannot find name"
22
22
  * for the most common Mozilla APIs. Types are intentionally loose
23
23
  * (`any`) because full Firefox type coverage is out of scope.
@@ -25,7 +25,7 @@ export const SHIM_FILENAME = '__fireforge_firefox_globals.d.ts';
25
25
  * Structured globals (`ChromeUtils`, `Localization`) are declared via
26
26
  * named global interfaces (`ChromeUtilsShim`, `LocalizationShim`, …)
27
27
  * rather than closed object-literal types, so a project's extra shim
28
- * (`patchLint.checkJsExtraShim` / `typecheck.extraShim`) can ADD members
28
+ * (`patchLint.checkJsExtraShim` / `typecheck.extraShim`) can add members
29
29
  * through TypeScript interface merging:
30
30
  *
31
31
  * // my-extra-shim.d.ts
@@ -34,27 +34,27 @@ export const SHIM_FILENAME = '__fireforge_firefox_globals.d.ts';
34
34
  * }
35
35
  *
36
36
  * (A second `declare var ChromeUtils` in the extra shim remains a
37
- * duplicate-identifier error by design — merge the interface instead.)
37
+ * duplicate-identifier error by design. Merge the interface instead.)
38
38
  * The member lists track upstream WebIDL additions per Firefox release
39
- * (`dom/chrome-webidl/ChromeUtils.webidl` for ChromeUtils); when a new
39
+ * (`dom/chrome-webidl/ChromeUtils.webidl` for ChromeUtils). When a new
40
40
  * release adds a commonly-patched member, add a loose signature here.
41
41
  *
42
42
  * Notable patterns that require shimming:
43
43
  * - `const lazy = {};` + `ChromeUtils.defineESModuleGetters(lazy, { ... })`
44
- * populates `lazy` at runtime; we declare it as `Record<string, any>`.
44
+ * populates `lazy` at runtime, so we declare it as `Record<string, any>`.
45
45
  * - `Services.obs`, `Services.prefs`, etc. are XPCOM service accessors.
46
46
  * - `Ci`, `Cc`, `Cr`, `Cu` are XPCOM component shortcuts.
47
47
  * - Browser chrome globals like `gBrowser`, `gURLBar` are common in
48
48
  * content scripts wired via `browser.js`.
49
49
  * - Dynamic `import("resource:-…")` / `import("chrome:-…")` under patch
50
50
  * checkJs: imports of *patch-owned* modules resolve to their real
51
- * sources (see `patch-lint-checkjs.ts`); everything else fails host
51
+ * sources (see `patch-lint-checkjs.ts`). Everything else fails host
52
52
  * resolution and lands on these URL ambient wildcards, keeping
53
53
  * upstream Firefox imports pragmatically loose, same posture as globals.
54
54
  */
55
55
  const FIREFOX_GLOBALS_SHIM = `
56
56
  declare var Services: any;
57
- // Extensible via interface merging from a project extra shim — see the
57
+ // Extensible via interface merging from a project extra shim; see the
58
58
  // module doc comment in typecheck-shim.ts.
59
59
  interface ChromeUtilsShim {
60
60
  defineESModuleGetters(target: any, modules: Record<string, string>): void;
@@ -67,7 +67,7 @@ interface ChromeUtilsShim {
67
67
  getClassName(obj: any, unwrap?: boolean): string;
68
68
  isClassInfo(obj: any): boolean;
69
69
  // Firefox 153, dom/chrome-webidl/ChromeUtils.webidl: two overloads
70
- // (URI string / nsIURI) with a PredictRemoteTypeOptions dictionary —
70
+ // (URI string / nsIURI) with a PredictRemoteTypeOptions dictionary,
71
71
  // collapsed into one loose signature per the shim's pragmatic posture.
72
72
  predictRemoteTypeForURI(uri: string | object | null, options?: object): string | null;
73
73
  }
@@ -98,7 +98,7 @@ declare class JSWindowActorParent {
98
98
  sendAsyncMessage(name: string, data?: any, transfers?: any[]): void;
99
99
  sendQuery(name: string, data?: any, transfers?: any[]): Promise<any>;
100
100
  }
101
- // Fluent localization — a stable chrome global. Members stay loose (any),
101
+ // Fluent localization, a stable chrome global. Members stay loose (any),
102
102
  // but the constructor shape is declared so "new Localization([...])" and
103
103
  // "new Localization([...], true)" typecheck without a local cast. Both
104
104
  // interfaces are extensible via interface merging from a project extra
@@ -122,7 +122,7 @@ interface LocalizationShim {
122
122
  }
123
123
  declare var Localization: LocalizationShim;
124
124
 
125
- // Shorthand ambient modules — exports from matching URL imports are loosely typed,
125
+ // Shorthand ambient modules: exports from matching URL imports are loosely typed,
126
126
  // avoiding noResolve empty-graph namespaces. (Named member access broke when we tried
127
127
  // export= Record under moduleResolution Bundler.)
128
128
  declare module 'resource:*';
@@ -131,15 +131,15 @@ declare module 'chrome:*';
131
131
  `;
132
132
  /**
133
133
  * Loose declarations for Firefox test-harness globals (mochitest
134
- * browser-chrome and xpcshell), appended AFTER the composed
134
+ * browser-chrome and xpcshell), appended after the composed
135
135
  * Firefox-globals + consumer shim when `patchLint.checkJsTestFiles`
136
136
  * extends the checkJs pass to patch-adopted test scripts.
137
- * Deliberately `any`-typed — the pragmatic posture matches the main
138
- * shim. A consumer that wants TYPED harness members (so e.g. a call to
139
- * a method the harness does not declare fails at the patch boundary)
140
- * declares them in `patchLint.checkJsTestShim`; because that shim
141
- * composes BEFORE this baseline and TypeScript resolves conflicting
142
- * `declare var` redeclarations to the FIRST declaration, the typed
137
+ * These are `any`-typed, the same pragmatic posture as the main
138
+ * shim. A consumer that wants typed harness members (so that, say, a call
139
+ * to a method the harness does not declare fails at the patch boundary)
140
+ * declares them in `patchLint.checkJsTestShim`. Because that shim
141
+ * composes before this baseline and TypeScript resolves conflicting
142
+ * `declare var` redeclarations to the first declaration, the typed
143
143
  * consumer declaration wins over the loose fallback here.
144
144
  */
145
145
  export const TEST_HARNESS_SHIM = `
@@ -174,7 +174,7 @@ declare function run_test(): any;
174
174
  * build system: the resolver can't follow `resource://`/`chrome://`
175
175
  * URLs and the global shim is intentionally narrow.
176
176
  *
177
- * Widening this set should be deliberate and per-code — silently
177
+ * Widening this set should be deliberate and per-code: silently
178
178
  * suppressing more codes hides real type errors. The same set is used
179
179
  * by both flows so a patch can't pass one and fail the other for a
180
180
  * reason the operator couldn't infer from the docs.
@@ -193,8 +193,9 @@ export const SUPPRESSED_DIAGNOSTIC_CODES = new Set([
193
193
  * a module reference a name with no import or declaration anywhere and still
194
194
  * typecheck with 0 errors, so the failure surfaces as a runtime
195
195
  * `ReferenceError`. Both flows report these at a configurable severity
196
- * (default `'warning'`: visible without breaking gates; genuine shim gaps
197
- * are silenced by adding the global to `extraShim`, or per-run via `'off'`).
196
+ * (default `'warning'`: visible without breaking gates, while genuine shim
197
+ * gaps are silenced by adding the global to `extraShim`, or per-run via
198
+ * `'off'`).
198
199
  */
199
200
  export const UNDEFINED_IDENTIFIER_CODES = new Set([
200
201
  2304, // Cannot find name '{0}'.
@@ -243,18 +244,18 @@ async function inlineTripleSlashReferences(source, baseDir, seen) {
243
244
  /**
244
245
  * Composes the synthetic shim source by concatenating the built-in Firefox
245
246
  * globals shim with the contents of an optional user-supplied `.d.ts` file.
246
- * The user file is appended verbatim — the augment direction is intentional
247
+ * The user file is appended verbatim. The augment direction is intentional
247
248
  * (declarations later in concat order augment earlier ones), so a project
248
249
  * that wants to refine `Services` with a more specific type can do so in the
249
- * extra shim, and members can be ADDED to the structured globals by merging
250
- * their interfaces (`interface ChromeUtilsShim { newMember(): any }` — see
250
+ * extra shim, and members can be added to the structured globals by merging
251
+ * their interfaces (`interface ChromeUtilsShim { newMember(): any }`, see
251
252
  * the module doc comment). Any triple-slash `/// <reference path="…">`
252
253
  * directives inside the extra shim are inlined (resolved against the extra
253
254
  * shim's own directory) so they are not silently dropped at the synthetic
254
255
  * shim path.
255
256
  *
256
257
  * Missing extra-shim files raise a clear error rather than failing silently
257
- * with a confusing "type not found" downstream — this is the one
258
+ * with a confusing "type not found" downstream. This is the one
258
259
  * config-driven path where a user typo in `fireforge.json` produces a
259
260
  * runtime error, so it needs to be unmistakable.
260
261
  *
@@ -4,8 +4,8 @@
4
4
  * command.
5
5
  *
6
6
  * Distinct from `patch-lint-checkjs.ts` (patch-hygiene): patchLint is
7
- * scoped, fireforge-controlled, and runs as part of `fireforge lint`;
8
- * this command runs whole projects with user-controlled compiler
7
+ * scoped, fireforge-controlled, and runs as part of `fireforge lint`.
8
+ * This command runs whole projects with user-controlled compiler
9
9
  * options and is intended as a CI gate. The two share the Firefox
10
10
  * globals shim and suppressed-code list (via `typecheck-shim.ts`) so
11
11
  * a file that lints clean cannot fail typecheck for a reason the
@@ -13,7 +13,7 @@
13
13
  *
14
14
  * Loads the TypeScript compiler API via dynamic import so it is only
15
15
  * required when `typecheck.projects` is configured. TypeScript
16
- * remains a dev-dependency — if a user invokes `fireforge typecheck`
16
+ * remains a dev-dependency. If a user invokes `fireforge typecheck`
17
17
  * without installing it, the function returns a clear error pointing
18
18
  * at `npm install typescript`.
19
19
  */
@@ -22,7 +22,7 @@ import type { TypecheckProjectResult } from '../types/typecheck.js';
22
22
  /**
23
23
  * Sentinel string surfaced as a `TypecheckIssue.message` when the
24
24
  * project's jsconfig sets `checkJs: false`. Exported so tests can
25
- * pin the contract — operators rely on it to spot opted-out projects
25
+ * pin the contract, since operators rely on it to spot opted-out projects
26
26
  * in CI logs.
27
27
  */
28
28
  export declare const CHECK_JS_DISABLED_NOTICE = "Project sets \"checkJs: false\" \u2014 skipping (override the jsconfig to enable typecheck).";
@@ -31,20 +31,20 @@ export declare const CHECK_JS_DISABLED_NOTICE = "Project sets \"checkJs: false\"
31
31
  *
32
32
  * Per-project flow:
33
33
  * 1. Read the jsconfig via the TS API. JSON parse / config-spec
34
- * errors are surfaced as issues, not thrown — a single broken
35
- * project must not abort the rest of the run.
34
+ * errors are surfaced as issues rather than thrown, because a single
35
+ * broken project must not abort the rest of the run.
36
36
  * 2. Compute final compiler options from the user's options. We
37
- * only force `noEmit: true` (this is a typecheck, not a build);
38
- * we honour `strict`, `target`, `lib`, `module`, `paths`,
37
+ * only force `noEmit: true` (this is a typecheck, not a build).
38
+ * We honour `strict`, `target`, `lib`, `module`, `paths`,
39
39
  * `include`, `exclude`. `allowJs` and `checkJs` default to
40
- * `true` only when the user has not set them — if the user set
40
+ * `true` only when the user has not set them. If the user set
41
41
  * `checkJs: false` we treat that as an explicit opt-out and
42
42
  * skip the project with a single notice (see {@link CHECK_JS_DISABLED_NOTICE}).
43
43
  * 3. Inject the synthetic shim (built-in + optional extraShim) as
44
44
  * a virtual root file that the custom CompilerHost serves.
45
- * 4. Build the program; collect semantic, syntactic, options, and
46
- * global diagnostics. The patchLint flow only reads semantic +
47
- * syntactic — fine for hygiene, but a CI gate needs the full
45
+ * 4. Build the program and collect semantic, syntactic, options,
46
+ * and global diagnostics. The patchLint flow only reads semantic +
47
+ * syntactic, which is fine for hygiene, but a CI gate needs the full
48
48
  * set so misconfigured `lib`/`paths` entries fail loudly.
49
49
  * 5. Drop diagnostics whose code is in `SUPPRESSED_DIAGNOSTIC_CODES`
50
50
  * and any diagnostic originating in the synthetic shim itself.
@@ -5,8 +5,8 @@
5
5
  * command.
6
6
  *
7
7
  * Distinct from `patch-lint-checkjs.ts` (patch-hygiene): patchLint is
8
- * scoped, fireforge-controlled, and runs as part of `fireforge lint`;
9
- * this command runs whole projects with user-controlled compiler
8
+ * scoped, fireforge-controlled, and runs as part of `fireforge lint`.
9
+ * This command runs whole projects with user-controlled compiler
10
10
  * options and is intended as a CI gate. The two share the Firefox
11
11
  * globals shim and suppressed-code list (via `typecheck-shim.ts`) so
12
12
  * a file that lints clean cannot fail typecheck for a reason the
@@ -14,7 +14,7 @@
14
14
  *
15
15
  * Loads the TypeScript compiler API via dynamic import so it is only
16
16
  * required when `typecheck.projects` is configured. TypeScript
17
- * remains a dev-dependency — if a user invokes `fireforge typecheck`
17
+ * remains a dev-dependency. If a user invokes `fireforge typecheck`
18
18
  * without installing it, the function returns a clear error pointing
19
19
  * at `npm install typescript`.
20
20
  */
@@ -27,7 +27,7 @@ import { composeShimSource, SHIM_FILENAME, SUPPRESSED_DIAGNOSTIC_CODES, UNDEFINE
27
27
  /**
28
28
  * Sentinel string surfaced as a `TypecheckIssue.message` when the
29
29
  * project's jsconfig sets `checkJs: false`. Exported so tests can
30
- * pin the contract — operators rely on it to spot opted-out projects
30
+ * pin the contract, since operators rely on it to spot opted-out projects
31
31
  * in CI logs.
32
32
  */
33
33
  export const CHECK_JS_DISABLED_NOTICE = 'Project sets "checkJs: false" — skipping (override the jsconfig to enable typecheck).';
@@ -36,20 +36,20 @@ export const CHECK_JS_DISABLED_NOTICE = 'Project sets "checkJs: false" — skipp
36
36
  *
37
37
  * Per-project flow:
38
38
  * 1. Read the jsconfig via the TS API. JSON parse / config-spec
39
- * errors are surfaced as issues, not thrown — a single broken
40
- * project must not abort the rest of the run.
39
+ * errors are surfaced as issues rather than thrown, because a single
40
+ * broken project must not abort the rest of the run.
41
41
  * 2. Compute final compiler options from the user's options. We
42
- * only force `noEmit: true` (this is a typecheck, not a build);
43
- * we honour `strict`, `target`, `lib`, `module`, `paths`,
42
+ * only force `noEmit: true` (this is a typecheck, not a build).
43
+ * We honour `strict`, `target`, `lib`, `module`, `paths`,
44
44
  * `include`, `exclude`. `allowJs` and `checkJs` default to
45
- * `true` only when the user has not set them — if the user set
45
+ * `true` only when the user has not set them. If the user set
46
46
  * `checkJs: false` we treat that as an explicit opt-out and
47
47
  * skip the project with a single notice (see {@link CHECK_JS_DISABLED_NOTICE}).
48
48
  * 3. Inject the synthetic shim (built-in + optional extraShim) as
49
49
  * a virtual root file that the custom CompilerHost serves.
50
- * 4. Build the program; collect semantic, syntactic, options, and
51
- * global diagnostics. The patchLint flow only reads semantic +
52
- * syntactic — fine for hygiene, but a CI gate needs the full
50
+ * 4. Build the program and collect semantic, syntactic, options,
51
+ * and global diagnostics. The patchLint flow only reads semantic +
52
+ * syntactic, which is fine for hygiene, but a CI gate needs the full
53
53
  * set so misconfigured `lib`/`paths` entries fail loudly.
54
54
  * 5. Drop diagnostics whose code is in `SUPPRESSED_DIAGNOSTIC_CODES`
55
55
  * and any diagnostic originating in the synthetic shim itself.
@@ -61,8 +61,8 @@ export const CHECK_JS_DISABLED_NOTICE = 'Project sets "checkJs: false" — skipp
61
61
  * and computing the exit code.
62
62
  */
63
63
  export async function runTypecheck(projectRoot, cfg) {
64
- // Dynamic import — typescript stays a dev dependency. Same pattern
65
- // as `patch-lint-checkjs.ts`; the empty-projects-array case is
64
+ // Dynamic import, so typescript stays a dev dependency. Same pattern
65
+ // as `patch-lint-checkjs.ts`. The empty-projects-array case is
66
66
  // already rejected by config-validate, so we don't gate the import
67
67
  // on `cfg.projects.length`.
68
68
  let ts;
@@ -86,7 +86,7 @@ export async function runTypecheck(projectRoot, cfg) {
86
86
  filesChecked: 0,
87
87
  }));
88
88
  }
89
- // Compose the shim PER project: the effective extraShim is the per-project
89
+ // Compose the shim per project: the effective extraShim is the per-project
90
90
  // override (a path, or `null` to opt out) when present, else the shared
91
91
  // top-level extraShim. A project that narrows `lib`/`types` can opt out of
92
92
  // a Gecko-lib shim hub that another project needs, so the composed shim is
@@ -114,7 +114,7 @@ export async function runTypecheck(projectRoot, cfg) {
114
114
  }
115
115
  catch (err) {
116
116
  // A missing or unreadable shim fails only the project(s) that use it,
117
- // not the whole run — projects with a different (or no) shim still run.
117
+ // not the whole run. Projects with a different (or no) shim still run.
118
118
  const message = toError(err).message;
119
119
  results.push({
120
120
  project: projectPath,
@@ -139,12 +139,12 @@ export async function runTypecheck(projectRoot, cfg) {
139
139
  }
140
140
  /**
141
141
  * Resolves the effective extra shim for a single project: a `projectOverrides`
142
- * entry wins (a string path overrides; `null` opts out → `undefined`), else
142
+ * entry wins (a string path overrides, `null` opts out → `undefined`), else
143
143
  * the shared top-level `extraShim` applies.
144
144
  */
145
145
  function resolveProjectExtraShim(cfg, projectPath) {
146
146
  const overrides = cfg.projectOverrides;
147
- if (overrides && Object.prototype.hasOwnProperty.call(overrides, projectPath)) {
147
+ if (overrides && Object.hasOwn(overrides, projectPath)) {
148
148
  const value = overrides[projectPath];
149
149
  return value === null ? undefined : value;
150
150
  }
@@ -171,7 +171,7 @@ async function runTypecheckForProject(ts, projectRoot, projectPath, shimSource,
171
171
  };
172
172
  }
173
173
  // 1) Read the JSON config. ts.readConfigFile reports JSON-shape
174
- // errors via the returned diagnostic; missing files fall back to
174
+ // errors via the returned diagnostic. Missing files fall back to
175
175
  // pathExists above, which gives a more directly actionable message.
176
176
  const readResult = ts.readConfigFile(absConfig, (path) => ts.sys.readFile(path));
177
177
  if (readResult.error) {
@@ -183,7 +183,7 @@ async function runTypecheckForProject(ts, projectRoot, projectPath, shimSource,
183
183
  }
184
184
  // 2) Parse the config content. This is what surfaces config-spec
185
185
  // errors (unknown options, mismatched types in `compilerOptions`,
186
- // bad `include` patterns, etc.) — TS5xxx codes. We surface them
186
+ // bad `include` patterns, etc.), the TS5xxx codes. We surface them
187
187
  // alongside semantic diagnostics so the operator sees the same
188
188
  // output `tsc -p` would have produced.
189
189
  const parsed = ts.parseJsonConfigFileContent(readResult.config, ts.sys, dirname(absConfig),
@@ -196,7 +196,7 @@ async function runTypecheckForProject(ts, projectRoot, projectPath, shimSource,
196
196
  }
197
197
  // 3) Honour explicit `checkJs: false`. The user has opted out for
198
198
  // an IDE reason (likely "checkJs floods my workflow with non-actionable
199
- // notes"); flipping it on here would surface ~hundreds of issues that
199
+ // notes"). Flipping it on here would surface ~hundreds of issues that
200
200
  // the operator already evaluated and rejected. Surface a single
201
201
  // notice so it is visible in CI logs rather than silently passing.
202
202
  const rawConfig = readResult.config;
@@ -212,10 +212,10 @@ async function runTypecheckForProject(ts, projectRoot, projectPath, shimSource,
212
212
  });
213
213
  return { project: projectPath, issues, filesChecked: parsed.fileNames.length };
214
214
  }
215
- // 4) Compute final compiler options. `noEmit: true` is forced — we
215
+ // 4) Compute final compiler options. `noEmit: true` is forced, so we
216
216
  // never write artifacts. `allowJs` / `checkJs` default to true
217
217
  // *only* when unset (so a user can flip them off without us
218
- // overriding); if the user set `allowJs: false` they're saying
218
+ // overriding). If the user set `allowJs: false` they're saying
219
219
  // "don't even include JS in this typecheck", which is rare but
220
220
  // legitimate (e.g. an isolated `.d.ts`-only project).
221
221
  const options = {
@@ -225,26 +225,26 @@ async function runTypecheckForProject(ts, projectRoot, projectPath, shimSource,
225
225
  checkJs: parsed.options.checkJs ?? true,
226
226
  // No incremental sidecar, ever. A user jsconfig under `engine/` that sets
227
227
  // `incremental` (or names a `tsBuildInfoFile`) would have this command
228
- // drop a `.tsbuildinfo` inside the primary engine checkout — a second
228
+ // drop a `.tsbuildinfo` inside the primary engine checkout: a second
229
229
  // writer that invalidates a concurrent `fireforge test`'s engine
230
230
  // fingerprint. This command emits nothing, so the sidecar buys nothing
231
231
  // either.
232
232
  incremental: false,
233
- // skipLibCheck is not forced; the user owns it via their jsconfig.
233
+ // skipLibCheck is not forced. The user owns it via their jsconfig.
234
234
  };
235
235
  // `exactOptionalPropertyTypes` forbids assigning `undefined` to an
236
236
  // optional `string`, so the sidecar path is dropped rather than unset.
237
237
  delete options.tsBuildInfoFile;
238
238
  // 5) The synthetic shim file. Use a project-rooted path with a
239
239
  // hidden-style prefix so it is unlikely to collide with any real
240
- // file — and never write it to disk. The CompilerHost below serves
240
+ // file, and never write it to disk. The CompilerHost below serves
241
241
  // it from `shimSource` for `fileExists`/`readFile`/`getSourceFile`.
242
242
  const projectDir = dirname(absConfig);
243
- // Forward slashes deliberately: TypeScript normalizes every `fileName` it
243
+ // Forward slashes on purpose: TypeScript normalizes every `fileName` it
244
244
  // hands a CompilerHost, on every platform. A shim path carrying Windows
245
245
  // separators never matches those callbacks, so the shim is not served (its
246
246
  // globals report as undefined identifiers) and its own diagnostics are not
247
- // filtered out below — the pass reports failures that do not exist.
247
+ // filtered out below, so the pass reports failures that do not exist.
248
248
  const shimPath = normalizePathSlashes(resolve(projectDir, `.fireforge-${SHIM_FILENAME}`));
249
249
  const rootFiles = [...parsed.fileNames, shimPath];
250
250
  const defaultHost = ts.createCompilerHost(options);
@@ -269,7 +269,7 @@ async function runTypecheckForProject(ts, projectRoot, projectPath, shimSource,
269
269
  };
270
270
  const program = ts.createProgram(rootFiles, options, host);
271
271
  // Collect the full diagnostic set. patchLint reads only semantic +
272
- // syntactic — fine for hygiene, wrong for CI: a misconfigured
272
+ // syntactic, which is fine for hygiene but wrong for CI: a misconfigured
273
273
  // `lib: ["es2015"]` or a missing `paths` target should fail
274
274
  // typecheck loudly via getOptionsDiagnostics / getGlobalDiagnostics.
275
275
  const allDiagnostics = [
@@ -281,7 +281,7 @@ async function runTypecheckForProject(ts, projectRoot, projectPath, shimSource,
281
281
  for (const diag of allDiagnostics) {
282
282
  if (SUPPRESSED_DIAGNOSTIC_CODES.has(diag.code))
283
283
  continue;
284
- // Drop diagnostics that originate in the synthetic shim — operators
284
+ // Drop diagnostics that originate in the synthetic shim. Operators
285
285
  // can't act on them and they would clutter CI logs.
286
286
  if (diag.file?.fileName === shimPath)
287
287
  continue;
@@ -298,7 +298,7 @@ async function runTypecheckForProject(ts, projectRoot, projectPath, shimSource,
298
298
  }
299
299
  issues.push(diagnosticToIssue(ts, diag, absConfig, projectPath));
300
300
  }
301
- verbose(`typecheck: ${projectPath} — analyzed ${String(parsed.fileNames.length)} file(s), found ${String(issues.length)} issue(s)`);
301
+ verbose(`typecheck: ${projectPath} — analyzed ${parsed.fileNames.length} file(s), found ${issues.length} issue(s)`);
302
302
  return {
303
303
  project: projectPath,
304
304
  issues,
@@ -308,7 +308,7 @@ async function runTypecheckForProject(ts, projectRoot, projectPath, shimSource,
308
308
  /**
309
309
  * Converts a TS Diagnostic to a TypecheckIssue. The `fallbackFile`
310
310
  * is used when the diagnostic carries no source file (typical for
311
- * options diagnostics) — typically the absolute jsconfig path or
311
+ * options diagnostics). It is typically the absolute jsconfig path or
312
312
  * the project-relative form for surface-level errors. `project` is
313
313
  * threaded through so the CLI can group issues by project without
314
314
  * a second pass.
@@ -328,7 +328,7 @@ function diagnosticToIssue(ts, diag, fallbackFile, project) {
328
328
  const message = typeof diag.messageText === 'string'
329
329
  ? diag.messageText
330
330
  : ts.flattenDiagnosticMessageText(diag.messageText, '\n');
331
- // Suggestion + Message categories collapse to 'warning'; only
331
+ // Suggestion + Message categories collapse to 'warning'. Only
332
332
  // Error stays an error. This matches what the CLI then displays.
333
333
  const category = diag.category === ts.DiagnosticCategory.Error ? 'error' : 'warning';
334
334
  return {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * browser-init.js — destroy expression in onUnload()/uninit().
2
+ * browser-init.js: destroy expression in onUnload()/uninit().
3
3
  */
4
4
  /**
5
5
  * AST-based implementation: finds onUnload()/uninit() method body and
@@ -16,7 +16,7 @@ export declare function addDestroyAST(content: string, expression: string, marke
16
16
  export declare function legacyAddDestroy(content: string, expression: string, marker?: string): string;
17
17
  /**
18
18
  * Adds a destroy expression to the top of onUnload() or uninit() in
19
- * browser-init.js (LIFO ordering — newest first).
19
+ * browser-init.js (LIFO ordering, newest first).
20
20
  *
21
21
  * @param engineDir - Engine source root
22
22
  * @param expression - The destroy expression (e.g., "MyComponent.destroy()")
@@ -1,6 +1,6 @@
1
1
  // SPDX-License-Identifier: EUPL-1.2
2
2
  /**
3
- * browser-init.js — destroy expression in onUnload()/uninit().
3
+ * browser-init.js: destroy expression in onUnload()/uninit().
4
4
  */
5
5
  import { join } from 'node:path';
6
6
  import MagicString from 'magic-string';
@@ -36,7 +36,7 @@ export function addDestroyAST(content, expression, marker = DEFAULT_MARKER) {
36
36
  throw new BuildError('Could not find onUnload/uninit method body via AST');
37
37
  }
38
38
  // Insert at top of method body (LIFO ordering)
39
- // `noUncheckedIndexedAccess` makes this `Statement | undefined`; narrow
39
+ // `noUncheckedIndexedAccess` makes this `Statement | undefined`. Narrow
40
40
  // before casting rather than laundering the undefined through the cast.
41
41
  const firstRaw = body.body[0];
42
42
  const firstStmt = firstRaw ? asEstree(firstRaw) : undefined;
@@ -47,7 +47,7 @@ export function addDestroyAST(content, expression, marker = DEFAULT_MARKER) {
47
47
  indent = detectIndent(content, firstStmt.start);
48
48
  }
49
49
  else {
50
- // Empty method body — insert after opening {
50
+ // Empty method body: insert after opening {
51
51
  insertPos = body.start + 1;
52
52
  indent = ' ';
53
53
  }
@@ -95,7 +95,7 @@ export function legacyAddDestroy(content, expression, marker = DEFAULT_MARKER) {
95
95
  }
96
96
  /**
97
97
  * Adds a destroy expression to the top of onUnload() or uninit() in
98
- * browser-init.js (LIFO ordering — newest first).
98
+ * browser-init.js (LIFO ordering, newest first).
99
99
  *
100
100
  * @param engineDir - Engine source root
101
101
  * @param expression - The destroy expression (e.g., "MyComponent.destroy()")
@@ -108,7 +108,7 @@ export async function addDestroyToBrowserInit(engineDir, expression, marker = DE
108
108
  throw new GeneralError(`${BROWSER_INIT_JS} not found in engine`);
109
109
  }
110
110
  const content = await readText(filePath);
111
- // Idempotency check — look for the coerced (call) form because that is
111
+ // Idempotency check: look for the coerced (call) form because that is
112
112
  // what the emitter writes. Matching against the raw input would miss a
113
113
  // bare `X.destroy` invocation that coercion already persisted as
114
114
  // `X.destroy()`.
@@ -1,9 +1,9 @@
1
1
  /**
2
- * Top-level chrome document — DOM fragment insertion.
2
+ * Top-level chrome document: DOM fragment insertion.
3
3
  *
4
4
  * Default target is `browser/base/content/browser.xhtml`. Forks that replace
5
5
  * browser.xhtml with a custom top-level chrome document pass the replacement
6
- * path in via `targetPath`; the insertion logic is shape-agnostic (looks for
6
+ * path in via `targetPath`. The insertion logic is shape-agnostic (looks for
7
7
  * `#include browser-sets.inc`, then falls back to `<html:body>`), so any
8
8
  * browser.xhtml-shaped xhtml works.
9
9
  */
@@ -15,7 +15,7 @@ export declare function addDomFragmentTokenized(content: string, includeDirectiv
15
15
  /**
16
16
  * Dry-run precheck for `addDomFragment`. Reads the resolved chrome document
17
17
  * and verifies it either already contains the `#include` directive (the
18
- * idempotent-skip case) OR offers a locatable insertion point via
18
+ * idempotent-skip case) or offers a locatable insertion point via
19
19
  * {@link addDomFragmentTokenized} / {@link legacyAddDomFragment}. Throws the
20
20
  * same `Could not find insertion point in chrome document` error the real
21
21
  * run would throw when neither condition holds.
@@ -1,10 +1,10 @@
1
1
  // SPDX-License-Identifier: EUPL-1.2
2
2
  /**
3
- * Top-level chrome document — DOM fragment insertion.
3
+ * Top-level chrome document: DOM fragment insertion.
4
4
  *
5
5
  * Default target is `browser/base/content/browser.xhtml`. Forks that replace
6
6
  * browser.xhtml with a custom top-level chrome document pass the replacement
7
- * path in via `targetPath`; the insertion logic is shape-agnostic (looks for
7
+ * path in via `targetPath`. The insertion logic is shape-agnostic (looks for
8
8
  * `#include browser-sets.inc`, then falls back to `<html:body>`), so any
9
9
  * browser.xhtml-shaped xhtml works.
10
10
  */
@@ -12,6 +12,7 @@ import { dirname, join, relative } from 'node:path';
12
12
  import { GeneralError } from '../errors/base.js';
13
13
  import { pathExists, readText, writeText } from '../utils/fs.js';
14
14
  import { toRootRelativePath } from '../utils/paths.js';
15
+ import { normalizePathSlashes } from '../utils/paths.js';
15
16
  import { escapeRegex } from '../utils/regex.js';
16
17
  import { tokenizeXhtml } from './wire-utils.js';
17
18
  export const DEFAULT_DOM_TARGET = 'browser/base/content/browser.xhtml';
@@ -22,23 +23,11 @@ export function addDomFragmentTokenized(content, includeDirective) {
22
23
  const lines = content.split('\n');
23
24
  const tokens = tokenizeXhtml(lines);
24
25
  // Find the #include browser-sets.inc token
25
- let insertIndex = -1;
26
- for (let i = 0; i < tokens.length; i++) {
27
- const token = tokens[i];
28
- if (token && token.type === 'macro' && token.raw.includes('browser-sets.inc')) {
29
- insertIndex = i;
30
- break;
31
- }
32
- }
26
+ let insertIndex = tokens.findIndex((token) => token.type === 'macro' && token.raw.includes('browser-sets.inc'));
33
27
  if (insertIndex === -1) {
34
28
  // Fallback: after <html:body>
35
- for (let i = 0; i < tokens.length; i++) {
36
- const token = tokens[i];
37
- if (token && token.type === 'xml' && /<html:body/.test(token.raw)) {
38
- insertIndex = i + 1;
39
- break;
40
- }
41
- }
29
+ const bodyIndex = tokens.findIndex((token) => token.type === 'xml' && /<html:body/.test(token.raw));
30
+ insertIndex = bodyIndex === -1 ? -1 : bodyIndex + 1;
42
31
  }
43
32
  if (insertIndex === -1) {
44
33
  throw new GeneralError('Could not find insertion point in chrome document');
@@ -49,7 +38,7 @@ export function addDomFragmentTokenized(content, includeDirective) {
49
38
  /**
50
39
  * Dry-run precheck for `addDomFragment`. Reads the resolved chrome document
51
40
  * and verifies it either already contains the `#include` directive (the
52
- * idempotent-skip case) OR offers a locatable insertion point via
41
+ * idempotent-skip case) or offers a locatable insertion point via
53
42
  * {@link addDomFragmentTokenized} / {@link legacyAddDomFragment}. Throws the
54
43
  * same `Could not find insertion point in chrome document` error the real
55
44
  * run would throw when neither condition holds.
@@ -62,18 +51,18 @@ export async function probeDomFragmentInsertionPoint(engineDir, domFilePath, tar
62
51
  const targetAbsPath = join(engineDir, targetPath);
63
52
  if (!(await pathExists(targetAbsPath))) {
64
53
  // The callers in `wire.ts` run their own existence probe before
65
- // invoking this helper, but a well-behaved probe is paranoid — if
54
+ // invoking this helper, but a well-behaved probe is careful: if
66
55
  // something changed between the two checks, fail with the same
67
56
  // error the real run would surface.
68
57
  throw new GeneralError(`${targetPath} not found in engine`);
69
58
  }
70
59
  const safeDomFilePath = toRootRelativePath(engineDir, domFilePath);
71
60
  const targetDir = dirname(targetPath);
72
- const includePath = relative(targetDir, safeDomFilePath).replace(/\\/g, '/');
61
+ const includePath = normalizePathSlashes(relative(targetDir, safeDomFilePath));
73
62
  const includeDirective = `#include ${includePath}`;
74
63
  const content = await readText(targetAbsPath);
75
64
  if (new RegExp(`^${escapeRegex(includeDirective)}$`, 'm').test(content)) {
76
- // Already wired — the real run would idempotent-skip here, so
65
+ // Already wired. The real run would idempotent-skip here, so
77
66
  // dry-run is allowed to proceed too.
78
67
  return;
79
68
  }
@@ -104,12 +93,12 @@ export async function addDomFragment(engineDir, domFilePath, targetPath = DEFAUL
104
93
  if (!(await pathExists(targetAbsPath))) {
105
94
  throw new GeneralError(`${targetPath} not found in engine`);
106
95
  }
107
- // Compute include path relative to the target's directory — the `#include`
96
+ // Compute include path relative to the target's directory. The `#include`
108
97
  // directive is resolved by the preprocessor relative to the file that
109
98
  // contains it, so this must track the chrome doc's location, not a
110
99
  // hardcoded `browser/base/content/`.
111
100
  const targetDir = dirname(targetPath);
112
- const includePath = relative(targetDir, safeDomFilePath).replace(/\\/g, '/');
101
+ const includePath = normalizePathSlashes(relative(targetDir, safeDomFilePath));
113
102
  const includeDirective = `#include ${includePath}`;
114
103
  let content = await readText(targetAbsPath);
115
104
  // Idempotency: check if the #include directive already exists (line-anchored to avoid substring matches)
@@ -1,5 +1,5 @@
1
1
  /**
2
- * browser-init.js — init expression in onLoad().
2
+ * browser-init.js: init expression in onLoad().
3
3
  */
4
4
  /**
5
5
  * AST-based implementation: finds onLoad() method body, locates existing
@@ -8,7 +8,7 @@
8
8
  *
9
9
  * `marker` is prepended (uppercased) to the generated comment line so the
10
10
  * emitted block carries the patch-lint `// <MARKER>:` signature that
11
- * `lintModificationComments` looks for; otherwise the first export after
11
+ * `lintModificationComments` looks for. Otherwise the first export after
12
12
  * `wire` trips `missing-modification-comment` on wire-generated edits.
13
13
  */
14
14
  export declare function addInitAST(content: string, expression: string, after?: string, marker?: string): string;