@hominis/fireforge 0.46.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.
- package/CHANGELOG.md +381 -498
- package/dist/bin/fireforge.d.ts +1 -1
- package/dist/bin/fireforge.js +17 -17
- package/dist/build-info.json +4 -4
- package/dist/src/cli-usage-error.d.ts +9 -9
- package/dist/src/cli-usage-error.js +12 -12
- package/dist/src/cli.d.ts +3 -2
- package/dist/src/cli.js +29 -28
- package/dist/src/commands/bootstrap-checks.js +2 -1
- package/dist/src/commands/bootstrap.js +2 -2
- package/dist/src/commands/build.js +12 -11
- package/dist/src/commands/config.js +9 -9
- package/dist/src/commands/destructive-decision.d.ts +4 -4
- package/dist/src/commands/destructive-decision.js +4 -4
- package/dist/src/commands/discard.js +5 -5
- package/dist/src/commands/doctor-check-core.d.ts +4 -4
- package/dist/src/commands/doctor-external-toolchains.js +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.d.ts +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.js +20 -20
- package/dist/src/commands/doctor-furnace-jar.d.ts +1 -1
- package/dist/src/commands/doctor-furnace-jar.js +1 -1
- package/dist/src/commands/doctor-furnace.js +22 -22
- package/dist/src/commands/doctor-orphaned-harness.d.ts +10 -11
- package/dist/src/commands/doctor-orphaned-harness.js +10 -11
- package/dist/src/commands/doctor-patch-manifest.d.ts +2 -1
- package/dist/src/commands/doctor-patch-manifest.js +7 -6
- package/dist/src/commands/doctor-post-rebase-audit.js +2 -2
- package/dist/src/commands/doctor-source-pin.d.ts +12 -12
- package/dist/src/commands/doctor-source-pin.js +14 -14
- package/dist/src/commands/doctor-working-tree.d.ts +3 -3
- package/dist/src/commands/doctor-working-tree.js +3 -3
- package/dist/src/commands/doctor.d.ts +2 -2
- package/dist/src/commands/doctor.js +9 -9
- package/dist/src/commands/download.js +15 -13
- package/dist/src/commands/export-all.js +8 -8
- package/dist/src/commands/export-flow.d.ts +5 -5
- package/dist/src/commands/export-flow.js +14 -14
- package/dist/src/commands/export-placement-conflicts.d.ts +3 -3
- package/dist/src/commands/export-placement-conflicts.js +9 -9
- package/dist/src/commands/export-placement-gate.d.ts +2 -2
- package/dist/src/commands/export-placement-gate.js +5 -5
- package/dist/src/commands/export-placement-policy.d.ts +1 -1
- package/dist/src/commands/export-placement-policy.js +1 -1
- package/dist/src/commands/export-shared.d.ts +10 -10
- package/dist/src/commands/export-shared.js +13 -13
- package/dist/src/commands/export.js +4 -4
- package/dist/src/commands/furnace/apply.js +16 -16
- package/dist/src/commands/furnace/chrome-doc-remove.d.ts +1 -1
- package/dist/src/commands/furnace/chrome-doc-remove.js +1 -1
- package/dist/src/commands/furnace/chrome-doc-templates.d.ts +14 -14
- package/dist/src/commands/furnace/chrome-doc-templates.js +17 -17
- package/dist/src/commands/furnace/chrome-doc-tests.d.ts +2 -2
- package/dist/src/commands/furnace/chrome-doc-tests.js +4 -4
- package/dist/src/commands/furnace/chrome-doc.d.ts +8 -8
- package/dist/src/commands/furnace/chrome-doc.js +18 -18
- package/dist/src/commands/furnace/create-browser-test.d.ts +1 -1
- package/dist/src/commands/furnace/create-browser-test.js +4 -4
- package/dist/src/commands/furnace/create-dry-run.d.ts +4 -4
- package/dist/src/commands/furnace/create-dry-run.js +4 -4
- package/dist/src/commands/furnace/create-features.d.ts +2 -2
- package/dist/src/commands/furnace/create-features.js +2 -2
- package/dist/src/commands/furnace/create-mochikit.d.ts +4 -4
- package/dist/src/commands/furnace/create-mochikit.js +7 -7
- package/dist/src/commands/furnace/create-templates.d.ts +14 -14
- package/dist/src/commands/furnace/create-templates.js +18 -18
- package/dist/src/commands/furnace/create-xpcshell.d.ts +5 -5
- package/dist/src/commands/furnace/create-xpcshell.js +8 -8
- package/dist/src/commands/furnace/create.d.ts +1 -1
- package/dist/src/commands/furnace/create.js +10 -10
- package/dist/src/commands/furnace/deploy.js +4 -4
- package/dist/src/commands/furnace/diff.js +7 -7
- package/dist/src/commands/furnace/index.js +1 -1
- package/dist/src/commands/furnace/init.js +15 -15
- package/dist/src/commands/furnace/list.js +2 -2
- package/dist/src/commands/furnace/override.d.ts +1 -1
- package/dist/src/commands/furnace/override.js +15 -15
- package/dist/src/commands/furnace/preview.js +17 -17
- package/dist/src/commands/furnace/refresh.js +6 -6
- package/dist/src/commands/furnace/remove-mutations.d.ts +3 -3
- package/dist/src/commands/furnace/remove-mutations.js +19 -18
- package/dist/src/commands/furnace/remove-state.d.ts +1 -1
- package/dist/src/commands/furnace/remove-state.js +1 -1
- package/dist/src/commands/furnace/remove.js +2 -2
- package/dist/src/commands/furnace/rename-browser-test.js +9 -8
- package/dist/src/commands/furnace/rename-xpcshell.d.ts +2 -2
- package/dist/src/commands/furnace/rename-xpcshell.js +3 -3
- package/dist/src/commands/furnace/rename.js +9 -9
- package/dist/src/commands/furnace/scan.js +3 -3
- package/dist/src/commands/furnace/status.js +7 -7
- package/dist/src/commands/furnace/sync.js +6 -6
- package/dist/src/commands/furnace/test-file-name.d.ts +2 -2
- package/dist/src/commands/furnace/test-file-name.js +2 -2
- package/dist/src/commands/furnace/validate.js +11 -12
- package/dist/src/commands/import.js +20 -20
- package/dist/src/commands/lint-per-patch.js +8 -8
- package/dist/src/commands/lint-per-run-checkjs.d.ts +12 -13
- package/dist/src/commands/lint-per-run-checkjs.js +14 -15
- package/dist/src/commands/lint-report.d.ts +3 -3
- package/dist/src/commands/lint-report.js +4 -4
- package/dist/src/commands/lint.d.ts +3 -3
- package/dist/src/commands/lint.js +35 -35
- package/dist/src/commands/manifest.d.ts +4 -4
- package/dist/src/commands/package.js +2 -2
- package/dist/src/commands/patch/compact.d.ts +2 -2
- package/dist/src/commands/patch/compact.js +8 -8
- package/dist/src/commands/patch/delete.d.ts +1 -1
- package/dist/src/commands/patch/delete.js +8 -8
- package/dist/src/commands/patch/lint-ignore.d.ts +3 -4
- package/dist/src/commands/patch/lint-ignore.js +14 -15
- package/dist/src/commands/patch/move-files-create.d.ts +2 -2
- package/dist/src/commands/patch/move-files-create.js +5 -5
- package/dist/src/commands/patch/move-files-into.d.ts +2 -2
- package/dist/src/commands/patch/move-files-into.js +3 -3
- package/dist/src/commands/patch/move-files.js +1 -1
- package/dist/src/commands/patch/patch-context.d.ts +1 -1
- package/dist/src/commands/patch/rename.d.ts +4 -4
- package/dist/src/commands/patch/rename.js +8 -8
- package/dist/src/commands/patch/reorder.js +10 -10
- package/dist/src/commands/patch/split-plan.d.ts +3 -3
- package/dist/src/commands/patch/split-plan.js +6 -5
- package/dist/src/commands/patch/split.d.ts +2 -2
- package/dist/src/commands/patch/split.js +5 -5
- package/dist/src/commands/patch/staged-dependency-validate.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency-validate.js +3 -3
- package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency.js +6 -6
- package/dist/src/commands/patch/tier.d.ts +2 -2
- package/dist/src/commands/patch/tier.js +5 -5
- package/dist/src/commands/patch-rename-map.d.ts +1 -1
- package/dist/src/commands/patch-rename-map.js +1 -1
- package/dist/src/commands/pending-resolution.d.ts +5 -5
- package/dist/src/commands/pending-resolution.js +5 -5
- package/dist/src/commands/re-export-adjacent.d.ts +3 -3
- package/dist/src/commands/re-export-adjacent.js +8 -8
- package/dist/src/commands/re-export-bulk-scan.d.ts +3 -3
- package/dist/src/commands/re-export-bulk-scan.js +17 -17
- package/dist/src/commands/re-export-drift.d.ts +10 -10
- package/dist/src/commands/re-export-drift.js +29 -29
- package/dist/src/commands/re-export-files.js +14 -15
- package/dist/src/commands/re-export-lint.d.ts +26 -26
- package/dist/src/commands/re-export-lint.js +27 -27
- package/dist/src/commands/re-export-options.d.ts +1 -1
- package/dist/src/commands/re-export-options.js +1 -1
- package/dist/src/commands/re-export-register.d.ts +1 -1
- package/dist/src/commands/re-export-register.js +1 -1
- package/dist/src/commands/re-export-scan.d.ts +1 -1
- package/dist/src/commands/re-export-scan.js +7 -7
- package/dist/src/commands/re-export-single.d.ts +1 -1
- package/dist/src/commands/re-export-single.js +20 -20
- package/dist/src/commands/re-export.js +7 -6
- package/dist/src/commands/rebase/abort.js +6 -6
- package/dist/src/commands/rebase/continue.js +8 -7
- package/dist/src/commands/rebase/index.d.ts +1 -1
- package/dist/src/commands/rebase/index.js +3 -3
- package/dist/src/commands/rebase/patch-loop.js +18 -17
- package/dist/src/commands/register.js +5 -5
- package/dist/src/commands/reset.js +1 -1
- package/dist/src/commands/resolve.d.ts +2 -2
- package/dist/src/commands/resolve.js +3 -3
- package/dist/src/commands/run.js +26 -26
- package/dist/src/commands/setup-support.js +4 -4
- package/dist/src/commands/setup.js +1 -1
- package/dist/src/commands/source.js +1 -1
- package/dist/src/commands/status-check.d.ts +3 -3
- package/dist/src/commands/status-check.js +4 -4
- package/dist/src/commands/status-json.d.ts +14 -13
- package/dist/src/commands/status-json.js +9 -8
- package/dist/src/commands/status-output.d.ts +3 -3
- package/dist/src/commands/status-output.js +3 -3
- package/dist/src/commands/status-ownership.d.ts +3 -3
- package/dist/src/commands/status-ownership.js +3 -3
- package/dist/src/commands/status.js +22 -22
- package/dist/src/commands/test-build-phase.d.ts +1 -1
- package/dist/src/commands/test-build-phase.js +17 -17
- package/dist/src/commands/test-diagnose.d.ts +1 -1
- package/dist/src/commands/test-diagnose.js +20 -20
- package/dist/src/commands/test-modes.d.ts +2 -2
- package/dist/src/commands/test-modes.js +4 -4
- package/dist/src/commands/test-run.d.ts +11 -11
- package/dist/src/commands/test-run.js +15 -15
- package/dist/src/commands/test-stale-gate.d.ts +12 -12
- package/dist/src/commands/test-stale-gate.js +13 -13
- package/dist/src/commands/test-verdict.d.ts +6 -6
- package/dist/src/commands/test-verdict.js +11 -11
- package/dist/src/commands/test.d.ts +3 -3
- package/dist/src/commands/test.js +36 -36
- package/dist/src/commands/token-coverage.js +3 -3
- package/dist/src/commands/token-list.js +5 -5
- package/dist/src/commands/token.js +9 -9
- package/dist/src/commands/tree.js +19 -19
- package/dist/src/commands/typecheck.d.ts +6 -6
- package/dist/src/commands/typecheck.js +7 -7
- package/dist/src/commands/verify.d.ts +3 -3
- package/dist/src/commands/verify.js +10 -10
- package/dist/src/commands/watch.js +11 -11
- package/dist/src/commands/wire.js +13 -13
- package/dist/src/core/ast-utils.d.ts +7 -7
- package/dist/src/core/ast-utils.js +8 -8
- package/dist/src/core/branding.d.ts +5 -5
- package/dist/src/core/branding.js +3 -3
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +4 -4
- package/dist/src/core/build-audit-platform.d.ts +6 -6
- package/dist/src/core/build-audit-platform.js +26 -26
- package/dist/src/core/build-audit-registration.d.ts +5 -5
- package/dist/src/core/build-audit-registration.js +7 -7
- package/dist/src/core/build-audit-resolve.d.ts +5 -5
- package/dist/src/core/build-audit-resolve.js +6 -6
- package/dist/src/core/build-audit-skip.d.ts +8 -8
- package/dist/src/core/build-audit-skip.js +12 -12
- package/dist/src/core/build-audit-transforms.d.ts +2 -2
- package/dist/src/core/build-audit-transforms.js +3 -3
- package/dist/src/core/build-audit.d.ts +8 -8
- package/dist/src/core/build-audit.js +39 -37
- package/dist/src/core/build-baseline-types.d.ts +19 -18
- package/dist/src/core/build-baseline-types.js +1 -1
- package/dist/src/core/build-baseline.d.ts +8 -8
- package/dist/src/core/build-baseline.js +14 -14
- package/dist/src/core/build-jar-escalation.d.ts +8 -8
- package/dist/src/core/build-jar-escalation.js +15 -15
- package/dist/src/core/build-overwrite-guard.d.ts +4 -4
- package/dist/src/core/build-overwrite-guard.js +13 -13
- package/dist/src/core/build-prepare.d.ts +4 -4
- package/dist/src/core/build-prepare.js +16 -15
- package/dist/src/core/config-mutate.js +4 -4
- package/dist/src/core/config-state.js +2 -2
- package/dist/src/core/config-validate-build-audit.js +3 -3
- package/dist/src/core/config-validate-file-size.d.ts +1 -1
- package/dist/src/core/config-validate-file-size.js +2 -2
- package/dist/src/core/config-validate.js +8 -9
- package/dist/src/core/config.d.ts +10 -10
- package/dist/src/core/config.js +10 -10
- package/dist/src/core/coverage-extend.d.ts +16 -16
- package/dist/src/core/coverage-extend.js +16 -16
- package/dist/src/core/destructive.d.ts +14 -14
- package/dist/src/core/destructive.js +9 -9
- package/dist/src/core/diff-hunks.d.ts +2 -2
- package/dist/src/core/diff-hunks.js +7 -7
- package/dist/src/core/discard-baseline.d.ts +10 -10
- package/dist/src/core/discard-baseline.js +15 -16
- package/dist/src/core/display-state.d.ts +11 -11
- package/dist/src/core/display-state.js +12 -12
- package/dist/src/core/engine-changes.d.ts +2 -2
- package/dist/src/core/engine-changes.js +2 -2
- package/dist/src/core/engine-precondition.d.ts +4 -4
- package/dist/src/core/engine-precondition.js +2 -2
- package/dist/src/core/engine-session-lock.d.ts +18 -18
- package/dist/src/core/engine-session-lock.js +37 -37
- package/dist/src/core/export-moved-code-shape.d.ts +7 -7
- package/dist/src/core/export-moved-code-shape.js +8 -8
- package/dist/src/core/file-lock-owner.d.ts +11 -11
- package/dist/src/core/file-lock-owner.js +18 -18
- package/dist/src/core/file-lock.d.ts +12 -12
- package/dist/src/core/file-lock.js +52 -39
- package/dist/src/core/firefox-cache.d.ts +1 -1
- package/dist/src/core/firefox-cache.js +10 -10
- package/dist/src/core/firefox-download.d.ts +3 -3
- package/dist/src/core/firefox-download.js +6 -6
- package/dist/src/core/firefox-extract.d.ts +2 -2
- package/dist/src/core/firefox-extract.js +13 -13
- package/dist/src/core/firefox.d.ts +5 -5
- package/dist/src/core/firefox.js +8 -8
- package/dist/src/core/furnace-apply-dry-run.js +1 -1
- package/dist/src/core/furnace-apply-ftl.d.ts +5 -5
- package/dist/src/core/furnace-apply-ftl.js +8 -8
- package/dist/src/core/furnace-apply-helpers.d.ts +9 -9
- package/dist/src/core/furnace-apply-helpers.js +21 -21
- package/dist/src/core/furnace-apply-output.js +1 -1
- package/dist/src/core/furnace-apply-overwrite-warn.d.ts +9 -9
- package/dist/src/core/furnace-apply-overwrite-warn.js +9 -9
- package/dist/src/core/furnace-apply-undeploy-actions.d.ts +1 -1
- package/dist/src/core/furnace-apply-undeploy-actions.js +1 -1
- package/dist/src/core/furnace-apply.d.ts +3 -3
- package/dist/src/core/furnace-apply.js +22 -21
- package/dist/src/core/furnace-checksum-utils.d.ts +5 -5
- package/dist/src/core/furnace-checksum-utils.js +5 -5
- package/dist/src/core/furnace-config-custom.d.ts +1 -1
- package/dist/src/core/furnace-config-custom.js +2 -2
- package/dist/src/core/furnace-config-order.js +1 -1
- package/dist/src/core/furnace-config-tokens.d.ts +3 -3
- package/dist/src/core/furnace-config-tokens.js +3 -3
- package/dist/src/core/furnace-config-validate.js +2 -2
- package/dist/src/core/furnace-config.d.ts +4 -4
- package/dist/src/core/furnace-config.js +18 -18
- package/dist/src/core/furnace-constants.d.ts +6 -6
- package/dist/src/core/furnace-constants.js +6 -6
- package/dist/src/core/furnace-css-fragments.d.ts +6 -6
- package/dist/src/core/furnace-css-fragments.js +11 -11
- package/dist/src/core/furnace-dir-entry.d.ts +1 -1
- package/dist/src/core/furnace-dir-entry.js +1 -1
- package/dist/src/core/furnace-jsconfig.d.ts +7 -7
- package/dist/src/core/furnace-jsconfig.js +22 -20
- package/dist/src/core/furnace-operation.d.ts +21 -20
- package/dist/src/core/furnace-operation.js +36 -34
- package/dist/src/core/furnace-precondition.d.ts +10 -10
- package/dist/src/core/furnace-precondition.js +8 -8
- package/dist/src/core/furnace-refresh.js +2 -2
- package/dist/src/core/furnace-registration-ast.d.ts +2 -2
- package/dist/src/core/furnace-registration-ast.js +9 -9
- package/dist/src/core/furnace-registration-remove.d.ts +4 -4
- package/dist/src/core/furnace-registration-remove.js +6 -6
- package/dist/src/core/furnace-registration-validate.d.ts +2 -2
- package/dist/src/core/furnace-registration-validate.js +2 -2
- package/dist/src/core/furnace-registration.d.ts +5 -5
- package/dist/src/core/furnace-registration.js +7 -7
- package/dist/src/core/furnace-rollback.d.ts +1 -1
- package/dist/src/core/furnace-rollback.js +5 -5
- package/dist/src/core/furnace-stale-export.d.ts +17 -16
- package/dist/src/core/furnace-stale-export.js +16 -15
- package/dist/src/core/furnace-staleness.d.ts +2 -2
- package/dist/src/core/furnace-staleness.js +2 -2
- package/dist/src/core/furnace-state-persist.d.ts +10 -10
- package/dist/src/core/furnace-state-persist.js +10 -10
- package/dist/src/core/furnace-step-errors.d.ts +6 -6
- package/dist/src/core/furnace-step-errors.js +6 -6
- package/dist/src/core/furnace-validate-accessibility.js +14 -14
- package/dist/src/core/furnace-validate-compatibility.js +9 -9
- package/dist/src/core/furnace-validate-registration.d.ts +2 -2
- package/dist/src/core/furnace-validate-registration.js +13 -13
- package/dist/src/core/furnace-validate-structure.d.ts +1 -1
- package/dist/src/core/furnace-validate-structure.js +4 -4
- package/dist/src/core/furnace-validate.js +9 -9
- package/dist/src/core/furnace-version-drift.d.ts +5 -5
- package/dist/src/core/furnace-version-drift.js +5 -5
- package/dist/src/core/git-base.d.ts +4 -4
- package/dist/src/core/git-base.js +9 -9
- package/dist/src/core/git-diff-new-file.d.ts +4 -4
- package/dist/src/core/git-diff-new-file.js +8 -8
- package/dist/src/core/git-diff.d.ts +4 -4
- package/dist/src/core/git-diff.js +35 -34
- package/dist/src/core/git-file-ops.d.ts +6 -6
- package/dist/src/core/git-file-ops.js +7 -7
- package/dist/src/core/git-readonly-index.d.ts +12 -12
- package/dist/src/core/git-readonly-index.js +12 -12
- package/dist/src/core/git-status.d.ts +4 -4
- package/dist/src/core/git-status.js +4 -4
- package/dist/src/core/git.d.ts +3 -3
- package/dist/src/core/git.js +14 -14
- package/dist/src/core/harness-orphans.d.ts +17 -17
- package/dist/src/core/harness-orphans.js +20 -20
- package/dist/src/core/history-log.d.ts +3 -3
- package/dist/src/core/history-log.js +3 -3
- package/dist/src/core/license-headers.d.ts +19 -18
- package/dist/src/core/license-headers.js +29 -28
- package/dist/src/core/mach-build-artifacts.d.ts +21 -21
- package/dist/src/core/mach-build-artifacts.js +23 -23
- package/dist/src/core/mach-error-hints.d.ts +5 -5
- package/dist/src/core/mach-error-hints.js +13 -13
- package/dist/src/core/mach-known-noise-filter.d.ts +41 -38
- package/dist/src/core/mach-known-noise-filter.js +53 -50
- package/dist/src/core/mach-mozconfig.d.ts +6 -6
- package/dist/src/core/mach-mozconfig.js +15 -15
- package/dist/src/core/mach-python.d.ts +2 -1
- package/dist/src/core/mach-python.js +4 -3
- package/dist/src/core/mach-resource-shim.d.ts +12 -12
- package/dist/src/core/mach-resource-shim.js +20 -20
- package/dist/src/core/mach.d.ts +23 -23
- package/dist/src/core/mach.js +36 -36
- package/dist/src/core/marionette-port.d.ts +15 -13
- package/dist/src/core/marionette-port.js +34 -31
- package/dist/src/core/marionette-preflight.d.ts +6 -6
- package/dist/src/core/marionette-preflight.js +23 -23
- package/dist/src/core/markdown-table.d.ts +9 -9
- package/dist/src/core/markdown-table.js +14 -14
- package/dist/src/core/mochitest-server-port.d.ts +8 -8
- package/dist/src/core/mochitest-server-port.js +14 -14
- package/dist/src/core/module-resolution-preflight.d.ts +8 -8
- package/dist/src/core/module-resolution-preflight.js +11 -11
- package/dist/src/core/moz-manifest-helpers.d.ts +7 -7
- package/dist/src/core/moz-manifest-helpers.js +7 -7
- package/dist/src/core/moz-manifest-register.d.ts +1 -1
- package/dist/src/core/moz-manifest-register.js +2 -2
- package/dist/src/core/moz-manifest-rules.js +11 -11
- package/dist/src/core/moz-manifest-tokenizers.js +1 -1
- package/dist/src/core/ownership-table.d.ts +5 -5
- package/dist/src/core/ownership-table.js +7 -7
- package/dist/src/core/parser-fallback.d.ts +3 -3
- package/dist/src/core/parser-fallback.js +3 -3
- package/dist/src/core/patch-apply-fuzz.d.ts +5 -5
- package/dist/src/core/patch-apply-fuzz.js +9 -9
- package/dist/src/core/patch-apply.d.ts +9 -9
- package/dist/src/core/patch-apply.js +30 -30
- package/dist/src/core/patch-export-update.d.ts +4 -4
- package/dist/src/core/patch-export-update.js +3 -3
- package/dist/src/core/patch-export.d.ts +10 -10
- package/dist/src/core/patch-export.js +13 -13
- package/dist/src/core/patch-identifier-suggest.d.ts +1 -1
- package/dist/src/core/patch-identifier-suggest.js +4 -4
- package/dist/src/core/patch-lint-binary.d.ts +7 -7
- package/dist/src/core/patch-lint-cache.d.ts +2 -2
- package/dist/src/core/patch-lint-cache.js +13 -13
- package/dist/src/core/patch-lint-checkjs.d.ts +26 -26
- package/dist/src/core/patch-lint-checkjs.js +42 -41
- package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +8 -9
- package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -11
- package/dist/src/core/patch-lint-creators.d.ts +3 -3
- package/dist/src/core/patch-lint-creators.js +3 -3
- package/dist/src/core/patch-lint-cross.d.ts +13 -13
- package/dist/src/core/patch-lint-cross.js +21 -21
- package/dist/src/core/patch-lint-css.d.ts +1 -1
- package/dist/src/core/patch-lint-css.js +5 -5
- package/dist/src/core/patch-lint-diff-tag.d.ts +5 -5
- package/dist/src/core/patch-lint-diff-tag.js +5 -5
- package/dist/src/core/patch-lint-diff.d.ts +4 -4
- package/dist/src/core/patch-lint-diff.js +4 -4
- package/dist/src/core/patch-lint-file-size.d.ts +3 -3
- package/dist/src/core/patch-lint-file-size.js +3 -3
- package/dist/src/core/patch-lint-forward-registration.d.ts +4 -4
- package/dist/src/core/patch-lint-forward-registration.js +12 -12
- package/dist/src/core/patch-lint-jsdoc.d.ts +2 -2
- package/dist/src/core/patch-lint-jsdoc.js +11 -11
- package/dist/src/core/patch-lint-module-registration.d.ts +1 -1
- package/dist/src/core/patch-lint-module-registration.js +1 -1
- package/dist/src/core/patch-lint-mozbuild.d.ts +1 -1
- package/dist/src/core/patch-lint-mozbuild.js +10 -10
- package/dist/src/core/patch-lint-observer.d.ts +3 -3
- package/dist/src/core/patch-lint-observer.js +7 -7
- package/dist/src/core/patch-lint-ownership.d.ts +6 -6
- package/dist/src/core/patch-lint-ownership.js +6 -6
- package/dist/src/core/patch-lint-prettier.d.ts +6 -6
- package/dist/src/core/patch-lint-prettier.js +6 -6
- package/dist/src/core/patch-lint-queue-types.d.ts +1 -1
- package/dist/src/core/patch-lint-queue-types.js +1 -1
- package/dist/src/core/patch-lint-staged-registration.d.ts +2 -2
- package/dist/src/core/patch-lint-staged-registration.js +6 -6
- package/dist/src/core/patch-lint-unmanaged-companion.d.ts +23 -23
- package/dist/src/core/patch-lint-unmanaged-companion.js +26 -26
- package/dist/src/core/patch-lint.d.ts +27 -26
- package/dist/src/core/patch-lint.js +48 -46
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +8 -8
- package/dist/src/core/patch-manifest-consistency.d.ts +7 -7
- package/dist/src/core/patch-manifest-consistency.js +16 -17
- package/dist/src/core/patch-manifest-files-affected.d.ts +1 -1
- package/dist/src/core/patch-manifest-files-affected.js +3 -3
- package/dist/src/core/patch-manifest-io.d.ts +14 -14
- package/dist/src/core/patch-manifest-io.js +27 -27
- package/dist/src/core/patch-manifest-query.d.ts +1 -1
- package/dist/src/core/patch-manifest-query.js +4 -4
- package/dist/src/core/patch-manifest-resolve.d.ts +5 -5
- package/dist/src/core/patch-manifest-resolve.js +7 -7
- package/dist/src/core/patch-manifest-validate.js +3 -3
- package/dist/src/core/patch-manifest.d.ts +2 -2
- package/dist/src/core/patch-manifest.js +2 -2
- package/dist/src/core/patch-parse.d.ts +14 -14
- package/dist/src/core/patch-parse.js +16 -16
- package/dist/src/core/patch-registration-refs.d.ts +4 -4
- package/dist/src/core/patch-registration-refs.js +7 -7
- package/dist/src/core/patch-transform.d.ts +8 -8
- package/dist/src/core/patch-transform.js +13 -13
- package/dist/src/core/process-cpu-time.d.ts +1 -1
- package/dist/src/core/process-cpu-time.js +5 -5
- package/dist/src/core/rebase-session.d.ts +7 -7
- package/dist/src/core/rebase-session.js +8 -8
- package/dist/src/core/register-result.d.ts +1 -1
- package/dist/src/core/register-result.js +1 -1
- package/dist/src/core/register-scaffold.d.ts +2 -2
- package/dist/src/core/register-scaffold.js +3 -3
- package/dist/src/core/register-shared-css.d.ts +3 -3
- package/dist/src/core/register-shared-css.js +4 -4
- package/dist/src/core/register-xpcshell-test.d.ts +2 -2
- package/dist/src/core/register-xpcshell-test.js +2 -2
- package/dist/src/core/run-log-redact.d.ts +12 -12
- package/dist/src/core/run-log-redact.js +16 -16
- package/dist/src/core/run-log.d.ts +9 -9
- package/dist/src/core/run-log.js +14 -14
- package/dist/src/core/shared-ftl.d.ts +2 -2
- package/dist/src/core/shared-ftl.js +6 -6
- package/dist/src/core/signal-critical.d.ts +2 -2
- package/dist/src/core/signal-critical.js +2 -2
- package/dist/src/core/smoke-patterns.d.ts +5 -5
- package/dist/src/core/smoke-patterns.js +9 -9
- package/dist/src/core/state-file.d.ts +3 -3
- package/dist/src/core/status-binary.d.ts +8 -8
- package/dist/src/core/status-binary.js +12 -12
- package/dist/src/core/status-classify.d.ts +17 -17
- package/dist/src/core/status-classify.js +11 -11
- package/dist/src/core/test-changed-prefs.d.ts +12 -12
- package/dist/src/core/test-changed-prefs.js +15 -15
- package/dist/src/core/test-harness-crash.d.ts +39 -39
- package/dist/src/core/test-harness-crash.js +67 -67
- package/dist/src/core/test-harness-output.d.ts +7 -7
- package/dist/src/core/test-harness-output.js +7 -7
- package/dist/src/core/test-harness-verdict-notes.d.ts +13 -14
- package/dist/src/core/test-harness-verdict-notes.js +4 -4
- package/dist/src/core/test-path-scope.d.ts +8 -8
- package/dist/src/core/test-path-scope.js +11 -11
- package/dist/src/core/test-stale-check.d.ts +22 -21
- package/dist/src/core/test-stale-check.js +29 -28
- package/dist/src/core/test-stale-symlink.d.ts +1 -1
- package/dist/src/core/test-stale-symlink.js +1 -1
- package/dist/src/core/test-stall-triage.d.ts +9 -9
- package/dist/src/core/test-stall-triage.js +22 -22
- package/dist/src/core/token-category.d.ts +4 -4
- package/dist/src/core/token-category.js +13 -12
- package/dist/src/core/token-coverage.js +4 -5
- package/dist/src/core/token-dark-mode.d.ts +9 -9
- package/dist/src/core/token-dark-mode.js +11 -11
- package/dist/src/core/token-docs.d.ts +1 -1
- package/dist/src/core/token-inventory.d.ts +6 -6
- package/dist/src/core/token-inventory.js +7 -7
- package/dist/src/core/token-manager.d.ts +3 -3
- package/dist/src/core/token-manager.js +21 -21
- package/dist/src/core/token-scaffold.d.ts +4 -4
- package/dist/src/core/token-scaffold.js +4 -4
- package/dist/src/core/token-variant.d.ts +14 -14
- package/dist/src/core/token-variant.js +32 -32
- package/dist/src/core/toolchain-preflight.d.ts +15 -15
- package/dist/src/core/toolchain-preflight.js +22 -22
- package/dist/src/core/tree-cow.d.ts +3 -3
- package/dist/src/core/tree-cow.js +6 -6
- package/dist/src/core/tree-guard.d.ts +3 -3
- package/dist/src/core/tree-guard.js +23 -23
- package/dist/src/core/tree-store.d.ts +15 -15
- package/dist/src/core/tree-store.js +35 -33
- package/dist/src/core/typecheck-shim.d.ts +16 -15
- package/dist/src/core/typecheck-shim.js +26 -25
- package/dist/src/core/typecheck.d.ts +12 -12
- package/dist/src/core/typecheck.js +31 -31
- package/dist/src/core/wire-destroy.d.ts +2 -2
- package/dist/src/core/wire-destroy.js +5 -5
- package/dist/src/core/wire-dom-fragment.d.ts +3 -3
- package/dist/src/core/wire-dom-fragment.js +6 -6
- package/dist/src/core/wire-init.d.ts +2 -2
- package/dist/src/core/wire-init.js +7 -7
- package/dist/src/core/wire-subscript.d.ts +1 -1
- package/dist/src/core/wire-subscript.js +3 -3
- package/dist/src/core/wire-utils.d.ts +9 -9
- package/dist/src/core/wire-utils.js +11 -11
- package/dist/src/core/xpcshell-appdir.d.ts +20 -20
- package/dist/src/core/xpcshell-appdir.js +26 -26
- package/dist/src/core/xpcshell-profile-dir.d.ts +3 -3
- package/dist/src/core/xpcshell-profile-dir.js +7 -7
- package/dist/src/errors/base.d.ts +22 -21
- package/dist/src/errors/base.js +22 -21
- package/dist/src/errors/build.d.ts +6 -6
- package/dist/src/errors/build.js +6 -6
- package/dist/src/errors/codes.d.ts +10 -10
- package/dist/src/errors/codes.js +10 -10
- package/dist/src/errors/furnace.d.ts +2 -2
- package/dist/src/errors/git.d.ts +1 -1
- package/dist/src/errors/git.js +1 -1
- package/dist/src/errors/patch.d.ts +3 -3
- package/dist/src/errors/patch.js +3 -3
- package/dist/src/errors/rebase.d.ts +1 -1
- package/dist/src/errors/rebase.js +1 -1
- package/dist/src/errors/run.d.ts +1 -1
- package/dist/src/errors/run.js +1 -1
- package/dist/src/index.d.ts +4 -4
- package/dist/src/index.js +4 -4
- package/dist/src/types/commands/options.d.ts +86 -85
- package/dist/src/types/commands/patches.d.ts +19 -19
- package/dist/src/types/commands/project.d.ts +3 -3
- package/dist/src/types/config.d.ts +24 -23
- package/dist/src/types/furnace.d.ts +17 -17
- package/dist/src/types/json.d.ts +3 -3
- package/dist/src/types/json.js +2 -2
- package/dist/src/types/typecheck.d.ts +3 -3
- package/dist/src/utils/assert.d.ts +1 -1
- package/dist/src/utils/assert.js +6 -6
- package/dist/src/utils/build-info.d.ts +5 -5
- package/dist/src/utils/build-info.js +6 -6
- package/dist/src/utils/child-env.d.ts +5 -5
- package/dist/src/utils/child-env.js +5 -5
- package/dist/src/utils/concurrency.d.ts +2 -2
- package/dist/src/utils/concurrency.js +2 -2
- package/dist/src/utils/elapsed.js +1 -1
- package/dist/src/utils/errors.d.ts +8 -8
- package/dist/src/utils/errors.js +8 -8
- package/dist/src/utils/fs.d.ts +1 -1
- package/dist/src/utils/fs.js +8 -8
- package/dist/src/utils/line-dispatch.d.ts +3 -3
- package/dist/src/utils/line-dispatch.js +5 -5
- package/dist/src/utils/logger.d.ts +4 -4
- package/dist/src/utils/logger.js +11 -11
- package/dist/src/utils/machine-output.js +2 -2
- package/dist/src/utils/options.d.ts +13 -13
- package/dist/src/utils/options.js +20 -20
- package/dist/src/utils/package-root.js +2 -2
- package/dist/src/utils/paths.d.ts +4 -4
- package/dist/src/utils/paths.js +4 -4
- package/dist/src/utils/process-group.d.ts +8 -8
- package/dist/src/utils/process-group.js +19 -19
- package/dist/src/utils/process.d.ts +34 -33
- package/dist/src/utils/process.js +20 -19
- package/dist/src/utils/ps-duration.d.ts +4 -4
- package/dist/src/utils/ps-duration.js +6 -6
- package/dist/src/utils/regex.d.ts +4 -4
- package/dist/src/utils/regex.js +7 -7
- package/dist/src/utils/sleep.d.ts +7 -7
- package/dist/src/utils/sleep.js +7 -7
- package/dist/src/utils/stdio-drain.d.ts +7 -7
- package/dist/src/utils/stdio-drain.js +8 -8
- package/dist/src/utils/validation.d.ts +11 -12
- package/dist/src/utils/validation.js +20 -21
- package/docs/README.md +2 -2
- package/docs/configuration.md +120 -114
- package/docs/exit-codes.md +63 -58
- package/docs/furnace.md +20 -19
- package/docs/lifecycle-invariants.md +412 -251
- package/docs/machine-output.md +33 -32
- package/docs/patch-workflow.md +48 -45
- package/docs/run-logs.md +62 -58
- package/docs/testing.md +101 -101
- package/docs/verification-trees.md +23 -22
- package/package.json +2 -2
|
@@ -56,7 +56,7 @@ export interface ExternalToolRequirement {
|
|
|
56
56
|
path?: string;
|
|
57
57
|
/** Resolve the tool with `xcrun -find <name>` instead of PATH. */
|
|
58
58
|
xcrun?: boolean;
|
|
59
|
-
/** Missing tool is an error by default
|
|
59
|
+
/** Missing tool is an error by default. Set false for advisory probes. */
|
|
60
60
|
required?: boolean;
|
|
61
61
|
}
|
|
62
62
|
/** Named group of project-specific external asset/build tools. */
|
|
@@ -158,14 +158,14 @@ export interface FireForgeConfig {
|
|
|
158
158
|
/**
|
|
159
159
|
* Configuration for the `fireforge typecheck` command. Distinct from
|
|
160
160
|
* `patchLint.checkJs`: patch-lint runs every time `fireforge lint` runs
|
|
161
|
-
* and is scoped to patch-owned `.sys.mjs
|
|
161
|
+
* and is scoped to patch-owned `.sys.mjs`. Typecheck runs whole projects
|
|
162
162
|
* the operator points at via `projects` and is intended as a CI gate.
|
|
163
163
|
*/
|
|
164
164
|
export interface TypecheckConfig {
|
|
165
165
|
/**
|
|
166
166
|
* Project-relative paths to jsconfig.json (or tsconfig.json) files
|
|
167
167
|
* the typecheck command should run. Must be non-empty when the
|
|
168
|
-
* `typecheck` block is present
|
|
168
|
+
* `typecheck` block is present. An empty array would silently turn
|
|
169
169
|
* the command into a no-op.
|
|
170
170
|
*/
|
|
171
171
|
projects: string[];
|
|
@@ -174,14 +174,15 @@ export interface TypecheckConfig {
|
|
|
174
174
|
* contents are concatenated to the built-in `FIREFOX_GLOBALS_SHIM`.
|
|
175
175
|
* Lets projects declare component patterns like `MozLitElement` /
|
|
176
176
|
* `MozXULElement` once instead of per-file. Concat order is
|
|
177
|
-
* built-in shim first, extraShim second
|
|
177
|
+
* built-in shim first, extraShim second: augment, don't redeclare.
|
|
178
178
|
*/
|
|
179
179
|
extraShim?: string;
|
|
180
180
|
/**
|
|
181
181
|
* Per-project override of {@link extraShim}, keyed by the project's path
|
|
182
182
|
* exactly as it appears in {@link projects}. A string value points the
|
|
183
|
-
* project at a different `.d.ts
|
|
184
|
-
* extra shim entirely (it absorbs only the built-in Firefox globals
|
|
183
|
+
* project at a different `.d.ts`. `null` opts the project out of the
|
|
184
|
+
* shared extra shim entirely (it absorbs only the built-in Firefox globals
|
|
185
|
+
* shim).
|
|
185
186
|
*
|
|
186
187
|
* Needed because the shared shim is injected into every project: a shim hub
|
|
187
188
|
* that references Gecko declaration libs (`lib.gecko.dom.d.ts`, …) is wanted
|
|
@@ -194,7 +195,7 @@ export interface TypecheckConfig {
|
|
|
194
195
|
* How to report undefined free identifiers (TS2304/TS2552). Default
|
|
195
196
|
* `'warning'`: visible without failing the gate, since shim gaps produce
|
|
196
197
|
* the same diagnostic as a genuine missing import. `'error'` makes them
|
|
197
|
-
* blocking
|
|
198
|
+
* blocking. `'off'` suppresses them.
|
|
198
199
|
*/
|
|
199
200
|
undefinedIdentifiers?: PatchLintSeverityGate;
|
|
200
201
|
}
|
|
@@ -202,13 +203,13 @@ export interface TypecheckConfig {
|
|
|
202
203
|
* Wire command configuration.
|
|
203
204
|
*/
|
|
204
205
|
/**
|
|
205
|
-
* One
|
|
206
|
-
* reporting it as a missing registration.
|
|
206
|
+
* One intentionally unpackaged source, declared so the post-build audit
|
|
207
|
+
* stops reporting it as a missing registration.
|
|
207
208
|
*
|
|
208
209
|
* `reason` is required and must be non-empty. A carve-out whose rationale
|
|
209
210
|
* nobody wrote down is indistinguishable from a mistake by the time someone
|
|
210
211
|
* reads it, and this is the one audit class FireForge cannot derive from the
|
|
211
|
-
* tree
|
|
212
|
+
* tree: the file's own header may say "never loaded", but nothing in
|
|
212
213
|
* `moz.build` or `jar.mn` records that.
|
|
213
214
|
*/
|
|
214
215
|
export interface BuildAuditUnpackagedDeclaration {
|
|
@@ -220,9 +221,9 @@ export interface BuildAuditUnpackagedDeclaration {
|
|
|
220
221
|
/** Post-build packaging audit configuration. */
|
|
221
222
|
export interface BuildAuditConfig {
|
|
222
223
|
/**
|
|
223
|
-
* Sources the audit must treat as
|
|
224
|
-
* are
|
|
225
|
-
* resolve to a packaged artifact is reported as a stale carve-out.
|
|
224
|
+
* Sources the audit must treat as intentionally unpackaged. Admitted
|
|
225
|
+
* paths are listed in the audit output rather than silenced, and one that
|
|
226
|
+
* does resolve to a packaged artifact is reported as a stale carve-out.
|
|
226
227
|
*/
|
|
227
228
|
unpackaged?: BuildAuditUnpackagedDeclaration[];
|
|
228
229
|
}
|
|
@@ -231,7 +232,7 @@ export interface WireConfig {
|
|
|
231
232
|
subscriptDir?: string;
|
|
232
233
|
}
|
|
233
234
|
/**
|
|
234
|
-
* Severity gate for opt-in patch-lint rules. `'off'` disables the rule
|
|
235
|
+
* Severity gate for opt-in patch-lint rules. `'off'` disables the rule.
|
|
235
236
|
* `'warning'` and `'error'` emit issues at the matching severity.
|
|
236
237
|
*/
|
|
237
238
|
export type PatchLintSeverityGate = 'off' | 'warning' | 'error';
|
|
@@ -242,7 +243,7 @@ export type PatchLintSeverityGate = 'off' | 'warning' | 'error';
|
|
|
242
243
|
*
|
|
243
244
|
* Boolean flags tighten the strict preset. The optional `paths` mapping
|
|
244
245
|
* (each pattern may carry a single `*`) lets patch-owned modules be typed
|
|
245
|
-
* from their real sources
|
|
246
|
+
* from their real sources (e.g. `"resource:///modules/foo/*": ["./*"]`),
|
|
246
247
|
* resolved host-side against the engine directory, so no `baseUrl` is set
|
|
247
248
|
* (TS5090-safe) and no hand-generated ambient stub shim is needed. Other
|
|
248
249
|
* options (`rootDir`, etc.) stay disallowed: they would fight the
|
|
@@ -263,10 +264,10 @@ export interface PatchLintCheckJsCompilerOptions {
|
|
|
263
264
|
/**
|
|
264
265
|
* Line-count thresholds for one `file-too-large` tier.
|
|
265
266
|
*
|
|
266
|
-
* Every field is optional
|
|
267
|
+
* Every field is optional. An omitted field keeps the built-in default.
|
|
267
268
|
* The three must stay ordered `notice <= warning <= error`, which the
|
|
268
|
-
* config validator enforces
|
|
269
|
-
* band rather than failing anything.
|
|
269
|
+
* config validator enforces, because an out-of-order triple silently
|
|
270
|
+
* disables a band rather than failing anything.
|
|
270
271
|
*/
|
|
271
272
|
export interface PatchLintFileSizeTier {
|
|
272
273
|
notice?: number;
|
|
@@ -303,7 +304,7 @@ export interface PatchLintConfig {
|
|
|
303
304
|
*/
|
|
304
305
|
checkJsStrict?: boolean;
|
|
305
306
|
/**
|
|
306
|
-
* Boolean overrides merged after the strict preset
|
|
307
|
+
* Boolean overrides merged after the strict preset. Only valid when
|
|
307
308
|
* `checkJsStrict` is true. Requires `checkJs: true`.
|
|
308
309
|
*/
|
|
309
310
|
checkJsCompilerOptions?: PatchLintCheckJsCompilerOptions;
|
|
@@ -357,16 +358,16 @@ export interface PatchLintConfig {
|
|
|
357
358
|
* `Services.scriptloader.loadSubScript`, e.g.
|
|
358
359
|
* `browser/base/content/<binaryName>*.js`). Distinct from
|
|
359
360
|
* `jsdocClassMethods` because chrome subscripts are parsed as scripts,
|
|
360
|
-
* not ES modules
|
|
361
|
+
* not ES modules. Using one flag for both would silently disable the
|
|
361
362
|
* rule when a chrome subscript was fed to the module parser. Default:
|
|
362
363
|
* 'off'.
|
|
363
364
|
*/
|
|
364
365
|
chromeScriptJsDoc?: PatchLintSeverityGate;
|
|
365
366
|
/**
|
|
366
367
|
* How the checkJs pass reports undefined free identifiers
|
|
367
|
-
* (TS2304/TS2552). Same semantics as `typecheck.undefinedIdentifiers
|
|
368
|
-
*
|
|
369
|
-
*
|
|
368
|
+
* (TS2304/TS2552). Same semantics as `typecheck.undefinedIdentifiers`.
|
|
369
|
+
* The two flows share the suppression policy so a patch cannot pass one
|
|
370
|
+
* and fail the other. Default: 'warning'.
|
|
370
371
|
*/
|
|
371
372
|
undefinedIdentifiers?: PatchLintSeverityGate;
|
|
372
373
|
}
|
|
@@ -47,7 +47,7 @@ export interface CustomComponentConfig {
|
|
|
47
47
|
/** Whether to register in customElements.js */
|
|
48
48
|
register: boolean;
|
|
49
49
|
/**
|
|
50
|
-
* What the component
|
|
50
|
+
* What the component is. `'element'` (the default when unset) is a custom
|
|
51
51
|
* element with its own tag. `'library'` is a base class + helpers module
|
|
52
52
|
* that defines no element of its own (e.g. a shared MozLitElement
|
|
53
53
|
* subclass other components extend): `furnace validate` skips the
|
|
@@ -55,7 +55,7 @@ export interface CustomComponentConfig {
|
|
|
55
55
|
* and the `missing-css` structural advisory for it, while headers, module
|
|
56
56
|
* shape, `relative-import`, and (when a `.css` exists) the CSS
|
|
57
57
|
* compatibility rules still apply. A library exports no element, so
|
|
58
|
-
* `kind: "library"` requires `register: false
|
|
58
|
+
* `kind: "library"` requires `register: false`. The combination with
|
|
59
59
|
* `register: true` is rejected at config parse time.
|
|
60
60
|
*/
|
|
61
61
|
kind?: 'element' | 'library';
|
|
@@ -85,18 +85,18 @@ export interface CustomComponentConfig {
|
|
|
85
85
|
* participates in, in the same form used by `insertFTLIfNeeded` (for
|
|
86
86
|
* example `browser/mybrowser-dock.ftl`). When set:
|
|
87
87
|
*
|
|
88
|
-
* - `furnace create --localized` does
|
|
89
|
-
* `.ftl` stub
|
|
88
|
+
* - `furnace create --localized` does not scaffold a per-component
|
|
89
|
+
* `.ftl` stub. The component shares the feature bundle.
|
|
90
90
|
* - The generated `.mjs` calls `insertFTLIfNeeded("<sharedFtl>")` at
|
|
91
91
|
* the shared path instead of the per-component one.
|
|
92
92
|
* - `furnace validate`'s `missing-ftl` structural rule is skipped for
|
|
93
93
|
* the component (there is no `<tag>.ftl` to require).
|
|
94
|
-
* - `furnace apply` does
|
|
95
|
-
* tree nor register a new entry in the locale `jar.mn
|
|
94
|
+
* - `furnace apply` does not copy a per-component `.ftl` into the FTL
|
|
95
|
+
* tree nor register a new entry in the locale `jar.mn`. The shared
|
|
96
96
|
* file is owned by whoever authored the feature bundle.
|
|
97
97
|
*
|
|
98
98
|
* Requires `localized: true`. Mutually exclusive with the per-component
|
|
99
|
-
* `.ftl` scaffold. Does
|
|
99
|
+
* `.ftl` scaffold. Does not auto-migrate previous per-component FTL
|
|
100
100
|
* state: flipping an existing component onto `sharedFtl` leaves the
|
|
101
101
|
* prior per-component entry in the engine tree and the locale `jar.mn`
|
|
102
102
|
* until explicitly cleaned up.
|
|
@@ -120,12 +120,12 @@ export interface FurnaceConfig {
|
|
|
120
120
|
* variables the fork does not own. `token coverage` counts matches as
|
|
121
121
|
* `allowlisted` rather than `unknown` so a copied upstream baseline does
|
|
122
122
|
* not drag fork-owned coverage percentages down. Defaults to `['--moz-']`
|
|
123
|
-
* when unset
|
|
123
|
+
* when unset. Pass an explicit empty array to count every prefix.
|
|
124
124
|
*/
|
|
125
125
|
platformPrefixes?: string[];
|
|
126
126
|
/**
|
|
127
|
-
* Custom properties used as runtime state channels
|
|
128
|
-
* component itself (e.g. per-frame camera/tile positions) rather than
|
|
127
|
+
* Custom properties used as runtime state channels, written and read by
|
|
128
|
+
* the component itself (e.g. per-frame camera/tile positions) rather than
|
|
129
129
|
* consumed as design tokens. Listed names are exempt from the
|
|
130
130
|
* `token-prefix-violation` check even when they do not match `tokenPrefix`
|
|
131
131
|
* and are not in `tokenAllowlist`. Use this for cross-component runtime
|
|
@@ -139,7 +139,7 @@ export interface FurnaceConfig {
|
|
|
139
139
|
* the tokens CSS file is `<link>`ed. Forks with multiple chrome host
|
|
140
140
|
* documents (e.g. `mybrowser.xhtml` beside the stock `browser.xhtml`) should
|
|
141
141
|
* list every document that may own the link. When omitted, defaults to
|
|
142
|
-
* `['browser/base/content/browser.xhtml']
|
|
142
|
+
* `['browser/base/content/browser.xhtml']`, the upstream Firefox path.
|
|
143
143
|
*/
|
|
144
144
|
tokenHostDocuments?: string[];
|
|
145
145
|
/**
|
|
@@ -157,7 +157,7 @@ export interface FurnaceConfig {
|
|
|
157
157
|
* `compilerOptions.paths` entries for deployed component modules
|
|
158
158
|
* (`chrome://global/content/elements/<file>.mjs`) Furnace keeps in sync
|
|
159
159
|
* on deploy. Only entries under that chrome prefix that map into
|
|
160
|
-
* `components/custom/` are managed
|
|
160
|
+
* `components/custom/` are managed. Everything else is preserved.
|
|
161
161
|
* Unset disables jsconfig maintenance.
|
|
162
162
|
*/
|
|
163
163
|
typecheckJsconfig?: string;
|
|
@@ -189,11 +189,11 @@ export type FurnacePendingRepairOperation = (typeof FURNACE_PENDING_REPAIR_OPERA
|
|
|
189
189
|
* out-of-band from what the state file records.
|
|
190
190
|
*/
|
|
191
191
|
export interface FurnacePendingRepair {
|
|
192
|
-
/** The operation that failed to clean up
|
|
192
|
+
/** The operation that failed to clean up. Doctor uses it to route the fix. */
|
|
193
193
|
operation: FurnacePendingRepairOperation;
|
|
194
194
|
/** ISO timestamp of when the repair marker was written. */
|
|
195
195
|
timestamp: string;
|
|
196
|
-
/** Human-readable summary of the failure
|
|
196
|
+
/** Human-readable summary of the failure. Doctor shows it. */
|
|
197
197
|
reason: string;
|
|
198
198
|
}
|
|
199
199
|
/**
|
|
@@ -259,13 +259,13 @@ export interface ApplyResult {
|
|
|
259
259
|
/**
|
|
260
260
|
* Set to true when the rollback journal was restored after a partial failure.
|
|
261
261
|
* When true, entries in `applied` reflect what was attempted, not what
|
|
262
|
-
* persisted
|
|
262
|
+
* persisted. The engine has been restored to its pre-apply state.
|
|
263
263
|
*/
|
|
264
264
|
rolledBack?: boolean;
|
|
265
265
|
/**
|
|
266
266
|
* Operator-facing warnings, printed by `logApplyResult`. Populated when
|
|
267
267
|
* apply overwrote a deployed, patch-owned file whose engine bytes
|
|
268
|
-
* differed from the component source
|
|
268
|
+
* differed from the component source, which is the case where a
|
|
269
269
|
* shipped engine-only fix is silently reverted by the copy.
|
|
270
270
|
*/
|
|
271
271
|
warnings?: string[];
|
|
@@ -331,7 +331,7 @@ export type ResolvedTestStyle = 'mochikit' | 'browser-chrome' | 'xpcshell' | 'no
|
|
|
331
331
|
* caller is never asked to invent a value it does not have.
|
|
332
332
|
*/
|
|
333
333
|
export interface ComponentApplyContext {
|
|
334
|
-
/** Project root
|
|
334
|
+
/** Project root, what registration consistency resolves against. */
|
|
335
335
|
root: string;
|
|
336
336
|
/** Firefox source directory the component deploys into. */
|
|
337
337
|
engineDir: string;
|
package/dist/src/types/json.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Domain types for raw JSON documents (fireforge.json, furnace.json).
|
|
3
3
|
*
|
|
4
|
-
* FireForge
|
|
5
|
-
*
|
|
4
|
+
* FireForge reads and writes some documents in their raw, unvalidated
|
|
5
|
+
* form. For example, `fireforge config --force` round-trips keys that
|
|
6
6
|
* the validated `FireForgeConfig` schema would strip. These types give that
|
|
7
7
|
* pipeline a concrete value contract: every value is JSON data, never a
|
|
8
8
|
* function, class instance, symbol, or other non-serializable runtime value.
|
|
@@ -14,7 +14,7 @@ export type JsonValue = string | number | boolean | null | JsonValue[] | JsonObj
|
|
|
14
14
|
/**
|
|
15
15
|
* A JSON object node. `undefined` is admitted as a property value (not a
|
|
16
16
|
* `JsonValue`) so in-memory documents can be built field-by-field from
|
|
17
|
-
* optional inputs
|
|
17
|
+
* optional inputs. `JSON.stringify` drops such properties on write, exactly
|
|
18
18
|
* like an absent key.
|
|
19
19
|
*/
|
|
20
20
|
export interface JsonObject {
|
package/dist/src/types/json.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Domain types for raw JSON documents (fireforge.json, furnace.json).
|
|
4
4
|
*
|
|
5
|
-
* FireForge
|
|
6
|
-
*
|
|
5
|
+
* FireForge reads and writes some documents in their raw, unvalidated
|
|
6
|
+
* form. For example, `fireforge config --force` round-trips keys that
|
|
7
7
|
* the validated `FireForgeConfig` schema would strip. These types give that
|
|
8
8
|
* pipeline a concrete value contract: every value is JSON data, never a
|
|
9
9
|
* function, class instance, symbol, or other non-serializable runtime value.
|
|
@@ -23,9 +23,9 @@ export interface TypecheckIssue {
|
|
|
23
23
|
/** Raw TypeScript diagnostic code (e.g. 2322 for a type mismatch). */
|
|
24
24
|
code: number;
|
|
25
25
|
/**
|
|
26
|
-
* Severity bucket
|
|
27
|
-
*
|
|
28
|
-
* has only two visible levels.
|
|
26
|
+
* Severity bucket. TS also reports `Suggestion` and `Message`
|
|
27
|
+
* categories, but `runTypecheck` collapses both into `'warning'` so
|
|
28
|
+
* the CLI has only two visible levels.
|
|
29
29
|
*/
|
|
30
30
|
category: 'error' | 'warning';
|
|
31
31
|
/** Human-readable message text (already flattened from chains). */
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* A failure description, or a thunk producing one.
|
|
3
3
|
*
|
|
4
4
|
* The thunk form exists so a hot call site pays nothing on the passing
|
|
5
|
-
* path
|
|
5
|
+
* path: `assert(ok, () => \`bad state: ${JSON.stringify(x)}\`)` builds
|
|
6
6
|
* the string only when the assertion actually fails, where a plain
|
|
7
7
|
* template literal would build it on every call.
|
|
8
8
|
*/
|
package/dist/src/utils/assert.js
CHANGED
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Runtime assertions for FireForge's own internal invariants.
|
|
4
4
|
*
|
|
5
|
-
* These check state that FireForge itself established
|
|
5
|
+
* These check state that FireForge itself established: a journal was
|
|
6
6
|
* registered before the first mutation, a lock is held before a write,
|
|
7
|
-
* manifest ordering is contiguous after a renumber. They are
|
|
8
|
-
* validation
|
|
7
|
+
* manifest ordering is contiguous after a renumber. They are not input
|
|
8
|
+
* validation. Anything derived from user input, the filesystem, or a
|
|
9
9
|
* subprocess belongs in a typed error from `src/errors/` with a
|
|
10
10
|
* `userMessage` that tells the operator what to do. An assertion failure
|
|
11
|
-
* says the opposite
|
|
12
|
-
*
|
|
11
|
+
* says the opposite: nothing the operator could have done would have
|
|
12
|
+
* prevented it.
|
|
13
13
|
*
|
|
14
14
|
* Every check routes through a helper here rather than being open-coded
|
|
15
|
-
* as `if (!condition) throw`.
|
|
15
|
+
* as `if (!condition) throw`. An inline throw adds a
|
|
16
16
|
* permanently-uncovered branch to every function it appears in, and the
|
|
17
17
|
* per-module coverage floors in `scripts/check-coverage-thresholds.mjs`
|
|
18
18
|
* would pay for it in ~40 places. Routed through a call, the branch lives
|
|
@@ -3,7 +3,7 @@ interface BuildIdentity {
|
|
|
3
3
|
shortCommit: string;
|
|
4
4
|
dirty: boolean;
|
|
5
5
|
/**
|
|
6
|
-
* Content hash of the uncommitted diff, present only for a
|
|
6
|
+
* Content hash of the uncommitted diff, present only for a dirty installed
|
|
7
7
|
* build. Two packs from the same HEAD with different uncommitted content
|
|
8
8
|
* share `shortCommit` and the `.dirty` marker, so without this they report
|
|
9
9
|
* byte-identical `--version` strings and a report against
|
|
@@ -13,15 +13,15 @@ interface BuildIdentity {
|
|
|
13
13
|
*/
|
|
14
14
|
dirtyHash?: string;
|
|
15
15
|
}
|
|
16
|
-
/** @internal Reads the stamped dist/build-info.json
|
|
16
|
+
/** @internal Reads the stamped dist/build-info.json. Null when absent/invalid. */
|
|
17
17
|
export declare function readBuildInfoFile(packageRoot: string): BuildIdentity | null;
|
|
18
18
|
type GitRunner = (args: string[]) => string;
|
|
19
|
-
/** @internal Live git identity of the checkout
|
|
19
|
+
/** @internal Live git identity of the checkout. Null when git is unusable. */
|
|
20
20
|
export declare function readGitBuildIdentity(runGit?: GitRunner): BuildIdentity | null;
|
|
21
21
|
/**
|
|
22
|
-
* @internal Formats `<version>+g<sha>[.dirty[.<hash>]]
|
|
22
|
+
* @internal Formats `<version>+g<sha>[.dirty[.<hash>]]`. Plain version on
|
|
23
23
|
* null identity. The trailing content hash appears only for a dirty
|
|
24
|
-
*
|
|
24
|
+
* installed build, where `dist/build-info.json` already carries it. Every
|
|
25
25
|
* segment stays valid semver build metadata (dot-separated alphanumerics).
|
|
26
26
|
*/
|
|
27
27
|
export declare function formatVersionWithIdentity(version: string, identity: BuildIdentity | null): string;
|
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
* fingerprinting tarballs by sha256 to know which build a claim was verified
|
|
7
7
|
* against. `--version` reports `<semver>+g<short-sha>[.dirty[.<content-hash>]]`:
|
|
8
8
|
*
|
|
9
|
-
* - In a git checkout (dev runs via tsx), identity comes from live git
|
|
9
|
+
* - In a git checkout (dev runs via tsx), identity comes from live git, so a
|
|
10
10
|
* stale `dist/build-info.json` from an old build must never win.
|
|
11
11
|
* - In an installed package, it comes from `dist/build-info.json`, stamped
|
|
12
12
|
* by scripts/generate-build-info.mjs at build/pack time.
|
|
13
13
|
* - When neither yields an identity, `--version` degrades to the plain
|
|
14
14
|
* semver. Reading identity must never throw.
|
|
15
15
|
*
|
|
16
|
-
*
|
|
16
|
+
* Not wired into the per-patch lint cache key: identity would
|
|
17
17
|
* churn the cache on every commit at the same semver for no correctness gain
|
|
18
18
|
* (`getPackageVersion` stays the cache input).
|
|
19
19
|
*/
|
|
@@ -22,7 +22,7 @@ import { existsSync, readFileSync } from 'node:fs';
|
|
|
22
22
|
import { join } from 'node:path';
|
|
23
23
|
import { getPackageRoot, getPackageVersion } from './package-root.js';
|
|
24
24
|
import { isObject } from './validation.js';
|
|
25
|
-
/** @internal Reads the stamped dist/build-info.json
|
|
25
|
+
/** @internal Reads the stamped dist/build-info.json. Null when absent/invalid. */
|
|
26
26
|
export function readBuildInfoFile(packageRoot) {
|
|
27
27
|
try {
|
|
28
28
|
const raw = readFileSync(join(packageRoot, 'dist', 'build-info.json'), 'utf-8');
|
|
@@ -49,7 +49,7 @@ const defaultGitRunner = (args) => execFileSync('git', args, {
|
|
|
49
49
|
encoding: 'utf-8',
|
|
50
50
|
stdio: ['ignore', 'pipe', 'ignore'],
|
|
51
51
|
});
|
|
52
|
-
/** @internal Live git identity of the checkout
|
|
52
|
+
/** @internal Live git identity of the checkout. Null when git is unusable. */
|
|
53
53
|
export function readGitBuildIdentity(runGit = defaultGitRunner) {
|
|
54
54
|
try {
|
|
55
55
|
const commit = runGit(['rev-parse', 'HEAD']).trim();
|
|
@@ -80,9 +80,9 @@ function getBuildIdentity() {
|
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
83
|
-
* @internal Formats `<version>+g<sha>[.dirty[.<hash>]]
|
|
83
|
+
* @internal Formats `<version>+g<sha>[.dirty[.<hash>]]`. Plain version on
|
|
84
84
|
* null identity. The trailing content hash appears only for a dirty
|
|
85
|
-
*
|
|
85
|
+
* installed build, where `dist/build-info.json` already carries it. Every
|
|
86
86
|
* segment stays valid semver build metadata (dot-separated alphanumerics).
|
|
87
87
|
*/
|
|
88
88
|
export function formatVersionWithIdentity(version, identity) {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Environment construction for spawned children.
|
|
3
3
|
*
|
|
4
4
|
* Its own module rather than a helper inside `process.ts` only because that
|
|
5
|
-
* file sits on a 500-line budget
|
|
5
|
+
* file sits on a 500-line budget. The logic belongs to the exec layer.
|
|
6
6
|
*/
|
|
7
7
|
/** The `env` / `envUnset` slice of exec options this module needs. */
|
|
8
8
|
interface ChildEnvOptions {
|
|
@@ -15,13 +15,13 @@ interface ChildEnvOptions {
|
|
|
15
15
|
* The child's environment: `process.env`, with `env` merged over it, then
|
|
16
16
|
* every `envUnset` key removed.
|
|
17
17
|
*
|
|
18
|
-
* One helper rather than five inline spreads
|
|
18
|
+
* One helper rather than five inline spreads: the removal step is easy to
|
|
19
19
|
* add at four of the five spawn sites and forget at the fifth, which would
|
|
20
20
|
* make the option silently inert exactly where it was not tested.
|
|
21
21
|
*
|
|
22
|
-
* Removal is a real removal
|
|
23
|
-
* `is_running_under_coding_agent()` reads `CLAUDECODE` for its
|
|
24
|
-
* an empty value would not unset it. `Reflect.deleteProperty` rather than
|
|
22
|
+
* Removal is a real removal rather than an assignment to `''`: mozbuild's
|
|
23
|
+
* `is_running_under_coding_agent()` reads `CLAUDECODE` only for its
|
|
24
|
+
* presence, so an empty value would not unset it. `Reflect.deleteProperty` rather than
|
|
25
25
|
* `delete obj[key]` because the key is computed.
|
|
26
26
|
*
|
|
27
27
|
* @param options - Options carrying `env` / `envUnset`
|
|
@@ -3,19 +3,19 @@
|
|
|
3
3
|
* Environment construction for spawned children.
|
|
4
4
|
*
|
|
5
5
|
* Its own module rather than a helper inside `process.ts` only because that
|
|
6
|
-
* file sits on a 500-line budget
|
|
6
|
+
* file sits on a 500-line budget. The logic belongs to the exec layer.
|
|
7
7
|
*/
|
|
8
8
|
/**
|
|
9
9
|
* The child's environment: `process.env`, with `env` merged over it, then
|
|
10
10
|
* every `envUnset` key removed.
|
|
11
11
|
*
|
|
12
|
-
* One helper rather than five inline spreads
|
|
12
|
+
* One helper rather than five inline spreads: the removal step is easy to
|
|
13
13
|
* add at four of the five spawn sites and forget at the fifth, which would
|
|
14
14
|
* make the option silently inert exactly where it was not tested.
|
|
15
15
|
*
|
|
16
|
-
* Removal is a real removal
|
|
17
|
-
* `is_running_under_coding_agent()` reads `CLAUDECODE` for its
|
|
18
|
-
* an empty value would not unset it. `Reflect.deleteProperty` rather than
|
|
16
|
+
* Removal is a real removal rather than an assignment to `''`: mozbuild's
|
|
17
|
+
* `is_running_under_coding_agent()` reads `CLAUDECODE` only for its
|
|
18
|
+
* presence, so an empty value would not unset it. `Reflect.deleteProperty` rather than
|
|
19
19
|
* `delete obj[key]` because the key is computed.
|
|
20
20
|
*
|
|
21
21
|
* @param options - Options carrying `env` / `envUnset`
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Bounded-concurrency helpers shared by commands that fan out per-file IO
|
|
3
3
|
* (status classification, import's unmanaged-dirty guard, re-export scans,
|
|
4
|
-
* the dry-run purity guard). Kept
|
|
5
|
-
*
|
|
4
|
+
* the dry-run purity guard). Kept tiny: one order-preserving mapper, no
|
|
5
|
+
* queues, no cancellation.
|
|
6
6
|
*/
|
|
7
7
|
/** Maps items with at most `limit` in-flight promises. Preserves order. */
|
|
8
8
|
export declare function mapWithConcurrency<T, R>(items: readonly T[], limit: number, fn: (item: T, index: number) => Promise<R>): Promise<R[]>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Bounded-concurrency helpers shared by commands that fan out per-file IO
|
|
3
3
|
* (status classification, import's unmanaged-dirty guard, re-export scans,
|
|
4
|
-
* the dry-run purity guard). Kept
|
|
5
|
-
*
|
|
4
|
+
* the dry-run purity guard). Kept tiny: one order-preserving mapper, no
|
|
5
|
+
* queues, no cancellation.
|
|
6
6
|
*/
|
|
7
7
|
/** Maps items with at most `limit` in-flight promises. Preserves order. */
|
|
8
8
|
export async function mapWithConcurrency(items, limit, fn) {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* `package` each hand-rolled the same minute/second split, so a change to
|
|
7
7
|
* the format silently applied to some progress lines and not others.
|
|
8
8
|
*
|
|
9
|
-
* @param ms - Duration in milliseconds
|
|
9
|
+
* @param ms - Duration in milliseconds. Negative input is clamped to zero.
|
|
10
10
|
* @returns The duration as `Xm Ys`, or `Ys` when under one minute.
|
|
11
11
|
*/
|
|
12
12
|
function formatElapsed(ms) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Throwable normalisation primitives.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* dependency graph
|
|
6
|
-
* `bin/` reach it
|
|
4
|
+
* This module must import nothing. It sits at the very bottom of the
|
|
5
|
+
* dependency graph (81 modules across `core/`, `commands/`, `utils/` and
|
|
6
|
+
* `bin/` reach it), so it is the one place a shared helper can live and be
|
|
7
7
|
* provably cycle-immune. Adding an import here makes that whole subtree
|
|
8
8
|
* reachable from every util, and any future `src/errors/*` module wanting a
|
|
9
9
|
* util back (`errors/git.ts` already carries a mirrored index-lock heuristic
|
|
@@ -17,18 +17,18 @@ export declare function toError(error: unknown): Error;
|
|
|
17
17
|
* Extracts a Node errno string (`ENOENT`, `EACCES`, `EPERM`, …) from an
|
|
18
18
|
* unknown throwable, or `undefined` when the value carries no string `code`.
|
|
19
19
|
*
|
|
20
|
-
* The check is
|
|
21
|
-
*
|
|
22
|
-
*
|
|
20
|
+
* The check is structural rather than `error instanceof Error`: a plain
|
|
21
|
+
* object carrying `.code` (exactly the shape {@link toError} exists to
|
|
22
|
+
* normalise) reaches errno consumers through rejected promises and
|
|
23
23
|
* cross-realm throws, and an `instanceof Error` gate misclassifies it as "no
|
|
24
24
|
* code".
|
|
25
25
|
*/
|
|
26
26
|
export declare function getNodeErrorCode(error: unknown): string | undefined;
|
|
27
27
|
/**
|
|
28
28
|
* Checks whether a process with the given PID is still running, using
|
|
29
|
-
* `kill(pid, 0)
|
|
29
|
+
* `kill(pid, 0)`: no signal is sent, only the existence check is performed.
|
|
30
30
|
*
|
|
31
|
-
* Only `ESRCH` ("no such process") means dead.
|
|
31
|
+
* Only `ESRCH` ("no such process") means dead. `EPERM` means alive: the
|
|
32
32
|
* process exists but is owned by another uid, which happens routinely with
|
|
33
33
|
* root-owned builds, `sudo`, shared CI runners and container UID mismatches.
|
|
34
34
|
* Reading EPERM as dead in a predicate that gates a recursive delete removes
|
package/dist/src/utils/errors.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Throwable normalisation primitives.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
* dependency graph
|
|
7
|
-
* `bin/` reach it
|
|
5
|
+
* This module must import nothing. It sits at the very bottom of the
|
|
6
|
+
* dependency graph (81 modules across `core/`, `commands/`, `utils/` and
|
|
7
|
+
* `bin/` reach it), so it is the one place a shared helper can live and be
|
|
8
8
|
* provably cycle-immune. Adding an import here makes that whole subtree
|
|
9
9
|
* reachable from every util, and any future `src/errors/*` module wanting a
|
|
10
10
|
* util back (`errors/git.ts` already carries a mirrored index-lock heuristic
|
|
@@ -29,9 +29,9 @@ export function toError(error) {
|
|
|
29
29
|
* Extracts a Node errno string (`ENOENT`, `EACCES`, `EPERM`, …) from an
|
|
30
30
|
* unknown throwable, or `undefined` when the value carries no string `code`.
|
|
31
31
|
*
|
|
32
|
-
* The check is
|
|
33
|
-
*
|
|
34
|
-
*
|
|
32
|
+
* The check is structural rather than `error instanceof Error`: a plain
|
|
33
|
+
* object carrying `.code` (exactly the shape {@link toError} exists to
|
|
34
|
+
* normalise) reaches errno consumers through rejected promises and
|
|
35
35
|
* cross-realm throws, and an `instanceof Error` gate misclassifies it as "no
|
|
36
36
|
* code".
|
|
37
37
|
*/
|
|
@@ -46,9 +46,9 @@ export function getNodeErrorCode(error) {
|
|
|
46
46
|
}
|
|
47
47
|
/**
|
|
48
48
|
* Checks whether a process with the given PID is still running, using
|
|
49
|
-
* `kill(pid, 0)
|
|
49
|
+
* `kill(pid, 0)`: no signal is sent, only the existence check is performed.
|
|
50
50
|
*
|
|
51
|
-
* Only `ESRCH` ("no such process") means dead.
|
|
51
|
+
* Only `ESRCH` ("no such process") means dead. `EPERM` means alive: the
|
|
52
52
|
* process exists but is owned by another uid, which happens routinely with
|
|
53
53
|
* root-owned builds, `sudo`, shared CI runners and container UID mismatches.
|
|
54
54
|
* Reading EPERM as dead in a predicate that gates a recursive delete removes
|
package/dist/src/utils/fs.d.ts
CHANGED
|
@@ -95,7 +95,7 @@ export declare function copyDir(src: string, dest: string): Promise<void>;
|
|
|
95
95
|
* artefacts out of their listings without racing the rename.
|
|
96
96
|
*
|
|
97
97
|
* Intentionally anchored so a legitimately-named backup file like
|
|
98
|
-
* `.notes.fireforge-tmp-backup` (no PID+UUID continuation) is
|
|
98
|
+
* `.notes.fireforge-tmp-backup` (no PID+UUID continuation) is not treated
|
|
99
99
|
* as one of our temps. The full shape is `.<filename>.fireforge-tmp-<pid>-<uuid>`.
|
|
100
100
|
*/
|
|
101
101
|
export declare const FIREFORGE_TMP_PATH_PATTERN: RegExp;
|