@hominis/fireforge 0.43.0 → 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 +127 -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 +62 -19
- 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
|
@@ -7,24 +7,23 @@ import { getPackageVersion } from '../utils/package-root.js';
|
|
|
7
7
|
import { getFurnacePaths } from './furnace-config.js';
|
|
8
8
|
import { git } from './git-base.js';
|
|
9
9
|
import { collectNewFileCreatorsByPath } from './patch-lint.js';
|
|
10
|
-
// Schema 2: entries additionally carry the lintIgnore-suppressed
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
10
|
+
// Schema 2: entries additionally carry the lintIgnore-suppressed issues and
|
|
11
|
+
// the measured non-binary line count, so a warm run can report waived size
|
|
12
|
+
// measurements identically to a cold one — a cache hit must never surface
|
|
13
|
+
// LESS than a fresh lint.
|
|
14
14
|
// Schema 3: the key additionally content-hashes the
|
|
15
15
|
// `patchLint.checkJsTestShim` file exactly as `checkJsExtraShim`'s already
|
|
16
|
-
// was
|
|
17
|
-
// verdict
|
|
18
|
-
// Schema 4: each entry RECORDS the lint-ignore waiver set that
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
//
|
|
27
|
-
// cache that already holds a mismatched verdict.
|
|
16
|
+
// was; without it, editing the test shim in place replays every cached
|
|
17
|
+
// verdict.
|
|
18
|
+
// Schema 4: each entry RECORDS the lint-ignore waiver set that produced it,
|
|
19
|
+
// and a lookup whose effective waiver set differs is refused even when the
|
|
20
|
+
// key matches. The key already hashes `patch.lintIgnore`, so this is
|
|
21
|
+
// belt-and-braces on purpose: a waiver change is the one mutation that makes
|
|
22
|
+
// a replayed verdict actively WRONG (an operator writes a waiver, re-runs,
|
|
23
|
+
// and is shown the finding they just waived), and the class must not depend
|
|
24
|
+
// on every future key input staying complete. Bumping the schema also
|
|
25
|
+
// discards every pre-4 entry, which is itself the cure for a cache that
|
|
26
|
+
// already holds a mismatched verdict.
|
|
28
27
|
export const LINT_CACHE_SCHEMA_VERSION = 4;
|
|
29
28
|
const LINT_IMPLEMENTATION_VERSION = 1;
|
|
30
29
|
const LINT_CACHE_DIRNAME = 'lint-cache';
|
|
@@ -102,8 +101,7 @@ export async function buildPerPatchLintCacheKey(input) {
|
|
|
102
101
|
// Hash in parallel, then insert in sorted order. The sort is load-bearing:
|
|
103
102
|
// `stableHash` below serialises this record, so insertion order is part of
|
|
104
103
|
// the cache key — assigning as results land would make the key
|
|
105
|
-
// nondeterministic.
|
|
106
|
-
// path of the cache whose entire purpose is making lint faster.
|
|
104
|
+
// nondeterministic.
|
|
107
105
|
const sortedFiles = [...input.existingFiles].sort((a, b) => a.localeCompare(b));
|
|
108
106
|
const hashes = await Promise.all(sortedFiles.map((file) => fileHash(join(input.engineDir, file))));
|
|
109
107
|
const engineFiles = {};
|
|
@@ -127,8 +125,8 @@ export async function buildPerPatchLintCacheKey(input) {
|
|
|
127
125
|
cacheSchemaVersion: LINT_CACHE_SCHEMA_VERSION,
|
|
128
126
|
engineHeadSha: input.engineHeadSha ?? null,
|
|
129
127
|
lintImplementationVersion: LINT_IMPLEMENTATION_VERSION,
|
|
130
|
-
// Deliberately the PLAIN semver, not the +g<sha> build identity
|
|
131
|
-
|
|
128
|
+
// Deliberately the PLAIN semver, not the +g<sha> build identity:
|
|
129
|
+
// identity churns every commit at the same version and
|
|
132
130
|
// would invalidate the cache for no correctness gain.
|
|
133
131
|
packageVersion: input.packageVersion ?? getPackageVersion(),
|
|
134
132
|
patchFile: await fileHash(join(input.patchesDir, input.patch.filename)),
|
|
@@ -205,9 +203,9 @@ function normalizeLintIgnoreSet(lintIgnore) {
|
|
|
205
203
|
}
|
|
206
204
|
/**
|
|
207
205
|
* Returns the cached lint payload for a patch when the stored key still
|
|
208
|
-
* matches AND the entry was computed under the same lint-ignore waiver set
|
|
209
|
-
|
|
210
|
-
*
|
|
206
|
+
* matches AND the entry was computed under the same lint-ignore waiver set.
|
|
207
|
+
* A waiver change makes a replayed verdict actively wrong, so the waiver set
|
|
208
|
+
* is compared explicitly rather than trusted to the key.
|
|
211
209
|
*/
|
|
212
210
|
export function getCachedPerPatchLintIssues(cache, patchFilename, key, lintIgnore) {
|
|
213
211
|
const entry = cache.entries[patchFilename];
|
|
@@ -49,10 +49,10 @@ export interface GroupedCheckJsResult {
|
|
|
49
49
|
/**
|
|
50
50
|
* Builds the checkJs program **once** over `resolutionOwned` and returns its
|
|
51
51
|
* diagnostics grouped by originating file. Callers slice the result by their
|
|
52
|
-
* own report scope — per-patch lint attributes each file to its owning
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
52
|
+
* own report scope — per-patch lint attributes each file to its owning patch,
|
|
53
|
+
* export/re-export keeps only the patch under export. Resolution always spans
|
|
54
|
+
* every file in `resolutionOwned`, so cross-patch `resource:///`/`chrome://`
|
|
55
|
+
* imports resolve to real sources.
|
|
56
56
|
*
|
|
57
57
|
* @param repoDir - Absolute engine (repository) directory
|
|
58
58
|
* @param resolutionOwned - Patch-owned `.sys.mjs` paths (relative to repoDir)
|
|
@@ -61,14 +61,14 @@ export interface GroupedCheckJsResult {
|
|
|
61
61
|
* the built-in Firefox-globals shim (from `patchLint.checkJsExtraShim`)
|
|
62
62
|
* @param projectRoot - Absolute project root for resolving `extraShimPath`
|
|
63
63
|
* @param mode - Strictness preset plus allowlisted compiler-option overrides
|
|
64
|
-
* @param builtinShimSuffix - Optional shim text appended AFTER the consumer
|
|
64
|
+
* @param builtinShimSuffix - Optional shim text appended AFTER the consumer
|
|
65
|
+
* shim
|
|
65
66
|
* @param rootScope - When set, only these repo-relative files become program
|
|
66
67
|
* ROOTS; resolution (and the host allowlist) still spans all of
|
|
67
68
|
* `resolutionOwned`, so a subset root's cross-patch imports type-check
|
|
68
69
|
* against the real owning sources while unrelated owned files are never
|
|
69
70
|
* parsed. `.mjs` files are module-scoped, so a root's diagnostics are
|
|
70
|
-
* identical whether other owned files are roots or mere resolution
|
|
71
|
-
* targets (pinned by the rootScope parity test).
|
|
71
|
+
* identical whether other owned files are roots or mere resolution targets.
|
|
72
72
|
* @returns Diagnostics grouped per owning file plus run-level errors
|
|
73
73
|
*/
|
|
74
74
|
export declare function runCheckJsGrouped(repoDir: string, resolutionOwned: Set<string>, extraShimPath?: string, projectRoot?: string, mode?: CheckJsMode, builtinShimSuffix?: string, rootScope?: ReadonlySet<string>): Promise<GroupedCheckJsResult>;
|
|
@@ -135,14 +135,14 @@ export declare function runCheckJsTestFilesGrouped(repoDir: string, testFiles: S
|
|
|
135
135
|
*/
|
|
136
136
|
export declare function invokePatchLintCheckJsGrouped(repoDir: string, patchOwnedFiles: Set<string>, patchLint: PatchLintConfig, projectRoot: string, rootScope?: ReadonlySet<string>): Promise<GroupedCheckJsResult>;
|
|
137
137
|
/**
|
|
138
|
-
* Cheap probe reproducing the only run-level ("global") checkJs findings
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
138
|
+
* Cheap probe reproducing the only run-level ("global") checkJs findings the
|
|
139
|
+
* build path can produce — a missing `typescript` package and an unreadable
|
|
140
|
+
* consumer shim (`checkJsExtraShim`, and `checkJsTestShim` when
|
|
141
|
+
* `checkJsTestFiles` is on). The built program itself never contributes
|
|
142
|
+
* globals (see {@link runCheckJsGrouped}), so a warm all-cache-hit run can
|
|
143
|
+
* satisfy the "warm never reports less than cold" invariant with this probe
|
|
144
|
+
* instead of building the whole TypeScript program. Issue objects are
|
|
145
|
+
* byte-identical to the build path's, deduplicated by message like
|
|
146
|
+
* {@link runCheckJsTestFilesGrouped}.
|
|
147
147
|
*/
|
|
148
148
|
export declare function probeCheckJsGlobalIssues(patchLint: PatchLintConfig, projectRoot: string): Promise<PatchLintIssue[]>;
|
|
@@ -135,10 +135,10 @@ function createPathsResolver(ts, paths, baseDir, fileExists, onResolved) {
|
|
|
135
135
|
/**
|
|
136
136
|
* Builds the checkJs program **once** over `resolutionOwned` and returns its
|
|
137
137
|
* diagnostics grouped by originating file. Callers slice the result by their
|
|
138
|
-
* own report scope — per-patch lint attributes each file to its owning
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
138
|
+
* own report scope — per-patch lint attributes each file to its owning patch,
|
|
139
|
+
* export/re-export keeps only the patch under export. Resolution always spans
|
|
140
|
+
* every file in `resolutionOwned`, so cross-patch `resource:///`/`chrome://`
|
|
141
|
+
* imports resolve to real sources.
|
|
142
142
|
*
|
|
143
143
|
* @param repoDir - Absolute engine (repository) directory
|
|
144
144
|
* @param resolutionOwned - Patch-owned `.sys.mjs` paths (relative to repoDir)
|
|
@@ -147,14 +147,14 @@ function createPathsResolver(ts, paths, baseDir, fileExists, onResolved) {
|
|
|
147
147
|
* the built-in Firefox-globals shim (from `patchLint.checkJsExtraShim`)
|
|
148
148
|
* @param projectRoot - Absolute project root for resolving `extraShimPath`
|
|
149
149
|
* @param mode - Strictness preset plus allowlisted compiler-option overrides
|
|
150
|
-
* @param builtinShimSuffix - Optional shim text appended AFTER the consumer
|
|
150
|
+
* @param builtinShimSuffix - Optional shim text appended AFTER the consumer
|
|
151
|
+
* shim
|
|
151
152
|
* @param rootScope - When set, only these repo-relative files become program
|
|
152
153
|
* ROOTS; resolution (and the host allowlist) still spans all of
|
|
153
154
|
* `resolutionOwned`, so a subset root's cross-patch imports type-check
|
|
154
155
|
* against the real owning sources while unrelated owned files are never
|
|
155
156
|
* parsed. `.mjs` files are module-scoped, so a root's diagnostics are
|
|
156
|
-
* identical whether other owned files are roots or mere resolution
|
|
157
|
-
* targets (pinned by the rootScope parity test).
|
|
157
|
+
* identical whether other owned files are roots or mere resolution targets.
|
|
158
158
|
* @returns Diagnostics grouped per owning file plus run-level errors
|
|
159
159
|
*/
|
|
160
160
|
export async function runCheckJsGrouped(repoDir, resolutionOwned, extraShimPath, projectRoot, mode, builtinShimSuffix, rootScope) {
|
|
@@ -504,15 +504,15 @@ export async function invokePatchLintCheckJsGrouped(repoDir, patchOwnedFiles, pa
|
|
|
504
504
|
return runCheckJsGrouped(repoDir, patchOwnedFiles, patchLint.checkJsExtraShim, projectRoot, modeFromPatchLintConfig(patchLint), undefined, rootScope);
|
|
505
505
|
}
|
|
506
506
|
/**
|
|
507
|
-
* Cheap probe reproducing the only run-level ("global") checkJs findings
|
|
508
|
-
*
|
|
509
|
-
*
|
|
510
|
-
*
|
|
511
|
-
*
|
|
512
|
-
*
|
|
513
|
-
*
|
|
514
|
-
*
|
|
515
|
-
*
|
|
507
|
+
* Cheap probe reproducing the only run-level ("global") checkJs findings the
|
|
508
|
+
* build path can produce — a missing `typescript` package and an unreadable
|
|
509
|
+
* consumer shim (`checkJsExtraShim`, and `checkJsTestShim` when
|
|
510
|
+
* `checkJsTestFiles` is on). The built program itself never contributes
|
|
511
|
+
* globals (see {@link runCheckJsGrouped}), so a warm all-cache-hit run can
|
|
512
|
+
* satisfy the "warm never reports less than cold" invariant with this probe
|
|
513
|
+
* instead of building the whole TypeScript program. Issue objects are
|
|
514
|
+
* byte-identical to the build path's, deduplicated by message like
|
|
515
|
+
* {@link runCheckJsTestFilesGrouped}.
|
|
516
516
|
*/
|
|
517
517
|
export async function probeCheckJsGlobalIssues(patchLint, projectRoot) {
|
|
518
518
|
try {
|
|
@@ -34,14 +34,11 @@ import type { JsDocIssue, ValidateExportJsDocOptions } from './patch-lint-jsdoc.
|
|
|
34
34
|
*/
|
|
35
35
|
export declare function validateChromeScriptJsDoc(source: string, options?: ValidateExportJsDocOptions): JsDocIssue[];
|
|
36
36
|
/**
|
|
37
|
-
* Per-file dispatch: applies the chrome-subscript JSDoc rule to one file
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* mode is `'off'` / unset). The orchestrator pre-computes `isChromeOwned`
|
|
44
|
-
* (true iff the file is a patch-owned `.js` non-`.sys.mjs`) so the call
|
|
45
|
-
* site fits on a single line.
|
|
37
|
+
* Per-file dispatch: applies the chrome-subscript JSDoc rule to one file if
|
|
38
|
+
* it qualifies, mapping {@link JsDocIssue} into {@link PatchLintIssue}.
|
|
39
|
+
* Returns an empty array when the file does not qualify (not a chrome
|
|
40
|
+
* subscript, not patch-owned, or the mode is `'off'` / unset). The
|
|
41
|
+
* orchestrator pre-computes `isChromeOwned` (true iff the file is a
|
|
42
|
+
* patch-owned `.js` non-`.sys.mjs`) so the call site fits on a single line.
|
|
46
43
|
*/
|
|
47
44
|
export declare function lintChromeScriptJsDocForFile(file: string, content: string, isChromeOwned: boolean, mode: PatchLintSeverityGate | undefined): PatchLintIssue[];
|
|
@@ -47,20 +47,19 @@ export function validateChromeScriptJsDoc(source, options) {
|
|
|
47
47
|
// would emit a pseudo-issue for every rule here. The orchestrator already
|
|
48
48
|
// runs the export walker on `.sys.mjs` separately, so silently declining
|
|
49
49
|
// to lint an unparseable script is the correct degradation for this file
|
|
50
|
-
// and only this file.
|
|
51
|
-
// module-only syntax" in patch-lint-chrome-jsdoc.test.ts.
|
|
50
|
+
// and only this file.
|
|
52
51
|
return [];
|
|
53
52
|
}
|
|
54
53
|
const issues = [];
|
|
55
54
|
const body = ast.body;
|
|
56
55
|
for (const node of body) {
|
|
57
56
|
if (node.type === 'FunctionDeclaration') {
|
|
58
|
-
validateFunctionDecl(node, comments, source
|
|
57
|
+
issues.push(...validateFunctionDecl(node, comments, source));
|
|
59
58
|
}
|
|
60
59
|
else if (node.type === 'ClassDeclaration') {
|
|
61
|
-
validateClassDecl(node, comments, source
|
|
60
|
+
issues.push(...validateClassDecl(node, comments, source));
|
|
62
61
|
if (classMethodMode !== 'off') {
|
|
63
|
-
validateClassMethods(node, comments, source,
|
|
62
|
+
issues.push(...validateClassMethods(node, comments, source, classMethodMode));
|
|
64
63
|
}
|
|
65
64
|
}
|
|
66
65
|
// Top-level `var Foo = class {...}` / `let Foo = function() {...}`
|
|
@@ -72,15 +71,12 @@ export function validateChromeScriptJsDoc(source, options) {
|
|
|
72
71
|
return issues;
|
|
73
72
|
}
|
|
74
73
|
/**
|
|
75
|
-
* Per-file dispatch: applies the chrome-subscript JSDoc rule to one file
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
* mode is `'off'` / unset). The orchestrator pre-computes `isChromeOwned`
|
|
82
|
-
* (true iff the file is a patch-owned `.js` non-`.sys.mjs`) so the call
|
|
83
|
-
* site fits on a single line.
|
|
74
|
+
* Per-file dispatch: applies the chrome-subscript JSDoc rule to one file if
|
|
75
|
+
* it qualifies, mapping {@link JsDocIssue} into {@link PatchLintIssue}.
|
|
76
|
+
* Returns an empty array when the file does not qualify (not a chrome
|
|
77
|
+
* subscript, not patch-owned, or the mode is `'off'` / unset). The
|
|
78
|
+
* orchestrator pre-computes `isChromeOwned` (true iff the file is a
|
|
79
|
+
* patch-owned `.js` non-`.sys.mjs`) so the call site fits on a single line.
|
|
84
80
|
*/
|
|
85
81
|
export function lintChromeScriptJsDocForFile(file, content, isChromeOwned, mode) {
|
|
86
82
|
if (!isChromeOwned || !mode || mode === 'off')
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* New-file creators map for the patch queue, split out of
|
|
3
|
-
* `patch-lint-cross.ts`
|
|
4
|
-
* there so callers keep importing from `patch-lint.ts`
|
|
3
|
+
* `patch-lint-cross.ts` to stay under the per-file line budget.
|
|
4
|
+
* Re-exported from there so callers keep importing from `patch-lint.ts`
|
|
5
|
+
* unchanged.
|
|
5
6
|
*
|
|
6
|
-
* Memoised per context object: ownership resolution and
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* {@link invalidateNewFileCreatorsCache}.
|
|
7
|
+
* Memoised per context object: ownership resolution and cache-key
|
|
8
|
+
* fingerprints call this 2-3× per linted patch, and each call otherwise
|
|
9
|
+
* re-runs `detectNewFilesInDiff` over EVERY queue entry's diff. Keyed weakly
|
|
10
|
+
* so a discarded context frees its map; a caller that mutates a context
|
|
11
|
+
* entry in place must call {@link invalidateNewFileCreatorsCache}.
|
|
12
12
|
*/
|
|
13
13
|
/** The slice of a queue context the creators map is derived from. */
|
|
14
14
|
interface CreatorsContext {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
3
|
* New-file creators map for the patch queue, split out of
|
|
4
|
-
* `patch-lint-cross.ts`
|
|
5
|
-
* there so callers keep importing from `patch-lint.ts`
|
|
4
|
+
* `patch-lint-cross.ts` to stay under the per-file line budget.
|
|
5
|
+
* Re-exported from there so callers keep importing from `patch-lint.ts`
|
|
6
|
+
* unchanged.
|
|
6
7
|
*
|
|
7
|
-
* Memoised per context object: ownership resolution and
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* {@link invalidateNewFileCreatorsCache}.
|
|
8
|
+
* Memoised per context object: ownership resolution and cache-key
|
|
9
|
+
* fingerprints call this 2-3× per linted patch, and each call otherwise
|
|
10
|
+
* re-runs `detectNewFilesInDiff` over EVERY queue entry's diff. Keyed weakly
|
|
11
|
+
* so a discarded context frees its map; a caller that mutates a context
|
|
12
|
+
* entry in place must call {@link invalidateNewFileCreatorsCache}.
|
|
13
13
|
*/
|
|
14
14
|
import { detectNewFilesInDiff } from './patch-lint-diff.js';
|
|
15
15
|
const newFileCreatorsMemo = new WeakMap();
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Cross-patch lint infrastructure: the queue context builder, the
|
|
3
|
-
* duplicate-new-file-creation and forward-import rules, the
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* duplicate-new-file-creation and forward-import rules, the forward-import
|
|
4
|
+
* ignore-marker, and the per-specifier extractor that powers the
|
|
5
|
+
* forward-import rule.
|
|
6
6
|
*
|
|
7
7
|
* Separated from `patch-lint.ts` so the per-patch and cross-patch rule
|
|
8
|
-
* bodies stay within the
|
|
9
|
-
* re-exports the public surface so callers continue to import from a
|
|
10
|
-
*
|
|
8
|
+
* bodies each stay within the per-file line budget. `patch-lint.ts`
|
|
9
|
+
* re-exports the public surface so callers continue to import from a single
|
|
10
|
+
* module.
|
|
11
11
|
*/
|
|
12
12
|
import type { PatchLintIssue, PatchMetadata } from '../types/commands/index.js';
|
|
13
13
|
import type { FireForgeConfig, PatchPolicyConfig } from '../types/config.js';
|
|
@@ -61,8 +61,8 @@ export interface PatchQueueContext {
|
|
|
61
61
|
/**
|
|
62
62
|
* Optional patchPolicy config. When present, the forward-import rule
|
|
63
63
|
* validates its "Closest legal ordinal" suggestion against the importing
|
|
64
|
-
* patch's category range and suppresses it when no legal ordinal exists
|
|
65
|
-
|
|
64
|
+
* patch's category range and suppresses it when no legal ordinal exists.
|
|
65
|
+
* Absent = current behavior (hint always printed).
|
|
66
66
|
*/
|
|
67
67
|
patchPolicy?: PatchPolicyConfig;
|
|
68
68
|
}
|
|
@@ -82,10 +82,8 @@ export declare function buildPatchQueueContext(patchesDir: string, config?: Fire
|
|
|
82
82
|
export { collectNewFileCreatorsByPath, invalidateNewFileCreatorsCache, } from './patch-lint-creators.js';
|
|
83
83
|
/**
|
|
84
84
|
* Cross-patch lint rule: the same path is newly created (`--- /dev/null →
|
|
85
|
-
* +++ b/path`) by more than one patch.
|
|
86
|
-
*
|
|
87
|
-
* the same file, and the error surfaced only when import rolled back
|
|
88
|
-
* mid-apply.
|
|
85
|
+
* +++ b/path`) by more than one patch. Without it the collision surfaces
|
|
86
|
+
* only when import rolls back mid-apply.
|
|
89
87
|
*
|
|
90
88
|
* Reports one error per conflicting path, naming every patch that creates
|
|
91
89
|
* the path so the operator can pick the correct fix (`patch delete` or
|
|
@@ -156,14 +154,13 @@ export declare function findForwardImportIgnoreLines(source: string): Set<number
|
|
|
156
154
|
* Cross-patch lint rule: a patch imports a module that a later patch is
|
|
157
155
|
* responsible for creating.
|
|
158
156
|
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
* the
|
|
166
|
-
* hatch.
|
|
157
|
+
* Deliberately conservative — `resource://` URLs are not resolved to engine
|
|
158
|
+
* file paths. Instead a cross-queue index of newly-created files is built,
|
|
159
|
+
* keyed by basename, and imports whose leaf matches an entry owned by a
|
|
160
|
+
* later-ordered patch are flagged. False positives from unrelated basename
|
|
161
|
+
* collisions (two directories both creating `Helper.sys.mjs`) are possible;
|
|
162
|
+
* the README documents the limitation and the inline ignore marker above is
|
|
163
|
+
* the escape hatch.
|
|
167
164
|
*
|
|
168
165
|
* Rules out:
|
|
169
166
|
* - Imports whose leaf matches a newly-created file in the *same* or an
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// SPDX-License-Identifier: EUPL-1.2
|
|
2
2
|
/**
|
|
3
3
|
* Cross-patch lint infrastructure: the queue context builder, the
|
|
4
|
-
* duplicate-new-file-creation and forward-import rules, the
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* duplicate-new-file-creation and forward-import rules, the forward-import
|
|
5
|
+
* ignore-marker, and the per-specifier extractor that powers the
|
|
6
|
+
* forward-import rule.
|
|
7
7
|
*
|
|
8
8
|
* Separated from `patch-lint.ts` so the per-patch and cross-patch rule
|
|
9
|
-
* bodies stay within the
|
|
10
|
-
* re-exports the public surface so callers continue to import from a
|
|
11
|
-
*
|
|
9
|
+
* bodies each stay within the per-file line budget. `patch-lint.ts`
|
|
10
|
+
* re-exports the public surface so callers continue to import from a single
|
|
11
|
+
* module.
|
|
12
12
|
*/
|
|
13
13
|
import { basename } from 'node:path';
|
|
14
14
|
import { toError } from '../utils/errors.js';
|
|
@@ -16,6 +16,7 @@ import { readText } from '../utils/fs.js';
|
|
|
16
16
|
import { verbose } from '../utils/logger.js';
|
|
17
17
|
import { stripJsComments } from '../utils/regex.js';
|
|
18
18
|
import { discoverPatches } from './patch-files.js';
|
|
19
|
+
import { lintPatchQueueBinaryBodies } from './patch-lint-binary.js';
|
|
19
20
|
import { collectNewFileCreatorsByPath } from './patch-lint-creators.js';
|
|
20
21
|
import { detectNewFilesInDiff, extractAddedLinesPerFile } from './patch-lint-diff.js';
|
|
21
22
|
import { lintPatchQueueModuleRegistrations } from './patch-lint-module-registration.js';
|
|
@@ -90,10 +91,8 @@ export async function buildPatchQueueContext(patchesDir, config) {
|
|
|
90
91
|
export { collectNewFileCreatorsByPath, invalidateNewFileCreatorsCache, } from './patch-lint-creators.js';
|
|
91
92
|
/**
|
|
92
93
|
* Cross-patch lint rule: the same path is newly created (`--- /dev/null →
|
|
93
|
-
* +++ b/path`) by more than one patch.
|
|
94
|
-
*
|
|
95
|
-
* the same file, and the error surfaced only when import rolled back
|
|
96
|
-
* mid-apply.
|
|
94
|
+
* +++ b/path`) by more than one patch. Without it the collision surfaces
|
|
95
|
+
* only when import rolls back mid-apply.
|
|
97
96
|
*
|
|
98
97
|
* Reports one error per conflicting path, naming every patch that creates
|
|
99
98
|
* the path so the operator can pick the correct fix (`patch delete` or
|
|
@@ -523,13 +522,13 @@ export function lintPatchQueueForwardImports(ctx) {
|
|
|
523
522
|
severity: 'warning',
|
|
524
523
|
});
|
|
525
524
|
}
|
|
526
|
-
// Registration-kind declarations
|
|
527
|
-
//
|
|
528
|
-
//
|
|
525
|
+
// Registration-kind declarations: a jar.mn packaging line,
|
|
526
|
+
// customElements registration, or actor registration referencing a
|
|
527
|
+
// later-created file. There is no import specifier to match — the
|
|
529
528
|
// declaration is "used" when the declared line (whitespace-trimmed)
|
|
530
|
-
// appears among the lines this patch adds to the declaring file AND
|
|
531
|
-
//
|
|
532
|
-
//
|
|
529
|
+
// appears among the lines this patch adds to the declaring file AND its
|
|
530
|
+
// `creates` resolves to a file a later-ordered patch actually creates
|
|
531
|
+
// (with `owner`, when set, naming that patch) — mirroring
|
|
533
532
|
// findMatchingStagedDependency for the import kind.
|
|
534
533
|
for (const registration of entry.metadata?.stagedDependencies?.registrations ?? []) {
|
|
535
534
|
const failure = findStagedRegistrationFailure(entry, registration, newFileIndex);
|
|
@@ -615,5 +614,6 @@ export function lintPatchQueue(ctx) {
|
|
|
615
614
|
...lintPatchQueueDuplicateCreations(ctx),
|
|
616
615
|
...lintPatchQueueForwardImports(ctx),
|
|
617
616
|
...lintPatchQueueModuleRegistrations(ctx),
|
|
617
|
+
...lintPatchQueueBinaryBodies(ctx),
|
|
618
618
|
];
|
|
619
619
|
}
|
|
@@ -2,11 +2,9 @@
|
|
|
2
2
|
* CSS patch-lint rules: introduced raw color values and non-tokenized
|
|
3
3
|
* custom-property references.
|
|
4
4
|
*
|
|
5
|
-
* Split out of `patch-lint.ts` so
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* cross-patch rule families. `patch-lint.ts` re-exports `lintPatchedCss`
|
|
9
|
-
* so existing callers keep importing from the single module.
|
|
5
|
+
* Split out of `patch-lint.ts` so each rule family stays within the
|
|
6
|
+
* per-file line budget; `patch-lint.ts` re-exports `lintPatchedCss` so
|
|
7
|
+
* existing callers keep importing from the single module.
|
|
10
8
|
*/
|
|
11
9
|
import type { PatchLintIssue } from '../types/commands/index.js';
|
|
12
10
|
import type { FireForgeConfig } from '../types/config.js';
|
|
@@ -3,11 +3,9 @@
|
|
|
3
3
|
* CSS patch-lint rules: introduced raw color values and non-tokenized
|
|
4
4
|
* custom-property references.
|
|
5
5
|
*
|
|
6
|
-
* Split out of `patch-lint.ts` so
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* cross-patch rule families. `patch-lint.ts` re-exports `lintPatchedCss`
|
|
10
|
-
* so existing callers keep importing from the single module.
|
|
6
|
+
* Split out of `patch-lint.ts` so each rule family stays within the
|
|
7
|
+
* per-file line budget; `patch-lint.ts` re-exports `lintPatchedCss` so
|
|
8
|
+
* existing callers keep importing from the single module.
|
|
11
9
|
*/
|
|
12
10
|
import { join } from 'node:path';
|
|
13
11
|
import { toError } from '../utils/errors.js';
|
|
@@ -83,12 +81,12 @@ function checkRawColorValues(file, rawCss, addedLinesByFile, addedLineNumbersByF
|
|
|
83
81
|
// Check only introduced raw color values when diff context is available.
|
|
84
82
|
// Skip files on the raw-color allowlist (exact path or basename match) and
|
|
85
83
|
// auto-exempt files under `browser/branding/` — those are the fork's
|
|
86
|
-
// visual identity assets (app-about dialogs, installer pages, branded
|
|
87
|
-
//
|
|
88
|
-
// design-decision layer the design-token system does not govern.
|
|
89
|
-
//
|
|
90
|
-
//
|
|
91
|
-
//
|
|
84
|
+
// visual identity assets (app-about dialogs, installer pages, branded CSS
|
|
85
|
+
// copied from Firefox's `unofficial` template) and belong to the
|
|
86
|
+
// design-decision layer the design-token system does not govern. Without
|
|
87
|
+
// the auto-exemption, every first-time setup's copied CSS fails
|
|
88
|
+
// `raw-color-value` with no actionable fix short of listing each path in
|
|
89
|
+
// `rawColorAllowlist`.
|
|
92
90
|
const allowlist = config?.patchLint?.rawColorAllowlist;
|
|
93
91
|
const isAllowlisted = allowlist?.some((entry) => file === entry || file.endsWith('/' + entry));
|
|
94
92
|
const isBranding = file.startsWith('browser/branding/');
|
|
@@ -128,19 +126,16 @@ function checkRawColorValues(file, rawCss, addedLinesByFile, addedLineNumbersByF
|
|
|
128
126
|
*/
|
|
129
127
|
function checkTokenPrefixViolations(file, cssContent, addedLinesByFile, tokenContext, issues) {
|
|
130
128
|
// Check for non-tokenized custom properties. A variable that is both
|
|
131
|
-
// declared and consumed inside the same file is auto-exempted as a
|
|
132
|
-
//
|
|
129
|
+
// declared and consumed inside the same file is auto-exempted as a runtime
|
|
130
|
+
// state channel (see furnace.json → runtimeVariables).
|
|
133
131
|
//
|
|
134
132
|
// When diff context is available, scope the `var(...)` scan to
|
|
135
|
-
// added/modified lines only. `cssContent` (full-file) is still the
|
|
136
|
-
//
|
|
137
|
-
//
|
|
138
|
-
//
|
|
139
|
-
//
|
|
140
|
-
//
|
|
141
|
-
// upstream file already carried, because the scanner saw the full
|
|
142
|
-
// applied file and flagged each inherited reference as if the fork
|
|
143
|
-
// had introduced it.
|
|
133
|
+
// added/modified lines only. `cssContent` (full-file) is still the source
|
|
134
|
+
// of `localDeclarations` so vars declared anywhere in the file are
|
|
135
|
+
// recognised as same-file refs regardless of where the consuming `var(...)`
|
|
136
|
+
// appears. Without the scoping, a small edit to a Furnace override of a
|
|
137
|
+
// stock component (e.g. moz-card) produces a `token-prefix-violation` for
|
|
138
|
+
// every stock `var(--moz-card-*)` the upstream file already carried.
|
|
144
139
|
if (tokenContext) {
|
|
145
140
|
const declarationPattern = /(?:^|[{;,\s])(--[\w-]+)\s*:/g;
|
|
146
141
|
const localDeclarations = new Set();
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Diff-scoping for `fireforge lint`.
|
|
3
3
|
*
|
|
4
4
|
* Pre-existing patch-state errors and errors introduced by the current task
|
|
5
|
-
* print identically
|
|
6
|
-
*
|
|
5
|
+
* print identically, so triaging "is the diff I just produced clean?"
|
|
6
|
+
* otherwise means mentally subtracting the pre-existing noise. This module
|
|
7
7
|
* classifies each lint issue as either `introduced` (the file was touched
|
|
8
8
|
* since the user-supplied git revision) or `cumulative` (pre-existing
|
|
9
9
|
* drift), without changing what the underlying rules emit.
|
|
@@ -32,21 +32,19 @@ export declare const AGGREGATE_PATCH_FILE = "(patch)";
|
|
|
32
32
|
*
|
|
33
33
|
* Issues with no file (`issue.file === ''`) — e.g. cross-patch rules that
|
|
34
34
|
* describe queue-wide state — are always `cumulative` under `--since`
|
|
35
|
-
* because they describe drift accumulated across many commits, not a
|
|
36
|
-
*
|
|
35
|
+
* because they describe drift accumulated across many commits, not a single
|
|
36
|
+
* current-task edit.
|
|
37
|
+
*
|
|
38
|
+
* Aggregate patch-size rules emit `issue.file === AGGREGATE_PATCH_FILE`, a
|
|
39
|
+
* synthetic placeholder that can never appear in a real `diffFiles` set.
|
|
40
|
+
* Without special-casing, `large-patch-files` / `large-patch-lines` are
|
|
41
|
+
* always tagged `[cumulative]` under `--only-introduced` even when the diff
|
|
42
|
+
* IS the aggregate the rules measured, which reads as "this pre-existed" to
|
|
43
|
+
* an operator asking "what did this diff introduce?". The aggregate tag is
|
|
44
|
+
* therefore promoted to `introduced` whenever the diff set has any content:
|
|
45
|
+
* a non-empty `diffFiles` means the operator asked about a specific diff
|
|
46
|
+
* scope, and the aggregate finding describes exactly that scope.
|
|
37
47
|
*
|
|
38
|
-
* Aggregate patch-size rules emit `issue.file === AGGREGATE_PATCH_FILE`,
|
|
39
|
-
* which is a synthetic placeholder that will never appear in a real
|
|
40
|
-
* `diffFiles` set. Without special-casing, `large-patch-files` /
|
|
41
|
-
* `large-patch-lines` were always tagged `[cumulative]` under
|
|
42
|
-
* `--only-introduced` even when the diff WAS the aggregate the rules
|
|
43
|
-
* measured — the eval (Finding #4) reported a stack of 20+ imported
|
|
44
|
-
* patches whose aggregate-size warnings printed as `[cumulative]` under
|
|
45
|
-
* `lint --since HEAD --only-introduced`, which reads as "this pre-existed"
|
|
46
|
-
* to an operator asking "what did this diff introduce?" We promote the
|
|
47
|
-
* aggregate tag to `introduced` whenever the diff set has any content —
|
|
48
|
-
* non-empty `diffFiles` means the operator asked about a specific diff
|
|
49
|
-
* scope and the aggregate-rule finding describes exactly that scope.
|
|
50
48
|
* @param issues Issues returned by the lint orchestrator.
|
|
51
49
|
* @param diffFiles File paths touched since the user's revision.
|
|
52
50
|
*/
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* Diff-scoping for `fireforge lint`.
|
|
4
4
|
*
|
|
5
5
|
* Pre-existing patch-state errors and errors introduced by the current task
|
|
6
|
-
* print identically
|
|
7
|
-
*
|
|
6
|
+
* print identically, so triaging "is the diff I just produced clean?"
|
|
7
|
+
* otherwise means mentally subtracting the pre-existing noise. This module
|
|
8
8
|
* classifies each lint issue as either `introduced` (the file was touched
|
|
9
9
|
* since the user-supplied git revision) or `cumulative` (pre-existing
|
|
10
10
|
* drift), without changing what the underlying rules emit.
|
|
@@ -72,21 +72,19 @@ export const AGGREGATE_PATCH_FILE = '(patch)';
|
|
|
72
72
|
*
|
|
73
73
|
* Issues with no file (`issue.file === ''`) — e.g. cross-patch rules that
|
|
74
74
|
* describe queue-wide state — are always `cumulative` under `--since`
|
|
75
|
-
* because they describe drift accumulated across many commits, not a
|
|
76
|
-
*
|
|
75
|
+
* because they describe drift accumulated across many commits, not a single
|
|
76
|
+
* current-task edit.
|
|
77
|
+
*
|
|
78
|
+
* Aggregate patch-size rules emit `issue.file === AGGREGATE_PATCH_FILE`, a
|
|
79
|
+
* synthetic placeholder that can never appear in a real `diffFiles` set.
|
|
80
|
+
* Without special-casing, `large-patch-files` / `large-patch-lines` are
|
|
81
|
+
* always tagged `[cumulative]` under `--only-introduced` even when the diff
|
|
82
|
+
* IS the aggregate the rules measured, which reads as "this pre-existed" to
|
|
83
|
+
* an operator asking "what did this diff introduce?". The aggregate tag is
|
|
84
|
+
* therefore promoted to `introduced` whenever the diff set has any content:
|
|
85
|
+
* a non-empty `diffFiles` means the operator asked about a specific diff
|
|
86
|
+
* scope, and the aggregate finding describes exactly that scope.
|
|
77
87
|
*
|
|
78
|
-
* Aggregate patch-size rules emit `issue.file === AGGREGATE_PATCH_FILE`,
|
|
79
|
-
* which is a synthetic placeholder that will never appear in a real
|
|
80
|
-
* `diffFiles` set. Without special-casing, `large-patch-files` /
|
|
81
|
-
* `large-patch-lines` were always tagged `[cumulative]` under
|
|
82
|
-
* `--only-introduced` even when the diff WAS the aggregate the rules
|
|
83
|
-
* measured — the eval (Finding #4) reported a stack of 20+ imported
|
|
84
|
-
* patches whose aggregate-size warnings printed as `[cumulative]` under
|
|
85
|
-
* `lint --since HEAD --only-introduced`, which reads as "this pre-existed"
|
|
86
|
-
* to an operator asking "what did this diff introduce?" We promote the
|
|
87
|
-
* aggregate tag to `introduced` whenever the diff set has any content —
|
|
88
|
-
* non-empty `diffFiles` means the operator asked about a specific diff
|
|
89
|
-
* scope and the aggregate-rule finding describes exactly that scope.
|
|
90
88
|
* @param issues Issues returned by the lint orchestrator.
|
|
91
89
|
* @param diffFiles File paths touched since the user's revision.
|
|
92
90
|
*/
|