@hominis/fireforge 0.49.1 → 0.49.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,7 @@
5
5
  ### Furnace and builds
6
6
 
7
7
  - Safer Furnace deployment and objdir cloning protect component sources and peer checkouts from shared files and directory aliases. Failed copies finish before rollback; cloned build metadata is relocated and verified.
8
+ - `furnace create --localized` no longer scaffolds a `connectedCallback`/`disconnectedCallback` pair that calls `l10n.connectRoot(shadowRoot)` and `disconnectRoot`. `MozLitElement` already registers its shadow render root with `document.l10n`, so the generated pair registered the same root twice, which `DOMLocalization::ConnectRoot` asserts against in debug builds. The scaffold keeps the module-level `window.MozXULElement?.insertFTLIfNeeded(...)` call.
8
9
  - Build and test preflight detect broken partial configuration, stale artifacts and invalid build baselines. Scoped builds retain coverage only while their inputs remain unchanged, and builds remove dangling test links.
9
10
 
10
11
  ### Test harness
@@ -28,6 +29,7 @@
28
29
  ### Tooling
29
30
 
30
31
  - Full-Firefox integration preserves existing workspace files and Git index state, and fails on incomplete recovery. Build identity includes untracked contents and binary changes. Release checks enforce the pinned toolchain and additional module coverage floors.
32
+ - Dev tooling: `eslint-plugin-jsdoc` 65.0.1 and `@types/node` 26.6.4. Transitive `source-map-js` 1.2.2 (GHSA-68fv-2mgg-jv7q) and `smol-toml` 1.9.0 (GHSA-r4xh-jqrq-34v2) clear `npm audit`.
31
33
 
32
34
  ## 0.48.0
33
35
 
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "0.49.1",
4
- "commit": "6348d3cae2e93096039d40ce0b52bfce0a0b9308",
5
- "shortCommit": "6348d3cae2e9",
3
+ "version": "0.49.2",
4
+ "commit": "c707978869b62aba07d1e8f0955be00c223d5ce0",
5
+ "shortCommit": "c707978869b6",
6
6
  "dirty": false,
7
7
  "dirtyHash": null,
8
- "buildTime": "2026-10-04T15:20:41.231Z"
8
+ "buildTime": "2026-10-06T21:50:15.508Z"
9
9
  }
@@ -26,9 +26,14 @@ export interface GenerateMjsContentOptions {
26
26
  * `MozXULElement`. Calling it from `connectedCallback` on a Lit-based
27
27
  * component throws `TypeError: this.insertFTLIfNeeded is not a function` at
28
28
  * every connect. Upstream Firefox components (e.g. `moz-input-folder.mjs`)
29
- * solve this with a module-level guarded call on `window.MozXULElement` and
30
- * per-instance shadow-DOM Fluent attachment via `l10n.connectRoot`. We mirror
31
- * that pattern here so `--localized` produces functional code.
29
+ * solve this with a module-level guarded call on `window.MozXULElement`, and
30
+ * the template mirrors that call so `--localized` produces functional code.
31
+ *
32
+ * The template emits no `connectedCallback`/`disconnectedCallback` pair for
33
+ * Fluent. `MozLitElement` already connects its shadow render root to
34
+ * `document.l10n` on connect and disconnects it on disconnect, so a second
35
+ * `l10n.connectRoot(shadowRoot)` registers the same root twice, which
36
+ * `DOMLocalization::ConnectRoot` asserts against in debug builds.
32
37
  *
33
38
  * Path resolution precedence (when `localized` is true):
34
39
  * 1. `sharedFtl`: used verbatim. The caller has resolved it from
@@ -11,9 +11,14 @@
11
11
  * `MozXULElement`. Calling it from `connectedCallback` on a Lit-based
12
12
  * component throws `TypeError: this.insertFTLIfNeeded is not a function` at
13
13
  * every connect. Upstream Firefox components (e.g. `moz-input-folder.mjs`)
14
- * solve this with a module-level guarded call on `window.MozXULElement` and
15
- * per-instance shadow-DOM Fluent attachment via `l10n.connectRoot`. We mirror
16
- * that pattern here so `--localized` produces functional code.
14
+ * solve this with a module-level guarded call on `window.MozXULElement`, and
15
+ * the template mirrors that call so `--localized` produces functional code.
16
+ *
17
+ * The template emits no `connectedCallback`/`disconnectedCallback` pair for
18
+ * Fluent. `MozLitElement` already connects its shadow render root to
19
+ * `document.l10n` on connect and disconnects it on disconnect, so a second
20
+ * `l10n.connectRoot(shadowRoot)` registers the same root twice, which
21
+ * `DOMLocalization::ConnectRoot` asserts against in debug builds.
17
22
  *
18
23
  * Path resolution precedence (when `localized` is true):
19
24
  * 1. `sharedFtl`: used verbatim. The caller has resolved it from
@@ -45,25 +50,6 @@ export function generateMjsContent(options) {
45
50
  const ftlModulePreamble = localized
46
51
  ? `
47
52
  window.MozXULElement?.insertFTLIfNeeded(${JSON.stringify(ftlPath)});
48
- `
49
- : '';
50
- const lifecycleHooks = localized
51
- ? `
52
- connectedCallback() {
53
- super.connectedCallback();
54
- const { shadowRoot } = this;
55
- if (shadowRoot) {
56
- this.ownerDocument.l10n?.connectRoot(shadowRoot);
57
- }
58
- }
59
-
60
- disconnectedCallback() {
61
- super.disconnectedCallback();
62
- const { shadowRoot } = this;
63
- if (shadowRoot) {
64
- this.ownerDocument.l10n?.disconnectRoot(shadowRoot);
65
- }
66
- }
67
53
  `
68
54
  : '';
69
55
  return `${header}
@@ -80,7 +66,6 @@ class ${className} extends MozLitElement {
80
66
  /** @type {Record<string, unknown>} */
81
67
  static properties = {};
82
68
 
83
- ${lifecycleHooks}
84
69
  render() {
85
70
  return html\`
86
71
  <link rel="stylesheet" href="chrome://global/content/elements/${name}.css" />
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hominis/fireforge",
3
- "version": "0.49.1",
3
+ "version": "0.49.2",
4
4
  "description": "FireForge — a build tool for customizing Firefox",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -72,7 +72,7 @@
72
72
  "dpdm": "4.3.0",
73
73
  "eslint": "^10.0.0",
74
74
  "eslint-config-prettier": "^10.1.8",
75
- "eslint-plugin-jsdoc": "^64.1.0",
75
+ "eslint-plugin-jsdoc": "^65.0.1",
76
76
  "eslint-plugin-simple-import-sort": "^14.0.0",
77
77
  "fast-check": "^4.6.0",
78
78
  "husky": "^9.1.7",