@hominis/fireforge 0.11.0 → 0.11.1

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 CHANGED
@@ -86,7 +86,7 @@
86
86
  - The `re-export --files` path extracted into `src/commands/re-export-files.ts` to keep `re-export.ts` under the line limit.
87
87
  - `max-lines` and `max-lines-per-function` ESLint rules promoted from `warn` to `error`.
88
88
  - Doctor check ordering dependencies documented in the registry comment.
89
- - Default Firefox version bumped to ESR 146.
89
+ - Default Firefox version bumped to ESR 140.9.0.
90
90
 
91
91
  ### Packaging
92
92
 
package/README.md CHANGED
@@ -26,7 +26,7 @@ Inspired by [fern.js](https://github.com/ghostery/user-agent-desktop) and [Melon
26
26
 
27
27
  - **Quality checks** `fireforge lint` catches fork-specific issues (raw colours, missing licence headers, relative imports, large patches, cross-patch ordering problems) before you export. `fireforge verify` runs a read-only integrity check over the whole patch queue. `fireforge doctor` diagnoses project health including Furnace component validation.
28
28
 
29
- - **Built and validated against real Firefox code** Developed by editing a real Firefox ESR codebase, learning from existing patch tools, observing the breakages and edge cases that surfaced, and turning those findings into a realistic test suite. In-repo tests are thus grounded in actual development scenarios. Full end-to-end runs are currently only run locally, as they require about 30 GB of disk and significant compute for the full build.
29
+ - **Built and validated against real Firefox code** Developed by editing a real Firefox ESR codebase, learning from existing patch tools, observing the breakages and edge cases that surfaced, and turning those findings into a realistic test suite. In-repo tests are thus grounded in actual development scenarios. Yes, we we mock quite a bit, but when building a tool the modifies a separate, far larger code base, I think it's a valid compromise for the time being. Full end-to-end runs are currently run locally, as they require about 30 GB of disk and significant compute for multiple full builds. Full end-to-end via Github Actions will be added soonishlyTM.
30
30
 
31
31
  ## Quick Start
32
32
 
@@ -172,7 +172,7 @@ This re-exports the fixed patch and continues applying the remaining stack.
172
172
  "name": "custom-logo",
173
173
  "description": "Replaces default Firefox branding with custom logo",
174
174
  "createdAt": "2025-01-15T10:30:00Z",
175
- "sourceEsrVersion": "146.0esr",
175
+ "sourceEsrVersion": "140.9.0esr",
176
176
  "filesAffected": ["browser/branding/official/logo.png"]
177
177
  }
178
178
  ]
@@ -303,7 +303,7 @@ fireforge furnace diff moz-button # unified diff against baseli
303
303
  "binaryName": "mybrowser",
304
304
  "license": "EUPL-1.2",
305
305
  "firefox": {
306
- "version": "146.0esr",
306
+ "version": "140.9.0esr",
307
307
  "product": "firefox-esr"
308
308
  },
309
309
  "build": { "jobs": 8 },
@@ -63,7 +63,7 @@ export function validateSetupOptions(options) {
63
63
  throw new InvalidArgumentError('Binary name must start with a letter and contain only lowercase letters, numbers, and hyphens', '--binary-name');
64
64
  }
65
65
  if (options.firefoxVersion !== undefined && !isValidFirefoxVersion(options.firefoxVersion)) {
66
- throw new InvalidArgumentError('Invalid Firefox version format (e.g., 146.0, 146.0esr, or 147.0b1)', '--firefox-version');
66
+ throw new InvalidArgumentError('Invalid Firefox version format (e.g., 140.9.0, 140.9.0esr, or 147.0b1)', '--firefox-version');
67
67
  }
68
68
  if (options.product !== undefined) {
69
69
  resolveFirefoxProduct(options.product, '--product');
@@ -127,10 +127,10 @@ async function promptSetupInputs(options) {
127
127
  ? Promise.resolve(options.firefoxVersion)
128
128
  : text({
129
129
  message: 'Firefox version to base on',
130
- placeholder: '146.0esr',
130
+ placeholder: '140.9.0esr',
131
131
  validate: (value) => {
132
132
  if (value && !isValidFirefoxVersion(value)) {
133
- return 'Invalid Firefox version format (e.g., 146.0, 146.0esr, or 147.0b1)';
133
+ return 'Invalid Firefox version format (e.g., 140.9.0, 140.9.0esr, or 147.0b1)';
134
134
  }
135
135
  return undefined;
136
136
  },
@@ -141,7 +141,7 @@ async function promptSetupInputs(options) {
141
141
  }
142
142
  const effectiveVersion = (typeof results.firefoxVersion === 'string' && results.firefoxVersion.trim()) ||
143
143
  options.firefoxVersion ||
144
- '146.0esr';
144
+ '140.9.0esr';
145
145
  const inferredProduct = inferProductFromVersion(effectiveVersion);
146
146
  if (inferredProduct) {
147
147
  return Promise.resolve(inferredProduct);
@@ -183,7 +183,8 @@ async function promptSetupInputs(options) {
183
183
  const finalAppId = (typeof project.appId === 'string' ? project.appId.trim() : '') ||
184
184
  `org.${sanitizedName}.browser`;
185
185
  const finalBinaryName = (typeof project.binaryName === 'string' ? project.binaryName.trim() : '') || sanitizedName;
186
- const finalFirefoxVersion = (typeof project.firefoxVersion === 'string' ? project.firefoxVersion.trim() : '') || '146.0esr';
186
+ const finalFirefoxVersion = (typeof project.firefoxVersion === 'string' ? project.firefoxVersion.trim() : '') ||
187
+ '140.9.0esr';
187
188
  if (!isValidAppId(finalAppId)) {
188
189
  throw new InvalidArgumentError(`Derived appId "${finalAppId}" is invalid.`, 'appId');
189
190
  }
@@ -11,7 +11,7 @@ export type { ProgressCallback } from './firefox-download.js';
11
11
  export { formatBytes, getFirefoxVersion } from './firefox-extract.js';
12
12
  /**
13
13
  * Gets the download URL for a Firefox source tarball.
14
- * @param version - Firefox version (e.g., "146.0esr")
14
+ * @param version - Firefox version (e.g., "140.9.0esr")
15
15
  * @param product - Firefox product type
16
16
  * @returns Full URL to the source tarball
17
17
  */
@@ -17,7 +17,7 @@ export { resolveArchive } from './firefox-archive.js';
17
17
  export { formatBytes, getFirefoxVersion } from './firefox-extract.js';
18
18
  /**
19
19
  * Gets the download URL for a Firefox source tarball.
20
- * @param version - Firefox version (e.g., "146.0esr")
20
+ * @param version - Firefox version (e.g., "140.9.0esr")
21
21
  * @param product - Firefox product type
22
22
  * @returns Full URL to the source tarball
23
23
  */
@@ -10,9 +10,9 @@
10
10
  * This module is deliberately pure and string-only: it does no I/O and does
11
11
  * not parse Firefox version components. Comparing by string equality is
12
12
  * sufficient because `fireforge.json` stores a canonical version string
13
- * (e.g. `"146.0esr"`) and overrides are created with exactly that string
13
+ * (e.g. `"140.9.0esr"`) and overrides are created with exactly that string
14
14
  * copied from `forgeConfig.firefox.version`. Any string mismatch is worth
15
- * surfacing — even "140.0" vs "146.0esr" is a real drift signal.
15
+ * surfacing — even "140.0" vs "140.9.0esr" is a real drift signal.
16
16
  *
17
17
  * The result is advisory: apply/deploy emit warnings but do not fail, and
18
18
  * status reports drift alongside the component overview. Nothing here
@@ -11,9 +11,9 @@
11
11
  * This module is deliberately pure and string-only: it does no I/O and does
12
12
  * not parse Firefox version components. Comparing by string equality is
13
13
  * sufficient because `fireforge.json` stores a canonical version string
14
- * (e.g. `"146.0esr"`) and overrides are created with exactly that string
14
+ * (e.g. `"140.9.0esr"`) and overrides are created with exactly that string
15
15
  * copied from `forgeConfig.firefox.version`. Any string mismatch is worth
16
- * surfacing — even "140.0" vs "146.0esr" is a real drift signal.
16
+ * surfacing — even "140.0" vs "140.9.0esr" is a real drift signal.
17
17
  *
18
18
  * The result is advisory: apply/deploy emit warnings but do not fail, and
19
19
  * status reports drift alongside the component overview. Nothing here
@@ -43,6 +43,6 @@ export declare function validatePatchIntegrity(patchesDir: string, engineDir: st
43
43
  * manifest read-modify-write cycle.
44
44
  * @param patchesDir - Path to the patches directory
45
45
  * @param filenames - Patch filenames to update
46
- * @param newVersion - Version string to set (e.g. "146.0esr")
46
+ * @param newVersion - Version string to set (e.g. "140.9.0esr")
47
47
  */
48
48
  export declare function stampPatchVersions(patchesDir: string, filenames: string[], newVersion: string): Promise<void>;
@@ -103,7 +103,7 @@ export async function validatePatchIntegrity(patchesDir, engineDir) {
103
103
  * manifest read-modify-write cycle.
104
104
  * @param patchesDir - Path to the patches directory
105
105
  * @param filenames - Patch filenames to update
106
- * @param newVersion - Version string to set (e.g. "146.0esr")
106
+ * @param newVersion - Version string to set (e.g. "140.9.0esr")
107
107
  */
108
108
  export async function stampPatchVersions(patchesDir, filenames, newVersion) {
109
109
  const manifest = await loadPatchesManifest(patchesDir);
@@ -47,7 +47,7 @@ export interface PatchMetadata {
47
47
  description: string;
48
48
  /** ISO timestamp of when the patch was created */
49
49
  createdAt: string;
50
- /** ESR version the patch was created against (e.g., "146.0esr") */
50
+ /** ESR version the patch was created against (e.g., "140.9.0esr") */
51
51
  sourceEsrVersion: string;
52
52
  /** Array of file paths affected by this patch */
53
53
  filesAffected: string[];
@@ -6,7 +6,7 @@ export type FirefoxProduct = 'firefox' | 'firefox-esr' | 'firefox-beta';
6
6
  * Firefox version configuration.
7
7
  */
8
8
  export interface FirefoxConfig {
9
- /** Firefox release version (e.g., "146.0esr") */
9
+ /** Firefox release version (e.g., "140.9.0esr") */
10
10
  version: string;
11
11
  /** Firefox product type */
12
12
  product: FirefoxProduct;
@@ -66,7 +66,7 @@ export declare function assertString(value: unknown, name: string): asserts valu
66
66
  export declare function assertObject(value: unknown, name: string): asserts value is Record<string, unknown>;
67
67
  /**
68
68
  * Validates a Firefox version string.
69
- * Accepts formats like "146.0", "146.0.1", "146.0esr", "147.0b1"
69
+ * Accepts formats like "140.9.0", "140.9.1", "140.9.0esr", "147.0b1"
70
70
  */
71
71
  export declare function isValidFirefoxVersion(version: string): boolean;
72
72
  /**
@@ -107,7 +107,7 @@ export declare function inferProductFromVersion(version: string): 'firefox' | 'f
107
107
  * Validates that a Firefox product and version are compatible.
108
108
  *
109
109
  * Rules:
110
- * - `firefox-esr` requires an ESR version (e.g. "146.0esr", "128.0.1esr").
110
+ * - `firefox-esr` requires an ESR version (e.g. "140.9.0esr", "128.0.1esr").
111
111
  * - `firefox-beta` requires a beta version (e.g. "147.0b1").
112
112
  * - `firefox` (stable) rejects both ESR and beta version strings.
113
113
  *
@@ -97,10 +97,10 @@ export function assertObject(value, name) {
97
97
  }
98
98
  /**
99
99
  * Validates a Firefox version string.
100
- * Accepts formats like "146.0", "146.0.1", "146.0esr", "147.0b1"
100
+ * Accepts formats like "140.9.0", "140.9.1", "140.9.0esr", "147.0b1"
101
101
  */
102
102
  export function isValidFirefoxVersion(version) {
103
- // Stable/ESR: 146.0, 146.0.1, 146.0esr, 128.0.1esr
103
+ // Stable/ESR: 140.9.0, 140.9.1, 140.9.0esr, 128.0.1esr
104
104
  // Beta: 147.0b1, 147.0b2
105
105
  return /^[1-9]\d{0,2}\.\d+(?:b[1-9]\d*|\.\d+(?:esr)?|esr)?$/.test(version);
106
106
  }
@@ -160,7 +160,7 @@ export function inferProductFromVersion(version) {
160
160
  * Validates that a Firefox product and version are compatible.
161
161
  *
162
162
  * Rules:
163
- * - `firefox-esr` requires an ESR version (e.g. "146.0esr", "128.0.1esr").
163
+ * - `firefox-esr` requires an ESR version (e.g. "140.9.0esr", "128.0.1esr").
164
164
  * - `firefox-beta` requires a beta version (e.g. "147.0b1").
165
165
  * - `firefox` (stable) rejects both ESR and beta version strings.
166
166
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hominis/fireforge",
3
- "version": "0.11.0",
3
+ "version": "0.11.1",
4
4
  "description": "FireForge — a build tool for customizing Firefox",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",