@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
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: EUPL-1.2
2
- import { FireForgeError } from './base.js';
2
+ import { FireForgeError, remedies } from './base.js';
3
3
  import { ExitCode } from './codes.js';
4
4
  /**
5
5
  * Error thrown when configuration is missing or invalid.
@@ -12,15 +12,13 @@ export class ConfigError extends FireForgeError {
12
12
  this.field = field;
13
13
  }
14
14
  get userMessage() {
15
- let msg = `Configuration Error: ${this.message}`;
16
- if (this.field) {
17
- msg += `\n\nField: ${this.field}`;
18
- }
19
- msg += '\n\nTo fix this:\n';
20
- msg += ' 1. Check your fireforge.json file for errors\n';
21
- msg += ' 2. Run "fireforge setup" to create a new configuration\n';
22
- msg += ' 3. See the documentation for the expected format';
23
- return msg;
15
+ return (`Configuration Error: ${this.message}` +
16
+ (this.field ? `\n\nField: ${this.field}` : '') +
17
+ remedies([
18
+ 'Check your fireforge.json file for errors',
19
+ 'Run "fireforge setup" to create a new configuration',
20
+ 'See the documentation for the expected format',
21
+ ]));
24
22
  }
25
23
  }
26
24
  /**
@@ -32,29 +30,10 @@ export class ConfigNotFoundError extends ConfigError {
32
30
  }
33
31
  get userMessage() {
34
32
  return (`Configuration Error: ${this.message}\n\n` +
35
- 'This directory does not appear to be a FireForge project.\n\n' +
36
- 'To fix this:\n' +
37
- ' 1. Navigate to your project root directory\n' +
38
- ' 2. Run "fireforge setup" to initialize a new project');
39
- }
40
- }
41
- /**
42
- * Error thrown when a required field is missing from config.
43
- */
44
- export class MissingFieldError extends ConfigError {
45
- constructor(field) {
46
- super(`Required field "${field}" is missing from fireforge.json`, field);
47
- }
48
- }
49
- /**
50
- * Error thrown when a field has an invalid value.
51
- */
52
- export class InvalidFieldError extends ConfigError {
53
- expectedType;
54
- actualValue;
55
- constructor(field, expectedType, actualValue) {
56
- super(`Field "${field}" has invalid value. Expected ${expectedType}, got ${typeof actualValue}`, field);
57
- this.expectedType = expectedType;
58
- this.actualValue = actualValue;
33
+ 'This directory does not appear to be a FireForge project.' +
34
+ remedies([
35
+ 'Navigate to your project root directory',
36
+ 'Run "fireforge setup" to initialize a new project',
37
+ ]));
59
38
  }
60
39
  }
@@ -19,6 +19,19 @@ export declare class ChecksumMismatchError extends DownloadError {
19
19
  constructor(product: FirefoxProduct, expectedSha256: string, actualSha256: string, url: string);
20
20
  get userMessage(): string;
21
21
  }
22
+ /**
23
+ * Error thrown when the default integrity check cannot obtain Mozilla's
24
+ * published SHA-256 for a freshly downloaded archive (checksum file
25
+ * unreachable, malformed, or not listing the archive) and no operator pin
26
+ * or explicit opt-out allows the download to be trusted on TLS alone.
27
+ */
28
+ export declare class ChecksumUnavailableError extends DownloadError {
29
+ readonly product: FirefoxProduct;
30
+ readonly checksumsUrl: string;
31
+ readonly reason: string;
32
+ constructor(product: FirefoxProduct, checksumsUrl: string, reason: string, url: string);
33
+ get userMessage(): string;
34
+ }
22
35
  /**
23
36
  * Error thrown when extraction of the downloaded archive fails.
24
37
  */
@@ -1,4 +1,4 @@
1
- import { FireForgeError } from './base.js';
1
+ import { FireForgeError, remedies } from './base.js';
2
2
  import { ExitCode } from './codes.js';
3
3
  /**
4
4
  * Error thrown when Firefox source download fails.
@@ -11,15 +11,13 @@ export class DownloadError extends FireForgeError {
11
11
  this.url = url;
12
12
  }
13
13
  get userMessage() {
14
- let msg = `Download Error: ${this.message}`;
15
- if (this.url) {
16
- msg += `\n\nURL: ${this.url}`;
17
- }
18
- msg += '\n\nTo fix this:\n';
19
- msg += ' 1. Check your internet connection\n';
20
- msg += ' 2. Verify the Firefox version in fireforge.json is valid\n';
21
- msg += ' 3. Try again with "fireforge download --force"';
22
- return msg;
14
+ return (`Download Error: ${this.message}` +
15
+ (this.url ? `\n\nURL: ${this.url}` : '') +
16
+ remedies([
17
+ 'Check your internet connection',
18
+ 'Verify the Firefox version in fireforge.json is valid',
19
+ 'Try again with "fireforge download --force"',
20
+ ]));
23
21
  }
24
22
  }
25
23
  /**
@@ -36,23 +34,54 @@ export class ChecksumMismatchError extends DownloadError {
36
34
  this.actualSha256 = actualSha256;
37
35
  }
38
36
  get userMessage() {
39
- let msg = `Download Error: Firefox source archive checksum mismatch.\n\n` +
37
+ return (`Download Error: Firefox source archive checksum mismatch.\n\n` +
40
38
  `Product: ${this.product}\n` +
41
39
  `URL: ${this.url}\n` +
42
40
  `Expected SHA-256: ${this.expectedSha256}\n` +
43
- `Actual SHA-256: ${this.actualSha256}`;
44
- msg += '\n\nTo fix this:\n';
45
- msg += ' 1. Verify firefox.product, firefox.version, and firefox.sha256 in fireforge.json\n';
46
- msg += ' 2. Compare the pinned hash with Mozilla SHA256SUMMARY for the resolved archive\n';
47
- if (this.product === 'firefox-devedition') {
48
- msg +=
49
- ' 3. Developer Edition archives should resolve under https://archive.mozilla.org/pub/devedition/releases/\n';
50
- msg += ' 4. Re-run "fireforge download --force" after correcting the source settings';
51
- }
52
- else {
53
- msg += ' 3. Re-run "fireforge download --force" after correcting the source settings';
54
- }
55
- return msg;
41
+ `Actual SHA-256: ${this.actualSha256}` +
42
+ remedies([
43
+ 'Verify firefox.product, firefox.version, and firefox.sha256 in fireforge.json',
44
+ 'Compare the pinned hash with Mozilla SHA256SUMMARY for the resolved archive',
45
+ ...(this.product === 'firefox-devedition'
46
+ ? [
47
+ 'Developer Edition archives should resolve under https://archive.mozilla.org/pub/devedition/releases/',
48
+ ]
49
+ : []),
50
+ 'Re-run "fireforge download --force" after correcting the source settings',
51
+ ]));
52
+ }
53
+ }
54
+ /**
55
+ * Error thrown when the default integrity check cannot obtain Mozilla's
56
+ * published SHA-256 for a freshly downloaded archive (checksum file
57
+ * unreachable, malformed, or not listing the archive) and no operator pin
58
+ * or explicit opt-out allows the download to be trusted on TLS alone.
59
+ */
60
+ export class ChecksumUnavailableError extends DownloadError {
61
+ product;
62
+ checksumsUrl;
63
+ reason;
64
+ constructor(product, checksumsUrl, reason, url) {
65
+ super(`Could not verify archive against published SHA256SUMS: ${reason}`, url);
66
+ this.product = product;
67
+ this.checksumsUrl = checksumsUrl;
68
+ this.reason = reason;
69
+ }
70
+ get userMessage() {
71
+ return (`Download Error: Firefox source archive integrity could not be verified.\n\n` +
72
+ `Product: ${this.product}\n` +
73
+ `Archive: ${this.url ?? ''}\n` +
74
+ `Checksums: ${this.checksumsUrl}\n` +
75
+ `Reason: ${this.reason}\n\n` +
76
+ 'The archive was downloaded but discarded: without the published digest it would be ' +
77
+ 'trusted on TLS alone, and it becomes the git baseline every patch is built on.\n\n' +
78
+ 'To fix this:\n' +
79
+ ' 1. Check connectivity to archive.mozilla.org (a captive portal or proxy may be ' +
80
+ 'answering the SHA256SUMS request) and retry\n' +
81
+ ' 2. Or pin the archive digest: set firefox.sha256 in fireforge.json ' +
82
+ '(from the release SHA256SUMS, obtained out of band)\n' +
83
+ ' 3. Or, for an offline mirror you trust, set firefox.allowUnverifiedDownload: true ' +
84
+ 'in fireforge.json to accept the download with a warning');
56
85
  }
57
86
  }
58
87
  /**
@@ -8,10 +8,10 @@ export declare class FurnaceError extends FireForgeError {
8
8
  constructor(message: string, component?: string | undefined, cause?: Error, options?: {
9
9
  /**
10
10
  * Suppresses the "run furnace validate" advice line. Set by callers
11
- * whose message already tells the user to run validate, or that ARE
11
+ * whose message already tells the user to run validate, or that are
12
12
  * the validate command. An explicit flag rather than sniffing the
13
13
  * message for `furnace validate`, which drops the advice from any
14
- * error that merely MENTIONS the command.
14
+ * error that merely mentions the command.
15
15
  */
16
16
  omitValidateAdvice?: boolean;
17
17
  });
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: EUPL-1.2
2
- import { FireForgeError } from './base.js';
2
+ import { FireForgeError, remedies } from './base.js';
3
3
  import { ExitCode } from './codes.js';
4
4
  /**
5
5
  * Error thrown when a furnace component operation fails.
@@ -15,15 +15,14 @@ export class FurnaceError extends FireForgeError {
15
15
  }
16
16
  omitValidateAdvice;
17
17
  get userMessage() {
18
- let msg = this.component
18
+ const head = this.component
19
19
  ? `Furnace Error (${this.component}): ${this.message}`
20
20
  : `Furnace Error: ${this.message}`;
21
- msg += '\n\nTo fix this:\n';
22
- msg += ' 1. Check the error message above for specifics\n';
23
- if (!this.omitValidateAdvice) {
24
- msg += ' 2. Run "fireforge furnace validate" to diagnose issues\n';
25
- }
26
- msg += ` ${this.omitValidateAdvice ? '2' : '3'}. Use "fireforge doctor --repair-furnace" if state is inconsistent`;
27
- return msg;
21
+ return (head +
22
+ remedies([
23
+ 'Check the error message above for specifics',
24
+ ...(this.omitValidateAdvice ? [] : ['Run "fireforge furnace validate" to diagnose issues']),
25
+ 'Use "fireforge doctor --repair-furnace" if state is inconsistent',
26
+ ]));
28
27
  }
29
28
  }
@@ -1,17 +1,24 @@
1
1
  import { FireForgeError } from './base.js';
2
+ import { ExitCode } from './codes.js';
2
3
  /**
3
4
  * Error thrown when a git operation fails.
4
5
  */
5
6
  export declare class GitError extends FireForgeError {
6
7
  readonly command?: string | undefined;
7
- readonly code: 4;
8
+ readonly code: ExitCode;
8
9
  constructor(message: string, command?: string | undefined, cause?: Error);
9
10
  get userMessage(): string;
10
11
  }
11
12
  /**
12
13
  * Error thrown when git is not installed.
14
+ *
15
+ * MISSING_DEPENDENCY, not GIT_ERROR: the fact is "a required tool is
16
+ * absent", the same fact `PythonNotFoundError` and `MachNotFoundError`
17
+ * report, and a consumer should install something rather than inspect a
18
+ * repository.
13
19
  */
14
20
  export declare class GitNotFoundError extends GitError {
21
+ readonly code: 7;
15
22
  constructor();
16
23
  get userMessage(): string;
17
24
  }
@@ -23,13 +30,6 @@ export declare class PatchApplyError extends GitError {
23
30
  constructor(patchPath: string, cause?: Error);
24
31
  get userMessage(): string;
25
32
  }
26
- /**
27
- * Error thrown when the repository is in a dirty state.
28
- */
29
- export declare class DirtyRepositoryError extends GitError {
30
- constructor();
31
- get userMessage(): string;
32
- }
33
33
  /**
34
34
  * Error thrown when a stale git index lock blocks repository initialization.
35
35
  */
@@ -40,7 +40,7 @@ export declare class GitIndexLockError extends GitError {
40
40
  get userMessage(): string;
41
41
  }
42
42
  /**
43
- * Detects transient git `index.lock` contention — an external git process
43
+ * Detects transient git `index.lock` contention: an external git process
44
44
  * holding `.git/index.lock` while we stage or diff. Mirrors the message
45
45
  * heuristics `core/git.ts` uses when wrapping stale-lock failures during
46
46
  * download, but lives here so command modules can consult it without
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: EUPL-1.2
2
- import { FireForgeError } from './base.js';
2
+ import { FireForgeError, remedies } from './base.js';
3
3
  import { ExitCode } from './codes.js';
4
4
  /**
5
5
  * Error thrown when a git operation fails.
@@ -12,21 +12,25 @@ export class GitError extends FireForgeError {
12
12
  this.command = command;
13
13
  }
14
14
  get userMessage() {
15
- let msg = `Git Error: ${this.message}`;
16
- if (this.command) {
17
- msg += `\n\nCommand: git ${this.command}`;
18
- }
19
- msg += '\n\nTo fix this:\n';
20
- msg += ' 1. Ensure git is installed and in your PATH\n';
21
- msg += ' 2. Check if the repository is in a valid state\n';
22
- msg += ' 3. Try running "fireforge reset" to start fresh';
23
- return msg;
15
+ return (`Git Error: ${this.message}` +
16
+ (this.command ? `\n\nCommand: git ${this.command}` : '') +
17
+ remedies([
18
+ 'Ensure git is installed and in your PATH',
19
+ 'Check if the repository is in a valid state',
20
+ 'Try running "fireforge reset" to start fresh',
21
+ ]));
24
22
  }
25
23
  }
26
24
  /**
27
25
  * Error thrown when git is not installed.
26
+ *
27
+ * MISSING_DEPENDENCY, not GIT_ERROR: the fact is "a required tool is
28
+ * absent", the same fact `PythonNotFoundError` and `MachNotFoundError`
29
+ * report, and a consumer should install something rather than inspect a
30
+ * repository.
28
31
  */
29
32
  export class GitNotFoundError extends GitError {
33
+ code = ExitCode.MISSING_DEPENDENCY;
30
34
  constructor() {
31
35
  super('Git is not installed or not found in PATH');
32
36
  }
@@ -50,26 +54,12 @@ export class PatchApplyError extends GitError {
50
54
  get userMessage() {
51
55
  return (`Git Error: Failed to apply patch.\n\n` +
52
56
  `Patch: ${this.patchPath}\n\n` +
53
- 'This usually means the patch conflicts with existing changes.\n\n' +
54
- 'To fix this:\n' +
55
- ' 1. Check if the Firefox version matches the patch\n' +
56
- ' 2. Use "fireforge reset" to start with clean source\n' +
57
- ' 3. Update the patch to match the current Firefox version');
58
- }
59
- }
60
- /**
61
- * Error thrown when the repository is in a dirty state.
62
- */
63
- export class DirtyRepositoryError extends GitError {
64
- constructor() {
65
- super('Repository has uncommitted changes');
66
- }
67
- get userMessage() {
68
- return ('Git Error: The Firefox source has uncommitted changes.\n\n' +
69
- 'To fix this:\n' +
70
- ' 1. Export your changes with "fireforge export"\n' +
71
- ' 2. Use "fireforge reset" to restore clean state\n' +
72
- ' 3. Then run "fireforge import" to reapply patches');
57
+ 'This usually means the patch conflicts with existing changes.' +
58
+ remedies([
59
+ 'Check if the Firefox version matches the patch',
60
+ 'Use "fireforge reset" to start with clean source',
61
+ 'Update the patch to match the current Firefox version',
62
+ ]));
73
63
  }
74
64
  }
75
65
  /**
@@ -97,7 +87,7 @@ export class GitIndexLockError extends GitError {
97
87
  }
98
88
  }
99
89
  /**
100
- * Detects transient git `index.lock` contention — an external git process
90
+ * Detects transient git `index.lock` contention: an external git process
101
91
  * holding `.git/index.lock` while we stage or diff. Mirrors the message
102
92
  * heuristics `core/git.ts` uses when wrapping stale-lock failures during
103
93
  * download, but lives here so command modules can consult it without
@@ -2,11 +2,11 @@ import { FireForgeError } from './base.js';
2
2
  /**
3
3
  * Error thrown when `patches.json` exists but cannot be parsed or validated.
4
4
  *
5
- * This must be a HARD error on every mutating path. Collapsing "corrupt"
6
- * into "absent" — a `loadPatchesManifest` that returns null for both — makes
5
+ * This must be a hard error on every mutating path. Collapsing "corrupt"
6
+ * into "absent" (a `loadPatchesManifest` that returns null for both) makes
7
7
  * the next `fireforge export` rebuild the manifest containing only the new
8
8
  * patch, silently destroying every other patch's metadata (tiers,
9
- * descriptions, lintIgnore, staged dependencies); a failed export's rollback
9
+ * descriptions, lintIgnore, staged dependencies). A failed export's rollback
10
10
  * then deletes `patches.json` outright, because the "before" state looked
11
11
  * absent.
12
12
  */
@@ -1,14 +1,14 @@
1
1
  // SPDX-License-Identifier: EUPL-1.2
2
- import { FireForgeError } from './base.js';
2
+ import { FireForgeError, remedies } from './base.js';
3
3
  import { ExitCode } from './codes.js';
4
4
  /**
5
5
  * Error thrown when `patches.json` exists but cannot be parsed or validated.
6
6
  *
7
- * This must be a HARD error on every mutating path. Collapsing "corrupt"
8
- * into "absent" — a `loadPatchesManifest` that returns null for both — makes
7
+ * This must be a hard error on every mutating path. Collapsing "corrupt"
8
+ * into "absent" (a `loadPatchesManifest` that returns null for both) makes
9
9
  * the next `fireforge export` rebuild the manifest containing only the new
10
10
  * patch, silently destroying every other patch's metadata (tiers,
11
- * descriptions, lintIgnore, staged dependencies); a failed export's rollback
11
+ * descriptions, lintIgnore, staged dependencies). A failed export's rollback
12
12
  * then deletes `patches.json` outright, because the "before" state looked
13
13
  * absent.
14
14
  */
@@ -41,14 +41,12 @@ export class PatchError extends FireForgeError {
41
41
  this.patchName = patchName;
42
42
  }
43
43
  get userMessage() {
44
- let msg = `Patch Error: ${this.message}`;
45
- if (this.patchName) {
46
- msg += `\n\nPatch: ${this.patchName}`;
47
- }
48
- msg += '\n\nTo fix this:\n';
49
- msg += ' 1. Check if the patch is compatible with the Firefox version\n';
50
- msg += ' 2. Use "fireforge reset" to start with clean source\n';
51
- msg += ' 3. Update the patch for the current Firefox version';
52
- return msg;
44
+ return (`Patch Error: ${this.message}` +
45
+ (this.patchName ? `\n\nPatch: ${this.patchName}` : '') +
46
+ remedies([
47
+ 'Check if the patch is compatible with the Firefox version',
48
+ 'Use "fireforge reset" to start with clean source',
49
+ 'Update the patch for the current Firefox version',
50
+ ]));
53
51
  }
54
52
  }
@@ -23,7 +23,7 @@ export declare class NoRebaseSessionError extends RebaseError {
23
23
  *
24
24
  * Without an error of its own, this case is reported as
25
25
  * {@link NoRebaseSessionError} by `--continue`/`--abort` while `rebase`
26
- * reports {@link RebaseSessionExistsError} — a closed cycle in which each
26
+ * reports {@link RebaseSessionExistsError}, a closed cycle in which each
27
27
  * command points at the other two. The message names the file so an operator
28
28
  * always has a way out, and `--abort` clears a corrupt session rather than
29
29
  * refusing to run against one.
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: EUPL-1.2
2
- import { FireForgeError } from './base.js';
2
+ import { FireForgeError, remedies } from './base.js';
3
3
  import { ExitCode } from './codes.js';
4
4
  /**
5
5
  * Base error for rebase operations.
@@ -7,12 +7,12 @@ import { ExitCode } from './codes.js';
7
7
  export class RebaseError extends FireForgeError {
8
8
  code = ExitCode.PATCH_ERROR;
9
9
  get userMessage() {
10
- let msg = `Rebase Error: ${this.message}`;
11
- msg += '\n\nTo fix this:\n';
12
- msg += ' 1. Check the error message above for specifics\n';
13
- msg += ' 2. Use "fireforge rebase --continue" to resume an interrupted rebase\n';
14
- msg += ' 3. Use "fireforge rebase --abort" to cancel and restore engine state';
15
- return msg;
10
+ return (`Rebase Error: ${this.message}` +
11
+ remedies([
12
+ 'Check the error message above for specifics',
13
+ 'Use "fireforge rebase --continue" to resume an interrupted rebase',
14
+ 'Use "fireforge rebase --abort" to cancel and restore engine state',
15
+ ]));
16
16
  }
17
17
  }
18
18
  /**
@@ -37,7 +37,7 @@ export class NoRebaseSessionError extends RebaseError {
37
37
  *
38
38
  * Without an error of its own, this case is reported as
39
39
  * {@link NoRebaseSessionError} by `--continue`/`--abort` while `rebase`
40
- * reports {@link RebaseSessionExistsError} — a closed cycle in which each
40
+ * reports {@link RebaseSessionExistsError}, a closed cycle in which each
41
41
  * command points at the other two. The message names the file so an operator
42
42
  * always has a way out, and `--abort` clears a corrupt session rather than
43
43
  * refusing to run against one.
@@ -2,7 +2,7 @@ import { FireForgeError } from './base.js';
2
2
  import { ExitCode } from './codes.js';
3
3
  /**
4
4
  * Error raised by `fireforge run --smoke-exit` when the captured console
5
- * stream produced one or more error lines that did NOT match the
5
+ * stream produced one or more error lines that did not match the
6
6
  * configured allowlist.
7
7
  *
8
8
  * Distinct from `BuildError` so CI pipelines can route smoke failures
@@ -3,7 +3,7 @@ import { FireForgeError } from './base.js';
3
3
  import { ExitCode } from './codes.js';
4
4
  /**
5
5
  * Error raised by `fireforge run --smoke-exit` when the captured console
6
- * stream produced one or more error lines that did NOT match the
6
+ * stream produced one or more error lines that did not match the
7
7
  * configured allowlist.
8
8
  *
9
9
  * Distinct from `BuildError` so CI pipelines can route smoke failures
@@ -1,15 +1,15 @@
1
1
  /**
2
- * FireForge — a toolkit for building and maintaining Firefox-based browsers.
2
+ * FireForge: a toolkit for building and maintaining Firefox-based browsers.
3
3
  *
4
4
  * This module re-exports the public API surface used by downstream consumers.
5
5
  * For CLI usage, see `bin/fireforge.ts`.
6
6
  *
7
- * **Stability:** Pre-1.0. The exports listed here are functional and tested,
7
+ * Stability: pre-1.0. The exports listed here are functional and tested,
8
8
  * but may change between minor versions until 1.0 is released. Pin to an
9
9
  * exact version if you depend on the programmatic API.
10
10
  *
11
- * **What belongs here:** a type earns a place on this surface only if it is
12
- * reachable from the signature of an exported VALUE — i.e. a consumer needs
11
+ * What belongs here: a type earns a place on this surface only if it is
12
+ * reachable from the signature of an exported value, i.e. a consumer needs
13
13
  * it to name an argument or a return. Everything else stays internal to
14
14
  * `src/types/`.
15
15
  *
package/dist/src/index.js CHANGED
@@ -1,16 +1,16 @@
1
1
  // SPDX-License-Identifier: EUPL-1.2
2
2
  /**
3
- * FireForge — a toolkit for building and maintaining Firefox-based browsers.
3
+ * FireForge: a toolkit for building and maintaining Firefox-based browsers.
4
4
  *
5
5
  * This module re-exports the public API surface used by downstream consumers.
6
6
  * For CLI usage, see `bin/fireforge.ts`.
7
7
  *
8
- * **Stability:** Pre-1.0. The exports listed here are functional and tested,
8
+ * Stability: pre-1.0. The exports listed here are functional and tested,
9
9
  * but may change between minor versions until 1.0 is released. Pin to an
10
10
  * exact version if you depend on the programmatic API.
11
11
  *
12
- * **What belongs here:** a type earns a place on this surface only if it is
13
- * reachable from the signature of an exported VALUE — i.e. a consumer needs
12
+ * What belongs here: a type earns a place on this surface only if it is
13
+ * reachable from the signature of an exported value, i.e. a consumer needs
14
14
  * it to name an argument or a return. Everything else stays internal to
15
15
  * `src/types/`.
16
16
  *