@hominis/fireforge 0.43.1 → 0.44.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 +126 -0
- package/README.md +10 -1
- package/dist/bin/fireforge.d.ts +4 -9
- package/dist/bin/fireforge.js +42 -40
- package/dist/build-info.json +4 -4
- package/dist/src/cli.js +74 -8
- package/dist/src/commands/bootstrap.js +17 -20
- package/dist/src/commands/build.js +25 -32
- package/dist/src/commands/config.js +34 -41
- package/dist/src/commands/discard.js +8 -9
- package/dist/src/commands/doctor-check-core.d.ts +4 -18
- package/dist/src/commands/doctor-check-core.js +8 -35
- package/dist/src/commands/doctor-external-toolchains.js +2 -2
- package/dist/src/commands/doctor-furnace-config-sync.d.ts +18 -0
- package/dist/src/commands/{doctor-furnace-manifest-sync.js → doctor-furnace-config-sync.js} +27 -26
- package/dist/src/commands/doctor-furnace-jar.d.ts +7 -9
- package/dist/src/commands/doctor-furnace-jar.js +7 -9
- package/dist/src/commands/doctor-furnace.js +21 -24
- package/dist/src/commands/doctor-orphaned-harness.d.ts +16 -20
- package/dist/src/commands/doctor-orphaned-harness.js +18 -44
- package/dist/src/commands/doctor-post-rebase-audit.d.ts +2 -0
- package/dist/src/commands/{doctor/post-rebase-audit.js → doctor-post-rebase-audit.js} +3 -3
- package/dist/src/commands/doctor-working-tree.d.ts +10 -12
- package/dist/src/commands/doctor-working-tree.js +11 -18
- package/dist/src/commands/doctor.js +35 -53
- package/dist/src/commands/download.js +32 -48
- package/dist/src/commands/export-all.js +29 -33
- package/dist/src/commands/export-flow.js +6 -6
- package/dist/src/commands/export-placement-conflicts.js +10 -9
- package/dist/src/commands/export-placement-gate.js +5 -5
- package/dist/src/commands/export-shared.d.ts +30 -33
- package/dist/src/commands/export-shared.js +45 -43
- package/dist/src/commands/export.js +21 -27
- package/dist/src/commands/furnace/apply.js +14 -23
- package/dist/src/commands/furnace/chrome-doc-remove.js +14 -21
- package/dist/src/commands/furnace/chrome-doc-templates.d.ts +23 -23
- package/dist/src/commands/furnace/chrome-doc-templates.js +23 -23
- package/dist/src/commands/furnace/chrome-doc-tests.js +26 -29
- package/dist/src/commands/furnace/chrome-doc.d.ts +16 -17
- package/dist/src/commands/furnace/chrome-doc.js +31 -41
- package/dist/src/commands/furnace/create-browser-test.d.ts +4 -4
- package/dist/src/commands/furnace/create-browser-test.js +8 -8
- package/dist/src/commands/furnace/create-mochikit.d.ts +6 -7
- package/dist/src/commands/furnace/create-mochikit.js +8 -9
- package/dist/src/commands/furnace/create-readback.d.ts +12 -13
- package/dist/src/commands/furnace/create-readback.js +12 -13
- package/dist/src/commands/furnace/create-templates.d.ts +22 -28
- package/dist/src/commands/furnace/create-templates.js +35 -30
- package/dist/src/commands/furnace/create-xpcshell.js +2 -2
- package/dist/src/commands/furnace/create.js +33 -23
- package/dist/src/commands/furnace/deploy.js +16 -24
- package/dist/src/commands/furnace/diff.js +9 -9
- package/dist/src/commands/furnace/init.js +33 -36
- package/dist/src/commands/furnace/override.js +23 -25
- package/dist/src/commands/furnace/preview.js +47 -67
- package/dist/src/commands/furnace/refresh.js +12 -16
- package/dist/src/commands/furnace/remove-mutations.d.ts +3 -6
- package/dist/src/commands/furnace/remove-mutations.js +9 -16
- package/dist/src/commands/furnace/remove-state.js +1 -1
- package/dist/src/commands/furnace/remove.js +33 -38
- package/dist/src/commands/furnace/rename-xpcshell.d.ts +8 -11
- package/dist/src/commands/furnace/rename-xpcshell.js +8 -11
- package/dist/src/commands/furnace/rename.js +59 -69
- package/dist/src/commands/furnace/scan.js +19 -33
- package/dist/src/commands/furnace/status.js +12 -9
- package/dist/src/commands/furnace/sync.js +9 -16
- package/dist/src/commands/furnace/validate.js +20 -20
- package/dist/src/commands/import.js +42 -35
- package/dist/src/commands/lint-per-patch.js +15 -10
- package/dist/src/commands/lint-per-run-checkjs.d.ts +13 -13
- package/dist/src/commands/lint-per-run-checkjs.js +13 -13
- package/dist/src/commands/lint-report.js +6 -7
- package/dist/src/commands/lint.d.ts +15 -16
- package/dist/src/commands/lint.js +86 -102
- package/dist/src/commands/package.js +6 -11
- package/dist/src/commands/patch/compact.js +1 -1
- package/dist/src/commands/patch/delete.js +24 -33
- package/dist/src/commands/patch/index.d.ts +5 -6
- package/dist/src/commands/patch/index.js +10 -12
- package/dist/src/commands/patch/lint-ignore.js +14 -13
- package/dist/src/commands/patch/move-files-create.d.ts +6 -6
- package/dist/src/commands/patch/move-files-create.js +8 -8
- package/dist/src/commands/patch/move-files-into.d.ts +6 -6
- package/dist/src/commands/patch/move-files-into.js +8 -8
- package/dist/src/commands/patch/patch-context.d.ts +2 -3
- package/dist/src/commands/patch/patch-context.js +2 -3
- package/dist/src/commands/patch/rename.d.ts +10 -11
- package/dist/src/commands/patch/rename.js +11 -12
- package/dist/src/commands/patch/reorder.js +8 -9
- package/dist/src/commands/patch/split-plan.js +1 -1
- package/dist/src/commands/patch/split.d.ts +8 -10
- package/dist/src/commands/patch/split.js +9 -11
- package/dist/src/commands/patch/staged-dependency-validate.js +8 -8
- package/dist/src/commands/patch/staged-dependency.js +7 -3
- package/dist/src/commands/patch/tier.d.ts +9 -9
- package/dist/src/commands/patch/tier.js +18 -15
- package/dist/src/commands/re-export-adjacent.js +9 -8
- package/dist/src/commands/re-export-bulk-scan.d.ts +9 -9
- package/dist/src/commands/re-export-bulk-scan.js +22 -21
- package/dist/src/commands/re-export-drift.js +10 -10
- package/dist/src/commands/re-export-files.d.ts +6 -7
- package/dist/src/commands/re-export-files.js +34 -44
- package/dist/src/commands/re-export-lint.d.ts +10 -13
- package/dist/src/commands/re-export-lint.js +16 -14
- package/dist/src/commands/re-export-options.d.ts +6 -6
- package/dist/src/commands/re-export-options.js +6 -6
- package/dist/src/commands/re-export-register.d.ts +4 -10
- package/dist/src/commands/re-export-register.js +5 -11
- package/dist/src/commands/re-export-scan.js +1 -1
- package/dist/src/commands/re-export-single.d.ts +3 -3
- package/dist/src/commands/re-export-single.js +33 -25
- package/dist/src/commands/re-export.js +13 -21
- package/dist/src/commands/rebase/abort.js +3 -3
- package/dist/src/commands/rebase/confirm.js +2 -1
- package/dist/src/commands/rebase/continue.d.ts +1 -1
- package/dist/src/commands/rebase/continue.js +14 -9
- package/dist/src/commands/rebase/index.js +11 -11
- package/dist/src/commands/rebase/patch-loop.d.ts +7 -1
- package/dist/src/commands/rebase/patch-loop.js +60 -39
- package/dist/src/commands/rebase/summary.js +1 -1
- package/dist/src/commands/register.js +5 -7
- package/dist/src/commands/reset.js +2 -1
- package/dist/src/commands/resolve.d.ts +16 -13
- package/dist/src/commands/resolve.js +30 -33
- package/dist/src/commands/run.js +33 -35
- package/dist/src/commands/setup-support.js +15 -19
- package/dist/src/commands/setup.js +13 -9
- package/dist/src/commands/status-check.d.ts +6 -6
- package/dist/src/commands/status-json.d.ts +6 -6
- package/dist/src/commands/status-json.js +5 -0
- package/dist/src/commands/status-output.d.ts +5 -5
- package/dist/src/commands/status-output.js +6 -6
- package/dist/src/commands/status-ownership.d.ts +16 -14
- package/dist/src/commands/status-ownership.js +16 -14
- package/dist/src/commands/status.js +42 -34
- package/dist/src/commands/test-build-phase.js +26 -13
- package/dist/src/commands/test-diagnose.js +44 -44
- package/dist/src/commands/test-register.js +1 -0
- package/dist/src/commands/test-run.d.ts +14 -16
- package/dist/src/commands/test-run.js +21 -13
- package/dist/src/commands/test-stale-gate.d.ts +15 -16
- package/dist/src/commands/test-stale-gate.js +15 -16
- package/dist/src/commands/test-verdict.d.ts +20 -3
- package/dist/src/commands/test-verdict.js +30 -0
- package/dist/src/commands/test.js +83 -76
- package/dist/src/commands/token-coverage.js +3 -4
- package/dist/src/commands/token.js +16 -18
- package/dist/src/commands/tree.js +47 -31
- package/dist/src/commands/typecheck.d.ts +10 -12
- package/dist/src/commands/typecheck.js +24 -27
- package/dist/src/commands/verify.js +13 -15
- package/dist/src/commands/watch.js +21 -23
- package/dist/src/commands/wire.js +52 -62
- package/dist/src/core/ast-utils.d.ts +8 -7
- package/dist/src/core/ast-utils.js +8 -7
- package/dist/src/core/branding.d.ts +9 -14
- package/dist/src/core/branding.js +7 -11
- package/dist/src/core/browser-wire.d.ts +1 -1
- package/dist/src/core/browser-wire.js +14 -19
- package/dist/src/core/build-audit-platform.js +25 -33
- package/dist/src/core/build-audit-registration.js +17 -25
- package/dist/src/core/build-audit-resolve.d.ts +15 -17
- package/dist/src/core/build-audit-resolve.js +27 -33
- package/dist/src/core/build-audit-transforms.js +18 -19
- package/dist/src/core/build-audit.js +28 -42
- package/dist/src/core/build-baseline-types.d.ts +29 -35
- package/dist/src/core/build-baseline.d.ts +5 -4
- package/dist/src/core/build-baseline.js +14 -14
- package/dist/src/core/build-overwrite-guard.d.ts +7 -14
- package/dist/src/core/build-overwrite-guard.js +17 -27
- package/dist/src/core/build-prepare.d.ts +2 -2
- package/dist/src/core/build-prepare.js +8 -9
- package/dist/src/core/config-state.js +12 -4
- package/dist/src/core/config-validate.js +8 -5
- package/dist/src/core/config.d.ts +5 -8
- package/dist/src/core/config.js +7 -16
- package/dist/src/core/coverage-extend.d.ts +15 -13
- package/dist/src/core/coverage-extend.js +15 -13
- package/dist/src/core/destructive.d.ts +31 -9
- package/dist/src/core/destructive.js +29 -26
- package/dist/src/core/diff-hunks.js +10 -12
- package/dist/src/core/discard-baseline.d.ts +8 -8
- package/dist/src/core/discard-baseline.js +16 -15
- package/dist/src/core/display-state.d.ts +12 -14
- package/dist/src/core/display-state.js +12 -14
- package/dist/src/core/engine-changes.d.ts +2 -4
- package/dist/src/core/engine-changes.js +2 -4
- package/dist/src/core/engine-precondition.d.ts +28 -13
- package/dist/src/core/engine-precondition.js +25 -10
- package/dist/src/core/engine-session-lock.d.ts +47 -21
- package/dist/src/core/engine-session-lock.js +168 -33
- package/dist/src/core/export-moved-code-shape.d.ts +10 -10
- package/dist/src/core/export-moved-code-shape.js +10 -10
- package/dist/src/core/file-lock.d.ts +62 -5
- package/dist/src/core/file-lock.js +196 -59
- package/dist/src/core/firefox-cache.js +1 -3
- package/dist/src/core/firefox-extract.js +10 -14
- package/dist/src/core/firefox.d.ts +7 -5
- package/dist/src/core/firefox.js +4 -5
- package/dist/src/core/furnace-apply-dry-run.d.ts +2 -2
- package/dist/src/core/furnace-apply-dry-run.js +3 -2
- package/dist/src/core/furnace-apply-ftl.d.ts +7 -9
- package/dist/src/core/furnace-apply-ftl.js +12 -12
- package/dist/src/core/furnace-apply-helpers.d.ts +7 -7
- package/dist/src/core/furnace-apply-helpers.js +19 -16
- package/dist/src/core/furnace-apply-overwrite-warn.d.ts +8 -9
- package/dist/src/core/furnace-apply-overwrite-warn.js +8 -9
- package/dist/src/core/furnace-apply-undeploy-actions.d.ts +3 -4
- package/dist/src/core/furnace-apply-undeploy-actions.js +3 -4
- package/dist/src/core/furnace-apply.d.ts +5 -8
- package/dist/src/core/furnace-apply.js +19 -24
- package/dist/src/core/furnace-checksum-utils.d.ts +14 -0
- package/dist/src/core/furnace-checksum-utils.js +16 -0
- package/dist/src/core/furnace-config.d.ts +21 -30
- package/dist/src/core/furnace-config.js +32 -54
- package/dist/src/core/furnace-constants.d.ts +8 -0
- package/dist/src/core/furnace-constants.js +10 -2
- package/dist/src/core/furnace-css-fragments.d.ts +5 -5
- package/dist/src/core/furnace-css-fragments.js +5 -5
- package/dist/src/core/furnace-jsconfig.d.ts +11 -12
- package/dist/src/core/furnace-jsconfig.js +11 -12
- package/dist/src/core/furnace-marker.d.ts +7 -8
- package/dist/src/core/furnace-marker.js +7 -8
- package/dist/src/core/furnace-operation.d.ts +31 -0
- package/dist/src/core/furnace-operation.js +54 -17
- package/dist/src/core/furnace-precondition.d.ts +61 -0
- package/dist/src/core/furnace-precondition.js +67 -0
- package/dist/src/core/furnace-registration-remove.d.ts +5 -6
- package/dist/src/core/furnace-registration-remove.js +6 -7
- package/dist/src/core/furnace-registration-validate.d.ts +13 -0
- package/dist/src/core/furnace-registration-validate.js +20 -1
- package/dist/src/core/furnace-registration.d.ts +5 -6
- package/dist/src/core/furnace-registration.js +10 -12
- package/dist/src/core/furnace-rollback.js +7 -7
- package/dist/src/core/furnace-scanner.d.ts +1 -0
- package/dist/src/core/furnace-scanner.js +1 -2
- package/dist/src/core/furnace-stale-export.d.ts +10 -10
- package/dist/src/core/furnace-stale-export.js +10 -10
- package/dist/src/core/furnace-state-persist.d.ts +6 -8
- package/dist/src/core/furnace-state-persist.js +6 -8
- package/dist/src/core/furnace-validate-accessibility.d.ts +22 -0
- package/dist/src/core/furnace-validate-accessibility.js +310 -1
- package/dist/src/core/furnace-validate-compatibility.js +141 -1
- package/dist/src/core/furnace-validate-helpers.d.ts +5 -116
- package/dist/src/core/furnace-validate-helpers.js +0 -491
- package/dist/src/core/furnace-validate-registration.d.ts +7 -0
- package/dist/src/core/furnace-validate-registration.js +115 -41
- package/dist/src/core/furnace-validate.d.ts +16 -0
- package/dist/src/core/furnace-validate.js +188 -145
- package/dist/src/core/furnace-version-drift.d.ts +10 -11
- package/dist/src/core/furnace-version-drift.js +10 -11
- package/dist/src/core/git-base.d.ts +7 -9
- package/dist/src/core/git-base.js +7 -9
- package/dist/src/core/git-diff.d.ts +20 -9
- package/dist/src/core/git-diff.js +148 -63
- package/dist/src/core/git-file-ops.d.ts +19 -19
- package/dist/src/core/git-file-ops.js +19 -19
- package/dist/src/core/git-readonly-index.d.ts +53 -19
- package/dist/src/core/git-readonly-index.js +75 -31
- package/dist/src/core/git-status.d.ts +5 -6
- package/dist/src/core/git-status.js +5 -6
- package/dist/src/core/git.d.ts +9 -10
- package/dist/src/core/git.js +54 -70
- package/dist/src/core/license-headers.d.ts +17 -23
- package/dist/src/core/license-headers.js +17 -23
- package/dist/src/core/mach-build-artifacts.d.ts +9 -9
- package/dist/src/core/mach-build-artifacts.js +57 -19
- package/dist/src/core/mach-error-hints.js +42 -29
- package/dist/src/core/mach-known-noise-filter.d.ts +15 -16
- package/dist/src/core/mach-known-noise-filter.js +18 -20
- package/dist/src/core/mach-mozconfig.d.ts +14 -0
- package/dist/src/core/mach-mozconfig.js +30 -0
- package/dist/src/core/mach-resource-shim.d.ts +43 -58
- package/dist/src/core/mach-resource-shim.js +50 -67
- package/dist/src/core/mach.d.ts +37 -41
- package/dist/src/core/mach.js +50 -51
- package/dist/src/core/marionette-port.d.ts +36 -1
- package/dist/src/core/marionette-port.js +96 -31
- package/dist/src/core/marionette-preflight.d.ts +8 -12
- package/dist/src/core/marionette-preflight.js +86 -52
- package/dist/src/core/mochitest-server-port.d.ts +42 -0
- package/dist/src/core/mochitest-server-port.js +119 -0
- package/dist/src/core/module-resolution-preflight.d.ts +9 -11
- package/dist/src/core/module-resolution-preflight.js +9 -11
- package/dist/src/core/moz-manifest-helpers.d.ts +79 -0
- package/dist/src/core/moz-manifest-helpers.js +163 -0
- package/dist/src/core/{manifest-register.d.ts → moz-manifest-register.d.ts} +1 -1
- package/dist/src/core/{manifest-register.js → moz-manifest-register.js} +13 -28
- package/dist/src/core/{manifest-rules.d.ts → moz-manifest-rules.d.ts} +10 -1
- package/dist/src/core/{manifest-rules.js → moz-manifest-rules.js} +31 -24
- package/dist/src/core/{manifest-tokenizers.d.ts → moz-manifest-tokenizers.d.ts} +3 -5
- package/dist/src/core/{manifest-tokenizers.js → moz-manifest-tokenizers.js} +9 -12
- package/dist/src/core/ownership-table.d.ts +14 -16
- package/dist/src/core/ownership-table.js +14 -16
- package/dist/src/core/parser-fallback.d.ts +15 -1
- package/dist/src/core/parser-fallback.js +22 -3
- package/dist/src/core/patch-apply-fuzz.d.ts +10 -12
- package/dist/src/core/patch-apply-fuzz.js +15 -18
- package/dist/src/core/patch-apply.d.ts +13 -34
- package/dist/src/core/patch-apply.js +16 -76
- package/dist/src/core/patch-artifact-normalize.d.ts +13 -15
- package/dist/src/core/patch-artifact-normalize.js +13 -15
- package/dist/src/core/patch-export-metadata.d.ts +12 -2
- package/dist/src/core/patch-export-metadata.js +13 -4
- package/dist/src/core/patch-export-update.d.ts +13 -1
- package/dist/src/core/patch-export-update.js +25 -8
- package/dist/src/core/patch-export.d.ts +15 -8
- package/dist/src/core/patch-export.js +10 -11
- package/dist/src/core/patch-files.d.ts +5 -6
- package/dist/src/core/patch-files.js +5 -6
- package/dist/src/core/patch-identifier-suggest.d.ts +7 -12
- package/dist/src/core/patch-identifier-suggest.js +14 -19
- package/dist/src/core/patch-lint-binary.d.ts +51 -0
- package/dist/src/core/patch-lint-binary.js +39 -0
- package/dist/src/core/{lint-cache.d.ts → patch-lint-cache.d.ts} +5 -5
- package/dist/src/core/{lint-cache.js → patch-lint-cache.js} +21 -23
- package/dist/src/core/patch-lint-checkjs.d.ts +16 -16
- package/dist/src/core/patch-lint-checkjs.js +16 -16
- package/dist/src/core/patch-lint-chrome-jsdoc.d.ts +6 -9
- package/dist/src/core/patch-lint-chrome-jsdoc.js +10 -14
- package/dist/src/core/patch-lint-creators.d.ts +8 -8
- package/dist/src/core/patch-lint-creators.js +8 -8
- package/dist/src/core/patch-lint-cross.d.ts +17 -20
- package/dist/src/core/patch-lint-cross.js +16 -16
- package/dist/src/core/patch-lint-css.d.ts +3 -5
- package/dist/src/core/patch-lint-css.js +17 -22
- package/dist/src/core/patch-lint-diff-tag.d.ts +14 -16
- package/dist/src/core/patch-lint-diff-tag.js +14 -16
- package/dist/src/core/patch-lint-jsdoc.d.ts +7 -8
- package/dist/src/core/patch-lint-jsdoc.js +26 -19
- package/dist/src/core/patch-lint-mozbuild.js +20 -20
- package/dist/src/core/patch-lint-observer.d.ts +7 -7
- package/dist/src/core/patch-lint-observer.js +7 -7
- package/dist/src/core/patch-lint.d.ts +38 -29
- package/dist/src/core/patch-lint.js +89 -121
- package/dist/src/core/patch-lock.d.ts +1 -1
- package/dist/src/core/patch-lock.js +45 -9
- package/dist/src/core/patch-manifest-consistency.d.ts +2 -1
- package/dist/src/core/patch-manifest-consistency.js +25 -27
- package/dist/src/core/patch-manifest-io.js +14 -18
- package/dist/src/core/patch-manifest-resolve.d.ts +9 -12
- package/dist/src/core/patch-manifest-resolve.js +9 -12
- package/dist/src/core/patch-manifest-validate.d.ts +6 -1
- package/dist/src/core/patch-manifest-validate.js +25 -13
- package/dist/src/core/patch-parse.d.ts +24 -13
- package/dist/src/core/patch-parse.js +19 -14
- package/dist/src/core/patch-policy.d.ts +2 -2
- package/dist/src/core/patch-policy.js +2 -2
- package/dist/src/core/patch-registration-refs.d.ts +7 -8
- package/dist/src/core/patch-registration-refs.js +9 -9
- package/dist/src/core/process-cpu-time.d.ts +12 -0
- package/dist/src/core/process-cpu-time.js +52 -0
- package/dist/src/core/rebase-session.d.ts +38 -26
- package/dist/src/core/rebase-session.js +55 -28
- package/dist/src/core/register-browser-content.js +9 -74
- package/dist/src/core/{register-test-manifest.js → register-browser-test.js} +7 -42
- package/dist/src/core/register-module.js +10 -43
- package/dist/src/core/register-scaffold.d.ts +8 -8
- package/dist/src/core/register-scaffold.js +10 -10
- package/dist/src/core/register-shared-css.d.ts +9 -12
- package/dist/src/core/register-shared-css.js +17 -87
- package/dist/src/core/register-xpcshell-test.d.ts +6 -7
- package/dist/src/core/register-xpcshell-test.js +7 -8
- package/dist/src/core/shared-ftl.js +12 -4
- package/dist/src/core/state-file.d.ts +45 -0
- package/dist/src/core/state-file.js +34 -0
- package/dist/src/core/status-binary.d.ts +18 -11
- package/dist/src/core/status-binary.js +19 -12
- package/dist/src/core/status-classify.d.ts +30 -36
- package/dist/src/core/status-classify.js +21 -26
- package/dist/src/core/test-changed-prefs.d.ts +30 -0
- package/dist/src/core/test-changed-prefs.js +78 -0
- package/dist/src/core/test-harness-crash.d.ts +25 -63
- package/dist/src/core/test-harness-crash.js +121 -142
- package/dist/src/core/test-harness-signature.d.ts +18 -0
- package/dist/src/core/test-harness-signature.js +13 -0
- package/dist/src/core/test-path-scope.d.ts +12 -15
- package/dist/src/core/test-path-scope.js +15 -18
- package/dist/src/core/test-stale-check.d.ts +17 -17
- package/dist/src/core/test-stale-check.js +50 -43
- package/dist/src/core/test-stall-triage.d.ts +51 -0
- package/dist/src/core/test-stall-triage.js +126 -0
- package/dist/src/core/token-category.js +5 -7
- package/dist/src/core/token-coverage.js +9 -9
- package/dist/src/core/token-dark-mode.d.ts +9 -11
- package/dist/src/core/token-dark-mode.js +9 -11
- package/dist/src/core/token-docs.d.ts +2 -0
- package/dist/src/core/token-docs.js +2 -0
- package/dist/src/core/token-manager.d.ts +10 -2
- package/dist/src/core/token-manager.js +17 -8
- package/dist/src/core/token-scaffold.d.ts +7 -7
- package/dist/src/core/token-scaffold.js +7 -7
- package/dist/src/core/token-variant.d.ts +4 -4
- package/dist/src/core/token-variant.js +4 -4
- package/dist/src/core/toolchain-preflight.d.ts +20 -21
- package/dist/src/core/toolchain-preflight.js +28 -31
- package/dist/src/core/tree-guard.js +12 -2
- package/dist/src/core/tree-store.d.ts +41 -27
- package/dist/src/core/tree-store.js +63 -42
- package/dist/src/core/typecheck-shim.d.ts +23 -24
- package/dist/src/core/typecheck-shim.js +23 -24
- package/dist/src/core/typecheck.js +8 -8
- package/dist/src/core/wire-destroy.d.ts +3 -3
- package/dist/src/core/wire-destroy.js +7 -15
- package/dist/src/core/wire-dom-fragment.d.ts +9 -17
- package/dist/src/core/wire-dom-fragment.js +11 -44
- package/dist/src/core/wire-init.d.ts +2 -3
- package/dist/src/core/wire-init.js +8 -19
- package/dist/src/core/wire-subscript.d.ts +2 -3
- package/dist/src/core/wire-subscript.js +4 -13
- package/dist/src/core/wire-utils.d.ts +7 -8
- package/dist/src/core/wire-utils.js +7 -8
- package/dist/src/core/xpcshell-appdir.d.ts +38 -45
- package/dist/src/core/xpcshell-appdir.js +38 -45
- package/dist/src/errors/base.d.ts +37 -16
- package/dist/src/errors/base.js +37 -16
- package/dist/src/errors/build.d.ts +13 -1
- package/dist/src/errors/build.js +14 -2
- package/dist/src/errors/codes.d.ts +16 -0
- package/dist/src/errors/codes.js +16 -0
- package/dist/src/errors/furnace.d.ts +4 -4
- package/dist/src/errors/git.d.ts +6 -10
- package/dist/src/errors/git.js +6 -10
- package/dist/src/errors/patch.d.ts +7 -7
- package/dist/src/errors/patch.js +7 -7
- package/dist/src/errors/rebase.d.ts +4 -4
- package/dist/src/errors/rebase.js +4 -4
- package/dist/src/index.d.ts +7 -1
- package/dist/src/index.js +5 -0
- package/dist/src/types/commands/index.d.ts +2 -2
- package/dist/src/types/commands/options.d.ts +88 -70
- package/dist/src/types/commands/patches.d.ts +24 -34
- package/dist/src/types/commands/project.d.ts +5 -34
- package/dist/src/types/config.d.ts +25 -23
- package/dist/src/types/config.js +6 -1
- package/dist/src/types/furnace.d.ts +37 -13
- package/dist/src/types/furnace.js +19 -1
- package/dist/src/types/index.d.ts +3 -3
- package/dist/src/utils/build-info.d.ts +7 -8
- package/dist/src/utils/build-info.js +12 -11
- package/dist/src/utils/errors.d.ts +6 -8
- package/dist/src/utils/errors.js +6 -8
- package/dist/src/utils/logger.d.ts +27 -10
- package/dist/src/utils/logger.js +28 -16
- package/dist/src/utils/machine-output.d.ts +12 -0
- package/dist/src/utils/machine-output.js +33 -0
- package/dist/src/utils/options.d.ts +31 -14
- package/dist/src/utils/options.js +86 -30
- package/dist/src/utils/paths.d.ts +10 -8
- package/dist/src/utils/paths.js +10 -8
- package/dist/src/utils/platform.d.ts +0 -25
- package/dist/src/utils/platform.js +1 -42
- package/dist/src/utils/process-group.d.ts +9 -4
- package/dist/src/utils/process-group.js +19 -5
- package/dist/src/utils/process.d.ts +42 -7
- package/dist/src/utils/process.js +44 -17
- package/dist/src/utils/ps-duration.d.ts +31 -0
- package/dist/src/utils/ps-duration.js +70 -0
- package/dist/src/utils/regex.d.ts +9 -10
- package/dist/src/utils/regex.js +9 -10
- package/dist/src/utils/validation.d.ts +58 -28
- package/dist/src/utils/validation.js +60 -33
- package/package.json +2 -2
- package/dist/src/commands/doctor/post-rebase-audit.d.ts +0 -2
- package/dist/src/commands/doctor-furnace-manifest-sync.d.ts +0 -18
- package/dist/src/core/manifest-helpers.d.ts +0 -38
- package/dist/src/core/manifest-helpers.js +0 -120
- /package/dist/src/core/{lint-projection.d.ts → patch-lint-projection.d.ts} +0 -0
- /package/dist/src/core/{lint-projection.js → patch-lint-projection.js} +0 -0
- /package/dist/src/core/{register-test-manifest.d.ts → register-browser-test.d.ts} +0 -0
|
@@ -2,16 +2,15 @@
|
|
|
2
2
|
* Removal of custom element registrations from customElements.js.
|
|
3
3
|
*
|
|
4
4
|
* Uses the same AST parser as the add path (`furnace-registration-ast.ts`) to
|
|
5
|
-
* locate and delete registration entries.
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* agnostic by construction.
|
|
5
|
+
* locate and delete registration entries. A line-by-line scan with a bounded
|
|
6
|
+
* bracket match only works against Firefox's stock formatting and fails
|
|
7
|
+
* silently on a hand-reformatted customElements.js; AST-based bracket
|
|
8
|
+
* matching is format-agnostic by construction.
|
|
10
9
|
*
|
|
11
10
|
* Contract:
|
|
12
11
|
* - Idempotent: if the tag is not registered, the file is left unchanged.
|
|
13
12
|
* - Non-destructive on parse failure: if customElements.js cannot be parsed,
|
|
14
|
-
* the file is left untouched rather than
|
|
13
|
+
* the file is left untouched rather than falling through to a line-based
|
|
15
14
|
* heuristic that could delete the wrong range.
|
|
16
15
|
* - Two registration shapes are recognised:
|
|
17
16
|
* (A) Standalone statement:
|
|
@@ -3,16 +3,15 @@
|
|
|
3
3
|
* Removal of custom element registrations from customElements.js.
|
|
4
4
|
*
|
|
5
5
|
* Uses the same AST parser as the add path (`furnace-registration-ast.ts`) to
|
|
6
|
-
* locate and delete registration entries.
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* agnostic by construction.
|
|
6
|
+
* locate and delete registration entries. A line-by-line scan with a bounded
|
|
7
|
+
* bracket match only works against Firefox's stock formatting and fails
|
|
8
|
+
* silently on a hand-reformatted customElements.js; AST-based bracket
|
|
9
|
+
* matching is format-agnostic by construction.
|
|
11
10
|
*
|
|
12
11
|
* Contract:
|
|
13
12
|
* - Idempotent: if the tag is not registered, the file is left unchanged.
|
|
14
13
|
* - Non-destructive on parse failure: if customElements.js cannot be parsed,
|
|
15
|
-
* the file is left untouched rather than
|
|
14
|
+
* the file is left untouched rather than falling through to a line-based
|
|
16
15
|
* heuristic that could delete the wrong range.
|
|
17
16
|
* - Two registration shapes are recognised:
|
|
18
17
|
* (A) Standalone statement:
|
|
@@ -32,7 +31,7 @@ import { CUSTOM_ELEMENTS_JS } from './furnace-constants.js';
|
|
|
32
31
|
* to (and including) the next newline. This keeps the surrounding file
|
|
33
32
|
* layout stable: deleting a list entry should not leave a dangling comma
|
|
34
33
|
* behind, and deleting an expression statement should not leave a blank
|
|
35
|
-
* line where the statement
|
|
34
|
+
* line where the statement stood.
|
|
36
35
|
*/
|
|
37
36
|
function expandRemovalRange(content, start, end) {
|
|
38
37
|
let expandedEnd = end;
|
|
@@ -21,6 +21,19 @@ export declare const CUSTOM_ELEMENT_TAG_RULES = "must be lowercase, start with a
|
|
|
21
21
|
* @throws FurnaceError if the tag name is invalid
|
|
22
22
|
*/
|
|
23
23
|
export declare function validateTagName(tagName: string): void;
|
|
24
|
+
/**
|
|
25
|
+
* Returns why `tagName` is invalid, or `undefined` when it is fine.
|
|
26
|
+
*
|
|
27
|
+
* The message-returning half of {@link validateTagName}, for callers that
|
|
28
|
+
* must not throw — specifically clack `validate` callbacks, which expect a
|
|
29
|
+
* returned string and re-prompt on it. Passing the THROWING form to one
|
|
30
|
+
* makes an invalid tag name escape clack's validation loop as a
|
|
31
|
+
* `FurnaceError`, killing the prompt instead of showing the rule inline.
|
|
32
|
+
*
|
|
33
|
+
* @param tagName - Candidate custom element tag name
|
|
34
|
+
* @returns The rule violation, or undefined when the name is valid
|
|
35
|
+
*/
|
|
36
|
+
export declare function describeTagNameProblem(tagName: string): string | undefined;
|
|
24
37
|
/**
|
|
25
38
|
* Validates that a registration entry landed in the correct block
|
|
26
39
|
* (Pattern A = loadSubScript, Pattern B = DOMContentLoaded/importESModule).
|
|
@@ -24,9 +24,28 @@ export const CUSTOM_ELEMENT_TAG_RULES = 'must be lowercase, start with a letter,
|
|
|
24
24
|
* @throws FurnaceError if the tag name is invalid
|
|
25
25
|
*/
|
|
26
26
|
export function validateTagName(tagName) {
|
|
27
|
+
const problem = describeTagNameProblem(tagName);
|
|
28
|
+
if (problem !== undefined) {
|
|
29
|
+
throw new FurnaceError(problem, tagName);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Returns why `tagName` is invalid, or `undefined` when it is fine.
|
|
34
|
+
*
|
|
35
|
+
* The message-returning half of {@link validateTagName}, for callers that
|
|
36
|
+
* must not throw — specifically clack `validate` callbacks, which expect a
|
|
37
|
+
* returned string and re-prompt on it. Passing the THROWING form to one
|
|
38
|
+
* makes an invalid tag name escape clack's validation loop as a
|
|
39
|
+
* `FurnaceError`, killing the prompt instead of showing the rule inline.
|
|
40
|
+
*
|
|
41
|
+
* @param tagName - Candidate custom element tag name
|
|
42
|
+
* @returns The rule violation, or undefined when the name is valid
|
|
43
|
+
*/
|
|
44
|
+
export function describeTagNameProblem(tagName) {
|
|
27
45
|
if (!CUSTOM_ELEMENT_TAG_PATTERN.test(tagName)) {
|
|
28
|
-
|
|
46
|
+
return `Invalid tag name "${tagName}": ${CUSTOM_ELEMENT_TAG_RULES}`;
|
|
29
47
|
}
|
|
48
|
+
return undefined;
|
|
30
49
|
}
|
|
31
50
|
/**
|
|
32
51
|
* Validates that a registration entry landed in the correct block
|
|
@@ -81,12 +81,11 @@ export interface StaleJarMnEntry {
|
|
|
81
81
|
line: string;
|
|
82
82
|
}
|
|
83
83
|
/**
|
|
84
|
-
* Scans jar.mn for widget registration lines `(widgets/<tag>/<file>)`
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
* never touched.
|
|
84
|
+
* Scans jar.mn for widget registration lines `(widgets/<tag>/<file>)` whose
|
|
85
|
+
* workspace source file no longer exists — a renamed component helper
|
|
86
|
+
* otherwise leaves the old line pointing at a deleted file and every build
|
|
87
|
+
* fails at packaging. Only tags in `managedTags` (furnace-managed custom
|
|
88
|
+
* components) are inspected, so upstream lines are never touched.
|
|
90
89
|
*/
|
|
91
90
|
export declare function findStaleJarMnEntries(engineDir: string, customDir: string, managedTags: readonly string[]): Promise<StaleJarMnEntry[]>;
|
|
92
91
|
/**
|
|
@@ -223,12 +223,11 @@ export async function removeJarMnEntries(engineDir, tagName) {
|
|
|
223
223
|
const lines = content.split('\n');
|
|
224
224
|
// Match by the SOURCE MAPPING segment `(widgets/<tagName>/...)` so every
|
|
225
225
|
// line the component registered is removed regardless of the target
|
|
226
|
-
// basename — a helper `.mjs` whose name does not start with the tag
|
|
227
|
-
//
|
|
228
|
-
//
|
|
229
|
-
//
|
|
230
|
-
//
|
|
231
|
-
// boundaries keep "moz-card" from matching "moz-card-group".
|
|
226
|
+
// basename — a helper `.mjs` whose name does not start with the tag (e.g.
|
|
227
|
+
// a renamed `foo-utils.mjs`) otherwise survives the remove pass and leaves
|
|
228
|
+
// a stale registration that breaks packaging. The legacy target-path match
|
|
229
|
+
// is kept as an OR for lines written before the source mapping existed.
|
|
230
|
+
// Word boundaries keep "moz-card" from matching "moz-card-group".
|
|
232
231
|
const sourcePattern = new RegExp(`\\(widgets/${escapeRegex(tagName)}/`);
|
|
233
232
|
const legacyTargetPattern = new RegExp(`content/global/elements/${escapeRegex(tagName)}\\.`);
|
|
234
233
|
const filtered = lines.filter((line) => !sourcePattern.test(line) && !legacyTargetPattern.test(line));
|
|
@@ -239,12 +238,11 @@ export async function removeJarMnEntries(engineDir, tagName) {
|
|
|
239
238
|
}
|
|
240
239
|
const WIDGET_SOURCE_MAPPING_PATTERN = /\(widgets\/([^/)]+)\/([^)]+)\)/;
|
|
241
240
|
/**
|
|
242
|
-
* Scans jar.mn for widget registration lines `(widgets/<tag>/<file>)`
|
|
243
|
-
*
|
|
244
|
-
*
|
|
245
|
-
*
|
|
246
|
-
*
|
|
247
|
-
* never touched.
|
|
241
|
+
* Scans jar.mn for widget registration lines `(widgets/<tag>/<file>)` whose
|
|
242
|
+
* workspace source file no longer exists — a renamed component helper
|
|
243
|
+
* otherwise leaves the old line pointing at a deleted file and every build
|
|
244
|
+
* fails at packaging. Only tags in `managedTags` (furnace-managed custom
|
|
245
|
+
* components) are inspected, so upstream lines are never touched.
|
|
248
246
|
*/
|
|
249
247
|
export async function findStaleJarMnEntries(engineDir, customDir, managedTags) {
|
|
250
248
|
const filePath = join(engineDir, JAR_MN);
|
|
@@ -92,14 +92,14 @@ async function restoreFile(filePath, snapshot) {
|
|
|
92
92
|
return;
|
|
93
93
|
}
|
|
94
94
|
await mkdir(dirname(filePath), { recursive: true });
|
|
95
|
-
// Write to a sibling temp file and atomically rename it over the target.
|
|
96
|
-
//
|
|
95
|
+
// Write to a sibling temp file and atomically rename it over the target. A
|
|
96
|
+
// direct writeFile would race with any in-flight write by the body (e.g. a
|
|
97
97
|
// signal-handler-driven rollback landing on top of a still-running
|
|
98
|
-
// `writeFile('corrupted')`
|
|
99
|
-
//
|
|
100
|
-
//
|
|
101
|
-
//
|
|
102
|
-
//
|
|
98
|
+
// `writeFile('corrupted')`), producing interleaved byte sequences like
|
|
99
|
+
// `"pristined"` where the first 8 bytes come from the rollback write and
|
|
100
|
+
// the trailing byte from the body write. rename(2) is atomic within a
|
|
101
|
+
// filesystem, so either write wins outright and the target is never left
|
|
102
|
+
// in a hybrid state.
|
|
103
103
|
const tempPath = `${filePath}.rollback-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
104
104
|
try {
|
|
105
105
|
await writeFile(tempPath, snapshot.content ?? new Uint8Array());
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ScannedComponent } from '../types/furnace.js';
|
|
2
|
+
/** Path to the widgets directory within the engine source tree */
|
|
2
3
|
/**
|
|
3
4
|
* Additional Firefox source directories known to contain MozLitElement
|
|
4
5
|
* components. Used by `--deep` scan mode to discover components beyond
|
|
@@ -6,9 +6,8 @@ import { toError } from '../utils/errors.js';
|
|
|
6
6
|
import { pathExists, readText } from '../utils/fs.js';
|
|
7
7
|
import { verbose, warn } from '../utils/logger.js';
|
|
8
8
|
import { asEstree, getNodeSource, parseScript, walkAST } from './ast-utils.js';
|
|
9
|
-
import { CUSTOM_ELEMENTS_JS, FTL_DIR } from './furnace-constants.js';
|
|
9
|
+
import { CUSTOM_ELEMENTS_JS, FTL_DIR, WIDGETS_DIR } from './furnace-constants.js';
|
|
10
10
|
/** Path to the widgets directory within the engine source tree */
|
|
11
|
-
const WIDGETS_DIR = 'toolkit/content/widgets';
|
|
12
11
|
/**
|
|
13
12
|
* Additional Firefox source directories known to contain MozLitElement
|
|
14
13
|
* components. Used by `--deep` scan mode to discover components beyond
|
|
@@ -2,21 +2,21 @@
|
|
|
2
2
|
* Stale-furnace-source gate for `fireforge patch export` / `re-export`.
|
|
3
3
|
*
|
|
4
4
|
* Exports capture the DEPLOYED engine copies of furnace-managed files, not
|
|
5
|
-
* the `components/` sources. Editing a component source and re-exporting
|
|
6
|
-
*
|
|
5
|
+
* the `components/` sources. Editing a component source and re-exporting its
|
|
6
|
+
* owning patch WITHOUT an intervening `furnace deploy`/`apply` silently
|
|
7
7
|
* exports the stale deployed copy — per-patch lint then flags the old line
|
|
8
|
-
* count and the patch body lags the source. This gate detects that
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
8
|
+
* count and the patch body lags the source. This gate detects that sequence
|
|
9
|
+
* by comparing component source directories against the checksums recorded
|
|
10
|
+
* at the last apply (`FurnaceState.appliedChecksums`) — the same signal
|
|
11
|
+
* `warnIfFurnaceStale` uses for run/watch — and refuses the export unless
|
|
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
|
-
* Probe failures (broken furnace config, missing state) degrade to a
|
|
18
|
-
*
|
|
19
|
-
*
|
|
17
|
+
* Probe failures (broken furnace config, missing state) degrade to a verbose
|
|
18
|
+
* log and an empty result — a broken furnace setup must never block
|
|
19
|
+
* non-furnace patch work.
|
|
20
20
|
*/
|
|
21
21
|
/** One furnace component whose source drifted from its deployed copy. */
|
|
22
22
|
export interface StaleFurnaceComponent {
|
|
@@ -3,21 +3,21 @@
|
|
|
3
3
|
* Stale-furnace-source gate for `fireforge patch export` / `re-export`.
|
|
4
4
|
*
|
|
5
5
|
* Exports capture the DEPLOYED engine copies of furnace-managed files, not
|
|
6
|
-
* the `components/` sources. Editing a component source and re-exporting
|
|
7
|
-
*
|
|
6
|
+
* the `components/` sources. Editing a component source and re-exporting its
|
|
7
|
+
* owning patch WITHOUT an intervening `furnace deploy`/`apply` silently
|
|
8
8
|
* exports the stale deployed copy — per-patch lint then flags the old line
|
|
9
|
-
* count and the patch body lags the source. This gate detects that
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
9
|
+
* count and the patch body lags the source. This gate detects that sequence
|
|
10
|
+
* by comparing component source directories against the checksums recorded
|
|
11
|
+
* at the last apply (`FurnaceState.appliedChecksums`) — the same signal
|
|
12
|
+
* `warnIfFurnaceStale` uses for run/watch — and refuses the export unless
|
|
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
|
-
* Probe failures (broken furnace config, missing state) degrade to a
|
|
19
|
-
*
|
|
20
|
-
*
|
|
18
|
+
* Probe failures (broken furnace config, missing state) degrade to a verbose
|
|
19
|
+
* log and an empty result — a broken furnace setup must never block
|
|
20
|
+
* non-furnace patch work.
|
|
21
21
|
*/
|
|
22
22
|
import { GeneralError } from '../errors/base.js';
|
|
23
23
|
import { toError } from '../utils/errors.js';
|
|
@@ -4,22 +4,20 @@
|
|
|
4
4
|
* There are exactly two sanctioned ways checksums land in
|
|
5
5
|
* furnace-state.json:
|
|
6
6
|
*
|
|
7
|
-
* 1. The BATCH path inside `applyAllComponents` (persistState: true),
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* 1. The BATCH path inside `applyAllComponents` (persistState: true), which
|
|
8
|
+
* replaces `appliedChecksums` wholesale — correct only when the run
|
|
9
|
+
* covered every component.
|
|
10
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
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
|
-
* named component, so the wholesale replace persists a state file
|
|
17
|
-
*
|
|
16
|
+
* named component, so the wholesale replace persists a state file containing
|
|
17
|
+
* only that component. Downstream, `diffDeletedFiles` and
|
|
18
18
|
* `findOrphanedEngineFiles` both key on `appliedChecksums`, so the wiped
|
|
19
19
|
* components' stale engine files become undetectable by apply AND by
|
|
20
|
-
* `furnace validate
|
|
21
|
-
* <name>` had exactly this bug while `furnace deploy <name>` documented
|
|
22
|
-
* and avoided it).
|
|
20
|
+
* `furnace validate`.
|
|
23
21
|
*/
|
|
24
22
|
import { type ApplyAllComponentsResult } from './furnace-apply.js';
|
|
25
23
|
import { type getFurnacePaths } from './furnace-config.js';
|
|
@@ -5,22 +5,20 @@
|
|
|
5
5
|
* There are exactly two sanctioned ways checksums land in
|
|
6
6
|
* furnace-state.json:
|
|
7
7
|
*
|
|
8
|
-
* 1. The BATCH path inside `applyAllComponents` (persistState: true),
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* 1. The BATCH path inside `applyAllComponents` (persistState: true), which
|
|
9
|
+
* replaces `appliedChecksums` wholesale — correct only when the run
|
|
10
|
+
* covered every component.
|
|
11
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
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
|
-
* named component, so the wholesale replace persists a state file
|
|
18
|
-
*
|
|
17
|
+
* named component, so the wholesale replace persists a state file containing
|
|
18
|
+
* only that component. Downstream, `diffDeletedFiles` and
|
|
19
19
|
* `findOrphanedEngineFiles` both key on `appliedChecksums`, so the wiped
|
|
20
20
|
* components' stale engine files become undetectable by apply AND by
|
|
21
|
-
* `furnace validate
|
|
22
|
-
* <name>` had exactly this bug while `furnace deploy <name>` documented
|
|
23
|
-
* and avoided it).
|
|
21
|
+
* `furnace validate`.
|
|
24
22
|
*/
|
|
25
23
|
import { join } from 'node:path';
|
|
26
24
|
import { FurnaceError } from '../errors/furnace.js';
|
|
@@ -3,6 +3,8 @@ import type { CustomComponentConfig, ValidationIssue } from '../types/furnace.js
|
|
|
3
3
|
* Validates accessibility patterns in a component's .mjs file.
|
|
4
4
|
* Checks for ARIA roles, keyboard handlers, l10n, and focus delegation.
|
|
5
5
|
*
|
|
6
|
+
* @param componentDir - Directory holding the component's sources
|
|
7
|
+
* @param tagName - Custom element tag name, used to locate `<tagName>.mjs`
|
|
6
8
|
* @param customConfig - When the component is custom, its matching entry
|
|
7
9
|
* from `furnace.json`. Used to skip the `no-keyboard-handler` warning
|
|
8
10
|
* when the component declares keyboard coverage either explicitly
|
|
@@ -11,3 +13,23 @@ import type { CustomComponentConfig, ValidationIssue } from '../types/furnace.js
|
|
|
11
13
|
* without config in scope can continue to call without changes.
|
|
12
14
|
*/
|
|
13
15
|
export declare function validateAccessibility(componentDir: string, tagName: string, customConfig?: CustomComponentConfig): Promise<ValidationIssue[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Detects hardcoded user-visible template text that should usually be
|
|
18
|
+
* localized.
|
|
19
|
+
*
|
|
20
|
+
* Scoped to three positive contexts rather than scanning the whole file,
|
|
21
|
+
* because a bare `>…<` regex catches JS comparisons (`if (x > 0 && y <
|
|
22
|
+
* 100)`), diagnostic strings (`console.error("Failed <id> lookup")`), and
|
|
23
|
+
* identifier literals that are never shown to a user. Only matches that
|
|
24
|
+
* actually enter a UI render path count:
|
|
25
|
+
*
|
|
26
|
+
* 1. Content inside a Lit `` html`…` `` tagged template literal.
|
|
27
|
+
* 2. The string literal on the RHS of `.textContent = "…"` or
|
|
28
|
+
* `.innerHTML = "…"`.
|
|
29
|
+
* 3. The string literal assigned to an XUL-widget `label=`,
|
|
30
|
+
* `title=`, or `tooltiptext=` attribute when constructing DOM in JS.
|
|
31
|
+
*
|
|
32
|
+
* A file-wide `// furnace-ignore: hardcoded-text` comment suppresses all
|
|
33
|
+
* findings (matches the pre-existing escape hatch).
|
|
34
|
+
*/
|
|
35
|
+
export declare function containsHardcodedTemplateText(content: string): boolean;
|