@hominis/fireforge 0.35.0 → 0.37.0
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 +42 -0
- package/README.md +34 -9
- package/dist/bin/fireforge.js +21 -6
- package/dist/src/cli.js +22 -5
- package/dist/src/commands/bootstrap-checks.js +0 -1
- package/dist/src/commands/bootstrap.d.ts +2 -1
- package/dist/src/commands/bootstrap.js +16 -7
- package/dist/src/commands/build.js +5 -4
- package/dist/src/commands/config.js +30 -10
- package/dist/src/commands/discard.js +18 -3
- package/dist/src/commands/doctor/post-rebase-audit.js +0 -1
- package/dist/src/commands/doctor-check-core.js +0 -1
- package/dist/src/commands/doctor-external-toolchains.d.ts +3 -0
- package/dist/src/commands/doctor-external-toolchains.js +54 -0
- package/dist/src/commands/doctor-furnace-jar.js +0 -1
- package/dist/src/commands/doctor-furnace-manifest-sync.js +0 -1
- package/dist/src/commands/doctor-furnace.js +2 -2
- package/dist/src/commands/doctor-orphaned-harness.d.ts +52 -0
- package/dist/src/commands/doctor-orphaned-harness.js +132 -0
- package/dist/src/commands/doctor-working-tree.js +0 -1
- package/dist/src/commands/doctor.js +6 -1
- package/dist/src/commands/download.js +28 -13
- package/dist/src/commands/export-all.js +5 -3
- package/dist/src/commands/export-flow.js +12 -7
- package/dist/src/commands/export-placement-gate.js +0 -1
- package/dist/src/commands/export-placement-policy.js +0 -1
- package/dist/src/commands/export-shared.d.ts +5 -1
- package/dist/src/commands/export-shared.js +18 -6
- package/dist/src/commands/export.js +22 -10
- package/dist/src/commands/furnace/apply.js +22 -6
- package/dist/src/commands/furnace/chrome-doc-remove.js +0 -1
- package/dist/src/commands/furnace/chrome-doc-templates.js +0 -1
- package/dist/src/commands/furnace/chrome-doc-tests.js +0 -1
- package/dist/src/commands/furnace/chrome-doc.js +0 -1
- package/dist/src/commands/furnace/create-browser-test.js +0 -1
- package/dist/src/commands/furnace/create-dry-run.js +0 -1
- package/dist/src/commands/furnace/create-features.js +0 -1
- package/dist/src/commands/furnace/create-mochikit.js +0 -1
- package/dist/src/commands/furnace/create-readback.js +0 -1
- package/dist/src/commands/furnace/create-templates.js +0 -1
- package/dist/src/commands/furnace/create-validation.js +0 -1
- package/dist/src/commands/furnace/create-xpcshell.js +0 -1
- package/dist/src/commands/furnace/create.js +0 -1
- package/dist/src/commands/furnace/deploy.js +7 -83
- package/dist/src/commands/furnace/diff.js +0 -1
- package/dist/src/commands/furnace/index.js +59 -25
- package/dist/src/commands/furnace/init.js +0 -1
- package/dist/src/commands/furnace/list.js +0 -1
- package/dist/src/commands/furnace/override.js +0 -1
- package/dist/src/commands/furnace/preview.js +3 -3
- package/dist/src/commands/furnace/refresh.js +0 -1
- package/dist/src/commands/furnace/remove-state.d.ts +15 -0
- package/dist/src/commands/furnace/remove-state.js +47 -1
- package/dist/src/commands/furnace/remove.js +3 -9
- package/dist/src/commands/furnace/rename-browser-test.js +1 -5
- package/dist/src/commands/furnace/rename-helpers.d.ts +6 -0
- package/dist/src/commands/furnace/rename-helpers.js +30 -1
- package/dist/src/commands/furnace/rename-xpcshell.js +7 -6
- package/dist/src/commands/furnace/rename.js +15 -36
- package/dist/src/commands/furnace/scan.js +0 -1
- package/dist/src/commands/furnace/status.js +0 -1
- package/dist/src/commands/furnace/sync.js +76 -4
- package/dist/src/commands/furnace/validate.js +0 -1
- package/dist/src/commands/furnace/validation-output.js +0 -1
- package/dist/src/commands/import.js +35 -9
- package/dist/src/commands/lint-per-patch.js +19 -7
- package/dist/src/commands/lint.js +13 -3
- package/dist/src/commands/manifest.js +1 -2
- package/dist/src/commands/package.js +2 -1
- package/dist/src/commands/patch/compact.js +1 -1
- package/dist/src/commands/patch/delete.js +1 -1
- package/dist/src/commands/patch/index.js +1 -1
- package/dist/src/commands/patch/lint-ignore.js +21 -6
- package/dist/src/commands/patch/move-files.js +1 -1
- package/dist/src/commands/patch/patch-context.js +0 -1
- package/dist/src/commands/patch/rename.js +4 -4
- package/dist/src/commands/patch/reorder.js +3 -4
- package/dist/src/commands/patch/split-plan.js +2 -1
- package/dist/src/commands/patch/split.js +4 -4
- package/dist/src/commands/patch/staged-dependency.d.ts +1 -1
- package/dist/src/commands/patch/staged-dependency.js +114 -52
- package/dist/src/commands/patch/tier.js +18 -5
- package/dist/src/commands/re-export-bulk-scan.js +0 -1
- package/dist/src/commands/re-export-files.js +5 -1
- package/dist/src/commands/re-export-options.js +0 -1
- package/dist/src/commands/re-export-scan.js +0 -1
- package/dist/src/commands/re-export.js +14 -4
- package/dist/src/commands/rebase/abort.js +2 -9
- package/dist/src/commands/rebase/confirm.js +0 -1
- package/dist/src/commands/rebase/conflict-summary.js +0 -1
- package/dist/src/commands/rebase/continue.js +0 -1
- package/dist/src/commands/rebase/index.d.ts +1 -1
- package/dist/src/commands/rebase/index.js +10 -15
- package/dist/src/commands/rebase/patch-loop.js +38 -7
- package/dist/src/commands/rebase/summary.js +2 -3
- package/dist/src/commands/rebase.js +0 -1
- package/dist/src/commands/register.js +1 -1
- package/dist/src/commands/reset.js +16 -9
- package/dist/src/commands/resolve.js +2 -2
- package/dist/src/commands/run.js +4 -4
- package/dist/src/commands/setup-support.js +0 -1
- package/dist/src/commands/setup.js +1 -2
- package/dist/src/commands/source.js +1 -2
- package/dist/src/commands/status-output.js +1 -12
- package/dist/src/commands/status.js +147 -133
- package/dist/src/commands/test-appdir.js +0 -1
- package/dist/src/commands/test-diagnose.js +38 -3
- package/dist/src/commands/test-modes.d.ts +15 -0
- package/dist/src/commands/test-modes.js +61 -0
- package/dist/src/commands/test-register.d.ts +4 -0
- package/dist/src/commands/test-register.js +64 -0
- package/dist/src/commands/test-run.d.ts +23 -7
- package/dist/src/commands/test-run.js +15 -14
- package/dist/src/commands/test.d.ts +0 -4
- package/dist/src/commands/test.js +147 -96
- package/dist/src/commands/token-coverage.js +0 -1
- package/dist/src/commands/token.js +1 -2
- package/dist/src/commands/typecheck.js +1 -1
- package/dist/src/commands/verify.js +3 -9
- package/dist/src/commands/watch.js +5 -1
- package/dist/src/commands/wire.js +1 -1
- package/dist/src/core/ast-utils.js +0 -1
- package/dist/src/core/brand-validation.js +0 -1
- package/dist/src/core/branding.js +0 -1
- package/dist/src/core/browser-wire.js +0 -1
- package/dist/src/core/build-audit-platform.js +0 -1
- package/dist/src/core/build-audit-registration.js +0 -1
- package/dist/src/core/build-audit-resolve.js +0 -1
- package/dist/src/core/build-audit-transforms.js +0 -1
- package/dist/src/core/build-audit.js +0 -1
- package/dist/src/core/build-baseline-types.d.ts +24 -0
- package/dist/src/core/build-baseline-types.js +0 -1
- package/dist/src/core/build-baseline.d.ts +5 -2
- package/dist/src/core/build-baseline.js +5 -2
- package/dist/src/core/build-prepare.js +2 -2
- package/dist/src/core/config-mutate.js +0 -1
- package/dist/src/core/config-paths.d.ts +2 -2
- package/dist/src/core/config-paths.js +6 -1
- package/dist/src/core/config-state.js +0 -1
- package/dist/src/core/config-validate-patch-policy.js +0 -1
- package/dist/src/core/config-validate-test-toolchains.d.ts +8 -0
- package/dist/src/core/config-validate-test-toolchains.js +105 -0
- package/dist/src/core/config-validate.js +3 -1
- package/dist/src/core/config.js +0 -1
- package/dist/src/core/destructive.js +0 -1
- package/dist/src/core/diff-hunks.js +13 -7
- package/dist/src/core/engine-changes.js +0 -1
- package/dist/src/core/engine-session-lock.d.ts +12 -0
- package/dist/src/core/engine-session-lock.js +45 -0
- package/dist/src/core/file-lock.d.ts +8 -0
- package/dist/src/core/file-lock.js +157 -48
- package/dist/src/core/firefox-archive.d.ts +4 -0
- package/dist/src/core/firefox-archive.js +6 -1
- package/dist/src/core/firefox-cache.js +60 -4
- package/dist/src/core/firefox-download.js +0 -1
- package/dist/src/core/firefox-extract.js +75 -16
- package/dist/src/core/firefox-ignorefile.js +0 -1
- package/dist/src/core/firefox.d.ts +12 -0
- package/dist/src/core/firefox.js +64 -2
- package/dist/src/core/furnace-apply-dry-run.js +0 -1
- package/dist/src/core/furnace-apply-ftl.d.ts +7 -3
- package/dist/src/core/furnace-apply-ftl.js +10 -5
- package/dist/src/core/furnace-apply-helpers.js +0 -1
- package/dist/src/core/furnace-apply-output.js +2 -2
- package/dist/src/core/furnace-apply.d.ts +7 -1
- package/dist/src/core/furnace-apply.js +47 -13
- package/dist/src/core/furnace-checksum-utils.js +0 -1
- package/dist/src/core/furnace-config-array-utils.js +0 -1
- package/dist/src/core/furnace-config-custom.js +10 -1
- package/dist/src/core/furnace-config-order.js +0 -1
- package/dist/src/core/furnace-config-tokens.js +0 -1
- package/dist/src/core/furnace-config-validate.js +0 -1
- package/dist/src/core/furnace-config.d.ts +11 -0
- package/dist/src/core/furnace-config.js +37 -1
- package/dist/src/core/furnace-constants.js +0 -1
- package/dist/src/core/furnace-css-fragments.js +0 -1
- package/dist/src/core/furnace-graph-utils.js +0 -1
- package/dist/src/core/furnace-jsconfig.d.ts +2 -3
- package/dist/src/core/furnace-jsconfig.js +25 -18
- package/dist/src/core/furnace-marker.js +0 -1
- package/dist/src/core/furnace-operation.js +0 -1
- package/dist/src/core/furnace-refresh.js +0 -1
- package/dist/src/core/furnace-registration-ast.d.ts +14 -0
- package/dist/src/core/furnace-registration-ast.js +1 -2
- package/dist/src/core/furnace-registration-remove.js +0 -1
- package/dist/src/core/furnace-registration-validate.js +1 -5
- package/dist/src/core/furnace-registration.js +0 -1
- package/dist/src/core/furnace-rollback.js +0 -1
- package/dist/src/core/furnace-scanner.js +0 -1
- package/dist/src/core/furnace-stale-export.d.ts +59 -0
- package/dist/src/core/furnace-stale-export.js +123 -0
- package/dist/src/core/furnace-staleness.js +0 -1
- package/dist/src/core/furnace-state-persist.d.ts +72 -0
- package/dist/src/core/furnace-state-persist.js +118 -0
- package/dist/src/core/furnace-step-errors.d.ts +23 -0
- package/dist/src/core/furnace-step-errors.js +25 -0
- package/dist/src/core/furnace-stories.js +0 -1
- package/dist/src/core/furnace-validate-accessibility.js +0 -1
- package/dist/src/core/furnace-validate-checks.js +0 -1
- package/dist/src/core/furnace-validate-compatibility.js +9 -3
- package/dist/src/core/furnace-validate-helpers.js +0 -1
- package/dist/src/core/furnace-validate-registration.js +7 -7
- package/dist/src/core/furnace-validate-structure.d.ts +8 -0
- package/dist/src/core/furnace-validate-structure.js +14 -4
- package/dist/src/core/furnace-validate.js +0 -1
- package/dist/src/core/furnace-version-drift.d.ts +6 -3
- package/dist/src/core/furnace-version-drift.js +6 -4
- package/dist/src/core/git-base.js +0 -1
- package/dist/src/core/git-diff.js +0 -1
- package/dist/src/core/git-file-ops.js +0 -1
- package/dist/src/core/git-status.d.ts +13 -0
- package/dist/src/core/git-status.js +32 -2
- package/dist/src/core/git.d.ts +10 -1
- package/dist/src/core/git.js +63 -6
- package/dist/src/core/license-headers.js +0 -1
- package/dist/src/core/lint-cache.js +0 -1
- package/dist/src/core/lint-projection.js +0 -1
- package/dist/src/core/mach-build-artifacts.js +0 -1
- package/dist/src/core/mach-error-hints.js +0 -1
- package/dist/src/core/mach-known-noise-filter.d.ts +60 -0
- package/dist/src/core/mach-known-noise-filter.js +193 -0
- package/dist/src/core/mach-mozconfig.js +0 -1
- package/dist/src/core/mach-python.js +0 -1
- package/dist/src/core/mach-resource-shim.js +0 -1
- package/dist/src/core/mach.d.ts +8 -0
- package/dist/src/core/mach.js +36 -4
- package/dist/src/core/manifest-helpers.js +0 -1
- package/dist/src/core/manifest-register.js +0 -1
- package/dist/src/core/manifest-rules.js +0 -1
- package/dist/src/core/manifest-tokenizers.js +0 -1
- package/dist/src/core/marionette-port.d.ts +8 -0
- package/dist/src/core/marionette-port.js +34 -3
- package/dist/src/core/marionette-preflight.js +0 -1
- package/dist/src/core/markdown-table.js +0 -1
- package/dist/src/core/ownership-table.js +2 -9
- package/dist/src/core/parser-fallback.js +0 -1
- package/dist/src/core/patch-apply-fuzz.d.ts +27 -9
- package/dist/src/core/patch-apply-fuzz.js +71 -34
- package/dist/src/core/patch-apply.d.ts +30 -0
- package/dist/src/core/patch-apply.js +101 -18
- package/dist/src/core/patch-artifact-normalize.d.ts +18 -5
- package/dist/src/core/patch-artifact-normalize.js +19 -15
- package/dist/src/core/patch-export-coverage.js +0 -1
- package/dist/src/core/patch-export-metadata.js +0 -1
- package/dist/src/core/patch-export-update.js +2 -3
- package/dist/src/core/patch-export.d.ts +2 -6
- package/dist/src/core/patch-export.js +24 -48
- package/dist/src/core/patch-files.js +0 -1
- package/dist/src/core/patch-identifier-suggest.js +0 -1
- package/dist/src/core/patch-lint-checkjs.js +0 -1
- package/dist/src/core/patch-lint-chrome-jsdoc.js +0 -1
- package/dist/src/core/patch-lint-cross.js +80 -3
- package/dist/src/core/patch-lint-css.js +0 -1
- package/dist/src/core/patch-lint-diff-tag.js +0 -1
- package/dist/src/core/patch-lint-diff.d.ts +2 -1
- package/dist/src/core/patch-lint-diff.js +17 -32
- package/dist/src/core/patch-lint-imports.js +0 -1
- package/dist/src/core/patch-lint-jsdoc.js +0 -1
- package/dist/src/core/patch-lint-observer.js +0 -1
- package/dist/src/core/patch-lint-ownership.js +0 -1
- package/dist/src/core/patch-lint-reexports.js +0 -1
- package/dist/src/core/patch-lint.d.ts +37 -2
- package/dist/src/core/patch-lint.js +47 -34
- package/dist/src/core/patch-lock.js +0 -1
- package/dist/src/core/patch-manifest-consistency.js +9 -1
- package/dist/src/core/patch-manifest-io.d.ts +19 -2
- package/dist/src/core/patch-manifest-io.js +57 -21
- package/dist/src/core/patch-manifest-query.js +18 -10
- package/dist/src/core/patch-manifest-resolve.js +0 -1
- package/dist/src/core/patch-manifest-validate.js +24 -1
- package/dist/src/core/patch-manifest.d.ts +1 -1
- package/dist/src/core/patch-manifest.js +1 -2
- package/dist/src/core/patch-parse.d.ts +59 -0
- package/dist/src/core/patch-parse.js +209 -92
- package/dist/src/core/patch-policy.js +0 -1
- package/dist/src/core/patch-registration-refs.js +16 -26
- package/dist/src/core/patch-source-metadata.js +0 -1
- package/dist/src/core/patch-transform.d.ts +4 -0
- package/dist/src/core/patch-transform.js +30 -38
- package/dist/src/core/rebase-session.js +0 -1
- package/dist/src/core/register-browser-content.js +0 -1
- package/dist/src/core/register-module.js +0 -1
- package/dist/src/core/register-result.js +0 -1
- package/dist/src/core/register-scaffold.js +0 -1
- package/dist/src/core/register-shared-css.js +0 -1
- package/dist/src/core/register-test-manifest.js +0 -1
- package/dist/src/core/register-xpcshell-test.js +0 -1
- package/dist/src/core/shared-ftl.js +0 -1
- package/dist/src/core/signal-critical.js +0 -1
- package/dist/src/core/smoke-patterns.js +0 -1
- package/dist/src/core/state-file.js +0 -1
- package/dist/src/core/status-classify.d.ts +16 -0
- package/dist/src/core/status-classify.js +24 -16
- package/dist/src/core/test-harness-crash.d.ts +80 -7
- package/dist/src/core/test-harness-crash.js +251 -15
- package/dist/src/core/test-harness-output.js +0 -1
- package/dist/src/core/test-path-scope.d.ts +21 -13
- package/dist/src/core/test-path-scope.js +43 -28
- package/dist/src/core/test-stale-check.d.ts +29 -1
- package/dist/src/core/test-stale-check.js +59 -1
- package/dist/src/core/test-stale-symlink.js +0 -1
- package/dist/src/core/test-xpcshell-retry.js +0 -1
- package/dist/src/core/token-coverage.js +0 -1
- package/dist/src/core/token-dark-mode.js +0 -1
- package/dist/src/core/token-docs.js +0 -1
- package/dist/src/core/token-manager.js +0 -1
- package/dist/src/core/token-scaffold.js +0 -1
- package/dist/src/core/token-variant.js +0 -1
- package/dist/src/core/toolchain-preflight.d.ts +31 -10
- package/dist/src/core/toolchain-preflight.js +97 -36
- package/dist/src/core/typecheck-shim.js +13 -1
- package/dist/src/core/typecheck.js +0 -1
- package/dist/src/core/wire-destroy.js +0 -1
- package/dist/src/core/wire-dom-fragment.js +0 -1
- package/dist/src/core/wire-init.js +0 -1
- package/dist/src/core/wire-subscript.js +0 -1
- package/dist/src/core/wire-targets.js +0 -1
- package/dist/src/core/wire-utils.js +0 -1
- package/dist/src/core/xpcshell-appdir.js +1 -4
- package/dist/src/errors/base.d.ts +29 -0
- package/dist/src/errors/base.js +35 -1
- package/dist/src/errors/build.js +0 -1
- package/dist/src/errors/codes.d.ts +6 -0
- package/dist/src/errors/codes.js +6 -1
- package/dist/src/errors/config.js +0 -1
- package/dist/src/errors/download.js +0 -1
- package/dist/src/errors/furnace.d.ts +11 -1
- package/dist/src/errors/furnace.js +6 -5
- package/dist/src/errors/git.js +0 -1
- package/dist/src/errors/patch.d.ts +17 -0
- package/dist/src/errors/patch.js +29 -1
- package/dist/src/errors/rebase.js +0 -1
- package/dist/src/errors/run.js +1 -1
- package/dist/src/index.js +0 -1
- package/dist/src/types/cli.js +0 -1
- package/dist/src/types/commands/index.d.ts +1 -1
- package/dist/src/types/commands/index.js +0 -1
- package/dist/src/types/commands/options.d.ts +40 -9
- package/dist/src/types/commands/options.js +0 -1
- package/dist/src/types/commands/patches.d.ts +37 -0
- package/dist/src/types/commands/patches.js +0 -1
- package/dist/src/types/commands/project.d.ts +11 -2
- package/dist/src/types/commands/project.js +0 -1
- package/dist/src/types/config.d.ts +32 -0
- package/dist/src/types/config.js +0 -1
- package/dist/src/types/furnace.d.ts +23 -0
- package/dist/src/types/furnace.js +0 -1
- package/dist/src/types/index.js +0 -1
- package/dist/src/types/typecheck.js +0 -1
- package/dist/src/utils/elapsed.js +0 -1
- package/dist/src/utils/errors.js +0 -1
- package/dist/src/utils/fs.js +37 -5
- package/dist/src/utils/logger.d.ts +7 -0
- package/dist/src/utils/logger.js +85 -3
- package/dist/src/utils/options.d.ts +15 -0
- package/dist/src/utils/options.js +25 -1
- package/dist/src/utils/package-root.js +11 -4
- package/dist/src/utils/parse.js +0 -1
- package/dist/src/utils/paths.js +0 -1
- package/dist/src/utils/platform.js +0 -1
- package/dist/src/utils/process-group.d.ts +33 -0
- package/dist/src/utils/process-group.js +161 -0
- package/dist/src/utils/process.d.ts +48 -4
- package/dist/src/utils/process.js +258 -59
- package/dist/src/utils/regex.d.ts +13 -3
- package/dist/src/utils/regex.js +53 -4
- package/dist/src/utils/validation.d.ts +0 -12
- package/dist/src/utils/validation.js +13 -26
- package/package.json +9 -8
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
import { readdir, stat } from 'node:fs/promises';
|
|
42
42
|
import { dirname, join, resolve, sep } from 'node:path';
|
|
43
43
|
import { pathExists, readJson, readText } from '../utils/fs.js';
|
|
44
|
+
import { escapeRegex } from '../utils/regex.js';
|
|
44
45
|
import { isObject, isString } from '../utils/validation.js';
|
|
45
46
|
/**
|
|
46
47
|
* `[DEFAULT]` section parser shaped to the narrow case we need: pull a
|
|
@@ -88,9 +89,6 @@ export function parseAppdirFromToml(tomlText, key) {
|
|
|
88
89
|
}
|
|
89
90
|
return undefined;
|
|
90
91
|
}
|
|
91
|
-
function escapeRegex(input) {
|
|
92
|
-
return input.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
93
|
-
}
|
|
94
92
|
function stripQuotes(raw) {
|
|
95
93
|
if (raw.length === 0)
|
|
96
94
|
return undefined;
|
|
@@ -305,4 +303,3 @@ export function operatorAlreadySetAppPath(extraArgs) {
|
|
|
305
303
|
}
|
|
306
304
|
return false;
|
|
307
305
|
}
|
|
308
|
-
//# sourceMappingURL=xpcshell-appdir.js.map
|
|
@@ -54,6 +54,35 @@ export declare class InvalidArgumentError extends FireForgeError {
|
|
|
54
54
|
constructor(message: string, argument?: string | undefined, cause?: Error);
|
|
55
55
|
get userMessage(): string;
|
|
56
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Error thrown when a spawned command exceeds its `timeout` option.
|
|
59
|
+
*
|
|
60
|
+
* Every `exec*` helper in `src/utils/process.ts` rejects with this type
|
|
61
|
+
* (instead of Node's bare `AbortError: The operation was aborted`) when the
|
|
62
|
+
* caller-supplied timeout fires. The bare AbortError bit an operator during
|
|
63
|
+
* the 2026-04-24 eval (see {@link GitIndexingTimeoutError} in errors/git.ts):
|
|
64
|
+
* an 854 s git indexing pass died with no command name, no elapsed time, and
|
|
65
|
+
* no hint that a timeout — not git — was responsible. The git path gained a
|
|
66
|
+
* site-local typed error then; this class extends the same courtesy to every
|
|
67
|
+
* other `timeout` caller.
|
|
68
|
+
*/
|
|
69
|
+
export declare class ExecTimeoutError extends FireForgeError {
|
|
70
|
+
/** Executable that was spawned (argv[0]). */
|
|
71
|
+
readonly command: string;
|
|
72
|
+
/** Arguments the executable was spawned with. */
|
|
73
|
+
readonly args: readonly string[];
|
|
74
|
+
/** Timeout that elapsed, in milliseconds. */
|
|
75
|
+
readonly timeoutMs: number;
|
|
76
|
+
readonly code: 1;
|
|
77
|
+
constructor(
|
|
78
|
+
/** Executable that was spawned (argv[0]). */
|
|
79
|
+
command: string,
|
|
80
|
+
/** Arguments the executable was spawned with. */
|
|
81
|
+
args: readonly string[],
|
|
82
|
+
/** Timeout that elapsed, in milliseconds. */
|
|
83
|
+
timeoutMs: number, cause?: unknown);
|
|
84
|
+
get userMessage(): string;
|
|
85
|
+
}
|
|
57
86
|
/**
|
|
58
87
|
* Error thrown when the user cancels an interactive prompt.
|
|
59
88
|
*/
|
package/dist/src/errors/base.js
CHANGED
|
@@ -78,6 +78,41 @@ export class InvalidArgumentError extends FireForgeError {
|
|
|
78
78
|
return msg;
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Error thrown when a spawned command exceeds its `timeout` option.
|
|
83
|
+
*
|
|
84
|
+
* Every `exec*` helper in `src/utils/process.ts` rejects with this type
|
|
85
|
+
* (instead of Node's bare `AbortError: The operation was aborted`) when the
|
|
86
|
+
* caller-supplied timeout fires. The bare AbortError bit an operator during
|
|
87
|
+
* the 2026-04-24 eval (see {@link GitIndexingTimeoutError} in errors/git.ts):
|
|
88
|
+
* an 854 s git indexing pass died with no command name, no elapsed time, and
|
|
89
|
+
* no hint that a timeout — not git — was responsible. The git path gained a
|
|
90
|
+
* site-local typed error then; this class extends the same courtesy to every
|
|
91
|
+
* other `timeout` caller.
|
|
92
|
+
*/
|
|
93
|
+
export class ExecTimeoutError extends FireForgeError {
|
|
94
|
+
command;
|
|
95
|
+
args;
|
|
96
|
+
timeoutMs;
|
|
97
|
+
code = ExitCode.GENERAL_ERROR;
|
|
98
|
+
constructor(
|
|
99
|
+
/** Executable that was spawned (argv[0]). */
|
|
100
|
+
command,
|
|
101
|
+
/** Arguments the executable was spawned with. */
|
|
102
|
+
args,
|
|
103
|
+
/** Timeout that elapsed, in milliseconds. */
|
|
104
|
+
timeoutMs, cause) {
|
|
105
|
+
super(`Command timed out after ${Math.round(timeoutMs / 1000)}s: ${[command, ...args].join(' ')}`, cause);
|
|
106
|
+
this.command = command;
|
|
107
|
+
this.args = args;
|
|
108
|
+
this.timeoutMs = timeoutMs;
|
|
109
|
+
}
|
|
110
|
+
get userMessage() {
|
|
111
|
+
return (`${this.message}\n\n` +
|
|
112
|
+
'The command was killed because it exceeded its time budget, not because it failed on its own. ' +
|
|
113
|
+
'If the host is just slow or loaded, re-running may succeed.');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
81
116
|
/**
|
|
82
117
|
* Error thrown when the user cancels an interactive prompt.
|
|
83
118
|
*/
|
|
@@ -108,4 +143,3 @@ export class CommandError extends Error {
|
|
|
108
143
|
this.name = 'CommandError';
|
|
109
144
|
}
|
|
110
145
|
}
|
|
111
|
-
//# sourceMappingURL=base.js.map
|
package/dist/src/errors/build.js
CHANGED
|
@@ -38,5 +38,11 @@ export declare const ExitCode: {
|
|
|
38
38
|
* missing profile, etc.).
|
|
39
39
|
*/
|
|
40
40
|
readonly SMOKE_LAUNCH_FAILURE: 13;
|
|
41
|
+
/**
|
|
42
|
+
* The user cancelled an interactive prompt. 130 = 128 + SIGINT, the
|
|
43
|
+
* conventional "interrupted by the user" code — scripts and CI can tell
|
|
44
|
+
* a deliberate cancellation apart from a real failure (GENERAL_ERROR).
|
|
45
|
+
*/
|
|
46
|
+
readonly USER_CANCELLED: 130;
|
|
41
47
|
};
|
|
42
48
|
export type ExitCode = (typeof ExitCode)[keyof typeof ExitCode];
|
package/dist/src/errors/codes.js
CHANGED
|
@@ -39,5 +39,10 @@ export const ExitCode = {
|
|
|
39
39
|
* missing profile, etc.).
|
|
40
40
|
*/
|
|
41
41
|
SMOKE_LAUNCH_FAILURE: 13,
|
|
42
|
+
/**
|
|
43
|
+
* The user cancelled an interactive prompt. 130 = 128 + SIGINT, the
|
|
44
|
+
* conventional "interrupted by the user" code — scripts and CI can tell
|
|
45
|
+
* a deliberate cancellation apart from a real failure (GENERAL_ERROR).
|
|
46
|
+
*/
|
|
47
|
+
USER_CANCELLED: 130,
|
|
42
48
|
};
|
|
43
|
-
//# sourceMappingURL=codes.js.map
|
|
@@ -5,6 +5,16 @@ import { FireForgeError } from './base.js';
|
|
|
5
5
|
export declare class FurnaceError extends FireForgeError {
|
|
6
6
|
readonly component?: string | undefined;
|
|
7
7
|
readonly code: 9;
|
|
8
|
-
constructor(message: string, component?: string | undefined, cause?: Error
|
|
8
|
+
constructor(message: string, component?: string | undefined, cause?: Error, options?: {
|
|
9
|
+
/**
|
|
10
|
+
* Suppresses the "run furnace validate" advice line. Set by callers
|
|
11
|
+
* whose message already tells the user to run validate (or that ARE
|
|
12
|
+
* the validate command) — an explicit flag, because the previous
|
|
13
|
+
* `message.includes('furnace validate')` sniffing dropped the advice
|
|
14
|
+
* from any error that merely MENTIONED the command.
|
|
15
|
+
*/
|
|
16
|
+
omitValidateAdvice?: boolean;
|
|
17
|
+
});
|
|
18
|
+
private readonly omitValidateAdvice;
|
|
9
19
|
get userMessage(): string;
|
|
10
20
|
}
|
|
@@ -7,22 +7,23 @@ import { ExitCode } from './codes.js';
|
|
|
7
7
|
export class FurnaceError extends FireForgeError {
|
|
8
8
|
component;
|
|
9
9
|
code = ExitCode.FURNACE_ERROR;
|
|
10
|
-
constructor(message, component, cause) {
|
|
10
|
+
constructor(message, component, cause, options) {
|
|
11
11
|
super(message, cause);
|
|
12
12
|
this.component = component;
|
|
13
|
+
this.omitValidateAdvice =
|
|
14
|
+
options?.omitValidateAdvice ?? message.includes('Run "fireforge furnace validate"');
|
|
13
15
|
}
|
|
16
|
+
omitValidateAdvice;
|
|
14
17
|
get userMessage() {
|
|
15
18
|
let msg = this.component
|
|
16
19
|
? `Furnace Error (${this.component}): ${this.message}`
|
|
17
20
|
: `Furnace Error: ${this.message}`;
|
|
18
21
|
msg += '\n\nTo fix this:\n';
|
|
19
22
|
msg += ' 1. Check the error message above for specifics\n';
|
|
20
|
-
|
|
21
|
-
if (!this.message.includes('furnace validate')) {
|
|
23
|
+
if (!this.omitValidateAdvice) {
|
|
22
24
|
msg += ' 2. Run "fireforge furnace validate" to diagnose issues\n';
|
|
23
25
|
}
|
|
24
|
-
msg += ` ${this.
|
|
26
|
+
msg += ` ${this.omitValidateAdvice ? '2' : '3'}. Use "fireforge doctor --repair-furnace" if state is inconsistent`;
|
|
25
27
|
return msg;
|
|
26
28
|
}
|
|
27
29
|
}
|
|
28
|
-
//# sourceMappingURL=furnace.js.map
|
package/dist/src/errors/git.js
CHANGED
|
@@ -1,4 +1,21 @@
|
|
|
1
1
|
import { FireForgeError } from './base.js';
|
|
2
|
+
/**
|
|
3
|
+
* Error thrown when `patches.json` exists but cannot be parsed or validated.
|
|
4
|
+
*
|
|
5
|
+
* This must be a HARD error on every mutating path. The historical behavior
|
|
6
|
+
* collapsed "corrupt" into "absent" (`loadPatchesManifest` returned null for
|
|
7
|
+
* both), so the next `fireforge export` would rebuild the manifest containing
|
|
8
|
+
* only the new patch — silently destroying every other patch's metadata
|
|
9
|
+
* (tiers, descriptions, lintIgnore, staged dependencies) — and a failed
|
|
10
|
+
* export's rollback would then delete `patches.json` outright because the
|
|
11
|
+
* "before" state looked absent (2026-07-05 review, finding H2).
|
|
12
|
+
*/
|
|
13
|
+
export declare class PatchManifestCorruptError extends FireForgeError {
|
|
14
|
+
readonly manifestPath: string;
|
|
15
|
+
readonly code: 6;
|
|
16
|
+
constructor(manifestPath: string, cause?: Error);
|
|
17
|
+
get userMessage(): string;
|
|
18
|
+
}
|
|
2
19
|
/**
|
|
3
20
|
* Error thrown when patch operations fail.
|
|
4
21
|
*/
|
package/dist/src/errors/patch.js
CHANGED
|
@@ -1,6 +1,35 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
import { FireForgeError } from './base.js';
|
|
3
3
|
import { ExitCode } from './codes.js';
|
|
4
|
+
/**
|
|
5
|
+
* Error thrown when `patches.json` exists but cannot be parsed or validated.
|
|
6
|
+
*
|
|
7
|
+
* This must be a HARD error on every mutating path. The historical behavior
|
|
8
|
+
* collapsed "corrupt" into "absent" (`loadPatchesManifest` returned null for
|
|
9
|
+
* both), so the next `fireforge export` would rebuild the manifest containing
|
|
10
|
+
* only the new patch — silently destroying every other patch's metadata
|
|
11
|
+
* (tiers, descriptions, lintIgnore, staged dependencies) — and a failed
|
|
12
|
+
* export's rollback would then delete `patches.json` outright because the
|
|
13
|
+
* "before" state looked absent (2026-07-05 review, finding H2).
|
|
14
|
+
*/
|
|
15
|
+
export class PatchManifestCorruptError extends FireForgeError {
|
|
16
|
+
manifestPath;
|
|
17
|
+
code = ExitCode.PATCH_ERROR;
|
|
18
|
+
constructor(manifestPath, cause) {
|
|
19
|
+
super(`patches.json exists but could not be parsed: ${cause?.message ?? 'unknown parse error'}`, cause);
|
|
20
|
+
this.manifestPath = manifestPath;
|
|
21
|
+
}
|
|
22
|
+
get userMessage() {
|
|
23
|
+
return (`Patch Manifest Error: ${this.message}\n\n` +
|
|
24
|
+
`Manifest: ${this.manifestPath}\n\n` +
|
|
25
|
+
'FireForge refuses to modify the patch queue while patches.json is unreadable — ' +
|
|
26
|
+
'rewriting it now would silently discard the metadata of every patch it lists.\n\n' +
|
|
27
|
+
'To fix this:\n' +
|
|
28
|
+
' 1. Open patches.json and repair the syntax error (a recent hand-edit is the usual cause)\n' +
|
|
29
|
+
' 2. Or restore patches.json from version control\n' +
|
|
30
|
+
' 3. Then re-run the command');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
4
33
|
/**
|
|
5
34
|
* Error thrown when patch operations fail.
|
|
6
35
|
*/
|
|
@@ -23,4 +52,3 @@ export class PatchError extends FireForgeError {
|
|
|
23
52
|
return msg;
|
|
24
53
|
}
|
|
25
54
|
}
|
|
26
|
-
//# sourceMappingURL=patch.js.map
|
package/dist/src/errors/run.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
import { FireForgeError } from './base.js';
|
|
3
|
+
import { ExitCode } from './codes.js';
|
|
3
4
|
/**
|
|
4
5
|
* Error raised by `fireforge run --smoke-exit` when the captured console
|
|
5
6
|
* stream produced one or more error lines that did NOT match the
|
|
@@ -19,4 +20,3 @@ export class SmokeRunError extends FireForgeError {
|
|
|
19
20
|
return `Smoke run failed: ${this.message}`;
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
|
-
//# sourceMappingURL=run.js.map
|
package/dist/src/index.js
CHANGED
|
@@ -18,4 +18,3 @@ export { validateAllComponents, validateComponent } from './core/furnace-validat
|
|
|
18
18
|
export { addToken, getTokensCssPath, validateTokenAdd } from './core/token-manager.js';
|
|
19
19
|
export { CancellationError, CommandError, FireForgeError, GeneralError, InvalidArgumentError, ResolutionError, } from './errors/base.js';
|
|
20
20
|
export { ExitCode } from './errors/codes.js';
|
|
21
|
-
//# sourceMappingURL=index.js.map
|
package/dist/src/types/cli.js
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Re-exports all command-related types from focused sub-modules.
|
|
3
3
|
*/
|
|
4
4
|
export type { BuildOptions, DiscardOptions, DoctorOptions, DownloadOptions, ExportOptions, FurnaceApplyOptions, FurnaceCreateOptions, FurnaceDeployOptions, FurnaceOverrideOptions, FurnacePreviewOptions, FurnaceRefreshOptions, FurnaceRemoveOptions, FurnaceSyncOptions, FurnaceValidateOptions, GlobalOptions, ImportOptions, LintCommandOptions, PackageOptions, PatchCompactOptions, PatchDeleteOptions, PatchLintIgnoreOptions, PatchMoveFilesOptions, PatchRenameOptions, PatchReorderOptions, PatchSplitOptions, PatchStagedDependencyOptions, PatchTierOptions, RebaseOptions, ReExportOptions, RegisterOptions, ResetOptions, RunOptions, SetupOptions, SourceSetOptions, StatusOptions, TestOptions, TokenAddOptions, WireOptions, } from './options.js';
|
|
5
|
-
export type { ImportSummary, PatchCategory, PatchesManifest, PatchInfo, PatchLintIssue, PatchMetadata, PatchResult, PatchStagedDependencies, PatchStagedForwardImport, } from './patches.js';
|
|
5
|
+
export type { ImportSummary, PatchCategory, PatchesManifest, PatchInfo, PatchLintIssue, PatchMetadata, PatchResult, PatchStagedDependencies, PatchStagedForwardImport, PatchStagedRegistration, } from './patches.js';
|
|
6
6
|
export type { DoctorCheck, ProjectStatus, TokenCoverageFileEntry, TokenCoverageReport, } from './project.js';
|
|
@@ -99,6 +99,12 @@ export interface ExportOptions {
|
|
|
99
99
|
forceUnsafe?: boolean;
|
|
100
100
|
/** Exclude furnace-managed file paths from the export. */
|
|
101
101
|
excludeFurnace?: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Export the deployed engine copy even when the `components/` source
|
|
104
|
+
* changed since the last furnace apply. Without this flag the export is
|
|
105
|
+
* refused so a stale deployed copy cannot silently land in the patch.
|
|
106
|
+
*/
|
|
107
|
+
allowStaleFurnace?: boolean;
|
|
102
108
|
/**
|
|
103
109
|
* Acknowledge that the export will create cross-patch ownership overlap
|
|
104
110
|
* with existing non-superseded patches. Without this flag, `export`
|
|
@@ -210,6 +216,12 @@ export interface ReExportOptions {
|
|
|
210
216
|
* before the interactive/`--yes` confirmation path.
|
|
211
217
|
*/
|
|
212
218
|
allowShrink?: boolean;
|
|
219
|
+
/**
|
|
220
|
+
* Export the deployed engine copy even when the `components/` source
|
|
221
|
+
* changed since the last furnace apply. Without this flag the re-export
|
|
222
|
+
* is refused so a stale deployed copy cannot silently land in the patch.
|
|
223
|
+
*/
|
|
224
|
+
allowStaleFurnace?: boolean;
|
|
213
225
|
/** Bypass cross-patch lint refusal on projected shrink state */
|
|
214
226
|
forceUnsafe?: boolean;
|
|
215
227
|
/**
|
|
@@ -278,16 +290,27 @@ export interface PatchLintIgnoreOptions {
|
|
|
278
290
|
* declarations, or clear all staged dependencies from the patch.
|
|
279
291
|
*/
|
|
280
292
|
export interface PatchStagedDependencyOptions {
|
|
281
|
-
/** Add a
|
|
293
|
+
/** Add a staged dependency declaration. */
|
|
282
294
|
add?: boolean;
|
|
283
|
-
/** Remove matching
|
|
295
|
+
/** Remove matching staged dependency declarations. */
|
|
284
296
|
remove?: boolean;
|
|
285
297
|
/** Drop the stagedDependencies field entirely. */
|
|
286
298
|
clear?: boolean;
|
|
287
|
-
/**
|
|
299
|
+
/**
|
|
300
|
+
* Declaration shape: `import` (forward import, the default when unset) or
|
|
301
|
+
* `registration` (jar.mn packaging line, customElements or actor
|
|
302
|
+
* registration). Registration entries use `line` instead of `specifier`.
|
|
303
|
+
*/
|
|
304
|
+
kind?: string;
|
|
305
|
+
/** Declaring file path relative to engine/. */
|
|
288
306
|
file?: string;
|
|
289
|
-
/** Exact import specifier as it appears in source. */
|
|
307
|
+
/** Exact import specifier as it appears in source (`kind: import`). */
|
|
290
308
|
specifier?: string;
|
|
309
|
+
/**
|
|
310
|
+
* Registration/packaging line as the patch adds it, compared
|
|
311
|
+
* whitespace-trimmed (`kind: registration`).
|
|
312
|
+
*/
|
|
313
|
+
line?: string;
|
|
291
314
|
/** Later-created file path relative to engine/. */
|
|
292
315
|
creates?: string;
|
|
293
316
|
/** Optional exact patch filename expected to create `creates`. */
|
|
@@ -299,11 +322,6 @@ export interface PatchStagedDependencyOptions {
|
|
|
299
322
|
/** Skip the confirmation prompt (required for non-TTY). */
|
|
300
323
|
yes?: boolean;
|
|
301
324
|
}
|
|
302
|
-
/**
|
|
303
|
-
* Options for the preview-only `fireforge patch move-files` subcommand.
|
|
304
|
-
* It validates an ownership transfer and prints the explicit
|
|
305
|
-
* `re-export --files` commands needed to perform it.
|
|
306
|
-
*/
|
|
307
325
|
/**
|
|
308
326
|
* Options for the `patch split` command.
|
|
309
327
|
*/
|
|
@@ -331,6 +349,11 @@ export interface PatchSplitOptions {
|
|
|
331
349
|
/** Skip per-patch lint of the projected bodies. */
|
|
332
350
|
skipLint?: boolean;
|
|
333
351
|
}
|
|
352
|
+
/**
|
|
353
|
+
* Options for the preview-only `fireforge patch move-files` subcommand.
|
|
354
|
+
* It validates an ownership transfer and prints the explicit
|
|
355
|
+
* `re-export --files` commands needed to perform it.
|
|
356
|
+
*/
|
|
334
357
|
export interface PatchMoveFilesOptions {
|
|
335
358
|
/** File paths relative to engine/ to move from the source patch to the target patch. */
|
|
336
359
|
file?: string[];
|
|
@@ -405,6 +428,8 @@ export interface TestOptions {
|
|
|
405
428
|
headless?: boolean;
|
|
406
429
|
/** Run incremental UI build before testing */
|
|
407
430
|
build?: boolean;
|
|
431
|
+
/** Forward mach's pathless auto-selection mode. Valid only with no explicit paths. */
|
|
432
|
+
auto?: boolean;
|
|
408
433
|
/**
|
|
409
434
|
* Run a marionette preflight before tests. Reports PASS/FAIL in under a
|
|
410
435
|
* minute. When test paths are supplied, a FAIL aborts before mach test is
|
|
@@ -428,6 +453,12 @@ export interface TestOptions {
|
|
|
428
453
|
* stale process holds the default port or CI uses another port.
|
|
429
454
|
*/
|
|
430
455
|
marionettePort?: number;
|
|
456
|
+
/** Kill a recognized stale browser process holding the Marionette port, then continue. */
|
|
457
|
+
killStaleMarionette?: boolean;
|
|
458
|
+
/** Permit tests against packageable engine edits newer than the last successful build. */
|
|
459
|
+
allowStaleBuild?: boolean;
|
|
460
|
+
/** Run the configured short harness canary. `true` means use `fireforge.json`'s test.canaryPath. */
|
|
461
|
+
canary?: string | boolean;
|
|
431
462
|
/**
|
|
432
463
|
* Retry budget for recognized harness crashes (resource-monitor
|
|
433
464
|
* tracebacks, pre-test no-output hangs, post-green shutdown re-entry).
|
|
@@ -31,6 +31,14 @@ export interface PatchResult {
|
|
|
31
31
|
conflictingFiles?: string[];
|
|
32
32
|
/** Whether the patch was auto-resolved (new file vs existing file conflict) */
|
|
33
33
|
autoResolved?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Pre-existing content of files the auto-resolve overwrote, keyed by
|
|
36
|
+
* engine-relative path. Kept for the RUN's duration (not just the retry):
|
|
37
|
+
* if a later patch fails and `rollbackPatches` reverse-applies this one,
|
|
38
|
+
* reversing a new-file patch DELETES the file — these snapshots are the
|
|
39
|
+
* only way to restore what was there before the auto-resolve.
|
|
40
|
+
*/
|
|
41
|
+
autoResolvedOriginals?: Map<string, string>;
|
|
34
42
|
}
|
|
35
43
|
/**
|
|
36
44
|
* Extended patch information with metadata.
|
|
@@ -119,6 +127,15 @@ export interface PatchMetadata {
|
|
|
119
127
|
export interface PatchStagedDependencies {
|
|
120
128
|
/** Exact forward-import declarations allowed for this patch. */
|
|
121
129
|
forwardImports?: PatchStagedForwardImport[];
|
|
130
|
+
/**
|
|
131
|
+
* Registration-shaped forward dependencies: packaging or registration
|
|
132
|
+
* LINES (a jar.mn entry, a customElements registration, an actor
|
|
133
|
+
* registration) this patch adds that reference a file a later patch
|
|
134
|
+
* creates. Unlike `forwardImports`, these are validated by matching the
|
|
135
|
+
* declared line against the patch's added content, not by finding an
|
|
136
|
+
* import specifier — packaging lines have no import to match.
|
|
137
|
+
*/
|
|
138
|
+
registrations?: PatchStagedRegistration[];
|
|
122
139
|
}
|
|
123
140
|
/** A single intentional forward import to a later-created file. */
|
|
124
141
|
export interface PatchStagedForwardImport {
|
|
@@ -133,6 +150,26 @@ export interface PatchStagedForwardImport {
|
|
|
133
150
|
/** Optional human-readable rationale for the staged dependency. */
|
|
134
151
|
reason?: string;
|
|
135
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* A single intentional registration/packaging line referencing a
|
|
155
|
+
* later-created file.
|
|
156
|
+
*/
|
|
157
|
+
export interface PatchStagedRegistration {
|
|
158
|
+
/** Declaring file path relative to engine/ (e.g. `toolkit/content/jar.mn`). */
|
|
159
|
+
file: string;
|
|
160
|
+
/**
|
|
161
|
+
* The registration/packaging line exactly as the patch adds it. Compared
|
|
162
|
+
* whitespace-trimmed against the patch's added lines in `file`, so
|
|
163
|
+
* indentation differences do not break the match.
|
|
164
|
+
*/
|
|
165
|
+
line: string;
|
|
166
|
+
/** Later-created file path relative to engine/. */
|
|
167
|
+
creates: string;
|
|
168
|
+
/** Optional exact patch filename expected to create `creates`. */
|
|
169
|
+
owner?: string;
|
|
170
|
+
/** Optional human-readable rationale for the staged dependency. */
|
|
171
|
+
reason?: string;
|
|
172
|
+
}
|
|
136
173
|
/**
|
|
137
174
|
* Schema for patches/patches.json file.
|
|
138
175
|
*/
|
|
@@ -3,19 +3,28 @@
|
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
5
|
* Result of a doctor check.
|
|
6
|
+
*
|
|
7
|
+
* Field precedence (consumers and producers must agree):
|
|
8
|
+
* 1. `severity`, when present, is authoritative — `'error'` counts as a
|
|
9
|
+
* failure and `'warning'` as a warning REGARDLESS of `passed`.
|
|
10
|
+
* 2. Without `severity`, `passed: false` is a failure unless
|
|
11
|
+
* `warning: true` downgrades it to a warning.
|
|
12
|
+
* Producers should prefer setting `severity` explicitly; `warning` exists
|
|
13
|
+
* for older checks that predate the field. Do not emit contradictory
|
|
14
|
+
* combinations like `passed: true, severity: 'error'`.
|
|
6
15
|
*/
|
|
7
16
|
export interface DoctorCheck {
|
|
8
17
|
/** Name of the check */
|
|
9
18
|
name: string;
|
|
10
19
|
/** Whether the check passed */
|
|
11
20
|
passed: boolean;
|
|
12
|
-
/** Severity of the result */
|
|
21
|
+
/** Severity of the result (authoritative when present — see above) */
|
|
13
22
|
severity?: 'ok' | 'warning' | 'error';
|
|
14
23
|
/** Description of the result */
|
|
15
24
|
message: string;
|
|
16
25
|
/** Suggested fix if check failed */
|
|
17
26
|
fix?: string;
|
|
18
|
-
/**
|
|
27
|
+
/** Legacy warning flag for checks that predate `severity` */
|
|
19
28
|
warning?: boolean;
|
|
20
29
|
}
|
|
21
30
|
/**
|
|
@@ -24,6 +24,34 @@ export interface BuildConfig {
|
|
|
24
24
|
/** Number of parallel jobs for mach build */
|
|
25
25
|
jobs?: number;
|
|
26
26
|
}
|
|
27
|
+
/** Test command defaults stored in fireforge.json. */
|
|
28
|
+
export interface TestConfig {
|
|
29
|
+
/**
|
|
30
|
+
* Engine-relative browser-chrome canary file used by `fireforge test --canary`
|
|
31
|
+
* when the command does not receive an explicit canary path.
|
|
32
|
+
*/
|
|
33
|
+
canaryPath?: string;
|
|
34
|
+
/** Short no-output ceiling for `fireforge test --canary`, in seconds. */
|
|
35
|
+
canaryTimeoutSeconds?: number;
|
|
36
|
+
}
|
|
37
|
+
/** A single external executable required by a project-specific toolchain. */
|
|
38
|
+
export interface ExternalToolRequirement {
|
|
39
|
+
/** Tool name as shown in doctor output, and PATH/xcrun lookup key when no path is set. */
|
|
40
|
+
name: string;
|
|
41
|
+
/** Absolute or project-relative executable path. */
|
|
42
|
+
path?: string;
|
|
43
|
+
/** Resolve the tool with `xcrun -find <name>` instead of PATH. */
|
|
44
|
+
xcrun?: boolean;
|
|
45
|
+
/** Missing tool is an error by default; set false for advisory probes. */
|
|
46
|
+
required?: boolean;
|
|
47
|
+
}
|
|
48
|
+
/** Named group of project-specific external asset/build tools. */
|
|
49
|
+
export interface ExternalToolchainConfig {
|
|
50
|
+
/** Human-readable toolchain name, e.g. "seasonal-branding". */
|
|
51
|
+
name: string;
|
|
52
|
+
/** Tools this toolchain needs. */
|
|
53
|
+
tools: ExternalToolRequirement[];
|
|
54
|
+
}
|
|
27
55
|
/** Enforcement mode for patch policy violations during mutating commands. */
|
|
28
56
|
export type PatchPolicyMutationMode = 'error' | 'warn' | 'force';
|
|
29
57
|
/** A category-owned numeric range in the patch queue. */
|
|
@@ -89,6 +117,10 @@ export interface FireForgeConfig {
|
|
|
89
117
|
firefox: FirefoxConfig;
|
|
90
118
|
/** Build settings */
|
|
91
119
|
build?: BuildConfig;
|
|
120
|
+
/** Test command defaults */
|
|
121
|
+
test?: TestConfig;
|
|
122
|
+
/** Optional project-specific external toolchains checked by doctor. */
|
|
123
|
+
externalToolchains?: ExternalToolchainConfig[];
|
|
92
124
|
/** Project license SPDX identifier */
|
|
93
125
|
license?: ProjectLicense;
|
|
94
126
|
/** Wire command configuration */
|
package/dist/src/types/config.js
CHANGED
|
@@ -46,6 +46,19 @@ export interface CustomComponentConfig {
|
|
|
46
46
|
targetPath: string;
|
|
47
47
|
/** Whether to register in customElements.js */
|
|
48
48
|
register: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* What the component IS. `'element'` (the default when unset) is a custom
|
|
51
|
+
* element with its own tag. `'library'` is a base class + helpers module
|
|
52
|
+
* that defines no element of its own (e.g. a shared MozLitElement
|
|
53
|
+
* subclass other components extend): `furnace validate` skips the
|
|
54
|
+
* `no-custom-element-define` / `not-moz-lit-element` compatibility checks
|
|
55
|
+
* and the `missing-css` structural advisory for it, while headers, module
|
|
56
|
+
* shape, `relative-import`, and (when a `.css` exists) the CSS
|
|
57
|
+
* compatibility rules still apply. A library exports no element, so
|
|
58
|
+
* `kind: "library"` requires `register: false` — the combination with
|
|
59
|
+
* `register: true` is rejected at config parse time.
|
|
60
|
+
*/
|
|
61
|
+
kind?: 'element' | 'library';
|
|
49
62
|
/** Whether this component uses Fluent l10n */
|
|
50
63
|
localized: boolean;
|
|
51
64
|
/** Stock component tag names composed internally by this component */
|
|
@@ -208,6 +221,16 @@ export interface FurnaceState {
|
|
|
208
221
|
export interface StepError {
|
|
209
222
|
step: string;
|
|
210
223
|
error: string;
|
|
224
|
+
/**
|
|
225
|
+
* Advisory step errors are reported as warnings and never trigger
|
|
226
|
+
* rollback or a non-zero exit. Used by the `.ftl` helpers, whose module
|
|
227
|
+
* contract is graceful degradation: a missing locale jar.mn on a fork
|
|
228
|
+
* without a locale package must not block a working `.mjs`/`.css` from
|
|
229
|
+
* shipping. Before this flag existed the contract was contradicted in
|
|
230
|
+
* practice — any FTL step error rolled back the entire apply, so a
|
|
231
|
+
* localized component on such a fork could never be applied at all.
|
|
232
|
+
*/
|
|
233
|
+
advisory?: boolean;
|
|
211
234
|
}
|
|
212
235
|
/**
|
|
213
236
|
* Result of applying all components to the engine source tree.
|
package/dist/src/types/index.js
CHANGED
package/dist/src/utils/errors.js
CHANGED