@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
|
@@ -36,15 +36,15 @@ export function isPositiveInteger(value) {
|
|
|
36
36
|
* Parses a CLI flag value as a positive integer. Throws
|
|
37
37
|
* {@link InvalidArgumentError} on NaN, non-integer, or non-positive input.
|
|
38
38
|
*
|
|
39
|
-
* Intended for use inside Commander `argParser` bodies where the raw
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
39
|
+
* Intended for use inside Commander `argParser` bodies where the raw input
|
|
40
|
+
* arrives as a string. The default pattern (`parseInt(v, 10)`) silently
|
|
41
|
+
* hands NaN to downstream planners, which then embed it into filenames and
|
|
42
|
+
* orders instead of failing fast.
|
|
43
43
|
*
|
|
44
44
|
* Rejects leading-zero forms ("01"), decimals ("1.5"), whitespace, and
|
|
45
|
-
* non-numeric garbage via a strict regex —
|
|
46
|
-
* representation so there is no ambiguity between what the user
|
|
47
|
-
* and what the value becomes on disk.
|
|
45
|
+
* non-numeric garbage via a strict regex — only the canonical
|
|
46
|
+
* representation is accepted, so there is no ambiguity between what the user
|
|
47
|
+
* typed and what the value becomes on disk.
|
|
48
48
|
*
|
|
49
49
|
* @param flagName - Flag name to include in the error (e.g. `--order`)
|
|
50
50
|
* @param rawValue - Raw string value from Commander
|
|
@@ -108,19 +108,32 @@ export function isValidFirefoxCandidate(candidate) {
|
|
|
108
108
|
return /^build[1-9]\d{0,3}$/.test(candidate);
|
|
109
109
|
}
|
|
110
110
|
/**
|
|
111
|
-
*
|
|
111
|
+
* Naming contract for this module's checks.
|
|
112
|
+
*
|
|
113
|
+
* `validate*` is easy to spread across incompatible return contracts — some
|
|
114
|
+
* throwing and returning void, some returning an issue list, some a parsed
|
|
115
|
+
* value, some a boolean, some an error MESSAGE — and a caller cannot tell
|
|
116
|
+
* which from the name. Passing a THROWING `validate*` to a clack `validate`
|
|
117
|
+
* callback, which expects a returned message, kills the prompt instead of
|
|
118
|
+
* re-prompting.
|
|
112
119
|
*
|
|
113
|
-
*
|
|
114
|
-
* `
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
* `utils/__tests__/validation.test.ts`, which fails to compile when the union
|
|
119
|
-
* grows.
|
|
120
|
+
* The two dominant contracts keep the prefix:
|
|
121
|
+
* - `validate*` — throws on failure, or returns an issue list.
|
|
122
|
+
* - `is*` / `has*` — a type predicate or boolean.
|
|
123
|
+
* The message-returning minority is `describe*Problem`, which reads as what
|
|
124
|
+
* it is: a description of what is wrong, or `undefined`.
|
|
120
125
|
*
|
|
121
|
-
*
|
|
122
|
-
|
|
123
|
-
|
|
126
|
+
* `assert*` is uniform throughout: throw-or-continue.
|
|
127
|
+
*/
|
|
128
|
+
/**
|
|
129
|
+
* Valid Firefox product identifiers.
|
|
130
|
+
*
|
|
131
|
+
* `satisfies readonly FirefoxProduct[]` links the runtime list to the union
|
|
132
|
+
* in ONE direction: it rejects an entry here that the union does not
|
|
133
|
+
* declare. It cannot see a union member missing from this list — widening a
|
|
134
|
+
* `readonly T[]` check never fails for being short. The reverse direction is
|
|
135
|
+
* covered by the exhaustive switch in `utils/__tests__/validation.test.ts`,
|
|
136
|
+
* which fails to compile when the union grows.
|
|
124
137
|
*/
|
|
125
138
|
export const FIREFOX_PRODUCTS = [
|
|
126
139
|
'firefox',
|
|
@@ -132,12 +145,30 @@ export const FIREFOX_PRODUCTS = [
|
|
|
132
145
|
* Validates a Firefox product string.
|
|
133
146
|
*
|
|
134
147
|
* A type predicate, matching its siblings {@link isValidPatchCategory} and
|
|
135
|
-
* {@link isValidProjectLicense}.
|
|
136
|
-
*
|
|
137
|
-
*
|
|
148
|
+
* {@link isValidProjectLicense}. Returning plain `boolean` would force
|
|
149
|
+
* `as FirefoxProduct` casts at the call sites even though the `.includes`
|
|
150
|
+
* check IS the runtime proof.
|
|
138
151
|
*/
|
|
139
|
-
export
|
|
140
|
-
|
|
152
|
+
export const isValidFirefoxProduct = makeEnumGuard(FIREFOX_PRODUCTS);
|
|
153
|
+
/**
|
|
154
|
+
* Builds a type predicate from a `readonly` tuple of allowed values.
|
|
155
|
+
*
|
|
156
|
+
* Deriving the type from the list — rather than declaring a union and
|
|
157
|
+
* hand-maintaining a matching array — removes a whole class of drift: a
|
|
158
|
+
* union can otherwise accept a stale allowlist with no compile error, and a
|
|
159
|
+
* copy of the member list on the `fireforge.json` read path can silently
|
|
160
|
+
* reject a newly added value.
|
|
161
|
+
*
|
|
162
|
+
* Returning a predicate rather than a boolean is what removes the `as`
|
|
163
|
+
* casts: `.includes` IS the runtime proof, so the caller should not have to
|
|
164
|
+
* re-assert it. `ParsedRecord.stringEnum` (src/utils/parse.ts) consumes
|
|
165
|
+
* exactly this shape.
|
|
166
|
+
*
|
|
167
|
+
* @param values - The allowed values, as a `readonly` tuple
|
|
168
|
+
* @returns A type predicate narrowing a string to one of `values`
|
|
169
|
+
*/
|
|
170
|
+
export function makeEnumGuard(values) {
|
|
171
|
+
return (value) => values.includes(value);
|
|
141
172
|
}
|
|
142
173
|
/**
|
|
143
174
|
* Valid project license SPDX identifiers.
|
|
@@ -146,9 +177,7 @@ export const PROJECT_LICENSES = ['EUPL-1.2', 'MPL-2.0', '0BSD', 'GPL-2.0-or-late
|
|
|
146
177
|
/**
|
|
147
178
|
* Validates a project license string.
|
|
148
179
|
*/
|
|
149
|
-
export
|
|
150
|
-
return PROJECT_LICENSES.includes(license);
|
|
151
|
-
}
|
|
180
|
+
export const isValidProjectLicense = makeEnumGuard(PROJECT_LICENSES);
|
|
152
181
|
/**
|
|
153
182
|
* Valid patch categories.
|
|
154
183
|
*/
|
|
@@ -156,9 +185,7 @@ export const PATCH_CATEGORIES = ['branding', 'ui', 'privacy', 'security', 'infra
|
|
|
156
185
|
/**
|
|
157
186
|
* Validates a patch category string.
|
|
158
187
|
*/
|
|
159
|
-
export
|
|
160
|
-
return PATCH_CATEGORIES.includes(category);
|
|
161
|
-
}
|
|
188
|
+
export const isValidPatchCategory = makeEnumGuard(PATCH_CATEGORIES);
|
|
162
189
|
/**
|
|
163
190
|
* Checks whether a Firefox version string has an ESR suffix.
|
|
164
191
|
*/
|
|
@@ -194,7 +221,7 @@ export function inferProductFromVersion(version) {
|
|
|
194
221
|
*
|
|
195
222
|
* @returns An error message if incompatible, or undefined if valid.
|
|
196
223
|
*/
|
|
197
|
-
export function
|
|
224
|
+
export function describeProductVersionIncompatibility(version, product) {
|
|
198
225
|
const versionIsEsr = isEsrVersion(version);
|
|
199
226
|
const versionIsBeta = isBetaVersion(version);
|
|
200
227
|
switch (product) {
|
|
@@ -247,7 +274,7 @@ export function isDefined(value) {
|
|
|
247
274
|
*
|
|
248
275
|
* @returns An error message if invalid, or undefined if valid.
|
|
249
276
|
*/
|
|
250
|
-
export function
|
|
277
|
+
export function describeTokenNameProblem(name) {
|
|
251
278
|
// Strip leading -- for validation (callers may pass with or without)
|
|
252
279
|
const ident = name.replace(/^--/, '');
|
|
253
280
|
if (!ident) {
|
|
@@ -282,7 +309,7 @@ export function validateTokenName(name) {
|
|
|
282
309
|
* @throws InvalidArgumentError if the resulting name is not a valid CSS custom property.
|
|
283
310
|
*/
|
|
284
311
|
export function normalizeTokenName(name) {
|
|
285
|
-
const error =
|
|
312
|
+
const error = describeTokenNameProblem(name);
|
|
286
313
|
if (error) {
|
|
287
314
|
throw new InvalidArgumentError(error, 'tokenName');
|
|
288
315
|
}
|
|
@@ -323,7 +350,7 @@ export function normalizePatchDisplayName(name, category) {
|
|
|
323
350
|
* @param name - The patch name to validate
|
|
324
351
|
* @returns Error message if invalid, undefined if valid
|
|
325
352
|
*/
|
|
326
|
-
export function
|
|
353
|
+
export function describePatchNameProblem(name) {
|
|
327
354
|
if (!name.trim())
|
|
328
355
|
return 'Name is required';
|
|
329
356
|
if (name.length > 50)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hominis/fireforge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.44.0",
|
|
4
4
|
"description": "FireForge — a build tool for customizing Firefox",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"format:check": "prettier --check --ignore-unknown \"src/**/*.ts\" \"bin/**/*.ts\" \"scripts/**/*.mjs\" \"eslint-rules/**/*.js\" \"package.json\" \"eslint.config.js\" \"vitest.config.ts\" \"vitest.pack.config.ts\" \"tsconfig.json\" \"tsconfig.build.json\" \".lintstagedrc.json\" \".prettierignore\" \".prettierrc\" \".gitignore\" \"README.md\" \"CHANGELOG.md\" \"docs/**/*.md\" \"knip.json\"",
|
|
39
39
|
"prepare": "node -e \"import('./scripts/prepare.mjs').catch((error) => { if (error && typeof error === 'object' && 'code' in error && error.code === 'ERR_MODULE_NOT_FOUND') process.exit(0); throw error; })\"",
|
|
40
40
|
"prepack": "npm run build && node ./scripts/generate-build-info.mjs --loud",
|
|
41
|
-
"release:check": "npm run format:check && npm run whitespace:check && npm run lint:ci && npm run typecheck && npm run deadcode:check && npm run cycles:check && npm run test:coverage && npm run pack:verify
|
|
41
|
+
"release:check": "npm run format:check && npm run whitespace:check && npm run lint:ci && npm run typecheck && npm run deadcode:check && npm run cycles:check && npm run test:coverage && npm run pack:verify",
|
|
42
42
|
"prepublishOnly": "npm run release:check"
|
|
43
43
|
},
|
|
44
44
|
"files": [
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* "Furnace manifest sync" doctor check.
|
|
3
|
-
*
|
|
4
|
-
* Surfaces orphaned component directories on disk whose names are missing
|
|
5
|
-
* from `furnace.json`. The motivating eval case is the concurrent-override
|
|
6
|
-
* race (eval 2) where two parallel `furnace override` commands both left
|
|
7
|
-
* their directory on disk but only the second reached
|
|
8
|
-
* `writeFurnaceConfig`. Under `--repair-furnace`, override orphans are
|
|
9
|
-
* re-registered from the `override.json` sidecar the command wrote during
|
|
10
|
-
* the copy phase; custom orphans are listed for the operator to either
|
|
11
|
-
* re-run `furnace create` against or delete manually, because custom
|
|
12
|
-
* components have no similar persisted metadata.
|
|
13
|
-
*
|
|
14
|
-
* Lives in a sibling module to keep `doctor-furnace.ts` under the
|
|
15
|
-
* per-file LOC budget.
|
|
16
|
-
*/
|
|
17
|
-
import type { DoctorCheckDefinition } from './doctor-check-core.js';
|
|
18
|
-
export declare const furnaceManifestSyncCheck: DoctorCheckDefinition;
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { JarMnToken, MozBuildToken } from './manifest-tokenizers.js';
|
|
2
|
-
/**
|
|
3
|
-
* Ordering comparator matching mozbuild's `StrictOrderingOnAppendList`
|
|
4
|
-
* (`mozbuild.util.UnsortedError`): entries are compared **case-insensitively**,
|
|
5
|
-
* so `HominisAppearanceController` (`appe`) sorts before
|
|
6
|
-
* `HominisAppMenuIntegration` (`appm`) even though a raw byte comparison
|
|
7
|
-
* places the uppercase `M` (0x4D) before the lowercase `e` (0x65).
|
|
8
|
-
*
|
|
9
|
-
* A naive `a > b` insertion landed the new entry in byte order, which
|
|
10
|
-
* `mach configure` then rejected with `UnsortedError`, aborting the build.
|
|
11
|
-
* Ties on the lower-cased key fall back to byte order so the comparison is
|
|
12
|
-
* total and stable.
|
|
13
|
-
*/
|
|
14
|
-
export declare function mozbuildSortCompare(a: string, b: string): number;
|
|
15
|
-
/**
|
|
16
|
-
* Inserts a line into an array of lines in alphabetical order within a
|
|
17
|
-
* specified range. The comparison key is extracted from each line.
|
|
18
|
-
*
|
|
19
|
-
* @returns Object with insertIndex and previousEntry
|
|
20
|
-
*/
|
|
21
|
-
export declare function findAlphabeticalPosition(lines: string[], startLine: number, endLine: number, newKey: string, extractKey: (line: string) => string | undefined): {
|
|
22
|
-
insertIndex: number;
|
|
23
|
-
previousEntry: string | undefined;
|
|
24
|
-
};
|
|
25
|
-
/**
|
|
26
|
-
* Find alphabetical position within a tokenized jar.mn section.
|
|
27
|
-
*/
|
|
28
|
-
export declare function findAlphabeticalTokenPosition(tokens: JarMnToken[], sectionTargetPattern: RegExp, newKey: string): {
|
|
29
|
-
insertIndex: number;
|
|
30
|
-
previousEntry: string | undefined;
|
|
31
|
-
};
|
|
32
|
-
/**
|
|
33
|
-
* Find alphabetical position within tokenized moz.build list items.
|
|
34
|
-
*/
|
|
35
|
-
export declare function findAlphabeticalMozBuildPosition(tokens: MozBuildToken[], newKey: string): {
|
|
36
|
-
insertIndex: number;
|
|
37
|
-
previousEntry: string | undefined;
|
|
38
|
-
};
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ordering comparator matching mozbuild's `StrictOrderingOnAppendList`
|
|
3
|
-
* (`mozbuild.util.UnsortedError`): entries are compared **case-insensitively**,
|
|
4
|
-
* so `HominisAppearanceController` (`appe`) sorts before
|
|
5
|
-
* `HominisAppMenuIntegration` (`appm`) even though a raw byte comparison
|
|
6
|
-
* places the uppercase `M` (0x4D) before the lowercase `e` (0x65).
|
|
7
|
-
*
|
|
8
|
-
* A naive `a > b` insertion landed the new entry in byte order, which
|
|
9
|
-
* `mach configure` then rejected with `UnsortedError`, aborting the build.
|
|
10
|
-
* Ties on the lower-cased key fall back to byte order so the comparison is
|
|
11
|
-
* total and stable.
|
|
12
|
-
*/
|
|
13
|
-
export function mozbuildSortCompare(a, b) {
|
|
14
|
-
const la = a.toLowerCase();
|
|
15
|
-
const lb = b.toLowerCase();
|
|
16
|
-
if (la < lb)
|
|
17
|
-
return -1;
|
|
18
|
-
if (la > lb)
|
|
19
|
-
return 1;
|
|
20
|
-
if (a < b)
|
|
21
|
-
return -1;
|
|
22
|
-
if (a > b)
|
|
23
|
-
return 1;
|
|
24
|
-
return 0;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Inserts a line into an array of lines in alphabetical order within a
|
|
28
|
-
* specified range. The comparison key is extracted from each line.
|
|
29
|
-
*
|
|
30
|
-
* @returns Object with insertIndex and previousEntry
|
|
31
|
-
*/
|
|
32
|
-
export function findAlphabeticalPosition(lines, startLine, endLine, newKey, extractKey) {
|
|
33
|
-
// Check if existing entries are actually sorted; if not, append at end
|
|
34
|
-
const existingKeys = [];
|
|
35
|
-
for (let i = startLine; i < endLine; i++) {
|
|
36
|
-
const line = lines[i];
|
|
37
|
-
if (line === undefined)
|
|
38
|
-
continue;
|
|
39
|
-
const key = extractKey(line);
|
|
40
|
-
if (key !== undefined) {
|
|
41
|
-
existingKeys.push(key);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
const isSorted = existingKeys.every((k, idx) => idx === 0 || mozbuildSortCompare(k, existingKeys[idx - 1] ?? '') >= 0);
|
|
45
|
-
if (!isSorted) {
|
|
46
|
-
return { insertIndex: endLine, previousEntry: undefined };
|
|
47
|
-
}
|
|
48
|
-
let insertIndex = endLine;
|
|
49
|
-
let previousEntry;
|
|
50
|
-
for (let i = startLine; i < endLine; i++) {
|
|
51
|
-
const line = lines[i];
|
|
52
|
-
if (line === undefined)
|
|
53
|
-
continue;
|
|
54
|
-
const key = extractKey(line);
|
|
55
|
-
if (key === undefined)
|
|
56
|
-
continue;
|
|
57
|
-
if (mozbuildSortCompare(key, newKey) > 0) {
|
|
58
|
-
insertIndex = i;
|
|
59
|
-
break;
|
|
60
|
-
}
|
|
61
|
-
insertIndex = i + 1;
|
|
62
|
-
previousEntry = line.trim();
|
|
63
|
-
}
|
|
64
|
-
return { insertIndex, previousEntry };
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Find alphabetical position within a tokenized jar.mn section.
|
|
68
|
-
*/
|
|
69
|
-
export function findAlphabeticalTokenPosition(tokens, sectionTargetPattern, newKey) {
|
|
70
|
-
// Find entry tokens in the section matching the pattern
|
|
71
|
-
const sectionEntries = tokens.filter((t) => t.type === 'entry' && t.parsed && sectionTargetPattern.test(t.parsed.target));
|
|
72
|
-
let insertLineIndex;
|
|
73
|
-
let previousEntry;
|
|
74
|
-
if (sectionEntries.length === 0) {
|
|
75
|
-
// Empty section: find the section header and insert after it
|
|
76
|
-
const headerToken = tokens.find((t) => t.type === 'header' || (t.type === 'directive' && sectionTargetPattern.test(t.raw)));
|
|
77
|
-
if (headerToken) {
|
|
78
|
-
return { insertIndex: headerToken.lineIndex + 1, previousEntry: undefined };
|
|
79
|
-
}
|
|
80
|
-
return { insertIndex: -1, previousEntry: undefined };
|
|
81
|
-
}
|
|
82
|
-
// Default: after the last section entry
|
|
83
|
-
insertLineIndex = (sectionEntries[sectionEntries.length - 1]?.lineIndex ?? 0) + 1;
|
|
84
|
-
for (const entry of sectionEntries) {
|
|
85
|
-
if (!entry.parsed)
|
|
86
|
-
continue;
|
|
87
|
-
const match = sectionTargetPattern.exec(entry.parsed.target);
|
|
88
|
-
const key = match?.[1] ?? entry.parsed.target;
|
|
89
|
-
if (mozbuildSortCompare(key, newKey) > 0) {
|
|
90
|
-
insertLineIndex = entry.lineIndex;
|
|
91
|
-
break;
|
|
92
|
-
}
|
|
93
|
-
insertLineIndex = entry.lineIndex + 1;
|
|
94
|
-
previousEntry = entry.raw.trim();
|
|
95
|
-
}
|
|
96
|
-
return { insertIndex: insertLineIndex, previousEntry };
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Find alphabetical position within tokenized moz.build list items.
|
|
100
|
-
*/
|
|
101
|
-
export function findAlphabeticalMozBuildPosition(tokens, newKey) {
|
|
102
|
-
const items = tokens.filter((t) => t.type === 'list-item');
|
|
103
|
-
if (items.length === 0) {
|
|
104
|
-
// Insert after list-open
|
|
105
|
-
const openToken = tokens.find((t) => t.type === 'list-open');
|
|
106
|
-
return { insertIndex: (openToken?.lineIndex ?? 0) + 1, previousEntry: undefined };
|
|
107
|
-
}
|
|
108
|
-
let insertLineIndex = (items[items.length - 1]?.lineIndex ?? 0) + 1;
|
|
109
|
-
let previousEntry;
|
|
110
|
-
for (const item of items) {
|
|
111
|
-
const key = item.parsed?.value ?? '';
|
|
112
|
-
if (mozbuildSortCompare(key, newKey) > 0) {
|
|
113
|
-
insertLineIndex = item.lineIndex;
|
|
114
|
-
break;
|
|
115
|
-
}
|
|
116
|
-
insertLineIndex = item.lineIndex + 1;
|
|
117
|
-
previousEntry = item.raw.trim();
|
|
118
|
-
}
|
|
119
|
-
return { insertIndex: insertLineIndex, previousEntry };
|
|
120
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|