From 0007d3c337dc7dec7faf0d1d3dfc55eada85b3ed Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Feb 2026 20:08:49 +0000 Subject: [PATCH 1/3] Initial plan From 160be3d31b251e2ac5bace1b45b0cfb145e41e36 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Feb 2026 20:28:55 +0000 Subject: [PATCH 2/3] Fix COMPUTED_GETTERS always initialized as WeakSet to prevent TypeError in Firefox Co-authored-by: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> --- packages/@ember/-internals/metal/lib/decorator.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/@ember/-internals/metal/lib/decorator.ts b/packages/@ember/-internals/metal/lib/decorator.ts index 3e6b262f3bc..098ddc1c61b 100644 --- a/packages/@ember/-internals/metal/lib/decorator.ts +++ b/packages/@ember/-internals/metal/lib/decorator.ts @@ -75,11 +75,7 @@ export abstract class ComputedDescriptor { abstract set(obj: object, keyName: string, value: any | null | undefined): any | null | undefined; } -export let COMPUTED_GETTERS: WeakSet<() => unknown>; - -if (import.meta.env?.DEV) { - COMPUTED_GETTERS = new WeakSet(); -} +export const COMPUTED_GETTERS = new WeakSet<() => unknown>(); function DESCRIPTOR_GETTER_FUNCTION(name: string, descriptor: ComputedDescriptor): () => unknown { function getter(this: object): unknown { From 462a664904e50a4e420520b51be7087ab2c56c65 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Feb 2026 20:42:27 +0000 Subject: [PATCH 3/3] Fix Firefox test build: add import.meta.env?.DEV replacement plugin to vite.config.mjs Co-authored-by: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> --- packages/@ember/-internals/metal/lib/decorator.ts | 6 +++++- vite.config.mjs | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/packages/@ember/-internals/metal/lib/decorator.ts b/packages/@ember/-internals/metal/lib/decorator.ts index 098ddc1c61b..3e6b262f3bc 100644 --- a/packages/@ember/-internals/metal/lib/decorator.ts +++ b/packages/@ember/-internals/metal/lib/decorator.ts @@ -75,7 +75,11 @@ export abstract class ComputedDescriptor { abstract set(obj: object, keyName: string, value: any | null | undefined): any | null | undefined; } -export const COMPUTED_GETTERS = new WeakSet<() => unknown>(); +export let COMPUTED_GETTERS: WeakSet<() => unknown>; + +if (import.meta.env?.DEV) { + COMPUTED_GETTERS = new WeakSet(); +} function DESCRIPTOR_GETTER_FUNCTION(name: string, descriptor: ComputedDescriptor): () => unknown { function getter(this: object): unknown { diff --git a/vite.config.mjs b/vite.config.mjs index 57b0ca0b314..e044c6a7723 100644 --- a/vite.config.mjs +++ b/vite.config.mjs @@ -34,6 +34,21 @@ export default defineConfig(({ mode }) => { return { plugins: [ templateTag(), + { + name: 'define custom import.meta.env', + transform(code) { + if (mode === 'development') { + if (code.includes('import.meta.env?.DEV')) { + return code.replace(/import.meta.env\?.DEV/g, 'true'); + } + } else if (mode === 'production') { + if (code.includes('import.meta.env?.DEV')) { + return code.replace(/import.meta.env\?.DEV/g, 'false'); + } + } + return undefined; + }, + }, babel({ babelHelpers: 'bundled', extensions: ['.js', '.ts', '.gjs', '.gts'],