@hominis/fireforge 0.46.0 → 0.46.2
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 +17 -9
- package/dist/src/core/token-dark-mode.js +41 -28
- 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
|
@@ -17,7 +17,7 @@ export { removeCustomElementRegistration } from './furnace-registration-remove.j
|
|
|
17
17
|
* `content/global/elements/` line. Falls back to 3 spaces when no
|
|
18
18
|
* reference line exists.
|
|
19
19
|
* - **Insertion point**: identified by existing lines matching the regex
|
|
20
|
-
* `^\s+content\/global\/elements\/([^.]+)
|
|
20
|
+
* `^\s+content\/global\/elements\/([^.]+)\.`. New entries are inserted
|
|
21
21
|
* in alphabetical order relative to these.
|
|
22
22
|
* - **Fallback**: if no `content/global/elements/` line exists (empty
|
|
23
23
|
* project), looks for any `content/global/` line and inserts after it.
|
|
@@ -42,7 +42,7 @@ export declare function addJarMnEntries(engineDir: string, tagName: string, file
|
|
|
42
42
|
* does not resolve at runtime, so the generated `--localized` component
|
|
43
43
|
* silently ships broken l10n.
|
|
44
44
|
*
|
|
45
|
-
* Degrades gracefully
|
|
45
|
+
* Degrades gracefully: if the locale jar.mn (e.g. `toolkit/locales/jar.mn`)
|
|
46
46
|
* does not exist, returns 0 rather than throwing, so a custom fork without a
|
|
47
47
|
* standard locales package can still apply a localized component.
|
|
48
48
|
*
|
|
@@ -59,13 +59,13 @@ export declare function addJarMnEntries(engineDir: string, tagName: string, file
|
|
|
59
59
|
export declare function addLocaleFtlJarMnEntry(engineDir: string, jarMnRelPath: string, tagName: string, chromeSubPath: string): Promise<number>;
|
|
60
60
|
/**
|
|
61
61
|
* Removes a locale jar.mn entry previously written by `addLocaleFtlJarMnEntry`.
|
|
62
|
-
* Idempotent
|
|
62
|
+
* Idempotent: if the entry is absent or the file is missing, nothing happens.
|
|
63
63
|
*/
|
|
64
64
|
export declare function removeLocaleFtlJarMnEntry(engineDir: string, jarMnRelPath: string, tagName: string, chromeSubPath: string): Promise<void>;
|
|
65
65
|
/**
|
|
66
66
|
* Removes all jar.mn entries for a given tag name.
|
|
67
67
|
*
|
|
68
|
-
* This operation is idempotent
|
|
68
|
+
* This operation is idempotent: if no entries exist or the file is missing,
|
|
69
69
|
* nothing happens.
|
|
70
70
|
*
|
|
71
71
|
* @param engineDir - Path to the Firefox engine source root
|
|
@@ -83,7 +83,7 @@ export interface StaleJarMnEntry {
|
|
|
83
83
|
}
|
|
84
84
|
/**
|
|
85
85
|
* Scans jar.mn for widget registration lines `(widgets/<tag>/<file>)` whose
|
|
86
|
-
* workspace source file no longer exists
|
|
86
|
+
* workspace source file no longer exists. A renamed component helper
|
|
87
87
|
* otherwise leaves the old line pointing at a deleted file and every build
|
|
88
88
|
* fails at packaging. Only tags in `managedTags` (furnace-managed custom
|
|
89
89
|
* components) are inspected, so upstream lines are never touched.
|
|
@@ -46,7 +46,7 @@ import { JAR_MN } from './furnace-constants.js';
|
|
|
46
46
|
* `content/global/elements/` line. Falls back to 3 spaces when no
|
|
47
47
|
* reference line exists.
|
|
48
48
|
* - **Insertion point**: identified by existing lines matching the regex
|
|
49
|
-
* `^\s+content\/global\/elements\/([^.]+)
|
|
49
|
+
* `^\s+content\/global\/elements\/([^.]+)\.`. New entries are inserted
|
|
50
50
|
* in alphabetical order relative to these.
|
|
51
51
|
* - **Fallback**: if no `content/global/elements/` line exists (empty
|
|
52
52
|
* project), looks for any `content/global/` line and inserts after it.
|
|
@@ -122,7 +122,7 @@ export async function addJarMnEntries(engineDir, tagName, files) {
|
|
|
122
122
|
* does not resolve at runtime, so the generated `--localized` component
|
|
123
123
|
* silently ships broken l10n.
|
|
124
124
|
*
|
|
125
|
-
* Degrades gracefully
|
|
125
|
+
* Degrades gracefully: if the locale jar.mn (e.g. `toolkit/locales/jar.mn`)
|
|
126
126
|
* does not exist, returns 0 rather than throwing, so a custom fork without a
|
|
127
127
|
* standard locales package can still apply a localized component.
|
|
128
128
|
*
|
|
@@ -183,7 +183,7 @@ function detectLocaleJarMnIndent(lines, chromeSubPath) {
|
|
|
183
183
|
}
|
|
184
184
|
/**
|
|
185
185
|
* Removes a locale jar.mn entry previously written by `addLocaleFtlJarMnEntry`.
|
|
186
|
-
* Idempotent
|
|
186
|
+
* Idempotent: if the entry is absent or the file is missing, nothing happens.
|
|
187
187
|
*/
|
|
188
188
|
export async function removeLocaleFtlJarMnEntry(engineDir, jarMnRelPath, tagName, chromeSubPath) {
|
|
189
189
|
const filePath = join(engineDir, jarMnRelPath);
|
|
@@ -201,7 +201,7 @@ export async function removeLocaleFtlJarMnEntry(engineDir, jarMnRelPath, tagName
|
|
|
201
201
|
/**
|
|
202
202
|
* Removes all jar.mn entries for a given tag name.
|
|
203
203
|
*
|
|
204
|
-
* This operation is idempotent
|
|
204
|
+
* This operation is idempotent: if no entries exist or the file is missing,
|
|
205
205
|
* nothing happens.
|
|
206
206
|
*
|
|
207
207
|
* @param engineDir - Path to the Firefox engine source root
|
|
@@ -214,9 +214,9 @@ export async function removeJarMnEntries(engineDir, tagName) {
|
|
|
214
214
|
}
|
|
215
215
|
let content = await readText(filePath);
|
|
216
216
|
const lines = content.split('\n');
|
|
217
|
-
// Match by the
|
|
217
|
+
// Match by the source mapping segment `(widgets/<tagName>/...)` so every
|
|
218
218
|
// line the component registered is removed regardless of the target
|
|
219
|
-
// basename
|
|
219
|
+
// basename. A helper `.mjs` whose name does not start with the tag (e.g.
|
|
220
220
|
// a renamed `foo-utils.mjs`) otherwise survives the remove pass and leaves
|
|
221
221
|
// a stale registration that breaks packaging. The legacy target-path match
|
|
222
222
|
// is kept as an OR for lines written before the source mapping existed.
|
|
@@ -232,7 +232,7 @@ export async function removeJarMnEntries(engineDir, tagName) {
|
|
|
232
232
|
const WIDGET_SOURCE_MAPPING_PATTERN = /\(widgets\/([^/)]+)\/([^)]+)\)/;
|
|
233
233
|
/**
|
|
234
234
|
* Scans jar.mn for widget registration lines `(widgets/<tag>/<file>)` whose
|
|
235
|
-
* workspace source file no longer exists
|
|
235
|
+
* workspace source file no longer exists. A renamed component helper
|
|
236
236
|
* otherwise leaves the old line pointing at a deleted file and every build
|
|
237
237
|
* fails at packaging. Only tags in `managedTags` (furnace-managed custom
|
|
238
238
|
* components) are inspected, so upstream lines are never touched.
|
|
@@ -16,7 +16,7 @@ export declare function recordCreatedDir(journal: RollbackJournal, dirPath: stri
|
|
|
16
16
|
/**
|
|
17
17
|
* Recursively snapshots every file under a directory tree so a later rollback
|
|
18
18
|
* can restore deleted files. Skips symlinks to avoid following them out of the
|
|
19
|
-
* tree. The directory itself is not recorded as "created"
|
|
19
|
+
* tree. The directory itself is not recorded as "created", so callers that
|
|
20
20
|
* intend to delete and restore the directory should record it explicitly.
|
|
21
21
|
*
|
|
22
22
|
* Safe to call on a missing path: it returns without recording anything.
|
|
@@ -20,7 +20,7 @@ export function recordCreatedDir(journal, dirPath) {
|
|
|
20
20
|
/**
|
|
21
21
|
* Recursively snapshots every file under a directory tree so a later rollback
|
|
22
22
|
* can restore deleted files. Skips symlinks to avoid following them out of the
|
|
23
|
-
* tree. The directory itself is not recorded as "created"
|
|
23
|
+
* tree. The directory itself is not recorded as "created", so callers that
|
|
24
24
|
* intend to delete and restore the directory should record it explicitly.
|
|
25
25
|
*
|
|
26
26
|
* Safe to call on a missing path: it returns without recording anything.
|
|
@@ -49,9 +49,9 @@ export async function snapshotFile(journal, filePath) {
|
|
|
49
49
|
// Journal keys are the paths rollback will later write back to, and the
|
|
50
50
|
// restore runs from whatever cwd the process happens to be in by then. A
|
|
51
51
|
// relative key would therefore restore somewhere other than where the
|
|
52
|
-
// snapshot was taken
|
|
53
|
-
// is watching. Every caller composes an absolute path already
|
|
54
|
-
// it that way.
|
|
52
|
+
// snapshot was taken, silently, and only on the failure path where nobody
|
|
53
|
+
// is watching. Every caller composes an absolute path already, and this
|
|
54
|
+
// keeps it that way.
|
|
55
55
|
assert(isAbsolute(filePath), () => `snapshot path is absolute (got "${filePath}")`);
|
|
56
56
|
if (journal.files.has(filePath)) {
|
|
57
57
|
return;
|
|
@@ -149,7 +149,7 @@ export async function restoreRollbackJournal(journal) {
|
|
|
149
149
|
// Directory removal is only safe once every file is back where it belongs:
|
|
150
150
|
// a created directory may hold a restored file, and removing it recursively
|
|
151
151
|
// would undo the restore we just performed. The throw above is what
|
|
152
|
-
// normally enforces this
|
|
152
|
+
// normally enforces this. The assertion names it so a future early-return
|
|
153
153
|
// or error-swallowing edit cannot quietly reach the rm loop with failures
|
|
154
154
|
// outstanding.
|
|
155
155
|
assert(errors.length === 0, 'all journal files restored before created directories are removed');
|
|
@@ -1,46 +1,46 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Stale-furnace-source gate for `fireforge patch export` / `re-export`.
|
|
3
3
|
*
|
|
4
|
-
* Exports capture the
|
|
4
|
+
* Exports capture the deployed engine copies of furnace-managed files, not
|
|
5
5
|
* the `components/` sources. Editing a component source and re-exporting its
|
|
6
|
-
* owning patch
|
|
7
|
-
* exports the stale deployed copy
|
|
6
|
+
* owning patch without an intervening `furnace deploy`/`apply` silently
|
|
7
|
+
* exports the stale deployed copy: per-patch lint then flags the old line
|
|
8
8
|
* count and the patch body lags the source. This gate detects that sequence
|
|
9
9
|
* by comparing component source directories against the checksums recorded
|
|
10
|
-
* at the last apply (`FurnaceState.appliedChecksums`)
|
|
11
|
-
* `warnIfFurnaceStale` uses for run/watch
|
|
10
|
+
* at the last apply (`FurnaceState.appliedChecksums`), the same signal
|
|
11
|
+
* `warnIfFurnaceStale` uses for run/watch, and refuses the export unless
|
|
12
12
|
* the operator passes `--allow-stale-furnace`.
|
|
13
13
|
*
|
|
14
14
|
* Checksum-based on purpose: git checkouts and `furnace refresh` churn
|
|
15
15
|
* mtimes without content changes, so an mtime comparison would misfire.
|
|
16
16
|
*
|
|
17
17
|
* Probe failures (broken furnace config, missing state) degrade to a verbose
|
|
18
|
-
* log and an empty result
|
|
18
|
+
* log and an empty result. A broken furnace setup must never block
|
|
19
19
|
* non-furnace patch work.
|
|
20
20
|
*/
|
|
21
21
|
/** One furnace component whose source drifted from its deployed copy. */
|
|
22
22
|
export interface StaleFurnaceComponent {
|
|
23
23
|
/** Component name (furnace.json key). */
|
|
24
24
|
name: string;
|
|
25
|
-
/** Component flavor
|
|
25
|
+
/** Component flavor, which resolves the source directory root. */
|
|
26
26
|
type: 'custom' | 'override';
|
|
27
27
|
/** Engine-relative deployed prefix (`/`-terminated) the component owns. */
|
|
28
28
|
prefix: string;
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
31
|
* Returns the furnace components whose deployed engine copies the given
|
|
32
|
-
* files fall under
|
|
32
|
+
* files fall under and whose `components/` sources have changed since the
|
|
33
33
|
* last apply. Empty when furnace is not configured, never applied, or the
|
|
34
34
|
* probe fails.
|
|
35
35
|
*
|
|
36
36
|
* Files are attributed per component: the custom `targetPath` / override
|
|
37
|
-
* `basePath` prefixes, plus
|
|
38
|
-
* component
|
|
39
|
-
* FTL dir as a whole stays unclaimed
|
|
40
|
-
* components). `sharedFtl` bundles are
|
|
41
|
-
* prunes a dangling per-widget jar.mn line), so they have no deployed
|
|
42
|
-
* to go stale and get no candidate by design. The storybook stories
|
|
43
|
-
* is likewise skipped.
|
|
37
|
+
* `basePath` prefixes, plus, for a localized non-sharedFtl custom
|
|
38
|
+
* component, its exact deployed `<ftlDir>/<name>.ftl` file (the shared
|
|
39
|
+
* FTL dir as a whole stays unclaimed, because sibling files there belong
|
|
40
|
+
* to other components). `sharedFtl` bundles are not furnace-deployed (apply
|
|
41
|
+
* only prunes a dangling per-widget jar.mn line), so they have no deployed
|
|
42
|
+
* copy to go stale and get no candidate by design. The storybook stories
|
|
43
|
+
* prefix is likewise skipped.
|
|
44
44
|
*
|
|
45
45
|
* @param projectRoot - Project root directory
|
|
46
46
|
* @param files - Engine-relative paths the export will capture
|
|
@@ -49,7 +49,8 @@ export declare function findStaleFurnaceComponentsForFiles(projectRoot: string,
|
|
|
49
49
|
/**
|
|
50
50
|
* Gate helper for export/re-export: refuses (or, with `allow`, warns) when
|
|
51
51
|
* any exported file belongs to a furnace component whose source changed
|
|
52
|
-
* since the last apply
|
|
52
|
+
* since the last apply, where the export would capture the stale deployed
|
|
53
|
+
* copy.
|
|
53
54
|
*
|
|
54
55
|
* @param projectRoot - Project root directory
|
|
55
56
|
* @param files - Engine-relative paths the export will capture
|
|
@@ -2,21 +2,21 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Stale-furnace-source gate for `fireforge patch export` / `re-export`.
|
|
4
4
|
*
|
|
5
|
-
* Exports capture the
|
|
5
|
+
* Exports capture the deployed engine copies of furnace-managed files, not
|
|
6
6
|
* the `components/` sources. Editing a component source and re-exporting its
|
|
7
|
-
* owning patch
|
|
8
|
-
* exports the stale deployed copy
|
|
7
|
+
* owning patch without an intervening `furnace deploy`/`apply` silently
|
|
8
|
+
* exports the stale deployed copy: per-patch lint then flags the old line
|
|
9
9
|
* count and the patch body lags the source. This gate detects that sequence
|
|
10
10
|
* by comparing component source directories against the checksums recorded
|
|
11
|
-
* at the last apply (`FurnaceState.appliedChecksums`)
|
|
12
|
-
* `warnIfFurnaceStale` uses for run/watch
|
|
11
|
+
* at the last apply (`FurnaceState.appliedChecksums`), the same signal
|
|
12
|
+
* `warnIfFurnaceStale` uses for run/watch, and refuses the export unless
|
|
13
13
|
* the operator passes `--allow-stale-furnace`.
|
|
14
14
|
*
|
|
15
15
|
* Checksum-based on purpose: git checkouts and `furnace refresh` churn
|
|
16
16
|
* mtimes without content changes, so an mtime comparison would misfire.
|
|
17
17
|
*
|
|
18
18
|
* Probe failures (broken furnace config, missing state) degrade to a verbose
|
|
19
|
-
* log and an empty result
|
|
19
|
+
* log and an empty result. A broken furnace setup must never block
|
|
20
20
|
* non-furnace patch work.
|
|
21
21
|
*/
|
|
22
22
|
import { GeneralError } from '../errors/base.js';
|
|
@@ -28,18 +28,18 @@ import { furnaceConfigExists, getFurnacePaths, loadFurnaceConfig, loadFurnaceSta
|
|
|
28
28
|
import { resolveFtlDir } from './furnace-constants.js';
|
|
29
29
|
/**
|
|
30
30
|
* Returns the furnace components whose deployed engine copies the given
|
|
31
|
-
* files fall under
|
|
31
|
+
* files fall under and whose `components/` sources have changed since the
|
|
32
32
|
* last apply. Empty when furnace is not configured, never applied, or the
|
|
33
33
|
* probe fails.
|
|
34
34
|
*
|
|
35
35
|
* Files are attributed per component: the custom `targetPath` / override
|
|
36
|
-
* `basePath` prefixes, plus
|
|
37
|
-
* component
|
|
38
|
-
* FTL dir as a whole stays unclaimed
|
|
39
|
-
* components). `sharedFtl` bundles are
|
|
40
|
-
* prunes a dangling per-widget jar.mn line), so they have no deployed
|
|
41
|
-
* to go stale and get no candidate by design. The storybook stories
|
|
42
|
-
* is likewise skipped.
|
|
36
|
+
* `basePath` prefixes, plus, for a localized non-sharedFtl custom
|
|
37
|
+
* component, its exact deployed `<ftlDir>/<name>.ftl` file (the shared
|
|
38
|
+
* FTL dir as a whole stays unclaimed, because sibling files there belong
|
|
39
|
+
* to other components). `sharedFtl` bundles are not furnace-deployed (apply
|
|
40
|
+
* only prunes a dangling per-widget jar.mn line), so they have no deployed
|
|
41
|
+
* copy to go stale and get no candidate by design. The storybook stories
|
|
42
|
+
* prefix is likewise skipped.
|
|
43
43
|
*
|
|
44
44
|
* @param projectRoot - Project root directory
|
|
45
45
|
* @param files - Engine-relative paths the export will capture
|
|
@@ -97,7 +97,8 @@ export async function findStaleFurnaceComponentsForFiles(projectRoot, files) {
|
|
|
97
97
|
/**
|
|
98
98
|
* Gate helper for export/re-export: refuses (or, with `allow`, warns) when
|
|
99
99
|
* any exported file belongs to a furnace component whose source changed
|
|
100
|
-
* since the last apply
|
|
100
|
+
* since the last apply, where the export would capture the stale deployed
|
|
101
|
+
* copy.
|
|
101
102
|
*
|
|
102
103
|
* @param projectRoot - Project root directory
|
|
103
104
|
* @param files - Engine-relative paths the export will capture
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Furnace staleness advisory
|
|
2
|
+
* Furnace staleness advisory, shared between `fireforge run` and
|
|
3
3
|
* `fireforge watch`. Both commands launch the built browser without
|
|
4
4
|
* first running `furnace apply`, so this helper surfaces a warning when
|
|
5
5
|
* component files have drifted from the last-applied checksums and the
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
/**
|
|
12
12
|
* Emits a warning when any tracked override or custom component has
|
|
13
13
|
* changed on disk since the last apply. Safe to call from any build-time
|
|
14
|
-
* command that does not auto-apply
|
|
14
|
+
* command that does not auto-apply. A failure inside the probe is
|
|
15
15
|
* downgraded to a verbose log and the caller continues.
|
|
16
16
|
*/
|
|
17
17
|
export declare function warnIfFurnaceStale(projectRoot: string): Promise<void>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
|
-
* Furnace staleness advisory
|
|
3
|
+
* Furnace staleness advisory, shared between `fireforge run` and
|
|
4
4
|
* `fireforge watch`. Both commands launch the built browser without
|
|
5
5
|
* first running `furnace apply`, so this helper surfaces a warning when
|
|
6
6
|
* component files have drifted from the last-applied checksums and the
|
|
@@ -16,7 +16,7 @@ import { furnaceConfigExists, getFurnacePaths, loadFurnaceConfig, loadFurnaceSta
|
|
|
16
16
|
/**
|
|
17
17
|
* Emits a warning when any tracked override or custom component has
|
|
18
18
|
* changed on disk since the last apply. Safe to call from any build-time
|
|
19
|
-
* command that does not auto-apply
|
|
19
|
+
* command that does not auto-apply. A failure inside the probe is
|
|
20
20
|
* downgraded to a verbose log and the caller continues.
|
|
21
21
|
*/
|
|
22
22
|
export async function warnIfFurnaceStale(projectRoot) {
|
|
@@ -4,25 +4,25 @@
|
|
|
4
4
|
* There are exactly two sanctioned ways checksums land in
|
|
5
5
|
* furnace-state.json:
|
|
6
6
|
*
|
|
7
|
-
* 1. The
|
|
8
|
-
* replaces `appliedChecksums` wholesale
|
|
9
|
-
* covered every component.
|
|
10
|
-
* 2. The per-component
|
|
7
|
+
* 1. The batch path inside `applyAllComponents` (persistState: true), which
|
|
8
|
+
* replaces `appliedChecksums` wholesale. That is correct only when the
|
|
9
|
+
* run covered every component.
|
|
10
|
+
* 2. The per-component merge in this module, which rewrites only the
|
|
11
11
|
* `<type>/<name>/…` keys of the component that was applied.
|
|
12
12
|
*
|
|
13
|
-
* Every targeted (named) apply/deploy
|
|
13
|
+
* Every targeted (named) apply/deploy must use path 2 with
|
|
14
14
|
* `persistState: false`. Routing a named run through the batch path wipes
|
|
15
15
|
* every other component's checksum state: the batch loops filter to the
|
|
16
16
|
* named component, so the wholesale replace persists a state file containing
|
|
17
17
|
* only that component. Downstream, `diffDeletedFiles` and
|
|
18
18
|
* `findOrphanedEngineFiles` both key on `appliedChecksums`, so the wiped
|
|
19
|
-
* components' stale engine files become undetectable by apply
|
|
19
|
+
* components' stale engine files become undetectable by apply and by
|
|
20
20
|
* `furnace validate`.
|
|
21
21
|
*/
|
|
22
22
|
import { type ApplyAllComponentsResult } from './furnace-apply.js';
|
|
23
23
|
import { type FurnacePaths } from './furnace-config.js';
|
|
24
24
|
/**
|
|
25
|
-
* Counts applied entries that carry at least one
|
|
25
|
+
* Counts applied entries that carry at least one blocking step error
|
|
26
26
|
* (advisory step errors are warnings and never fail a run).
|
|
27
27
|
*/
|
|
28
28
|
export declare function getStepFailureCount(result: ApplyAllComponentsResult): number;
|
|
@@ -33,7 +33,7 @@ export declare function getStepFailureCount(result: ApplyAllComponentsResult): n
|
|
|
33
33
|
* Named runs are atomic: if any apply step fails, the rollback journal
|
|
34
34
|
* restores the engine to its pre-run state and this helper returns `false`
|
|
35
35
|
* so state is not touched. The conditions must stay in lock-step with the
|
|
36
|
-
* rollback trigger in `applyAllComponents
|
|
36
|
+
* rollback trigger in `applyAllComponents`: both read step errors, so a
|
|
37
37
|
* future refactor cannot drift them apart and accidentally persist partial
|
|
38
38
|
* state.
|
|
39
39
|
*/
|
|
@@ -43,7 +43,7 @@ export declare function shouldPersistSingleComponentState(result: ApplyAllCompon
|
|
|
43
43
|
*
|
|
44
44
|
* Guards against future refactors that might reorder or misroute the
|
|
45
45
|
* applied[] array: a named run persists state under a single component
|
|
46
|
-
* name, so the first applied entry
|
|
46
|
+
* name, so the first applied entry must be that component. Persisting a
|
|
47
47
|
* different component's checksums would cause the next status/apply run to
|
|
48
48
|
* mis-report health for both components involved.
|
|
49
49
|
*
|
|
@@ -55,7 +55,7 @@ export declare function getPersistableAppliedEntry(commandLabel: string, name: s
|
|
|
55
55
|
};
|
|
56
56
|
/**
|
|
57
57
|
* Persists checksum state for a successfully applied named component by
|
|
58
|
-
*
|
|
58
|
+
* merging its `<type>/<name>/…` keys into the existing state rather than
|
|
59
59
|
* replacing the whole map.
|
|
60
60
|
*
|
|
61
61
|
* @param projectRoot - Root directory of the project
|
|
@@ -5,19 +5,19 @@
|
|
|
5
5
|
* There are exactly two sanctioned ways checksums land in
|
|
6
6
|
* furnace-state.json:
|
|
7
7
|
*
|
|
8
|
-
* 1. The
|
|
9
|
-
* replaces `appliedChecksums` wholesale
|
|
10
|
-
* covered every component.
|
|
11
|
-
* 2. The per-component
|
|
8
|
+
* 1. The batch path inside `applyAllComponents` (persistState: true), which
|
|
9
|
+
* replaces `appliedChecksums` wholesale. That is correct only when the
|
|
10
|
+
* run covered every component.
|
|
11
|
+
* 2. The per-component merge in this module, which rewrites only the
|
|
12
12
|
* `<type>/<name>/…` keys of the component that was applied.
|
|
13
13
|
*
|
|
14
|
-
* Every targeted (named) apply/deploy
|
|
14
|
+
* Every targeted (named) apply/deploy must use path 2 with
|
|
15
15
|
* `persistState: false`. Routing a named run through the batch path wipes
|
|
16
16
|
* every other component's checksum state: the batch loops filter to the
|
|
17
17
|
* named component, so the wholesale replace persists a state file containing
|
|
18
18
|
* only that component. Downstream, `diffDeletedFiles` and
|
|
19
19
|
* `findOrphanedEngineFiles` both key on `appliedChecksums`, so the wiped
|
|
20
|
-
* components' stale engine files become undetectable by apply
|
|
20
|
+
* components' stale engine files become undetectable by apply and by
|
|
21
21
|
* `furnace validate`.
|
|
22
22
|
*/
|
|
23
23
|
import { join } from 'node:path';
|
|
@@ -26,7 +26,7 @@ import { computeComponentChecksums, prefixChecksums, } from './furnace-apply.js'
|
|
|
26
26
|
import { updateFurnaceState } from './furnace-config.js';
|
|
27
27
|
import { countEntriesWithBlockingStepErrors } from './furnace-step-errors.js';
|
|
28
28
|
/**
|
|
29
|
-
* Counts applied entries that carry at least one
|
|
29
|
+
* Counts applied entries that carry at least one blocking step error
|
|
30
30
|
* (advisory step errors are warnings and never fail a run).
|
|
31
31
|
*/
|
|
32
32
|
export function getStepFailureCount(result) {
|
|
@@ -39,7 +39,7 @@ export function getStepFailureCount(result) {
|
|
|
39
39
|
* Named runs are atomic: if any apply step fails, the rollback journal
|
|
40
40
|
* restores the engine to its pre-run state and this helper returns `false`
|
|
41
41
|
* so state is not touched. The conditions must stay in lock-step with the
|
|
42
|
-
* rollback trigger in `applyAllComponents
|
|
42
|
+
* rollback trigger in `applyAllComponents`: both read step errors, so a
|
|
43
43
|
* future refactor cannot drift them apart and accidentally persist partial
|
|
44
44
|
* state.
|
|
45
45
|
*/
|
|
@@ -57,7 +57,7 @@ export function shouldPersistSingleComponentState(result, isDryRun) {
|
|
|
57
57
|
*
|
|
58
58
|
* Guards against future refactors that might reorder or misroute the
|
|
59
59
|
* applied[] array: a named run persists state under a single component
|
|
60
|
-
* name, so the first applied entry
|
|
60
|
+
* name, so the first applied entry must be that component. Persisting a
|
|
61
61
|
* different component's checksums would cause the next status/apply run to
|
|
62
62
|
* mis-report health for both components involved.
|
|
63
63
|
*
|
|
@@ -87,7 +87,7 @@ export function getPersistableAppliedEntry(commandLabel, name, appliedEntry) {
|
|
|
87
87
|
}
|
|
88
88
|
/**
|
|
89
89
|
* Persists checksum state for a successfully applied named component by
|
|
90
|
-
*
|
|
90
|
+
* merging its `<type>/<name>/…` keys into the existing state rather than
|
|
91
91
|
* replacing the whole map.
|
|
92
92
|
*
|
|
93
93
|
* @param projectRoot - Root directory of the project
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared predicates over {@link StepError} lists.
|
|
3
3
|
*
|
|
4
|
-
* Step errors come in two severities:
|
|
5
|
-
* considered failed, triggers rollback and a non-zero exit) and
|
|
6
|
-
* (`advisory: true
|
|
7
|
-
* `.ftl` helpers whose contract is graceful degradation). Every
|
|
8
|
-
* decides rollback/failure must count only blocking errors
|
|
9
|
-
* should still surface advisory ones. This module is a leaf (types-only
|
|
4
|
+
* Step errors come in two severities: blocking (the default: the apply is
|
|
5
|
+
* considered failed, triggers rollback and a non-zero exit) and advisory
|
|
6
|
+
* (`advisory: true`, which is reported as a warning, never blocks, and is
|
|
7
|
+
* used by the `.ftl` helpers whose contract is graceful degradation). Every
|
|
8
|
+
* gate that decides rollback/failure must count only blocking errors, and
|
|
9
|
+
* every reporter should still surface advisory ones. This module is a leaf (types-only
|
|
10
10
|
* imports) so both `furnace-apply.ts` and its callers can share the
|
|
11
11
|
* predicates without import cycles.
|
|
12
12
|
*/
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Shared predicates over {@link StepError} lists.
|
|
4
4
|
*
|
|
5
|
-
* Step errors come in two severities:
|
|
6
|
-
* considered failed, triggers rollback and a non-zero exit) and
|
|
7
|
-
* (`advisory: true
|
|
8
|
-
* `.ftl` helpers whose contract is graceful degradation). Every
|
|
9
|
-
* decides rollback/failure must count only blocking errors
|
|
10
|
-
* should still surface advisory ones. This module is a leaf (types-only
|
|
5
|
+
* Step errors come in two severities: blocking (the default: the apply is
|
|
6
|
+
* considered failed, triggers rollback and a non-zero exit) and advisory
|
|
7
|
+
* (`advisory: true`, which is reported as a warning, never blocks, and is
|
|
8
|
+
* used by the `.ftl` helpers whose contract is graceful degradation). Every
|
|
9
|
+
* gate that decides rollback/failure must count only blocking errors, and
|
|
10
|
+
* every reporter should still surface advisory ones. This module is a leaf (types-only
|
|
11
11
|
* imports) so both `furnace-apply.ts` and its callers can share the
|
|
12
12
|
* predicates without import cycles.
|
|
13
13
|
*/
|
|
@@ -81,7 +81,7 @@ function hasPositiveTabindex(content) {
|
|
|
81
81
|
* Collects `[start, end)` spans of `<label>…</label>` elements whose content
|
|
82
82
|
* includes actual label text. Labels cannot nest per HTML, so the non-greedy
|
|
83
83
|
* inner match is sound. A span qualifies only when the inner content minus
|
|
84
|
-
* tags still contains non-whitespace
|
|
84
|
+
* tags still contains non-whitespace. An empty or tag-only wrapper provides
|
|
85
85
|
* no accessible name. A `${…}` Lit binding counts as label text: dynamic
|
|
86
86
|
* (usually localized) text is a legitimate accessible name.
|
|
87
87
|
*/
|
|
@@ -132,12 +132,12 @@ function hasTemplateKeyboardHandler(content) {
|
|
|
132
132
|
}
|
|
133
133
|
/**
|
|
134
134
|
* Native HTML elements that dispatch `click` on Enter and Space via the
|
|
135
|
-
* platform. Attaching `@click` to these is
|
|
136
|
-
* the browser already handles the keyboard activation path
|
|
135
|
+
* platform. Attaching `@click` to these is not a keyboard-a11y bug, because
|
|
136
|
+
* the browser already handles the keyboard activation path. A duplicate
|
|
137
137
|
* `@keydown`/`@keypress` handler would usually double-fire the action.
|
|
138
138
|
*
|
|
139
|
-
* `<a>` is accepted only when an `href` attribute is present
|
|
140
|
-
* non-interactive and is treated as synthetic.
|
|
139
|
+
* `<a>` is accepted only when an `href` attribute is present. A bare `<a>`
|
|
140
|
+
* is non-interactive and is treated as synthetic.
|
|
141
141
|
*/
|
|
142
142
|
const NATIVE_CLICK_INTERACTIVE_TAGS = new Set([
|
|
143
143
|
'button',
|
|
@@ -178,7 +178,7 @@ function isKeyboardCoveredByComposition(customConfig) {
|
|
|
178
178
|
* *synthetic* interactive element (e.g. `<div @click>`), which lacks native
|
|
179
179
|
* keyboard activation and therefore needs an explicit key handler for
|
|
180
180
|
* Enter/Space. Returns false when every `@click` handler sits on a native
|
|
181
|
-
* interactive element
|
|
181
|
+
* interactive element. Those already fire `click` on keyboard activation.
|
|
182
182
|
*/
|
|
183
183
|
function hasTemplateClickOnSyntheticInteractive(content) {
|
|
184
184
|
const pattern = /@click\s*=\s*\$\{/g;
|
|
@@ -219,7 +219,7 @@ function isClickOnSyntheticInteractive(content, clickIndex) {
|
|
|
219
219
|
return true;
|
|
220
220
|
const tagName = tagMatch[1].toLowerCase();
|
|
221
221
|
if (tagName === 'a') {
|
|
222
|
-
// Bare <a> (no href) is non-interactive
|
|
222
|
+
// Bare <a> (no href) is non-interactive, so require a keyboard handler.
|
|
223
223
|
// Look forward from the tag open for the closing `>` and scan the
|
|
224
224
|
// attribute text in between for an href attribute.
|
|
225
225
|
const tagEnd = content.indexOf('>', tagOpenIndex);
|
|
@@ -236,20 +236,20 @@ const SYMBOL_ONLY_ASCII = '+-*=<>|/\\^~@#&!?%';
|
|
|
236
236
|
* Reports whether `text` is decoration (arrows, maths, emoji, bare
|
|
237
237
|
* punctuation) rather than user-facing prose that needs localizing.
|
|
238
238
|
*
|
|
239
|
-
* The letter/number/mark test comes first and is script-agnostic
|
|
239
|
+
* The letter/number/mark test comes first and is script-agnostic. A rule
|
|
240
240
|
* keyed on `code > 0xff` would classify every code point above U+00FF as a
|
|
241
241
|
* symbol, exempting all CJK, Cyrillic, Greek, Arabic, Hebrew, Devanagari and
|
|
242
|
-
* Thai text from a
|
|
242
|
+
* Thai text from a localization validator.
|
|
243
243
|
*
|
|
244
|
-
* Combining marks are
|
|
244
|
+
* Combining marks are not counted as text: the check is an
|
|
245
245
|
* `every()`, so a script's base letters already disqualify the string, and
|
|
246
246
|
* treating marks as text would flag emoji carrying a variation selector
|
|
247
|
-
* (U+FE0F is category Mn
|
|
247
|
+
* (U+FE0F is category Mn, and `⚙️` is U+2699 + U+FE0F).
|
|
248
248
|
*
|
|
249
|
-
* High code points that are not letters
|
|
249
|
+
* High code points that are not letters (emoji, arrows, CJK punctuation)
|
|
250
250
|
* stay exempt, which is the rule's intent.
|
|
251
251
|
*
|
|
252
|
-
* A handful of emoji are
|
|
252
|
+
* A handful of emoji are also Unicode letters, and the letter test alone
|
|
253
253
|
* gets them wrong: U+2139 (`ℹ`, the base of the common `ℹ️`) is category Ll,
|
|
254
254
|
* so `\p{L}` would classify an info badge as prose needing localization.
|
|
255
255
|
* Non-ASCII code points carrying `Emoji` are therefore read as symbols
|
|
@@ -335,7 +335,7 @@ function hasFlaggedTextInLitTemplates(content) {
|
|
|
335
335
|
return false;
|
|
336
336
|
}
|
|
337
337
|
function hasFlaggedTextInDomAssignment(content) {
|
|
338
|
-
// `<expr>.textContent = "abc"` and `<expr>.innerHTML = "abc"
|
|
338
|
+
// `<expr>.textContent = "abc"` and `<expr>.innerHTML = "abc"`: these are
|
|
339
339
|
// user-visible render paths. Template-literal RHS is excluded (usually
|
|
340
340
|
// dynamic), matching the `${` guard used elsewhere in this helper.
|
|
341
341
|
const assignPattern = /\.(?:textContent|innerHTML)\s*=\s*(["'])((?:\\.|(?!\1).)*)\1/g;
|
|
@@ -170,7 +170,7 @@ function hasCustomElementDefineCall(mjsContent) {
|
|
|
170
170
|
/**
|
|
171
171
|
* Detects whether the module's `customElements.define(...)` call includes a
|
|
172
172
|
* literal `extends:` option (third argument). That shape is the marker for
|
|
173
|
-
* a customized built-in element
|
|
173
|
+
* a customized built-in element: the class extends a specific
|
|
174
174
|
* `HTMLxxxElement` rather than the autonomous `MozLitElement` path.
|
|
175
175
|
*
|
|
176
176
|
* Firefox's own widgets use this pattern for toolkit anchors (e.g.
|
|
@@ -193,24 +193,24 @@ function hasCustomElementExtendsOption(mjsContent) {
|
|
|
193
193
|
*
|
|
194
194
|
* Two shapes are accepted:
|
|
195
195
|
*
|
|
196
|
-
* 1. Autonomous custom element: `class X extends MozLitElement
|
|
196
|
+
* 1. Autonomous custom element: `class X extends MozLitElement`, the
|
|
197
197
|
* default FireForge pattern for fork-authored components and most
|
|
198
198
|
* toolkit widgets.
|
|
199
199
|
* 2. Customized built-in: `class X extends HTML<Something>Element` paired
|
|
200
200
|
* with a `customElements.define(..., ..., { extends: "<tagname>" })`
|
|
201
201
|
* call. Firefox's `moz-support-link`, `moz-button-group` tabbing
|
|
202
|
-
* widgets, and a handful of other toolkit components use this form
|
|
202
|
+
* widgets, and a handful of other toolkit components use this form.
|
|
203
203
|
* `furnace override` of those components writes the original source
|
|
204
204
|
* verbatim and the validator must not reject them.
|
|
205
205
|
*
|
|
206
|
-
* A class that extends a plain `HTMLElement`
|
|
207
|
-
* is still rejected
|
|
206
|
+
* A class that extends a plain `HTMLElement` without an `extends:` option
|
|
207
|
+
* is still rejected. That is the legitimate `not-moz-lit-element` case
|
|
208
208
|
* the rule was originally designed to catch.
|
|
209
209
|
*/
|
|
210
210
|
function classExtendsMozLitElement(mjsContent) {
|
|
211
211
|
const hasClassDeclaration = /class\s+\w+\s+extends\s+/.test(mjsContent);
|
|
212
212
|
if (!hasClassDeclaration) {
|
|
213
|
-
// No class declaration
|
|
213
|
+
// No class declaration, so skip this check since the component may use a
|
|
214
214
|
// different pattern (e.g. function-based). Other validators will catch
|
|
215
215
|
// structural issues.
|
|
216
216
|
return true;
|
|
@@ -218,8 +218,8 @@ function classExtendsMozLitElement(mjsContent) {
|
|
|
218
218
|
if (/class\s+\w+\s+extends\s+MozLitElement\b/.test(mjsContent)) {
|
|
219
219
|
return true;
|
|
220
220
|
}
|
|
221
|
-
// Customized built-in: extend a specific HTMLxxxElement
|
|
222
|
-
// call carries an `extends:` option. Both halves are required
|
|
221
|
+
// Customized built-in: extend a specific HTMLxxxElement and the define
|
|
222
|
+
// call carries an `extends:` option. Both halves are required: a class
|
|
223
223
|
// that extends `HTMLAnchorElement` without the matching define option is
|
|
224
224
|
// almost certainly an author mistake, and a define call with `extends:`
|
|
225
225
|
// without a matching class is unreachable.
|
|
@@ -243,7 +243,7 @@ function collectCssVariableReferences(cssContent) {
|
|
|
243
243
|
return referencedVariables;
|
|
244
244
|
}
|
|
245
245
|
/**
|
|
246
|
-
* Collects CSS custom property *declarations
|
|
246
|
+
* Collects CSS custom property *declarations*, i.e. names appearing on the
|
|
247
247
|
* left-hand side of a `--name:` declaration. Used to auto-exempt
|
|
248
248
|
* component-local runtime variables from the token-prefix check: if the
|
|
249
249
|
* component both declares and consumes a variable in its own CSS file, it
|
|
@@ -44,10 +44,10 @@ export declare function withRegistrationValidationCache<T>(body: () => Promise<T
|
|
|
44
44
|
*
|
|
45
45
|
* Scan set is the union of (a) the configured `tokenHostDocuments` (or
|
|
46
46
|
* the upstream default when unset) and (b) any `browser/base/content/*.xhtml`
|
|
47
|
-
* document that references `tagName
|
|
47
|
+
* document that references `tagName`. The auto-detection path catches
|
|
48
48
|
* forks that mount components from a replacement chrome document without
|
|
49
49
|
* having configured `tokenHostDocuments`. The warning fires only when
|
|
50
|
-
*
|
|
50
|
+
* none of the documents in the final scan set link the tokens CSS.
|
|
51
51
|
*/
|
|
52
52
|
export declare function validateTokenLink(componentDir: string, tagName: string, root: string, tokenPrefix?: string, tokenHostDocuments?: string[]): Promise<ValidationIssue[]>;
|
|
53
53
|
/**
|