From fddc5ec3fd38f12bb203a10a3a9b92697c853006 Mon Sep 17 00:00:00 2001 From: Peter Wagenet Date: Wed, 18 Feb 2026 16:46:22 -0800 Subject: [PATCH 1/7] [BREAKING] Remove AMD bundles for Ember 7.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implements RFC #1101 (Deprecate Ember Vendor Bundles). The four AMD bundles deprecated in 6.10.0 are now removed: - dist/ember.debug.js - dist/ember.prod.js - dist/ember-testing.js - dist/ember-template-compiler.js The ESM template compiler at dist/packages/ember-template-compiler/index.js is the only supported template compiler going forward. The use-ember-modules optional feature is now the only mode — all classic builds use ember-auto-import to consume ember-source as a v2 addon. - Remove AMD rollup build configs (legacyBundleConfig, templateCompilerConfig, amdDefineSupport, concatenateAMDEntrypoints, licenseAndLoader) - Delete broccoli/amd-compat-entrypoints/ and packages/loader/ - Make lib/index.js unconditionally use ESM paths - Remove DEPRECATE_AMD_BUNDLES deprecation entry (until: 7.0.0 reached) - Update package.json exports and files - Remove AMD-dependent node tests; update template-compiler-test for ESM - Update smoke-test babel configs to use ESM compiler path - Remove classicUseModulesFeature smoke-test scenario (now the only mode) Co-Authored-By: Claude Sonnet 4.6 --- .../ember-template-compiler.js | 206 -------- .../amd-compat-entrypoints/ember-testing.js | 79 --- .../amd-compat-entrypoints/ember.debug.js | 487 ------------------ lib/index.js | 419 +++++++-------- package.json | 10 - .../@ember/-internals/deprecations/index.ts | 10 - packages/loader/lib/index.d.ts | 4 - packages/loader/lib/index.js | 99 ---- packages/loader/package.json | 5 - rollup.config.mjs | 196 +------ smoke-tests/benchmark-app/babel.config.mjs | 2 +- smoke-tests/scenarios/package.json | 1 - smoke-tests/scenarios/scenarios.ts | 21 +- smoke-tests/v2-app-template/babel.config.cjs | 2 +- tests/node/app-boot-test.js | 137 ----- tests/node/component-rendering-test.js | 45 -- tests/node/fastboot-sandbox-test.js | 120 ----- tests/node/helpers/assert-html-matches.js | 27 - tests/node/helpers/build-owner.js | 28 - tests/node/helpers/load-ember.js | 47 -- tests/node/helpers/setup-app.js | 199 ------- tests/node/helpers/setup-component.js | 111 ---- tests/node/instrumentation-test.js | 25 - tests/node/sourcemap-test.js | 23 - tests/node/template-compiler-test.js | 83 +-- tests/node/visit-test.js | 357 ------------- tsconfig/compiler-options.json | 3 +- types/publish.mjs | 13 +- 28 files changed, 217 insertions(+), 2542 deletions(-) delete mode 100644 broccoli/amd-compat-entrypoints/ember-template-compiler.js delete mode 100644 broccoli/amd-compat-entrypoints/ember-testing.js delete mode 100644 broccoli/amd-compat-entrypoints/ember.debug.js delete mode 100644 packages/loader/lib/index.d.ts delete mode 100644 packages/loader/lib/index.js delete mode 100644 packages/loader/package.json delete mode 100644 tests/node/app-boot-test.js delete mode 100644 tests/node/component-rendering-test.js delete mode 100644 tests/node/fastboot-sandbox-test.js delete mode 100644 tests/node/helpers/assert-html-matches.js delete mode 100644 tests/node/helpers/build-owner.js delete mode 100644 tests/node/helpers/load-ember.js delete mode 100644 tests/node/helpers/setup-app.js delete mode 100644 tests/node/helpers/setup-component.js delete mode 100644 tests/node/instrumentation-test.js delete mode 100644 tests/node/sourcemap-test.js delete mode 100644 tests/node/visit-test.js diff --git a/broccoli/amd-compat-entrypoints/ember-template-compiler.js b/broccoli/amd-compat-entrypoints/ember-template-compiler.js deleted file mode 100644 index 06f1a57d9aa..00000000000 --- a/broccoli/amd-compat-entrypoints/ember-template-compiler.js +++ /dev/null @@ -1,206 +0,0 @@ -/* eslint-disable */ - -// This file was derived from the output of the classic broccoli-based build of -// ember-template-compiler.js. It's intended to convey exactly how the authored ES modules -// get mapped into backward-compatible AMD defines. - -import d from 'amd-compat-entrypoint-definition'; - -import * as emberinternalsBrowserEnvironmentIndex from '@ember/-internals/browser-environment/index'; -d('@ember/-internals/browser-environment/index', emberinternalsBrowserEnvironmentIndex); - -import * as emberinternalsEnvironmentIndex from '@ember/-internals/environment/index'; -d('@ember/-internals/environment/index', emberinternalsEnvironmentIndex); - -import * as emberinternalsUtilsIndex from '@ember/-internals/utils/index'; -d('@ember/-internals/utils/index', emberinternalsUtilsIndex); - -import * as emberCanaryFeaturesIndex from '@ember/canary-features/index'; -d('@ember/canary-features/index', emberCanaryFeaturesIndex); - -/* - -The classic build included these modules but not their dependencies, so they -never worked. Keeping this comment to document why the list of modules differs in -this way. - -import * as emberDebugContainerDebugAdapter from '@ember/debug/container-debug-adapter'; -d('@ember/debug/container-debug-adapter', emberDebugContainerDebugAdapter); - -import * as emberDebugDataAdapter from '@ember/debug/data-adapter'; -d('@ember/debug/data-adapter', emberDebugDataAdapter); - -*/ - -import * as emberDebugIndex from '@ember/debug/index'; -d('@ember/debug/index', emberDebugIndex); - -import * as emberDebugLibCaptureRenderTree from '@ember/debug/lib/capture-render-tree'; -d('@ember/debug/lib/capture-render-tree', emberDebugLibCaptureRenderTree); - -import * as emberDebugLibDeprecate from '@ember/debug/lib/deprecate'; -d('@ember/debug/lib/deprecate', emberDebugLibDeprecate); - -import * as emberDebugLibHandlers from '@ember/debug/lib/handlers'; -d('@ember/debug/lib/handlers', emberDebugLibHandlers); - -import * as emberDebugLibInspect from '@ember/debug/lib/inspect'; -d('@ember/debug/lib/inspect', emberDebugLibInspect); - -import * as emberDebugLibTesting from '@ember/debug/lib/testing'; -d('@ember/debug/lib/testing', emberDebugLibTesting); - -import * as emberDebugLibWarn from '@ember/debug/lib/warn'; -d('@ember/debug/lib/warn', emberDebugLibWarn); - -import * as emberDeprecatedFeaturesIndex from '@ember/deprecated-features/index'; -d('@ember/deprecated-features/index', emberDeprecatedFeaturesIndex); - -import * as glimmerCompiler from '@glimmer/compiler'; -d('@glimmer/compiler', glimmerCompiler); - -import * as glimmerEnv from '@glimmer/env'; -d('@glimmer/env', glimmerEnv); - -import * as glimmerSyntax from '@glimmer/syntax'; -d('@glimmer/syntax', glimmerSyntax); - -import * as glimmerUtil from '@glimmer/util'; -d('@glimmer/util', glimmerUtil); - -import * as glimmerVm from '@glimmer/vm'; -d('@glimmer/vm', glimmerVm); - -import * as glimmerWireFormat from '@glimmer/wire-format'; -d('@glimmer/wire-format', glimmerWireFormat); - -import * as handlebarsParserIndex from '@handlebars/parser'; -d('@handlebars/parser/index', handlebarsParserIndex); - -import * as emberTemplateCompilerIndex from 'ember-template-compiler/index'; -d('ember-template-compiler/index', emberTemplateCompilerIndex); - -import * as emberTemplateCompilerLibPluginsAssertAgainstAttrs from 'ember-template-compiler/lib/plugins/assert-against-attrs'; -d( - 'ember-template-compiler/lib/plugins/assert-against-attrs', - emberTemplateCompilerLibPluginsAssertAgainstAttrs -); - -import * as emberTemplateCompilerLibPluginsAssertAgainstNamedOutlets from 'ember-template-compiler/lib/plugins/assert-against-named-outlets'; -d( - 'ember-template-compiler/lib/plugins/assert-against-named-outlets', - emberTemplateCompilerLibPluginsAssertAgainstNamedOutlets -); - -import * as emberTemplateCompilerLibPluginsAssertInputHelperWithoutBlock from 'ember-template-compiler/lib/plugins/assert-input-helper-without-block'; -d( - 'ember-template-compiler/lib/plugins/assert-input-helper-without-block', - emberTemplateCompilerLibPluginsAssertInputHelperWithoutBlock -); - -import * as emberTemplateCompilerLibPluginsAssertReservedNamedArguments from 'ember-template-compiler/lib/plugins/assert-reserved-named-arguments'; -d( - 'ember-template-compiler/lib/plugins/assert-reserved-named-arguments', - emberTemplateCompilerLibPluginsAssertReservedNamedArguments -); - -import * as emberTemplateCompilerLibPluginsIndex from 'ember-template-compiler/lib/plugins/index'; -d('ember-template-compiler/lib/plugins/index', emberTemplateCompilerLibPluginsIndex); - -import * as emberTemplateCompilerLibPluginsTransformActionSyntax from 'ember-template-compiler/lib/plugins/transform-action-syntax'; -d( - 'ember-template-compiler/lib/plugins/transform-action-syntax', - emberTemplateCompilerLibPluginsTransformActionSyntax -); - -import * as emberTemplateCompilerLibPluginsTransformEachInIntoEach from 'ember-template-compiler/lib/plugins/transform-each-in-into-each'; -d( - 'ember-template-compiler/lib/plugins/transform-each-in-into-each', - emberTemplateCompilerLibPluginsTransformEachInIntoEach -); - -import * as emberTemplateCompilerLibPluginsTransformEachTrackArray from 'ember-template-compiler/lib/plugins/transform-each-track-array'; -d( - 'ember-template-compiler/lib/plugins/transform-each-track-array', - emberTemplateCompilerLibPluginsTransformEachTrackArray -); - -import * as emberTemplateCompilerLibPluginsTransformInElement from 'ember-template-compiler/lib/plugins/transform-in-element'; -d( - 'ember-template-compiler/lib/plugins/transform-in-element', - emberTemplateCompilerLibPluginsTransformInElement -); - -import * as emberTemplateCompilerLibPluginsTransformQuotedBindingsIntoJustBindings from 'ember-template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings'; -d( - 'ember-template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings', - emberTemplateCompilerLibPluginsTransformQuotedBindingsIntoJustBindings -); - -import * as emberTemplateCompilerLibPluginsTransformResolutions from 'ember-template-compiler/lib/plugins/transform-resolutions'; -d( - 'ember-template-compiler/lib/plugins/transform-resolutions', - emberTemplateCompilerLibPluginsTransformResolutions -); - -import * as emberTemplateCompilerLibPluginsTransformWrapMountAndOutlet from 'ember-template-compiler/lib/plugins/transform-wrap-mount-and-outlet'; -d( - 'ember-template-compiler/lib/plugins/transform-wrap-mount-and-outlet', - emberTemplateCompilerLibPluginsTransformWrapMountAndOutlet -); - -import * as emberTemplateCompilerLibPluginsUtils from 'ember-template-compiler/lib/plugins/utils'; -d('ember-template-compiler/lib/plugins/utils', emberTemplateCompilerLibPluginsUtils); - -import * as emberTemplateCompilerLibPublicApi from 'ember-template-compiler/lib/public-api'; -d('ember-template-compiler/lib/public-api', emberTemplateCompilerLibPublicApi); - -import * as emberTemplateCompilerLibSystemBootstrap from 'ember-template-compiler/lib/system/bootstrap'; -d('ember-template-compiler/lib/system/bootstrap', emberTemplateCompilerLibSystemBootstrap); - -import * as emberTemplateCompilerLibSystemCalculateLocationDisplay from 'ember-template-compiler/lib/system/calculate-location-display'; -d( - 'ember-template-compiler/lib/system/calculate-location-display', - emberTemplateCompilerLibSystemCalculateLocationDisplay -); - -import * as emberTemplateCompilerLibSystemCompileOptions from 'ember-template-compiler/lib/system/compile-options'; -d( - 'ember-template-compiler/lib/system/compile-options', - emberTemplateCompilerLibSystemCompileOptions -); - -import * as emberTemplateCompilerLibSystemCompile from 'ember-template-compiler/lib/system/compile'; -d('ember-template-compiler/lib/system/compile', emberTemplateCompilerLibSystemCompile); - -import * as emberTemplateCompilerLibSystemDasherizeComponentName from 'ember-template-compiler/lib/system/dasherize-component-name'; -d( - 'ember-template-compiler/lib/system/dasherize-component-name', - emberTemplateCompilerLibSystemDasherizeComponentName -); - -import * as emberTemplateCompilerLibSystemInitializer from 'ember-template-compiler/lib/system/initializer'; -d('ember-template-compiler/lib/system/initializer', emberTemplateCompilerLibSystemInitializer); - -import * as emberTemplateCompilerLibSystemPrecompile from 'ember-template-compiler/lib/system/precompile'; -d('ember-template-compiler/lib/system/precompile', emberTemplateCompilerLibSystemPrecompile); - -import * as emberTemplateCompilerLibTypes from 'ember-template-compiler/lib/types'; -d('ember-template-compiler/lib/types', emberTemplateCompilerLibTypes); - -import * as emberTemplateCompilerMinimal from 'ember-template-compiler/minimal'; -d('ember-template-compiler/minimal', emberTemplateCompilerMinimal); - -import * as emberVersion from 'ember/version'; -d('ember/version', emberVersion); - -import * as simpleHtmlTokenizer from 'simple-html-tokenizer'; -d('simple-html-tokenizer', simpleHtmlTokenizer); - -if (typeof module === 'object' && module.exports) { - module.exports = emberTemplateCompilerIndex; -} - -console.log( - '\n\n--------\n+ Your app is using the legacy ember-template-compiler.js AMD bundle. This will be removed in ember-source 7.0. See https://deprecations.emberjs.com/id/using-amd-bundles for more details.\n--------' -); diff --git a/broccoli/amd-compat-entrypoints/ember-testing.js b/broccoli/amd-compat-entrypoints/ember-testing.js deleted file mode 100644 index 1c3df0cf0bf..00000000000 --- a/broccoli/amd-compat-entrypoints/ember-testing.js +++ /dev/null @@ -1,79 +0,0 @@ -/* eslint-disable */ - -// This file was derived from the output of the classic broccoli-based build of -// ember-testing.js. It's intended to convey exactly how the authored ES modules -// get mapped into backward-compatible AMD defines. - -import d from 'amd-compat-entrypoint-definition'; - -import * as emberTestingIndex from 'ember-testing/index'; -d('ember-testing/index', emberTestingIndex); - -import * as emberTestingLibAdaptersAdapter from 'ember-testing/lib/adapters/adapter'; -d('ember-testing/lib/adapters/adapter', emberTestingLibAdaptersAdapter); - -import * as emberTestingLibAdaptersQunit from 'ember-testing/lib/adapters/qunit'; -d('ember-testing/lib/adapters/qunit', emberTestingLibAdaptersQunit); - -import * as emberTestingLibExtApplication from 'ember-testing/lib/ext/application'; -d('ember-testing/lib/ext/application', emberTestingLibExtApplication); - -import * as emberTestingLibExtRsvp from 'ember-testing/lib/ext/rsvp'; -d('ember-testing/lib/ext/rsvp', emberTestingLibExtRsvp); - -import * as emberTestingLibHelpers from 'ember-testing/lib/helpers'; -d('ember-testing/lib/helpers', emberTestingLibHelpers); - -import * as emberTestingLibHelpersAndThen from 'ember-testing/lib/helpers/and_then'; -d('ember-testing/lib/helpers/and_then', emberTestingLibHelpersAndThen); - -import * as emberTestingLibHelpersCurrentPath from 'ember-testing/lib/helpers/current_path'; -d('ember-testing/lib/helpers/current_path', emberTestingLibHelpersCurrentPath); - -import * as emberTestingLibHelpersCurrentRouteName from 'ember-testing/lib/helpers/current_route_name'; -d('ember-testing/lib/helpers/current_route_name', () => emberTestingLibHelpersCurrentRouteName); - -import * as emberTestingLibHelpersCurrentUrl from 'ember-testing/lib/helpers/current_url'; -d('ember-testing/lib/helpers/current_url', emberTestingLibHelpersCurrentUrl); - -import * as emberTestingLibHelpersPauseTest from 'ember-testing/lib/helpers/pause_test'; -d('ember-testing/lib/helpers/pause_test', emberTestingLibHelpersPauseTest); - -import * as emberTestingLibHelpersVisit from 'ember-testing/lib/helpers/visit'; -d('ember-testing/lib/helpers/visit', emberTestingLibHelpersVisit); - -import * as emberTestingLibHelpersWait from 'ember-testing/lib/helpers/wait'; -d('ember-testing/lib/helpers/wait', emberTestingLibHelpersWait); - -import * as emberTestingLibInitializers from 'ember-testing/lib/initializers'; -d('ember-testing/lib/initializers', emberTestingLibInitializers); - -import * as emberTestingLibPublicApi from 'ember-testing/lib/public-api'; -d('ember-testing/lib/public-api', emberTestingLibPublicApi); - -import * as emberTestingLibSetupForTesting from 'ember-testing/lib/setup_for_testing'; -d('ember-testing/lib/setup_for_testing', emberTestingLibSetupForTesting); - -import * as emberTestingLibTest from 'ember-testing/lib/test'; -d('ember-testing/lib/test', emberTestingLibTest); - -import * as emberTestingLibTestAdapter from 'ember-testing/lib/test/adapter'; -d('ember-testing/lib/test/adapter', emberTestingLibTestAdapter); - -import * as emberTestingLibTestHelpers from 'ember-testing/lib/test/helpers'; -d('ember-testing/lib/test/helpers', emberTestingLibTestHelpers); - -import * as emberTestingLibTestOnInjectHelpers from 'ember-testing/lib/test/on_inject_helpers'; -d('ember-testing/lib/test/on_inject_helpers', emberTestingLibTestOnInjectHelpers); - -import * as emberTestingLibTestPendingRequests from 'ember-testing/lib/test/pending_requests'; -d('ember-testing/lib/test/pending_requests', emberTestingLibTestPendingRequests); - -import * as emberTestingLibTestPromise from 'ember-testing/lib/test/promise'; -d('ember-testing/lib/test/promise', emberTestingLibTestPromise); - -import * as emberTestingLibTestRun from 'ember-testing/lib/test/run'; -d('ember-testing/lib/test/run', emberTestingLibTestRun); - -import * as emberTestingLibTestWaiters from 'ember-testing/lib/test/waiters'; -d('ember-testing/lib/test/waiters', emberTestingLibTestWaiters); diff --git a/broccoli/amd-compat-entrypoints/ember.debug.js b/broccoli/amd-compat-entrypoints/ember.debug.js deleted file mode 100644 index 51123e1ae4f..00000000000 --- a/broccoli/amd-compat-entrypoints/ember.debug.js +++ /dev/null @@ -1,487 +0,0 @@ -/* eslint-disable */ - -// This file was derived from the output of the classic broccoli-based build of -// ember.debug.js. It's intended to convey exactly how the authored ES modules -// get mapped into backward-compatible AMD defines. -// -// The testing-specific modules that only appear in this bundle in development -// builds are not included in this file. They're in ./ember-testing.js, which -// our legacy bundle rollup config concatenates with this one for dev builds. -// -// (Typical apps actually work fine if we *don't* stick the testing modules into -// this bundle at all! Because the ember-testing.js bundle itself gets into the -// classic test-support.js. So they are double-included. But as these are -// backward-compatibility bundles, I'm going to keep that wacky behavior for -// them since somebody could be relying on the timing of having the test modules -// available before test-support.js evals. - -import d from 'amd-compat-entrypoint-definition'; - -import * as emberinternalsBrowserEnvironmentIndex from '@ember/-internals/browser-environment/index'; -d('@ember/-internals/browser-environment/index', emberinternalsBrowserEnvironmentIndex); - -import * as emberinternalsContainerIndex from '@ember/-internals/container/index'; -d('@ember/-internals/container/index', emberinternalsContainerIndex); - -import * as emberinternalsDeprecationsIndex from '@ember/-internals/deprecations/index'; -d('@ember/-internals/deprecations/index', emberinternalsDeprecationsIndex); - -import * as emberinternalsEnvironmentIndex from '@ember/-internals/environment/index'; -d('@ember/-internals/environment/index', emberinternalsEnvironmentIndex); - -import * as emberinternalsErrorHandlingIndex from '@ember/-internals/error-handling/index'; -d('@ember/-internals/error-handling/index', emberinternalsErrorHandlingIndex); - -import * as emberinternalsGlimmerIndex from '@ember/-internals/glimmer/index'; -d('@ember/-internals/glimmer/index', emberinternalsGlimmerIndex); - -import * as emberinternalsMetaIndex from '@ember/-internals/meta/index'; -d('@ember/-internals/meta/index', emberinternalsMetaIndex); - -import * as emberinternalsMetaLibMeta from '@ember/-internals/meta/lib/meta'; -d('@ember/-internals/meta/lib/meta', emberinternalsMetaLibMeta); - -import * as emberinternalsMetalIndex from '@ember/-internals/metal/index'; -d('@ember/-internals/metal/index', emberinternalsMetalIndex); - -import * as emberinternalsOwnerIndex from '@ember/-internals/owner/index'; -d('@ember/-internals/owner/index', emberinternalsOwnerIndex); - -import * as emberinternalsRoutingIndex from '@ember/-internals/routing/index'; -d('@ember/-internals/routing/index', emberinternalsRoutingIndex); - -import * as emberinternalsRuntimeIndex from '@ember/-internals/runtime/index'; -d('@ember/-internals/runtime/index', emberinternalsRuntimeIndex); - -import * as emberinternalsRuntimeLibExtRsvp from '@ember/-internals/runtime/lib/ext/rsvp'; -d('@ember/-internals/runtime/lib/ext/rsvp', emberinternalsRuntimeLibExtRsvp); - -import * as emberinternalsRuntimeLibMixinsproxy from '@ember/-internals/runtime/lib/mixins/-proxy'; -d('@ember/-internals/runtime/lib/mixins/-proxy', emberinternalsRuntimeLibMixinsproxy); - -import * as emberinternalsRuntimeLibMixinsActionHandler from '@ember/-internals/runtime/lib/mixins/action_handler'; -d( - '@ember/-internals/runtime/lib/mixins/action_handler', - emberinternalsRuntimeLibMixinsActionHandler -); - -import * as emberinternalsRuntimeLibMixinsComparable from '@ember/-internals/runtime/lib/mixins/comparable'; -d('@ember/-internals/runtime/lib/mixins/comparable', emberinternalsRuntimeLibMixinsComparable); - -import * as emberinternalsRuntimeLibMixinsContainerProxy from '@ember/-internals/runtime/lib/mixins/container_proxy'; -d( - '@ember/-internals/runtime/lib/mixins/container_proxy', - emberinternalsRuntimeLibMixinsContainerProxy -); - -import * as emberinternalsRuntimeLibMixinsRegistryProxy from '@ember/-internals/runtime/lib/mixins/registry_proxy'; -d( - '@ember/-internals/runtime/lib/mixins/registry_proxy', - emberinternalsRuntimeLibMixinsRegistryProxy -); - -import * as emberinternalsRuntimeLibMixinsTargetActionSupport from '@ember/-internals/runtime/lib/mixins/target_action_support'; -d( - '@ember/-internals/runtime/lib/mixins/target_action_support', - emberinternalsRuntimeLibMixinsTargetActionSupport -); - -import * as emberinternalsStringIndex from '@ember/-internals/string/index'; -d('@ember/-internals/string/index', emberinternalsStringIndex); - -import * as emberinternalsUtilityTypesIndex from '@ember/-internals/utility-types/index'; -d('@ember/-internals/utility-types/index', emberinternalsUtilityTypesIndex); - -import * as emberinternalsUtilsIndex from '@ember/-internals/utils/index'; -d('@ember/-internals/utils/index', emberinternalsUtilsIndex); - -import * as emberinternalsViewsIndex from '@ember/-internals/views/index'; -d('@ember/-internals/views/index', emberinternalsViewsIndex); - -import * as emberinternalsViewsLibCompatAttrs from '@ember/-internals/views/lib/compat/attrs'; -d('@ember/-internals/views/lib/compat/attrs', emberinternalsViewsLibCompatAttrs); - -import * as emberinternalsViewsLibCompatFallbackViewRegistry from '@ember/-internals/views/lib/compat/fallback-view-registry'; -d( - '@ember/-internals/views/lib/compat/fallback-view-registry', - emberinternalsViewsLibCompatFallbackViewRegistry -); - -import * as emberinternalsViewsLibComponentLookup from '@ember/-internals/views/lib/component_lookup'; -d('@ember/-internals/views/lib/component_lookup', emberinternalsViewsLibComponentLookup); - -import * as emberinternalsViewsLibMixinsActionSupport from '@ember/-internals/views/lib/mixins/action_support'; -d('@ember/-internals/views/lib/mixins/action_support', emberinternalsViewsLibMixinsActionSupport); - -import * as emberinternalsViewsLibSystemEventDispatcher from '@ember/-internals/views/lib/system/event_dispatcher'; -d( - '@ember/-internals/views/lib/system/event_dispatcher', - emberinternalsViewsLibSystemEventDispatcher -); - -import * as emberinternalsViewsLibSystemUtils from '@ember/-internals/views/lib/system/utils'; -d('@ember/-internals/views/lib/system/utils', emberinternalsViewsLibSystemUtils); - -import * as emberinternalsViewsLibViewsCoreView from '@ember/-internals/views/lib/views/core_view'; -d('@ember/-internals/views/lib/views/core_view', emberinternalsViewsLibViewsCoreView); - -import * as emberinternalsViewsLibViewsStates from '@ember/-internals/views/lib/views/states'; -d('@ember/-internals/views/lib/views/states', emberinternalsViewsLibViewsStates); - -import * as emberApplicationIndex from '@ember/application/index'; -d('@ember/application/index', emberApplicationIndex); - -import * as emberApplicationInstance from '@ember/application/instance'; -d('@ember/application/instance', emberApplicationInstance); - -import * as emberApplicationLibLazyLoad from '@ember/application/lib/lazy_load'; -d('@ember/application/lib/lazy_load', emberApplicationLibLazyLoad); - -import * as emberApplicationNamespace from '@ember/application/namespace'; -d('@ember/application/namespace', emberApplicationNamespace); - -import * as emberArrayinternals from '@ember/array/-internals'; -d('@ember/array/-internals', emberArrayinternals); - -import * as emberArrayIndex from '@ember/array/index'; -d('@ember/array/index', emberArrayIndex); - -import * as emberArrayLibMakeArray from '@ember/array/lib/make-array'; -d('@ember/array/lib/make-array', emberArrayLibMakeArray); - -import * as emberArrayMutable from '@ember/array/mutable'; -d('@ember/array/mutable', emberArrayMutable); - -import * as emberArrayProxy from '@ember/array/proxy'; -d('@ember/array/proxy', emberArrayProxy); - -import * as emberCanaryFeaturesIndex from '@ember/canary-features/index'; -d('@ember/canary-features/index', emberCanaryFeaturesIndex); - -import * as emberComponentHelper from '@ember/component/helper'; -d('@ember/component/helper', emberComponentHelper); - -import * as emberComponentIndex from '@ember/component/index'; -d('@ember/component/index', emberComponentIndex); - -import * as emberComponentTemplateOnly from '@ember/component/template-only'; -d('@ember/component/template-only', emberComponentTemplateOnly); - -import * as emberControllerIndex from '@ember/controller/index'; -d('@ember/controller/index', emberControllerIndex); - -import * as emberDebugIndex from '@ember/debug/index'; -d('@ember/debug/index', emberDebugIndex); - -import * as emberDebugLibCaptureRenderTree from '@ember/debug/lib/capture-render-tree'; -d('@ember/debug/lib/capture-render-tree', emberDebugLibCaptureRenderTree); - -import * as emberDebugLibDeprecate from '@ember/debug/lib/deprecate'; -d('@ember/debug/lib/deprecate', emberDebugLibDeprecate); - -import * as emberDebugLibHandlers from '@ember/debug/lib/handlers'; -d('@ember/debug/lib/handlers', emberDebugLibHandlers); - -import * as emberDebugLibInspect from '@ember/debug/lib/inspect'; -d('@ember/debug/lib/inspect', emberDebugLibInspect); - -import * as emberDebugLibTesting from '@ember/debug/lib/testing'; -d('@ember/debug/lib/testing', emberDebugLibTesting); - -import * as emberDebugLibWarn from '@ember/debug/lib/warn'; -d('@ember/debug/lib/warn', emberDebugLibWarn); - -import * as emberDebugContainerDebugAdapter from '@ember/debug/container-debug-adapter'; -d('@ember/debug/container-debug-adapter', emberDebugContainerDebugAdapter); - -import * as emberDebugDataAdapter from '@ember/debug/data-adapter'; -d('@ember/debug/data-adapter', emberDebugDataAdapter); - -import * as emberDeprecatedFeaturesIndex from '@ember/deprecated-features/index'; -d('@ember/deprecated-features/index', emberDeprecatedFeaturesIndex); - -import * as emberDestroyableIndex from '@ember/destroyable/index'; -d('@ember/destroyable/index', emberDestroyableIndex); - -import * as emberEngineIndex from '@ember/engine/index'; -d('@ember/engine/index', emberEngineIndex); - -import * as emberEngineInstance from '@ember/engine/instance'; -d('@ember/engine/instance', emberEngineInstance); - -import * as emberEngineLibEngineParent from '@ember/engine/lib/engine-parent'; -d('@ember/engine/lib/engine-parent', emberEngineLibEngineParent); - -import * as emberEnumerableIndex from '@ember/enumerable/index'; -d('@ember/enumerable/index', emberEnumerableIndex); - -import * as emberEnumerableMutable from '@ember/enumerable/mutable'; -d('@ember/enumerable/mutable', emberEnumerableMutable); - -import * as emberHelperIndex from '@ember/helper/index'; -d('@ember/helper/index', emberHelperIndex); - -import * as emberInstrumentationIndex from '@ember/instrumentation/index'; -d('@ember/instrumentation/index', emberInstrumentationIndex); - -import * as emberModifierIndex from '@ember/modifier/index'; -d('@ember/modifier/index', emberModifierIndex); - -import * as emberObjectinternals from '@ember/object/-internals'; -d('@ember/object/-internals', emberObjectinternals); - -import * as emberObjectCompat from '@ember/object/compat'; -d('@ember/object/compat', emberObjectCompat); - -import * as emberObjectComputed from '@ember/object/computed'; -d('@ember/object/computed', emberObjectComputed); - -import * as emberObjectCore from '@ember/object/core'; -d('@ember/object/core', emberObjectCore); - -import * as emberObjectEvented from '@ember/object/evented'; -d('@ember/object/evented', emberObjectEvented); - -import * as emberObjectEvents from '@ember/object/events'; -d('@ember/object/events', emberObjectEvents); - -import * as emberObjectIndex from '@ember/object/index'; -d('@ember/object/index', emberObjectIndex); - -import * as emberObjectInternals from '@ember/object/internals'; -d('@ember/object/internals', emberObjectInternals); - -import * as emberObjectLibComputedComputedMacros from '@ember/object/lib/computed/computed_macros'; -d('@ember/object/lib/computed/computed_macros', emberObjectLibComputedComputedMacros); - -import * as emberObjectLibComputedReduceComputedMacros from '@ember/object/lib/computed/reduce_computed_macros'; -d('@ember/object/lib/computed/reduce_computed_macros', emberObjectLibComputedReduceComputedMacros); - -import * as emberObjectMixin from '@ember/object/mixin'; -d('@ember/object/mixin', emberObjectMixin); - -import * as emberObjectObservable from '@ember/object/observable'; -d('@ember/object/observable', emberObjectObservable); - -import * as emberObjectObservers from '@ember/object/observers'; -d('@ember/object/observers', emberObjectObservers); - -import * as emberObjectPromiseProxyMixin from '@ember/object/promise-proxy-mixin'; -d('@ember/object/promise-proxy-mixin', emberObjectPromiseProxyMixin); - -import * as emberObjectProxy from '@ember/object/proxy'; -d('@ember/object/proxy', emberObjectProxy); - -import * as emberOwnerIndex from '@ember/owner/index'; -d('@ember/owner/index', emberOwnerIndex); - -import * as emberReactiveIndex from '@ember/reactive/index'; -d('@ember/reactive/index', emberReactiveIndex); - -import * as emberReactiveCollections from '@ember/reactive/collections'; -d('@ember/reactive/collections', emberReactiveCollections); - -import * as emberRendererIndex from '@ember/renderer/index'; -d('@ember/renderer/index', emberRendererIndex); - -import * as emberRoutinginternals from '@ember/routing/-internals'; -d('@ember/routing/-internals', emberRoutinginternals); - -import * as emberRoutingHashLocation from '@ember/routing/hash-location'; -d('@ember/routing/hash-location', emberRoutingHashLocation); - -import * as emberRoutingHistoryLocation from '@ember/routing/history-location'; -d('@ember/routing/history-location', emberRoutingHistoryLocation); - -import * as emberRoutingIndex from '@ember/routing/index'; -d('@ember/routing/index', emberRoutingIndex); - -import * as emberRoutingLibCache from '@ember/routing/lib/cache'; -d('@ember/routing/lib/cache', emberRoutingLibCache); - -import * as emberRoutingLibControllerFor from '@ember/routing/lib/controller_for'; -d('@ember/routing/lib/controller_for', emberRoutingLibControllerFor); - -import * as emberRoutingLibDsl from '@ember/routing/lib/dsl'; -d('@ember/routing/lib/dsl', emberRoutingLibDsl); - -import * as emberRoutingLibEngines from '@ember/routing/lib/engines'; -d('@ember/routing/lib/engines', emberRoutingLibEngines); - -import * as emberRoutingLibGenerateController from '@ember/routing/lib/generate_controller'; -d('@ember/routing/lib/generate_controller', emberRoutingLibGenerateController); - -import * as emberRoutingLibLocationUtils from '@ember/routing/lib/location-utils'; -d('@ember/routing/lib/location-utils', emberRoutingLibLocationUtils); - -import * as emberRoutingLibQueryParams from '@ember/routing/lib/query_params'; -d('@ember/routing/lib/query_params', emberRoutingLibQueryParams); - -import * as emberRoutingLibRouteInfo from '@ember/routing/lib/route-info'; -d('@ember/routing/lib/route-info', emberRoutingLibRouteInfo); - -import * as emberRoutingLibRouterState from '@ember/routing/lib/router_state'; -d('@ember/routing/lib/router_state', emberRoutingLibRouterState); - -import * as emberRoutingLibRoutingService from '@ember/routing/lib/routing-service'; -d('@ember/routing/lib/routing-service', emberRoutingLibRoutingService); - -import * as emberRoutingLibUtils from '@ember/routing/lib/utils'; -d('@ember/routing/lib/utils', emberRoutingLibUtils); - -import * as emberRoutingLocation from '@ember/routing/location'; -d('@ember/routing/location', emberRoutingLocation); - -import * as emberRoutingNoneLocation from '@ember/routing/none-location'; -d('@ember/routing/none-location', emberRoutingNoneLocation); - -import * as emberRoutingRouteInfo from '@ember/routing/route-info'; -d('@ember/routing/route-info', emberRoutingRouteInfo); - -import * as emberRoutingRoute from '@ember/routing/route'; -d('@ember/routing/route', emberRoutingRoute); - -import * as emberRoutingRouterService from '@ember/routing/router-service'; -d('@ember/routing/router-service', emberRoutingRouterService); - -import * as emberRoutingRouter from '@ember/routing/router'; -d('@ember/routing/router', emberRoutingRouter); - -import * as emberRoutingTransition from '@ember/routing/transition'; -d('@ember/routing/transition', emberRoutingTransition); - -import * as emberRunloopprivateBackburner from '@ember/runloop/-private/backburner'; -d('@ember/runloop/-private/backburner', emberRunloopprivateBackburner); - -import * as emberRunloopIndex from '@ember/runloop/index'; -d('@ember/runloop/index', emberRunloopIndex); - -import * as emberServiceIndex from '@ember/service/index'; -d('@ember/service/index', emberServiceIndex); - -import * as emberTemplateCompilationIndex from '@ember/template-compilation/index'; -d('@ember/template-compilation/index', emberTemplateCompilationIndex); - -import * as emberTemplateFactoryIndex from '@ember/template-factory/index'; -d('@ember/template-factory/index', emberTemplateFactoryIndex); - -import * as emberTemplateIndex from '@ember/template/index'; -d('@ember/template/index', emberTemplateIndex); - -import * as emberTestAdapter from '@ember/test/adapter'; -d('@ember/test/adapter', emberTestAdapter); - -import * as emberTestIndex from '@ember/test/index'; -d('@ember/test/index', emberTestIndex); - -import * as emberUtilsIndex from '@ember/utils/index'; -d('@ember/utils/index', emberUtilsIndex); - -import * as emberUtilsLibCompare from '@ember/utils/lib/compare'; -d('@ember/utils/lib/compare', emberUtilsLibCompare); - -import * as emberUtilsLibIsEqual from '@ember/utils/lib/is-equal'; -d('@ember/utils/lib/is-equal', emberUtilsLibIsEqual); - -import * as emberUtilsLibIsBlank from '@ember/utils/lib/is_blank'; -d('@ember/utils/lib/is_blank', emberUtilsLibIsBlank); - -import * as emberUtilsLibIsEmpty from '@ember/utils/lib/is_empty'; -d('@ember/utils/lib/is_empty', emberUtilsLibIsEmpty); - -import * as emberUtilsLibIsNone from '@ember/utils/lib/is_none'; -d('@ember/utils/lib/is_none', emberUtilsLibIsNone); - -import * as emberUtilsLibIsPresent from '@ember/utils/lib/is_present'; -d('@ember/utils/lib/is_present', emberUtilsLibIsPresent); - -import * as emberUtilsLibTypeOf from '@ember/utils/lib/type-of'; -d('@ember/utils/lib/type-of', emberUtilsLibTypeOf); - -import * as emberVersionIndex from '@ember/version/index'; -d('@ember/version/index', emberVersionIndex); - -import * as glimmerDestroyable from '@glimmer/destroyable'; -d('@glimmer/destroyable', glimmerDestroyable); - -import * as glimmerEncoder from '@glimmer/encoder'; -d('@glimmer/encoder', glimmerEncoder); - -import * as glimmerEnv from '@glimmer/env'; -d('@glimmer/env', glimmerEnv); - -import * as glimmerGlobalContext from '@glimmer/global-context'; -d('@glimmer/global-context', glimmerGlobalContext); - -import * as glimmerManager from '@glimmer/manager'; -d('@glimmer/manager', glimmerManager); - -import * as glimmerNode from '@glimmer/node'; -d('@glimmer/node', glimmerNode); - -import * as glimmerOpcodeCompiler from '@glimmer/opcode-compiler'; -d('@glimmer/opcode-compiler', glimmerOpcodeCompiler); - -import * as glimmerOwner from '@glimmer/owner'; -d('@glimmer/owner', glimmerOwner); - -import * as glimmerProgram from '@glimmer/program'; -d('@glimmer/program', glimmerProgram); - -import * as glimmerReference from '@glimmer/reference'; -d('@glimmer/reference', glimmerReference); - -import * as glimmerRuntime from '@glimmer/runtime'; -d('@glimmer/runtime', glimmerRuntime); - -import * as glimmerTrackingIndex from '@glimmer/tracking/index'; -d('@glimmer/tracking/index', glimmerTrackingIndex); - -import * as glimmerTrackingPrimitivesCache from '@glimmer/tracking/primitives/cache'; -d('@glimmer/tracking/primitives/cache', glimmerTrackingPrimitivesCache); - -import * as glimmerUtil from '@glimmer/util'; -d('@glimmer/util', glimmerUtil); - -import * as glimmerValidator from '@glimmer/validator'; -d('@glimmer/validator', glimmerValidator); - -import * as glimmerVm from '@glimmer/vm'; -d('@glimmer/vm', glimmerVm); - -import * as glimmerWireFormat from '@glimmer/wire-format'; -d('@glimmer/wire-format', glimmerWireFormat); - -import * as simpleDomDocument from '@simple-dom/document'; -d('@simple-dom/document', simpleDomDocument); - -import * as backburnerjs from 'backburner.js'; -d('backburner.js', backburnerjs); - -import * as dagMap from 'dag-map'; -d('dag-map', dagMap); - -import * as emberIndex from 'ember/index'; -d('ember/index', emberIndex); - -import * as emberVersion from 'ember/version'; -d('ember/version', emberVersion); - -import * as routeRecognizer from 'route-recognizer'; -d('route-recognizer', routeRecognizer); - -import * as routerJs from 'router_js'; -d('router_js', routerJs); - -import * as rsvp from 'rsvp'; -d('rsvp', rsvp); - -if (typeof module === 'object' && typeof module.require === 'function') { - module.exports = emberIndex.default; -} - -emberDebugIndex.deprecate( - 'Your app loaded Ember via a legacy AMD bundle. Opt into loading it from the modern ES modules by setting the use-ember-modules optional feature.', - false, - emberinternalsDeprecationsIndex.DEPRECATIONS.DEPRECATE_AMD_BUNDLES.options -); diff --git a/lib/index.js b/lib/index.js index dfb32e8a429..481f3a73d8f 100644 --- a/lib/index.js +++ b/lib/index.js @@ -2,24 +2,9 @@ const MergeTrees = require('broccoli-merge-trees'); const createFile = require('broccoli-file-creator'); -const Funnel = require('broccoli-funnel'); const path = require('path'); const Overrides = require('./overrides'); const SupportedBrowsers = require('./browsers'); -const fs = require('fs'); - -const useEmberModules = (() => { - // this doesn't go through the documented API of the @ember/optional-features - // package because that is available way too late for this. - let pkg = require(path.join(process.cwd(), 'package.json')); - let configDir = pkg['ember-addon']?.['configPath'] ?? 'config'; - let optionalFeaturesPath = `./${configDir}/optional-features.json`; - if (fs.existsSync(optionalFeaturesPath)) { - return require(path.join(process.cwd(), optionalFeaturesPath))?.['use-ember-modules'] ?? false; - } else { - return false; - } -})(); const paths = {}; const absolutePaths = {}; @@ -40,9 +25,7 @@ add(paths, 'testing', 'vendor/ember/ember-testing.js'); add( absolutePaths, 'templateCompiler', - useEmberModules - ? path.join(__dirname, '..', 'dist', 'packages', 'ember-template-compiler', 'index.js') - : path.join(__dirname, '..', 'dist', 'ember-template-compiler.js') + path.join(__dirname, '..', 'dist', 'packages', 'ember-template-compiler', 'index.js') ); const { addonV1Shim } = require('@embroider/addon-shim'); @@ -52,186 +35,177 @@ const shim = addonV1Shim(path.join(__dirname, '..'), { customizeMeta(meta) { /* This whole hook is an ember-auto-import feature that only effects classic builds, not embroider builds. */ - if (useEmberModules) { - // this is our forward-compatible mode where all of ember-source is - // handled by ember-auto-import, like a normal v2 addon. - // - // In this case, we need to inject an implicit-modules config to force - // all the traditionally-included modules to be included whether or not - // we see an import for them, because ember-auto-import does not have - // global visiblity of all imports in all v1 addons. - // - // This means ember-source is not tree-shakable on classic builds, but - // that's the normal status quo for classic builds. It's all - // tree-shakable on the current default build (@embroider/vite). - return { - ...meta, - 'implicit-modules': [ - './dist/packages/@ember/-internals/browser-environment/index.js', - './dist/packages/@ember/-internals/container/index.js', - './dist/packages/@ember/-internals/deprecations/index.js', - './dist/packages/@ember/-internals/environment/index.js', - './dist/packages/@ember/-internals/error-handling/index.js', - './dist/packages/@ember/-internals/glimmer/index.js', - './dist/packages/@ember/-internals/meta/index.js', - './dist/packages/@ember/-internals/meta/lib/meta.js', - './dist/packages/@ember/-internals/metal/index.js', - './dist/packages/@ember/-internals/owner/index.js', - './dist/packages/@ember/-internals/routing/index.js', - './dist/packages/@ember/-internals/runtime/index.js', - './dist/packages/@ember/-internals/runtime/lib/ext/rsvp.js', - './dist/packages/@ember/-internals/runtime/lib/mixins/-proxy.js', - './dist/packages/@ember/-internals/runtime/lib/mixins/comparable.js', - './dist/packages/@ember/-internals/string/index.js', - './dist/packages/@ember/-internals/utility-types/index.js', - './dist/packages/@ember/-internals/utils/index.js', - './dist/packages/@ember/-internals/views/index.js', - './dist/packages/@ember/-internals/views/lib/compat/attrs.js', - './dist/packages/@ember/-internals/views/lib/component_lookup.js', - './dist/packages/@ember/-internals/views/lib/mixins/action_support.js', - './dist/packages/@ember/-internals/views/lib/system/utils.js', - './dist/packages/@ember/-internals/views/lib/views/core_view.js', - './dist/packages/@ember/-internals/views/lib/views/states.js', - './dist/packages/@ember/application/index.js', - './dist/packages/@ember/application/instance.js', - './dist/packages/@ember/application/lib/lazy_load.js', - './dist/packages/@ember/application/namespace.js', - './dist/packages/@ember/array/-internals.js', - './dist/packages/@ember/array/index.js', - './dist/packages/@ember/array/lib/make-array.js', - './dist/packages/@ember/array/mutable.js', - './dist/packages/@ember/array/proxy.js', - './dist/packages/@ember/canary-features/index.js', - './dist/packages/@ember/component/helper.js', - './dist/packages/@ember/component/index.js', - './dist/packages/@ember/component/template-only.js', - './dist/packages/@ember/controller/index.js', - './dist/packages/@ember/debug/index.js', - './dist/packages/@ember/debug/lib/capture-render-tree.js', - './dist/packages/@ember/debug/lib/deprecate.js', - './dist/packages/@ember/debug/lib/handlers.js', - './dist/packages/@ember/debug/lib/inspect.js', - './dist/packages/@ember/debug/lib/testing.js', - './dist/packages/@ember/debug/lib/warn.js', - './dist/packages/@ember/debug/container-debug-adapter.js', - './dist/packages/@ember/debug/data-adapter.js', - './dist/packages/@ember/deprecated-features/index.js', - './dist/packages/@ember/destroyable/index.js', - './dist/packages/@ember/engine/index.js', - './dist/packages/@ember/engine/instance.js', - './dist/packages/@ember/engine/lib/engine-parent.js', - './dist/packages/@ember/enumerable/index.js', - './dist/packages/@ember/enumerable/mutable.js', - './dist/packages/@ember/helper/index.js', - './dist/packages/@ember/instrumentation/index.js', - './dist/packages/@ember/modifier/index.js', - './dist/packages/@ember/object/-internals.js', - './dist/packages/@ember/object/compat.js', - './dist/packages/@ember/object/computed.js', - './dist/packages/@ember/object/core.js', - './dist/packages/@ember/object/evented.js', - './dist/packages/@ember/object/events.js', - './dist/packages/@ember/object/index.js', - './dist/packages/@ember/object/internals.js', - './dist/packages/@ember/object/lib/computed/computed_macros.js', - './dist/packages/@ember/object/lib/computed/reduce_computed_macros.js', - './dist/packages/@ember/object/mixin.js', - './dist/packages/@ember/object/observable.js', - './dist/packages/@ember/object/observers.js', - './dist/packages/@ember/object/promise-proxy-mixin.js', - './dist/packages/@ember/object/proxy.js', - './dist/packages/@ember/owner/index.js', - './dist/packages/@ember/renderer/index.js', - './dist/packages/@ember/routing/-internals.js', - './dist/packages/@ember/routing/hash-location.js', - './dist/packages/@ember/routing/history-location.js', - './dist/packages/@ember/routing/index.js', - './dist/packages/@ember/routing/lib/cache.js', - './dist/packages/@ember/routing/lib/controller_for.js', - './dist/packages/@ember/routing/lib/dsl.js', - './dist/packages/@ember/routing/lib/generate_controller.js', - './dist/packages/@ember/routing/lib/location-utils.js', - './dist/packages/@ember/routing/lib/query_params.js', - './dist/packages/@ember/routing/lib/router_state.js', - './dist/packages/@ember/routing/lib/routing-service.js', - './dist/packages/@ember/routing/lib/utils.js', - './dist/packages/@ember/routing/none-location.js', - './dist/packages/@ember/routing/route.js', - './dist/packages/@ember/routing/router-service.js', - './dist/packages/@ember/routing/router.js', - './dist/packages/@ember/runloop/index.js', - './dist/packages/@ember/service/index.js', - './dist/packages/@ember/template-compilation/index.js', - './dist/packages/@ember/template-factory/index.js', - './dist/packages/@ember/template/index.js', - './dist/packages/@ember/test/adapter.js', - './dist/packages/@ember/test/index.js', - './dist/packages/@ember/utils/index.js', - './dist/packages/@ember/utils/lib/compare.js', - './dist/packages/@ember/utils/lib/is-equal.js', - './dist/packages/@ember/utils/lib/is_blank.js', - './dist/packages/@ember/utils/lib/is_empty.js', - './dist/packages/@ember/utils/lib/is_none.js', - './dist/packages/@ember/utils/lib/is_present.js', - './dist/packages/@ember/utils/lib/type-of.js', - './dist/packages/@ember/version/index.js', - './dist/packages/@glimmer/destroyable.js', - './dist/packages/@glimmer/encoder.js', - './dist/packages/@glimmer/env.js', - './dist/packages/@glimmer/global-context.js', - './dist/packages/@glimmer/manager.js', - './dist/packages/@glimmer/node.js', - './dist/packages/@glimmer/opcode-compiler.js', - './dist/packages/@glimmer/owner.js', - './dist/packages/@glimmer/program.js', - './dist/packages/@glimmer/reference.js', - './dist/packages/@glimmer/runtime.js', - './dist/packages/@glimmer/tracking/index.js', - './dist/packages/@glimmer/tracking/primitives/cache.js', - './dist/packages/@glimmer/util.js', - './dist/packages/@glimmer/validator.js', - './dist/packages/@glimmer/vm.js', - './dist/packages/@glimmer/wire-format.js', - './dist/packages/@simple-dom/document.js', - './dist/packages/backburner.js/index.js', - './dist/packages/dag-map.js', - './dist/packages/ember/index.js', - './dist/packages/ember/version.js', - './dist/packages/route-recognizer.js', - './dist/packages/router_js.js', - './dist/packages/rsvp.js', - ], - 'implicit-test-modules': [ - './dist/packages/ember-testing/index.js', - './dist/packages/ember-testing/lib/adapters/adapter.js', - './dist/packages/ember-testing/lib/adapters/qunit.js', - './dist/packages/ember-testing/lib/ext/application.js', - './dist/packages/ember-testing/lib/ext/rsvp.js', - './dist/packages/ember-testing/lib/helpers.js', - './dist/packages/ember-testing/lib/helpers/and_then.js', - './dist/packages/ember-testing/lib/helpers/current_path.js', - './dist/packages/ember-testing/lib/helpers/current_route_name.js', - './dist/packages/ember-testing/lib/helpers/current_url.js', - './dist/packages/ember-testing/lib/helpers/pause_test.js', - './dist/packages/ember-testing/lib/helpers/visit.js', - './dist/packages/ember-testing/lib/helpers/wait.js', - './dist/packages/ember-testing/lib/initializers.js', - './dist/packages/ember-testing/lib/public-api.js', - './dist/packages/ember-testing/lib/setup_for_testing.js', - './dist/packages/ember-testing/lib/test.js', - './dist/packages/ember-testing/lib/test/adapter.js', - './dist/packages/ember-testing/lib/test/helpers.js', - './dist/packages/ember-testing/lib/test/on_inject_helpers.js', - './dist/packages/ember-testing/lib/test/pending_requests.js', - './dist/packages/ember-testing/lib/test/promise.js', - './dist/packages/ember-testing/lib/test/run.js', - './dist/packages/ember-testing/lib/test/waiters.js', - ], - }; - } else { - // this is our backward-compatible mode that actually keeps most of ember-source in vendor.js. - return { ...meta, 'renamed-modules': {} }; - } + // ember-auto-import does not have global visibility of all imports in all + // v1 addons, so we inject implicit-modules to force all + // traditionally-included modules to be included. + // + // This means ember-source is not tree-shakable on classic builds, but + // that's the normal status quo for classic builds. It's all + // tree-shakable on the current default build (@embroider/vite). + return { + ...meta, + 'implicit-modules': [ + './dist/packages/@ember/-internals/browser-environment/index.js', + './dist/packages/@ember/-internals/container/index.js', + './dist/packages/@ember/-internals/deprecations/index.js', + './dist/packages/@ember/-internals/environment/index.js', + './dist/packages/@ember/-internals/error-handling/index.js', + './dist/packages/@ember/-internals/glimmer/index.js', + './dist/packages/@ember/-internals/meta/index.js', + './dist/packages/@ember/-internals/meta/lib/meta.js', + './dist/packages/@ember/-internals/metal/index.js', + './dist/packages/@ember/-internals/owner/index.js', + './dist/packages/@ember/-internals/routing/index.js', + './dist/packages/@ember/-internals/runtime/index.js', + './dist/packages/@ember/-internals/runtime/lib/ext/rsvp.js', + './dist/packages/@ember/-internals/runtime/lib/mixins/-proxy.js', + './dist/packages/@ember/-internals/runtime/lib/mixins/comparable.js', + './dist/packages/@ember/-internals/string/index.js', + './dist/packages/@ember/-internals/utility-types/index.js', + './dist/packages/@ember/-internals/utils/index.js', + './dist/packages/@ember/-internals/views/index.js', + './dist/packages/@ember/-internals/views/lib/compat/attrs.js', + './dist/packages/@ember/-internals/views/lib/component_lookup.js', + './dist/packages/@ember/-internals/views/lib/mixins/action_support.js', + './dist/packages/@ember/-internals/views/lib/system/utils.js', + './dist/packages/@ember/-internals/views/lib/views/core_view.js', + './dist/packages/@ember/-internals/views/lib/views/states.js', + './dist/packages/@ember/application/index.js', + './dist/packages/@ember/application/instance.js', + './dist/packages/@ember/application/lib/lazy_load.js', + './dist/packages/@ember/application/namespace.js', + './dist/packages/@ember/array/-internals.js', + './dist/packages/@ember/array/index.js', + './dist/packages/@ember/array/lib/make-array.js', + './dist/packages/@ember/array/mutable.js', + './dist/packages/@ember/array/proxy.js', + './dist/packages/@ember/canary-features/index.js', + './dist/packages/@ember/component/helper.js', + './dist/packages/@ember/component/index.js', + './dist/packages/@ember/component/template-only.js', + './dist/packages/@ember/controller/index.js', + './dist/packages/@ember/debug/index.js', + './dist/packages/@ember/debug/lib/capture-render-tree.js', + './dist/packages/@ember/debug/lib/deprecate.js', + './dist/packages/@ember/debug/lib/handlers.js', + './dist/packages/@ember/debug/lib/inspect.js', + './dist/packages/@ember/debug/lib/testing.js', + './dist/packages/@ember/debug/lib/warn.js', + './dist/packages/@ember/debug/container-debug-adapter.js', + './dist/packages/@ember/debug/data-adapter.js', + './dist/packages/@ember/deprecated-features/index.js', + './dist/packages/@ember/destroyable/index.js', + './dist/packages/@ember/engine/index.js', + './dist/packages/@ember/engine/instance.js', + './dist/packages/@ember/engine/lib/engine-parent.js', + './dist/packages/@ember/enumerable/index.js', + './dist/packages/@ember/enumerable/mutable.js', + './dist/packages/@ember/helper/index.js', + './dist/packages/@ember/instrumentation/index.js', + './dist/packages/@ember/modifier/index.js', + './dist/packages/@ember/object/-internals.js', + './dist/packages/@ember/object/compat.js', + './dist/packages/@ember/object/computed.js', + './dist/packages/@ember/object/core.js', + './dist/packages/@ember/object/evented.js', + './dist/packages/@ember/object/events.js', + './dist/packages/@ember/object/index.js', + './dist/packages/@ember/object/internals.js', + './dist/packages/@ember/object/lib/computed/computed_macros.js', + './dist/packages/@ember/object/lib/computed/reduce_computed_macros.js', + './dist/packages/@ember/object/mixin.js', + './dist/packages/@ember/object/observable.js', + './dist/packages/@ember/object/observers.js', + './dist/packages/@ember/object/promise-proxy-mixin.js', + './dist/packages/@ember/object/proxy.js', + './dist/packages/@ember/owner/index.js', + './dist/packages/@ember/renderer/index.js', + './dist/packages/@ember/routing/-internals.js', + './dist/packages/@ember/routing/hash-location.js', + './dist/packages/@ember/routing/history-location.js', + './dist/packages/@ember/routing/index.js', + './dist/packages/@ember/routing/lib/cache.js', + './dist/packages/@ember/routing/lib/controller_for.js', + './dist/packages/@ember/routing/lib/dsl.js', + './dist/packages/@ember/routing/lib/generate_controller.js', + './dist/packages/@ember/routing/lib/location-utils.js', + './dist/packages/@ember/routing/lib/query_params.js', + './dist/packages/@ember/routing/lib/router_state.js', + './dist/packages/@ember/routing/lib/routing-service.js', + './dist/packages/@ember/routing/lib/utils.js', + './dist/packages/@ember/routing/none-location.js', + './dist/packages/@ember/routing/route.js', + './dist/packages/@ember/routing/router-service.js', + './dist/packages/@ember/routing/router.js', + './dist/packages/@ember/runloop/index.js', + './dist/packages/@ember/service/index.js', + './dist/packages/@ember/template-compilation/index.js', + './dist/packages/@ember/template-factory/index.js', + './dist/packages/@ember/template/index.js', + './dist/packages/@ember/test/adapter.js', + './dist/packages/@ember/test/index.js', + './dist/packages/@ember/utils/index.js', + './dist/packages/@ember/utils/lib/compare.js', + './dist/packages/@ember/utils/lib/is-equal.js', + './dist/packages/@ember/utils/lib/is_blank.js', + './dist/packages/@ember/utils/lib/is_empty.js', + './dist/packages/@ember/utils/lib/is_none.js', + './dist/packages/@ember/utils/lib/is_present.js', + './dist/packages/@ember/utils/lib/type-of.js', + './dist/packages/@ember/version/index.js', + './dist/packages/@glimmer/destroyable.js', + './dist/packages/@glimmer/encoder.js', + './dist/packages/@glimmer/env.js', + './dist/packages/@glimmer/global-context.js', + './dist/packages/@glimmer/manager.js', + './dist/packages/@glimmer/node.js', + './dist/packages/@glimmer/opcode-compiler.js', + './dist/packages/@glimmer/owner.js', + './dist/packages/@glimmer/program.js', + './dist/packages/@glimmer/reference.js', + './dist/packages/@glimmer/runtime.js', + './dist/packages/@glimmer/tracking/index.js', + './dist/packages/@glimmer/tracking/primitives/cache.js', + './dist/packages/@glimmer/util.js', + './dist/packages/@glimmer/validator.js', + './dist/packages/@glimmer/vm.js', + './dist/packages/@glimmer/wire-format.js', + './dist/packages/@simple-dom/document.js', + './dist/packages/backburner.js/index.js', + './dist/packages/dag-map.js', + './dist/packages/ember/index.js', + './dist/packages/ember/version.js', + './dist/packages/route-recognizer.js', + './dist/packages/router_js.js', + './dist/packages/rsvp.js', + ], + 'implicit-test-modules': [ + './dist/packages/ember-testing/index.js', + './dist/packages/ember-testing/lib/adapters/adapter.js', + './dist/packages/ember-testing/lib/adapters/qunit.js', + './dist/packages/ember-testing/lib/ext/application.js', + './dist/packages/ember-testing/lib/ext/rsvp.js', + './dist/packages/ember-testing/lib/helpers.js', + './dist/packages/ember-testing/lib/helpers/and_then.js', + './dist/packages/ember-testing/lib/helpers/current_path.js', + './dist/packages/ember-testing/lib/helpers/current_route_name.js', + './dist/packages/ember-testing/lib/helpers/current_url.js', + './dist/packages/ember-testing/lib/helpers/pause_test.js', + './dist/packages/ember-testing/lib/helpers/visit.js', + './dist/packages/ember-testing/lib/helpers/wait.js', + './dist/packages/ember-testing/lib/initializers.js', + './dist/packages/ember-testing/lib/public-api.js', + './dist/packages/ember-testing/lib/setup_for_testing.js', + './dist/packages/ember-testing/lib/test.js', + './dist/packages/ember-testing/lib/test/adapter.js', + './dist/packages/ember-testing/lib/test/helpers.js', + './dist/packages/ember-testing/lib/test/on_inject_helpers.js', + './dist/packages/ember-testing/lib/test/pending_requests.js', + './dist/packages/ember-testing/lib/test/promise.js', + './dist/packages/ember-testing/lib/test/run.js', + './dist/packages/ember-testing/lib/test/waiters.js', + ], + }; }, }, }); @@ -282,50 +256,21 @@ module.exports = { } }, - treeForVendor(tree) { - if (shim.treeForVendor) { - tree = shim.treeForVendor.call(this, tree); - } - const isProduction = process.env.EMBER_ENV === 'production'; - - let templateCompiler = new Funnel(tree, { - destDir: 'ember', - include: ['ember-template-compiler.js', 'ember-template-compiler.js.map'], - }); - - let emberAMDBundles; - - if (useEmberModules) { - // ember-cli always tries to append these to vendor.js, so even when we - // don't want to put anything in them they need to exist as empty files. - emberAMDBundles = new MergeTrees([ - createFile('ember/ember.js', ''), - createFile('ember/ember.js.map', ''), - createFile('ember/ember-testing.js', ''), - createFile('ember/ember-testing.js.map', ''), - ]); - } else { - let which = isProduction ? 'prod' : 'debug'; - - emberAMDBundles = new Funnel(tree, { - destDir: 'ember', - include: [ - `ember.${which}.js`, - `ember.${which}.js.map`, - 'ember-testing.js', - 'ember-testing.js.map', - ], - getDestinationPath(path) { - return path.replace(`ember.${which}.`, 'ember.'); - }, - }); - } + treeForVendor() { + // ember-cli always tries to append these to vendor.js, so even when we + // don't want to put anything in them they need to exist as empty files. + let emberAMDBundles = new MergeTrees([ + createFile('ember/ember.js', ''), + createFile('ember/ember.js.map', ''), + createFile('ember/ember-testing.js', ''), + createFile('ember/ember-testing.js.map', ''), + ]); let emberCliBabel = this.addons.find((a) => a.name === 'ember-cli-babel'); // this is primarily so we get preset-env with the app's targets. All our // special stuff was already accounted for in the building of the bundles. - return emberCliBabel.transpileTree(new MergeTrees([emberAMDBundles, templateCompiler]), { + return emberCliBabel.transpileTree(emberAMDBundles, { 'ember-cli-babel': { compileModules: false, disableDebugTooling: true, diff --git a/package.json b/package.json index 97b545d7f6e..660890c32bf 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,6 @@ "./types": { "types": "./types/stable/index.d.ts" }, - "./dist/ember-template-compiler.js": "./dist/ember-template-compiler.js", "./package.json": "./package.json" }, "homepage": "https://emberjs.com/", @@ -24,14 +23,6 @@ "blueprints", "dist/packages", "dist/dependencies", - "dist/ember-template-compiler.js", - "dist/ember-template-compiler.js.map", - "dist/ember.debug.js", - "dist/ember.debug.js.map", - "dist/ember.prod.js", - "dist/ember.prod.js.map", - "dist/ember-testing.js", - "dist/ember-testing.js.map", "docs/data.json", "lib", "types/stable" @@ -346,7 +337,6 @@ "@simple-dom/document/index.js": "ember-source/@simple-dom/document/index.js", "backburner.js/index.js": "ember-source/backburner.js/index.js", "dag-map/index.js": "ember-source/dag-map/index.js", - "ember-template-compiler/index.js": "ember-source/ember-template-compiler/index.js", "ember-testing/index.js": "ember-source/ember-testing/index.js", "ember-testing/lib/adapters/adapter.js": "ember-source/ember-testing/lib/adapters/adapter.js", "ember-testing/lib/adapters/qunit.js": "ember-source/ember-testing/lib/adapters/qunit.js", diff --git a/packages/@ember/-internals/deprecations/index.ts b/packages/@ember/-internals/deprecations/index.ts index 89ad88ed625..b68b84b616e 100644 --- a/packages/@ember/-internals/deprecations/index.ts +++ b/packages/@ember/-internals/deprecations/index.ts @@ -112,16 +112,6 @@ export const DEPRECATIONS = { until: '7.0.0', url: 'https://deprecations.emberjs.com/id/importing-inject-from-ember-service', }), - DEPRECATE_AMD_BUNDLES: deprecation({ - for: 'ember-source', - id: 'using-amd-bundles', - since: { - available: '6.10.0', - enabled: '6.10.0', - }, - until: '7.0.0', - url: 'https://deprecations.emberjs.com/id/using-amd-bundles', - }), }; export function deprecateUntil(message: string, deprecation: DeprecationObject) { diff --git a/packages/loader/lib/index.d.ts b/packages/loader/lib/index.d.ts deleted file mode 100644 index 58443c7f54c..00000000000 --- a/packages/loader/lib/index.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module 'require' { - export function has(path: string): boolean; - export default function require(path: string): any; -} diff --git a/packages/loader/lib/index.js b/packages/loader/lib/index.js deleted file mode 100644 index 875c7ffe566..00000000000 --- a/packages/loader/lib/index.js +++ /dev/null @@ -1,99 +0,0 @@ -/* eslint-disable no-var */ -/* globals global globalThis self */ -/* eslint-disable-next-line no-unused-vars */ -var define, require; - -(function () { - var globalObj = - typeof globalThis !== 'undefined' - ? globalThis - : typeof self !== 'undefined' - ? self - : typeof window !== 'undefined' - ? window - : typeof global !== 'undefined' - ? global - : null; - - if (globalObj === null) { - throw new Error('unable to locate global object'); - } - - if (typeof globalObj.define === 'function' && typeof globalObj.require === 'function') { - define = globalObj.define; - require = globalObj.require; - - return; - } - - var registry = Object.create(null); - var seen = Object.create(null); - - function missingModule(name, referrerName) { - if (referrerName) { - throw new Error('Could not find module ' + name + ' required by: ' + referrerName); - } else { - throw new Error('Could not find module ' + name); - } - } - - function internalRequire(_name, referrerName) { - var name = _name; - var mod = registry[name]; - - if (!mod) { - name = name + '/index'; - mod = registry[name]; - } - - var exports = seen[name]; - - if (exports !== undefined) { - return exports; - } - - exports = seen[name] = {}; - - if (!mod) { - missingModule(_name, referrerName); - } - - var deps = mod.deps; - var callback = mod.callback; - var reified = new Array(deps.length); - - for (var i = 0; i < deps.length; i++) { - if (deps[i] === 'exports') { - reified[i] = exports; - } else if (deps[i] === 'require') { - reified[i] = require; - } else { - reified[i] = require(deps[i], name); - } - } - - var result = callback.apply(this, reified); - if (!deps.includes('exports') || result !== undefined) { - exports = seen[name] = result; - } - - return exports; - } - - require = function (name) { - return internalRequire(name, null); - }; - - define = function (name, deps, callback) { - registry[name] = { deps: deps, callback: callback }; - }; - - // setup `require` module - require['default'] = require; - - require.has = function registryHas(moduleName) { - return Boolean(registry[moduleName]) || Boolean(registry[moduleName + '/index']); - }; - - require._eak_seen = require.entries = registry; -})(); diff --git a/packages/loader/package.json b/packages/loader/package.json deleted file mode 100644 index 746606e9d59..00000000000 --- a/packages/loader/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "loader", - "private": true, - "dependencies": {} -} \ No newline at end of file diff --git a/rollup.config.mjs b/rollup.config.mjs index 6885fae4533..637d7424fe7 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -12,7 +12,6 @@ const require = createRequire(import.meta.url); const { PackageCache, packageName } = require('@embroider/shared-internals'); const projectRoot = dirname(fileURLToPath(import.meta.url)); const packageCache = PackageCache.shared('ember-source', projectRoot); -const { buildInfo } = require('./broccoli/build-info'); const buildDebugMacroPlugin = require('./broccoli/build-debug-macro-plugin'); const canaryFeatures = require('./broccoli/canary-features'); @@ -25,24 +24,7 @@ const testDependencies = [ 'expect-type', ]; -let configs = [ - esmConfig(), - esmTemplateCompiler(), - legacyBundleConfig('./broccoli/amd-compat-entrypoints/ember.debug.js', 'ember.debug.js', { - isDeveloping: true, - }), - legacyBundleConfig('./broccoli/amd-compat-entrypoints/ember.debug.js', 'ember.prod.js', { - isDeveloping: false, - }), - legacyBundleConfig('./broccoli/amd-compat-entrypoints/ember-testing.js', 'ember-testing.js', { - isDeveloping: true, - isExternal(source) { - return !source.startsWith('ember-testing'); - }, - }), - templateCompilerConfig(), - glimmerComponent(), -]; +let configs = [esmConfig(), esmTemplateCompiler(), glimmerComponent()]; if (process.env.DEBUG_SINGLE_CONFIG) { configs = configs.slice( @@ -145,51 +127,6 @@ function renameEntrypoints(entrypoints, fn) { return Object.fromEntries(Object.entries(entrypoints).map(([k, v]) => [fn(k), v])); } -function legacyBundleConfig(input, output, { isDeveloping, isExternal }) { - let babelConfig = { ...sharedBabelConfig }; - - babelConfig.plugins = [...babelConfig.plugins, buildDebugMacroPlugin(isDeveloping)]; - - return { - input, - output: { - format: 'iife', - file: `dist/${output}`, - generatedCode: 'es2015', - sourcemap: true, - - // We are relying on unfrozen modules because we need to add the - // __esModule marker to them in our amd-compat-entrypoints. Rollup has an - // `esModule` option too, but it only puts the marker on entrypoints. We - // have a single entrypoint ("ember.debug.js") that imports a bunch of - // modules and hands them to our classic AMD loader. All of those modules - // need the __esModule marker too. - freeze: false, - - globals: (id) => { - return `require('${id}')`; - }, - - interop: 'esModule', - }, - onLog: handleRollupWarnings, - plugins: [ - amdDefineSupport(), - ...(isDeveloping ? [concatenateAMDEntrypoints()] : []), - babel({ - babelHelpers: 'bundled', - extensions: ['.js', '.ts'], - configFile: false, - ...babelConfig, - }), - resolveTS(), - version(), - resolvePackages({ ...exposedDependencies(), ...hiddenDependencies() }, { isExternal }), - licenseAndLoader(), - ], - }; -} - function packages() { // Start by treating every module as an entrypoint let entryFiles = glob.sync('**/*.{ts,js}', { @@ -201,7 +138,6 @@ function packages() { '**/node_modules/**', // these packages are special and don't get included here - 'loader/**', 'ember-template-compiler/**', 'internal-test-helpers/**', @@ -498,136 +434,6 @@ export function version() { }; } -function amdDefineSupport() { - return { - name: 'amd-define-support', - - resolveId(source) { - if (source === 'amd-compat-entrypoint-definition') { - return '\0amd-compat-entrypoint-definition'; - } - }, - - load(id) { - if (id === '\0amd-compat-entrypoint-definition') { - return { - code: ` - export default function d(name, mod) { - Object.defineProperty(mod, '__esModule', { value: true }); - define(name, [], () => mod); - }; - `, - }; - } - }, - }; -} - -function concatenateAMDEntrypoints() { - const concatRules = { - // this says: when you load the ember.debug.js AMD compat entrypoint, also - // concatenate in the ember-testing.js AMD compat entrypoint. - 'ember.debug.js': ['ember-testing.js'], - }; - - return { - name: 'concatenateAMDEntrypoints', - load(id) { - if (id[0] === '\0') { - return; - } - for (let [target, extras] of Object.entries(concatRules)) { - if (id.endsWith(`amd-compat-entrypoints/${target}`)) { - let contents = [readFileSync(id), ...extras.map((e) => `import "./${e}";`)]; - return { - code: contents.join('\n'), - }; - } - } - }, - }; -} - -function license() { - return `/*! - * @overview Ember - JavaScript Application Framework - * @copyright Copyright 2011 Tilde Inc. and contributors - * Portions Copyright 2006-2011 Strobe Inc. - * Portions Copyright 2008-2011 Apple Inc. All rights reserved. - * @license Licensed under MIT license - * See https://raw.github.com/emberjs/ember.js/master/LICENSE - * @version ${buildInfo().version} - */ -`; -} - -function loader() { - return readFileSync( - resolve(dirname(fileURLToPath(import.meta.url)), 'packages', 'loader', 'lib', 'index.js') - ); -} - -function licenseAndLoader() { - return { - name: 'license-and-loader', - generateBundle(options, bundles) { - for (let bundle of Object.values(bundles)) { - bundle.code = license() + loader() + bundle.code; - } - }, - }; -} - -function templateCompilerConfig() { - // These are modules that, when used in the legacy template compiler bundle, - // need to be discovered from ember.debug.js instead when running in the - // browser, and stubbed to ember-template-compiler.js in node. - const externals = { - '@ember/template-compilation': `{ - __esModule: true, - __registerTemplateCompiler(){}, - }`, - ember: `{ - __esModule: true, - default: { - get ENV() { return require('@ember/-internals/environment').ENV }, - get FEATURES() { return require('@ember/canary-features').FEATURES }, - get VERSION() { return require('ember/version').default }, - }, - }`, - '@ember/-internals/glimmer': `{ - __esModule: true, - }`, - '@ember/application': `{ - __esModule: true, - }`, - }; - let config = legacyBundleConfig( - './broccoli/amd-compat-entrypoints/ember-template-compiler.js', - 'ember-template-compiler.js', - { isDeveloping: true } - ); - config.plugins.unshift({ - enforce: 'pre', - name: 'template-compiler-externals', - async resolveId(source) { - if (externals[source]) { - return { id: source, external: true }; - } - }, - }); - config.output.globals = (id) => { - return `(() => { - try { - return require('${id}'); - } catch (err) { - return ${externals[id]} - } - })()`; - }; - return config; -} - function pruneEmptyBundles() { return { name: 'prune-empty-bundles', diff --git a/smoke-tests/benchmark-app/babel.config.mjs b/smoke-tests/benchmark-app/babel.config.mjs index bb5b946c890..1250fd27e75 100644 --- a/smoke-tests/benchmark-app/babel.config.mjs +++ b/smoke-tests/benchmark-app/babel.config.mjs @@ -9,7 +9,7 @@ export default { [ 'babel-plugin-ember-template-compilation', { - compilerPath: 'ember-source/dist/ember-template-compiler.js', + compilerPath: 'ember-source/ember-template-compiler/index.js', transforms: [...macros.templateMacros], }, ], diff --git a/smoke-tests/scenarios/package.json b/smoke-tests/scenarios/package.json index 39f9c9881b4..d8c2e9b4289 100644 --- a/smoke-tests/scenarios/package.json +++ b/smoke-tests/scenarios/package.json @@ -9,7 +9,6 @@ "@swc/core": "^1.4.17", "@swc/types": "^0.1.6", "@types/node": "^20.12.7", - "ember-cli-htmlbars-6": "npm:ember-cli-htmlbars@^6.0.0", "qunit": "^2.20.1", "scenario-tester": "^4.0.0", "typescript": "5.1", diff --git a/smoke-tests/scenarios/scenarios.ts b/smoke-tests/scenarios/scenarios.ts index 66b04ce10ed..c961d6b7268 100644 --- a/smoke-tests/scenarios/scenarios.ts +++ b/smoke-tests/scenarios/scenarios.ts @@ -1,25 +1,7 @@ import { Project, Scenarios } from 'scenario-tester'; import { dirname } from 'node:path'; -function classic(project: Project) { - // our monorepo uses pnpm overrides to force-upgrade ember-cli-htmlbars to 7, - // so that we can actually test the case where the use-ember-modules flag is - // enabled. This scenario ensures that when the flag is off, we still work - // with ember-cli-htmlbars 6. - project.linkDevDependency('ember-cli-htmlbars', { resolveName: 'ember-cli-htmlbars-6', baseDir: __dirname }); -} - -function classicUseModulesFeature(project: Project) { - project.mergeFiles({ - config: { - 'optional-features.json': JSON.stringify({ - "default-async-observers": true, - "jquery-integration": false, - "use-ember-modules": true, - }) - } - }); -} +function classic(_project: Project) {} function embroiderWebpack(project: Project) { project.linkDevDependency('@embroider/core', { baseDir: __dirname }); @@ -33,7 +15,6 @@ export const v1AppScenarios = Scenarios.fromProject(() => Project.fromDir(dirname(require.resolve('../app-template/package.json')), { linkDevDeps: true }) ).expand({ classic, - classicUseModulesFeature, embroiderWebpack, }); diff --git a/smoke-tests/v2-app-template/babel.config.cjs b/smoke-tests/v2-app-template/babel.config.cjs index 419088afff8..45df237c529 100644 --- a/smoke-tests/v2-app-template/babel.config.cjs +++ b/smoke-tests/v2-app-template/babel.config.cjs @@ -8,7 +8,7 @@ module.exports = { [ 'babel-plugin-ember-template-compilation', { - compilerPath: 'ember-source/dist/ember-template-compiler.js', + compilerPath: 'ember-source/ember-template-compiler/index.js', enableLegacyModules: [ 'ember-cli-htmlbars', 'ember-cli-htmlbars-inline-precompile', diff --git a/tests/node/app-boot-test.js b/tests/node/app-boot-test.js deleted file mode 100644 index 6f16236bc3c..00000000000 --- a/tests/node/app-boot-test.js +++ /dev/null @@ -1,137 +0,0 @@ -const setupAppTest = require('./helpers/setup-app'); - -require('./helpers/assert-html-matches').register(); - -QUnit.module('App Boot', function (hooks) { - setupAppTest(hooks); - - QUnit.test('App boots and routes to a URL', function (assert) { - this.visit('/'); - assert.ok(this.app); - }); - - QUnit.test('nested {{component}}', function (assert) { - this.template('index', '{{root-component}}'); - - this.component( - 'root-component', - { - location: 'World', - hasExistence: true, - }, - "\ -

Hello {{#if this.hasExistence}}{{this.location}}{{/if}}

\ -
{{component 'foo-bar'}}
\ - " - ); - - this.component( - 'foo-bar', - undefined, - '\ -

The files are *inside* the computer?!

\ - ' - ); - - return this.renderToHTML('/').then(function (html) { - assert.htmlMatches( - html, - '

Hello World

The files are *inside* the computer?!

' - ); - }); - }); - - QUnit.test('', function (assert) { - this.template('application', "

Go to photos

"); - this.routes(function () { - this.route('photos'); - }); - - return this.renderToHTML('/').then(function (html) { - assert.htmlMatches( - html, - '

Go to photos

' - ); - }); - }); - - QUnit.test('{{link-to}}', function (assert) { - this.template('application', "

{{#link-to route='photos'}}Go to photos{{/link-to}}

"); - this.routes(function () { - this.route('photos'); - }); - - return this.renderToHTML('/').then(function (html) { - assert.htmlMatches( - html, - '

Go to photos

' - ); - }); - }); - - QUnit.test('non-escaped content', function (assert) { - this.routes(function () { - this.route('photos'); - }); - - this.template('application', '

{{{this.title}}}

'); - this.controller('application', { - title: 'Hello world', - }); - - return this.renderToHTML('/').then(function (html) { - assert.htmlMatches(html, '

Hello world

'); - }); - }); - - QUnit.test('outlets', function (assert) { - this.routes(function () { - this.route('photos'); - }); - - this.template('application', '

{{outlet}}

'); - this.template('index', 'index'); - this.template('photos', 'photos'); - - let promises = []; - promises.push( - this.renderToHTML('/').then(function (html) { - assert.htmlMatches(html, '

index

'); - }) - ); - - promises.push( - this.renderToHTML('/photos').then(function (html) { - assert.htmlMatches(html, '

photos

'); - }) - ); - - return this.all(promises); - }); - - QUnit.test('lifecycle hooks disabled', function (assert) { - assert.expect(1); - - this.template('application', "{{my-component foo='bar'}}{{outlet}}"); - - this.component('my-component', { - didReceiveAttrs() { - assert.ok(true, 'should trigger didReceiveAttrs hook'); - }, - willRender() { - assert.ok(false, 'should not trigger willRender hook'); - }, - didRender() { - assert.ok(false, 'should not trigger didRender hook'); - }, - willInsertElement() { - assert.ok(false, 'should not trigger willInsertElement hook'); - }, - didInsertElement() { - assert.ok(false, 'should not trigger didInsertElement hook'); - }, - }); - - return this.renderToHTML('/'); - }); -}); diff --git a/tests/node/component-rendering-test.js b/tests/node/component-rendering-test.js deleted file mode 100644 index 826c9322ca4..00000000000 --- a/tests/node/component-rendering-test.js +++ /dev/null @@ -1,45 +0,0 @@ -const setupComponentTest = require('./helpers/setup-component'); - -QUnit.module('Components can be rendered without a DOM dependency', function (hooks) { - setupComponentTest(hooks); - - QUnit.test('Simple component', function (assert) { - let html = this.render('

Hello

'); - - assert.ok(html.match(/

Hello<\/h1>/)); - }); - - QUnit.test('Component with dynamic value', function (assert) { - this.set('location', 'World'); - - let html = this.render('

Hello {{this.location}}

'); - - assert.ok(html.match(/

Hello World<\/h1>/)); - }); - - QUnit.test( - 'Ensure undefined attributes requiring protocol sanitization do not error', - function (assert) { - this.owner.register( - 'component:fake-link', - class extends this.Ember.Component { - tagName = 'link'; - attributeBindings = ['href', 'rel']; - rel = 'canonical'; - } - ); - - let html = this.render('{{fake-link}}'); - - assert.ok(html.match(/rel="canonical"/)); - } - ); - - QUnit.test('attributes requiring protocol sanitization do not error', function (assert) { - this.set('someHref', 'https://foo.com/'); - - let html = this.render('Some Link'); - - assert.ok(html.match(/Some Link<\/a>/)); - }); -}); diff --git a/tests/node/fastboot-sandbox-test.js b/tests/node/fastboot-sandbox-test.js deleted file mode 100644 index 741256e2211..00000000000 --- a/tests/node/fastboot-sandbox-test.js +++ /dev/null @@ -1,120 +0,0 @@ -const fs = require('fs'); -const vm = require('vm'); -const SimpleDOM = require('simple-dom'); -const { emberPath, loadEmber, clearEmber } = require('./helpers/load-ember'); - -// This is based on what fastboot-server does -let HTMLSerializer = new SimpleDOM.HTMLSerializer(SimpleDOM.voidMap); - -async function fastbootVisit(context, url) { - let doc = new SimpleDOM.Document(); - let rootElement = doc.body; - let options = { isBrowser: false, document: doc, rootElement: rootElement }; - - let { app } = context; - - await app.boot(); - - let instance = await app.buildInstance(); - - try { - await instance.boot(options); - await instance.visit(url, options); - - return { - url: instance.getURL(), - title: doc.title, - body: HTMLSerializer.serialize(rootElement), - }; - } finally { - instance.destroy(); - } -} - -// essentially doing the same as what is done in FastBoot 3.1.0 -// https://github.com/ember-fastboot/fastboot/blob/v3.1.0/src/sandbox.js -function buildSandboxContext(precompile) { - let URL = require('url'); - - let sandbox = { - console, - setTimeout, - clearTimeout, - URL, - - // Convince jQuery not to assume it's in a browser - module: { exports: {}, require() {} }, - }; - - // Set the global as `window` - sandbox.window = sandbox; - sandbox.window.self = sandbox; - - let context = vm.createContext(sandbox); - - let environmentSetupScript = new vm.Script( - ` -var EmberENV = { - _DEFAULT_ASYNC_OBSERVERS: true, - _JQUERY_INTEGRATION: false, -};`, - { filename: 'prepend.js' } - ); - environmentSetupScript.runInContext(context); - - let emberSource = fs.readFileSync(emberPath, { encoding: 'utf-8' }); - let emberScript = new vm.Script(emberSource, { filename: emberPath }); - emberScript.runInContext(context); - - let applicationSource = ` -let Ember = module.exports; - -class Router extends Ember.Router {} -Router.map(function() { - this.route('a'); - this.route('b'); -}); - -const registry = { - 'router:main': Router, - 'template:application': ${precompile('

Hello world!

\n{{outlet}}')} -}; - -class Resolver extends Ember.Object { - resolve(specifier) { - return registry[specifier]; - } -} - -var app = class extends Ember.Application {}.create({ - autoboot: false, - Resolver, -}); -`; - let appScript = new vm.Script(applicationSource, { filename: 'app.js' }); - appScript.runInContext(context); - - return context; -} - -QUnit.module('Ember.Application - visit() Integration Tests', function (hooks) { - hooks.beforeEach(function () { - let { precompile } = loadEmber(); - this.context = buildSandboxContext(precompile); - }); - - hooks.afterEach(function () { - clearEmber(); - }); - - QUnit.test('FastBoot: basic', async function (assert) { - let result = await fastbootVisit(this.context, '/'); - - assert.equal(result.url, '/', 'landed on correct url'); - assert.equal( - result.body, - '

Hello world!

\n', - 'results in expected HTML' - ); - }); -}); diff --git a/tests/node/helpers/assert-html-matches.js b/tests/node/helpers/assert-html-matches.js deleted file mode 100644 index 49cb64c23bb..00000000000 --- a/tests/node/helpers/assert-html-matches.js +++ /dev/null @@ -1,27 +0,0 @@ -const { HtmlDiffer } = require('html-differ'); - -const htmlDiffer = new HtmlDiffer({ - ignoreAttributes: ['id'], - ignoreWhitespaces: true, -}); - -module.exports = { - /* - * This assertion helper tests whether two fragments of Html 'appear' - * to match. In terms of fragments rendered by Ember, we want to explicitly - * ignore whitespace and certain attributes values, such as IDs, which Ember - * auto-generates. Attribute ordering is also ignored. - */ - register() { - QUnit.assert.htmlMatches = function (actual, expected, message) { - let isEqual = htmlDiffer.isEqual(actual, expected); - - this.pushResult({ - result: isEqual, - actual, - expected, - message, - }); - }; - }, -}; diff --git a/tests/node/helpers/build-owner.js b/tests/node/helpers/build-owner.js deleted file mode 100644 index 672a399838e..00000000000 --- a/tests/node/helpers/build-owner.js +++ /dev/null @@ -1,28 +0,0 @@ -module.exports = function buildOwner(Ember, resolver) { - let Owner = Ember.Object.extend(Ember._RegistryProxyMixin, Ember._ContainerProxyMixin); - - let namespace = Ember.Object.create({ - Resolver: { - create: function () { - return resolver; - }, - }, - }); - - let fallbackRegistry = Ember.Application.buildRegistry(namespace); - let registry = new Ember.Registry({ - fallback: fallbackRegistry, - }); - - Ember.ApplicationInstance.setupRegistry(registry); - - let owner = Owner.create({ - __registry__: registry, - __container__: null, - }); - - let container = registry.container({ owner: owner }); - owner.__container__ = container; - - return owner; -}; diff --git a/tests/node/helpers/load-ember.js b/tests/node/helpers/load-ember.js deleted file mode 100644 index 740ae9c3c61..00000000000 --- a/tests/node/helpers/load-ember.js +++ /dev/null @@ -1,47 +0,0 @@ -const path = require('path'); -const distPath = path.join(__dirname, '../../../dist'); -const emberPath = path.join(distPath, 'ember.debug.js'); -const templateCompilerPath = path.join(distPath, 'ember-template-compiler'); - -// We store the global symbols beforehand so that we can reset the state -// properly to avoid the @glimmer/validator assertion -const originalGlobalSymbols = Object.getOwnPropertySymbols(global).map((sym) => [sym, global[sym]]); - -module.exports.emberPath = require.resolve(emberPath); - -module.exports.loadEmber = function () { - let Ember = require(emberPath); - - let _precompile = require(templateCompilerPath).precompile; - - let precompile = function (templateString, options) { - let templateSpec = _precompile(templateString, options); - - return `Ember.HTMLBars.template(${templateSpec})`; - }; - - let compile = function (templateString, options) { - let templateSpec = _precompile(templateString, options); - let template = new Function('return ' + templateSpec)(); - - return Ember.HTMLBars.template(template); - }; - - return { Ember, compile, precompile }; -}; - -module.exports.clearEmber = function () { - delete global.Ember; - - Object.getOwnPropertySymbols(global).forEach((sym) => { - delete global[sym]; - }); - - originalGlobalSymbols.forEach(([sym, value]) => { - global[sym] = value; - }); - - // clear the previously cached version of this module - delete require.cache[emberPath + '.js']; - delete require.cache[templateCompilerPath + '.js']; -}; diff --git a/tests/node/helpers/setup-app.js b/tests/node/helpers/setup-app.js deleted file mode 100644 index 0254933f12a..00000000000 --- a/tests/node/helpers/setup-app.js +++ /dev/null @@ -1,199 +0,0 @@ -/* eslint-disable no-console */ - -const SimpleDOM = require('simple-dom'); -const { loadEmber, clearEmber } = require('./load-ember'); - -/* - * This helper sets up a QUnit test module with all of the environment and - * helper methods necessary to test an Ember.js application running in the - * server-side environment. - * - * On each test, it loads a fresh version of the compiled Ember.js library - * from `dist`, just like how FastBoot works. It uses the new `visit()` API - * to simulate a FastBoot environment (enabling that feature flag if it is - * not already turned on). - * - * To test an app, register the objects that make up the app. For example, - * to register a component: - * - * this.component('component-name', { - * componentProperty: true - * }); - * - * Or a template: - * - * this.template('application', '{{outlet}}'); - * this.template('components/foo-bar', '

Hello world

'); - * - * Or a controller: - * - * this.controller('controller-name', { - * actions: { - * sendEmail: function() { } - * } - * }); - * - * You can also provide the routes for the application by calling `this.routes()`, - * which is equivalent to `App.Router.map()`: - * - * this.routes(function() { - * this.route('photos'); - * this.route('admin', function() { - * this.route('logout'); - * }); - * }); - * - * Once all of the constituent parts of the app are registered, you can kick off - * app boot by calling either `this.visit(url)` or `this.renderToHTML(url)`. - * - * `visit` returns a promise that resolves to the application instance, and - * `renderToHTML` returns a promise that resolves to the rendered HTML of the - * application. - * - * return this.renderToHTML('/'photos).then(function(html) { - * assert.ok(html.matches('

Hello world

')); - * }); - */ - -module.exports = function (hooks) { - hooks.beforeEach(function () { - let { Ember, compile } = loadEmber(); - - this.Ember = Ember; - this.compile = compile; - this.setComponentTemplate = Ember._setComponentTemplate; - this.templateOnlyComponent = Ember._templateOnlyComponent; - - Ember.testing = true; - - this.run = Ember.run; - this.all = Ember.RSVP.all; - - this.visit = visit; - this.createApplication = createApplication; - this.register = register; - this.template = registerTemplate; - this.component = registerComponent; - this.controller = registerController; - this.route = registerRoute; - this.service = registerService; - this.routes = registerRoutes; - this.registry = {}; - this.renderToHTML = renderToHTML; - }); - - hooks.afterEach(function () { - this.run(this.app, 'destroy'); - - clearEmber(); - }); -}; - -function createApplication() { - if (this.app) return this.app; - - let app = class extends this.Ember.Application {}.create({ - autoboot: false, - Resolver: { - create: (specifier) => { - return this.registry[specifier]; - }, - }, - }); - - let Router = class extends this.Ember.Router { - location = 'none'; - }; - - if (this.routesCallback) { - Router.map(this.routesCallback); - } - - this.register('router:main', Router); - - registerApplicationClasses(app, this.registry); - - // Run application initializers - this.run(app, 'boot'); - - this.app = app; - - return app; -} - -function register(containerKey, klass) { - this.registry[containerKey] = klass; -} - -function visit(url) { - let app = this.createApplication(); - let dom = new SimpleDOM.Document(); - - return this.run(app, 'visit', url, { - isBrowser: false, - document: dom, - rootElement: dom.body, - }).catch(function (error) { - console.error(error.stack); - }); -} - -function renderToHTML(url) { - let app = this.createApplication(); - let dom = new SimpleDOM.Document(); - let root = dom.body; - - return this.run(app, 'visit', url, { - isBrowser: false, - document: dom, - rootElement: root, - }).then(function () { - let serializer = new SimpleDOM.HTMLSerializer(SimpleDOM.voidMap); - return serializer.serialize(root); - }); -} - -function registerApplicationClasses(app, registry) { - app.initializer({ - name: 'register-application-classes', - initialize: function (app) { - for (let key in registry) { - app.register(key, registry[key]); - } - }, - }); -} - -function registerTemplate(name, template) { - this.register('template:' + name, this.compile(template)); -} - -function registerComponent(name, componentProps, templateContents) { - let component = this.setComponentTemplate( - this.compile(templateContents), - componentProps ? this.Ember.Component.extend(componentProps) : this.templateOnlyComponent() - ); - this.register('component:' + name, component); -} - -function registerController(name, controllerProps) { - let controller = this.Ember.Controller.extend(controllerProps); - this.register('controller:' + name, controller); -} - -function registerRoute(name, routeProps) { - let route = this.Ember.Route.extend({ - router: this.Ember.inject.service('router'), - ...routeProps, - }); - this.register('route:' + name, route); -} - -function registerService(name, serviceProps) { - let service = this.Ember.Object.extend(serviceProps); - this.register('service:' + name, service); -} - -function registerRoutes(cb) { - this.routesCallback = cb; -} diff --git a/tests/node/helpers/setup-component.js b/tests/node/helpers/setup-component.js deleted file mode 100644 index 7f21d180a50..00000000000 --- a/tests/node/helpers/setup-component.js +++ /dev/null @@ -1,111 +0,0 @@ -'use strict'; - -const SimpleDOM = require('simple-dom'); -const buildOwner = require('./build-owner'); -const { loadEmber, clearEmber } = require('./load-ember'); - -module.exports = function (hooks) { - hooks.beforeEach(function () { - let { Ember, compile } = loadEmber(); - - this.compile = compile; - this.Ember = Ember; - - Ember.testing = true; - this.run = Ember.run; - - setupComponentTest.call(this); - }); - - hooks.afterEach(function () { - let module = this; - - if (this.component) { - this.run(function () { - module.component.destroy(); - }); - - this.component = null; - } - - this.run(this.owner, 'destroy'); - this.owner = null; - this.Ember = null; - - clearEmber(); - }); -}; - -function setupComponentTest() { - let module = this; - - module.element = new SimpleDOM.Document(); - module.owner = buildOwner(this.Ember, { resolve: function () {} }); - module.owner.register('service:-document', new SimpleDOM.Document(), { - instantiate: false, - }); - - this._hasRendered = false; - let OutletView = module.owner.factoryFor('view:-outlet'); - let outletTemplateFactory = module.owner.lookup('template:-outlet'); - let environment = module.owner.lookup('-environment:main'); - module.component = OutletView.create({ environment, template: outletTemplateFactory }); - this._outletState = { - render: { - owner: module.owner || undefined, - name: 'application', - controller: module, - model: undefined, - template: outletTemplateFactory(module.owner), - }, - - outlets: {}, - }; - - this.run(function () { - module.component.setOutletState(module._outletState); - }); - - module.render = render; - module.serializeElement = serializeElement; - module.set = function (property, value) { - module.run(function () { - module.Ember.set(module, property, value); - }); - }; -} - -function render(_template) { - let module = this; - let templateFactory = this.compile(_template); - - let stateToRender = { - owner: this.owner, - name: 'index', - controller: this, - model: undefined, - template: templateFactory(this.owner), - }; - - stateToRender.name = 'index'; - this._outletState.outlets.main = { render: stateToRender, outlets: {} }; - - this.run(function () { - module.component.setOutletState(module._outletState); - }); - - if (!this._hasRendered) { - this.run(function () { - module.component.appendTo(module.element); - }); - this._hasRendered = true; - } - - return this.serializeElement(); -} - -function serializeElement() { - let serializer = new SimpleDOM.HTMLSerializer(SimpleDOM.voidMap); - - return serializer.serialize(this.element); -} diff --git a/tests/node/instrumentation-test.js b/tests/node/instrumentation-test.js deleted file mode 100644 index b6c5f665fff..00000000000 --- a/tests/node/instrumentation-test.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -const { loadEmber, clearEmber } = require('./helpers/load-ember'); - -const { Ember } = loadEmber(); - -QUnit.module('instrumentation', function (hooks) { - hooks.afterEach(function () { - clearEmber(); - }); - - QUnit.test('it works in FastBoot environment', function (assert) { - let _originalWindow = global.window; - - global.window = {}; // mock window without `performance` property - - let result = Ember.instrument('render', {}, function () { - return 'hello'; - }); - - assert.equal(result, 'hello', 'called block'); - - global.window = _originalWindow; - }); -}); diff --git a/tests/node/sourcemap-test.js b/tests/node/sourcemap-test.js deleted file mode 100644 index 16000c99d86..00000000000 --- a/tests/node/sourcemap-test.js +++ /dev/null @@ -1,23 +0,0 @@ -const fs = require('fs'); - -QUnit.module('sourcemap validation', function () { - QUnit.test(`ember.js has only a single sourcemaps comment`, function (assert) { - let jsPath = `dist/ember.debug.js`; - assert.ok(fs.existsSync(jsPath)); - - let contents = fs.readFileSync(jsPath, 'utf-8'); - let num = count(contents, '//# sourceMappingURL='); - assert.equal(num, 1); - }); -}); - -function count(source, find) { - let num = 0; - - let i = -1; - while ((i = source.indexOf(find, i + 1)) !== -1) { - num += 1; - } - - return num; -} diff --git a/tests/node/template-compiler-test.js b/tests/node/template-compiler-test.js index 4fcb051a8ee..36f88f6086f 100644 --- a/tests/node/template-compiler-test.js +++ b/tests/node/template-compiler-test.js @@ -1,68 +1,39 @@ const path = require('path'); -const distPath = path.join(__dirname, '../../dist'); +const esmCompilerPath = path.join( + __dirname, + '../../dist/packages/ember-template-compiler/index.js' +); let templateCompiler; -QUnit.module('ember-template-compiler.js', function () { - QUnit.module('modern', function (hooks) { - hooks.beforeEach(function () { - this.templateCompilerPath = path.resolve(path.join(distPath, 'ember-template-compiler.js')); - templateCompiler = require(this.templateCompilerPath); - }); - - hooks.afterEach(function () { - // clear the previously cached version of this module - delete require.cache[this.templateCompilerPath]; - }); +QUnit.module('ember-template-compiler (ESM)', function (hooks) { + hooks.beforeEach(async function () { + templateCompiler = await import(esmCompilerPath); + }); - QUnit.test('can be required', function (assert) { - assert.strictEqual( - typeof templateCompiler.precompile, - 'function', - 'precompile function is present' - ); - assert.strictEqual( - typeof templateCompiler.compile, - 'function', - 'compile function is present' - ); - }); + QUnit.test('exports precompile', function (assert) { + assert.strictEqual(typeof templateCompiler.precompile, 'function', 'precompile is present'); + }); - QUnit.test('can access _Ember.ENV (private API used by ember-cli-htmlbars)', function (assert) { - assert.equal(typeof templateCompiler._Ember.ENV, 'object', '_Ember.ENV is present'); - assert.notEqual(typeof templateCompiler._Ember.ENV, null, '_Ember.ENV is not null'); - }); + QUnit.test('exports _buildCompileOptions', function (assert) { + assert.strictEqual( + typeof templateCompiler._buildCompileOptions, + 'function', + '_buildCompileOptions is present' + ); + }); - QUnit.test('_Ember.ENV (private API used by ember-cli-htmlbars) is stable', function (assert) { - assert.strictEqual( - templateCompiler._Ember.ENV, - templateCompiler._Ember.ENV, - '_Ember.ENV is stable' - ); - }); + QUnit.test('exports _preprocess', function (assert) { + assert.strictEqual(typeof templateCompiler._preprocess, 'function', '_preprocess is present'); + }); - QUnit.test( - 'can access _Ember.FEATURES (private API used by ember-cli-htmlbars)', - function (assert) { - assert.equal( - typeof templateCompiler._Ember.FEATURES, - 'object', - '_Ember.FEATURES is present' - ); - assert.notEqual( - typeof templateCompiler._Ember.FEATURES, - null, - '_Ember.FEATURES is not null' - ); - } - ); + QUnit.test('exports _print', function (assert) { + assert.strictEqual(typeof templateCompiler._print, 'function', '_print is present'); + }); - QUnit.test( - 'can access _Ember.VERSION (private API used by ember-cli-htmlbars)', - function (assert) { - assert.equal(typeof templateCompiler._Ember.VERSION, 'string', '_Ember.VERSION is present'); - } - ); + QUnit.test('precompile produces valid output', function (assert) { + let result = templateCompiler.precompile('

Hello

'); + assert.strictEqual(typeof result, 'string', 'precompile returns a string'); }); }); diff --git a/tests/node/visit-test.js b/tests/node/visit-test.js deleted file mode 100644 index 4b7dca9008a..00000000000 --- a/tests/node/visit-test.js +++ /dev/null @@ -1,357 +0,0 @@ -const SimpleDOM = require('simple-dom'); -const setupAppTest = require('./helpers/setup-app'); - -function assertHTMLMatches(assert, actualHTML, expectedHTML) { - assert.ok(actualHTML.match(expectedHTML), actualHTML + ' matches ' + expectedHTML); -} - -function handleError(assert) { - return function (error) { - assert.ok(false, error.stack); - }; -} - -// This is based on what fastboot-server does -let HTMLSerializer = new SimpleDOM.HTMLSerializer(SimpleDOM.voidMap); - -function fastbootVisit(App, url) { - let doc = new SimpleDOM.Document(); - let rootElement = doc.body; - let options = { isBrowser: false, document: doc, rootElement: rootElement }; - - return App.visit(url, options).then(function (instance) { - try { - return { - url: instance.getURL(), - title: doc.title, - body: HTMLSerializer.serialize(rootElement), - }; - } finally { - instance.destroy(); - } - }); -} - -function assertFastbootResult(assert, expected) { - return function (actual) { - assert.equal(actual.url, expected.url); - assertHTMLMatches(assert, actual.body, expected.body); - }; -} - -QUnit.module('Ember.Application - visit() Integration Tests', function (hooks) { - setupAppTest(hooks); - - QUnit.test('FastBoot: basic', function (assert) { - this.routes(function () { - this.route('a'); - this.route('b'); - }); - - this.template('application', '

Hello world

\n{{outlet}}'); - this.template('a', '

Welcome to {{x-foo page="A"}}

'); - this.template('b', '

{{x-foo page="B"}}

'); - - let initCalled = false; - let didInsertElementCalled = false; - - this.component( - 'x-foo', - { - tagName: 'span', - init: function () { - this._super(); - initCalled = true; - }, - didInsertElement: function () { - didInsertElementCalled = true; - }, - }, - 'Page {{this.page}}' - ); - - let App = this.createApplication(); - - return Promise.all([ - fastbootVisit(App, '/a').then( - assertFastbootResult(assert, { - url: '/a', - body: '

Hello world

\n

Welcome to Page A

', - }), - handleError(assert) - ), - fastbootVisit(App, '/b').then( - assertFastbootResult(assert, { - url: '/b', - body: '

Hello world

\n

Page B

', - }), - handleError - ), - ]).then(function () { - assert.ok(initCalled, 'Component#init should be called'); - assert.notOk(didInsertElementCalled, 'Component#didInsertElement should not be called'); - }); - }); - - QUnit.test('FastBoot: redirect', function (assert) { - this.routes(function () { - this.route('a'); - this.route('b'); - this.route('c'); - }); - - this.template('a', '

Hello from A

'); - this.template('b', '

Hello from B

'); - this.template('c', '

Hello from C

'); - - this.route('a', { - beforeModel: function () { - this.router.replaceWith('b'); - }, - }); - - this.route('b', { - afterModel: function () { - this.router.transitionTo('c'); - }, - }); - - let App = this.createApplication(); - - return Promise.all([ - fastbootVisit(App, '/a').then( - assertFastbootResult(assert, { - url: '/c', - body: '

Hello from C

', - }), - handleError(assert) - ), - fastbootVisit(App, '/b').then( - assertFastbootResult(assert, { - url: '/c', - body: '

Hello from C

', - }), - handleError(assert) - ), - ]); - }); - - QUnit.test('FastBoot: attributes are sanitized', function (assert) { - this.template('application', '
'); - - this.controller('application', { - test: 'javascript:alert("hello")', - }); - - let App = this.createApplication(); - - return Promise.all([ - fastbootVisit(App, '/').then( - assertFastbootResult(assert, { - url: '/', - body: '', - }), - handleError(assert) - ), - ]); - }); - - QUnit.test('FastBoot: route error', function (assert) { - this.routes(function () { - this.route('a'); - this.route('b'); - }); - - this.template('a', '

Hello from A

'); - this.template('b', '

Hello from B

'); - - this.route('a', { - beforeModel: function () { - throw new Error('Error from A'); - }, - }); - - this.route('b', { - afterModel: function () { - throw new Error('Error from B'); - }, - }); - - let App = this.createApplication(); - - return Promise.all([ - fastbootVisit(App, '/a').then( - function (instance) { - assert.ok(false, 'It should not render'); - instance.destroy(); - }, - function (error) { - assert.equal(error.message, 'Error from A'); - } - ), - fastbootVisit(App, '/b').then( - function (instance) { - assert.ok(false, 'It should not render'); - instance.destroy(); - }, - function (error) { - assert.equal(error.message, 'Error from B'); - } - ), - ]); - }); - - QUnit.test('FastBoot: route error template', function (assert) { - this.routes(function () { - this.route('a'); - }); - - this.template('error', '

Error template rendered!

'); - this.template('a', '

Hello from A

'); - - this.route('a', { - model: function () { - throw new Error('Error from A'); - }, - }); - - let App = this.createApplication(); - - return Promise.all([ - fastbootVisit(App, '/a').then( - assertFastbootResult(assert, { - url: '/a', - body: '

Error template rendered!

', - }), - handleError(assert) - ), - ]); - }); - - QUnit.test('Resource-discovery setup', function (assert) { - class Network { - constructor() { - this.requests = []; - } - - fetch(url) { - this.requests.push(url); - return Promise.resolve(); - } - } - - this.routes(function () { - this.route('a'); - this.route('b'); - this.route('c'); - this.route('d'); - this.route('e'); - }); - - let network; - this.route('a', { - model: function () { - return network.fetch('/a'); - }, - afterModel: function () { - this.router.replaceWith('b'); - }, - }); - - this.route('b', { - model: function () { - return network.fetch('/b'); - }, - afterModel: function () { - this.router.replaceWith('c'); - }, - }); - - this.route('c', { - model: function () { - return network.fetch('/c'); - }, - }); - - this.route('d', { - model: function () { - return network.fetch('/d'); - }, - afterModel: function () { - this.router.replaceWith('e'); - }, - }); - - this.route('e', { - model: function () { - return network.fetch('/e'); - }, - }); - - this.template('a', '{{x-foo}}'); - this.template('b', '{{x-foo}}'); - this.template('c', '{{x-foo}}'); - this.template('d', '{{x-foo}}'); - this.template('e', '{{x-foo}}'); - - let xFooInstances = 0; - - this.component('x-foo', { - init: function () { - this._super(); - xFooInstances++; - }, - }); - - let App = this.createApplication(); - - function assertResources(url, resources) { - network = new Network(); - - return App.visit(url, { isBrowser: false, shouldRender: false }).then(function (instance) { - try { - let viewRegistry = instance.lookup('-view-registry:main'); - assert.strictEqual(Object.keys(viewRegistry).length, 0, 'did not create any views'); - - assert.deepEqual(network.requests, resources); - } finally { - instance.destroy(); - } - }, handleError(assert)); - } - - return assertResources('/a', ['/a', '/b', '/c']) - .then(() => { - return assertResources('/b', ['/b', '/c']); - }) - .then(() => { - return assertResources('/c', ['/c']); - }) - .then(() => { - return assertResources('/d', ['/d', '/e']); - }) - .then(() => { - return assertResources('/e', ['/e']); - }) - .then(() => { - assert.strictEqual(xFooInstances, 0, 'it should not create any x-foo components'); - }); - }); - - QUnit.test('FastBoot: tagless components can render', function (assert) { - this.template('application', "
{{my-component}}
"); - this.component('my-component', { tagName: '' }, '

hello world

'); - - let App = this.createApplication(); - - return Promise.all([ - fastbootVisit(App, '/').then( - assertFastbootResult(assert, { - url: '/', - body: /

hello world<\/h1><\/div>/, - }), - handleError(assert) - ), - ]); - }); -}); diff --git a/tsconfig/compiler-options.json b/tsconfig/compiler-options.json index ae51907b492..584937c0480 100644 --- a/tsconfig/compiler-options.json +++ b/tsconfig/compiler-options.json @@ -31,8 +31,7 @@ "types": ["vite/client"], "paths": { - "backburner": ["../node_modules/backburner.js/dist/backburner.d.ts"], - "require": ["./loader/lib/index.d.ts"] + "backburner": ["../node_modules/backburner.js/dist/backburner.d.ts"] } } } diff --git a/types/publish.mjs b/types/publish.mjs index 6013e1e98cd..31a45fadbec 100755 --- a/types/publish.mjs +++ b/types/publish.mjs @@ -161,19 +161,12 @@ async function main() { process.exit(status === 'success' ? 0 : 1); } -const REMAPPED_LOCATION_MODULES = [ - { - input: 'packages/loader/lib/index.d.ts', - output: 'require.d.ts', - }, -]; +const REMAPPED_LOCATION_MODULES = []; /** "Emit" hand-authored `.d.ts` modules for modules which need to live in a - different location in the output than in the input tree, e.g. for the loader, - which creates runtime modules at a different location than its source location - naturally corresponds to. These represent modules which need to be copied over - and then *left exactly as they are*. + different location in the output than in the input tree. These represent + modules which need to be copied over and then *left exactly as they are*. @returns {Promise} an array of module names to exclude from the rest of the post-processing steps From d6d1237998887388825df18b2ca9681ee0e412c9 Mon Sep 17 00:00:00 2001 From: Peter Wagenet Date: Wed, 18 Feb 2026 16:56:50 -0800 Subject: [PATCH 2/7] Update pnpm-lock.yaml to remove stale ember-cli-htmlbars-6 specifier Co-Authored-By: Claude Sonnet 4.6 --- pnpm-lock.yaml | 1226 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 1033 insertions(+), 193 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5e16a8f4afc..873c929d911 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,7 +20,7 @@ importers: dependencies: '@babel/core': specifier: ^7.24.4 - version: 7.29.0(supports-color@8.1.1) + version: 7.29.0 '@ember/edition-utils': specifier: ^1.2.0 version: 1.2.0 @@ -99,7 +99,7 @@ importers: version: 7.28.6(@babel/core@7.29.0) '@babel/preset-env': specifier: ^7.16.11 - version: 7.29.0(@babel/core@7.29.0)(supports-color@8.1.1) + version: 7.29.0(@babel/core@7.29.0) '@babel/types': specifier: ^7.22.5 version: 7.29.0 @@ -2797,13 +2797,11 @@ importers: specifier: ^0.5.11 version: 0.5.11 - packages/loader: {} - smoke-tests/app-template: devDependencies: '@babel/core': specifier: ^7.24.4 - version: 7.29.0(supports-color@8.1.1) + version: 7.29.0 '@ember/optional-features': specifier: ^2.3.0 version: 2.3.0 @@ -2926,7 +2924,7 @@ importers: devDependencies: '@babel/core': specifier: ^7.28.5 - version: 7.29.0(supports-color@8.1.1) + version: 7.29.0 '@babel/plugin-transform-runtime': specifier: ^7.28.5 version: 7.29.0(@babel/core@7.29.0) @@ -2990,9 +2988,6 @@ importers: '@types/node': specifier: ^20.12.7 version: 20.19.33 - ember-cli-htmlbars-6: - specifier: npm:ember-cli-htmlbars@^6.0.0 - version: ember-cli-htmlbars@6.3.0 qunit: specifier: ^2.20.1 version: 2.25.0 @@ -3010,7 +3005,7 @@ importers: devDependencies: '@babel/core': specifier: ^7.27.1 - version: 7.29.0(supports-color@8.1.1) + version: 7.29.0 '@babel/eslint-parser': specifier: ^7.27.1 version: 7.28.6(@babel/core@7.29.0)(eslint@9.39.2) @@ -8146,10 +8141,6 @@ packages: ember-cli-get-component-path-option@1.0.0: resolution: {integrity: sha512-k47TDwcJ2zPideBCZE8sCiShSxQSpebY2BHcX2DdipMmBox5gsfyVrbKJWIHeSTTKyEUgmBIvQkqTOozEziCZA==} - ember-cli-htmlbars@6.3.0: - resolution: {integrity: sha512-N9Y80oZfcfWLsqickMfRd9YByVcTGyhYRnYQ2XVPVrp6jyUyOeRWmEAPh7ERSXpp8Ws4hr/JB9QVQrn/yZa+Ag==} - engines: {node: 12.* || 14.* || >= 16} - ember-cli-htmlbars@7.0.0: resolution: {integrity: sha512-6BFxD19eZY+K62JLBDIKb8fXV29+QBrcT5QH4iHi8xseERX9SEWnYej9FpqL2QuoGjaTGml6QOvu9QlSTDYdVw==} engines: {node: '>= 20'} @@ -13853,6 +13844,26 @@ snapshots: '@babel/compat-data@7.29.0': {} + '@babel/core@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0(supports-color@8.1.1) + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/core@7.29.0(supports-color@8.1.1)': dependencies: '@babel/code-frame': 7.29.0 @@ -13875,7 +13886,7 @@ snapshots: '@babel/eslint-parser@7.28.6(@babel/core@7.29.0)(eslint@8.57.1)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 8.57.1 eslint-visitor-keys: 2.1.0 @@ -13883,7 +13894,7 @@ snapshots: '@babel/eslint-parser@7.28.6(@babel/core@7.29.0)(eslint@9.39.2)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 9.39.2 eslint-visitor-keys: 2.1.0 @@ -13916,27 +13927,61 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.28.5(supports-color@8.1.1) '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1) + '@babel/traverse': 7.29.0(supports-color@8.1.1) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.28.5(supports-color@8.1.1) + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1) + '@babel/traverse': 7.29.0(supports-color@8.1.1) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.28.5(supports-color@8.1.1) + '@babel/helper-optimise-call-expression': 7.27.1 '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1) '@babel/traverse': 7.29.0(supports-color@8.1.1) semver: 6.3.1 transitivePeerDependencies: - supports-color + optional: true - '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.0)': + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.27.3 regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 6.4.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.28.6 @@ -13947,6 +13992,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + debug: 4.4.3(supports-color@8.1.1) + lodash.debounce: 4.0.8 + resolve: 1.22.11 + transitivePeerDependencies: + - supports-color + '@babel/helper-environment-visitor@7.24.7': dependencies: '@babel/types': 7.29.0 @@ -13976,7 +14032,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-module-imports': 7.28.6(supports-color@8.1.1) @@ -13985,13 +14041,31 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6(supports-color@8.1.1) + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6(supports-color@8.1.1) + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + '@babel/helper-optimise-call-expression@7.27.1': dependencies: '@babel/types': 7.29.0 '@babel/helper-plugin-utils@7.28.6': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-annotate-as-pure': 7.27.3 @@ -14000,7 +14074,26 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-wrap-function': 7.28.6(supports-color@8.1.1) + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-wrap-function': 7.28.6(supports-color@8.1.1) + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + optional: true + + '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-member-expression-to-functions': 7.28.5(supports-color@8.1.1) @@ -14009,6 +14102,25 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-member-expression-to-functions': 7.28.5(supports-color@8.1.1) + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-member-expression-to-functions': 7.28.5(supports-color@8.1.1) + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + optional: true + '@babel/helper-skip-transparent-expression-wrappers@7.27.1(supports-color@8.1.1)': dependencies: '@babel/traverse': 7.29.0(supports-color@8.1.1) @@ -14043,7 +14155,7 @@ snapshots: dependencies: '@babel/types': 7.29.0 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 @@ -14051,26 +14163,63 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.0)(supports-color@8.1.1)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1) '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) transitivePeerDependencies: - supports-color + optional: true - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 @@ -14078,18 +14227,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color '@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-decorators': 7.28.6(@babel/core@7.29.0) transitivePeerDependencies: @@ -14097,21 +14254,25 @@ snapshots: '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.0) transitivePeerDependencies: @@ -14119,156 +14280,347 @@ snapshots: '@babel/plugin-syntax-decorators@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0(supports-color@8.1.1)) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0)(supports-color@8.1.1) - '@babel/traverse': 7.29.0(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) - '@babel/helper-module-imports': 7.28.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/traverse': 7.29.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)(supports-color@8.1.1)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + optional: true - '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/helper-module-imports': 7.28.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-globals': 7.28.0 + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) - '@babel/traverse': 7.29.0(supports-color@8.1.1) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0)(supports-color@8.1.1) transitivePeerDependencies: - supports-color + optional: true - '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 - '@babel/template': 7.28.6 - '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0)(supports-color@8.1.1) transitivePeerDependencies: - supports-color + optional: true - '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + optional: true + + '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-globals': 7.28.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-globals': 7.28.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + optional: true + + '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/template': 7.28.6 + + '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/template': 7.28.6 + + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0)(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0)(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + optional: true + + '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 @@ -14276,7 +14628,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + optional: true + + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.28.6 @@ -14285,159 +14654,405 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.0)(supports-color@8.1.1)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color + optional: true - '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color + optional: true - '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 '@babel/traverse': 7.29.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color + optional: true - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color + optional: true - '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/traverse': 7.29.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + optional: true + + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + optional: true + + '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + optional: true + + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) - '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0)(supports-color@8.1.1) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) - '@babel/traverse': 7.29.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color + optional: true - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.0)': + '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/core': 7.29.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 transitivePeerDependencies: - supports-color + optional: true + + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0(supports-color@8.1.1)) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-runtime@7.29.0(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.29.0)(supports-color@8.1.1) @@ -14447,39 +15062,76 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.0)(supports-color@8.1.1)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color + optional: true + + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1) '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) @@ -14488,30 +15140,53 @@ snapshots: '@babel/plugin-transform-typescript@7.4.5(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0(supports-color@8.1.1)) '@babel/helper-plugin-utils': 7.28.6 '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.0)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.29.0)': + '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 @@ -14520,13 +15195,165 @@ snapshots: core-js: 2.6.12 regenerator-runtime: 0.13.11 - '@babel/preset-env@7.29.0(@babel/core@7.29.0)(supports-color@8.1.1)': + '@babel/preset-env@7.29.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: '@babel/compat-data': 7.29.0 '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.29.0(supports-color@8.1.1)) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0(supports-color@8.1.1)) + babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + babel-plugin-polyfill-corejs3: 0.14.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + core-js-compat: 3.48.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-env@7.29.0(@babel/core@7.29.0)': + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0) + '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.0) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.29.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.29.0)(supports-color@8.1.1) + babel-plugin-polyfill-corejs3: 0.14.0(@babel/core@7.29.0)(supports-color@8.1.1) + babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.29.0)(supports-color@8.1.1) + core-js-compat: 3.48.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-env@7.29.0(@babel/core@7.29.0)(supports-color@8.1.1)': + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/core': 7.29.0 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.29.0)(supports-color@8.1.1) '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.0) '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.0) @@ -14595,14 +15422,22 @@ snapshots: semver: 6.3.1 transitivePeerDependencies: - supports-color + optional: true - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.28.6 '@babel/types': 7.29.0 esutils: 2.0.3 + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/types': 7.29.0 + esutils: 2.0.3 + '@babel/runtime@7.12.18': dependencies: regenerator-runtime: 0.13.11 @@ -15128,7 +15963,7 @@ snapshots: dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) '@embroider/core': 3.5.9 - babel-loader: 9.2.1(@babel/core@7.29.0)(webpack@5.105.1(@swc/core@1.15.11)) + babel-loader: 9.2.1(@babel/core@7.29.0(supports-color@8.1.1))(webpack@5.105.1(@swc/core@1.15.11)) transitivePeerDependencies: - supports-color - webpack @@ -15146,12 +15981,12 @@ snapshots: '@embroider/compat@3.9.3(@embroider/core@3.5.9)': dependencies: '@babel/code-frame': 7.29.0 - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/plugin-syntax-decorators': 7.28.6(@babel/core@7.29.0) '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.0) '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) - '@babel/preset-env': 7.29.0(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/preset-env': 7.29.0(@babel/core@7.29.0) '@babel/runtime': 7.28.6 '@babel/traverse': 7.29.0(supports-color@8.1.1) '@embroider/core': 3.5.9 @@ -15199,12 +16034,12 @@ snapshots: '@embroider/compat@4.1.13(@embroider/core@4.4.3)': dependencies: '@babel/code-frame': 7.29.0 - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/plugin-syntax-decorators': 7.28.6(@babel/core@7.29.0) '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.0) '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) - '@babel/preset-env': 7.29.0(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/preset-env': 7.29.0(@babel/core@7.29.0) '@babel/runtime': 7.28.6 '@babel/traverse': 7.29.0(supports-color@8.1.1) '@embroider/core': 4.4.3 @@ -15253,7 +16088,7 @@ snapshots: '@embroider/core@3.5.9': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/parser': 7.29.0 '@babel/traverse': 7.29.0(supports-color@8.1.1) '@embroider/macros': 1.19.7(@babel/core@7.29.0) @@ -15287,7 +16122,7 @@ snapshots: '@embroider/core@4.4.3': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/parser': 7.29.0 '@babel/traverse': 7.29.0(supports-color@8.1.1) '@embroider/macros': 1.19.7(@babel/core@7.29.0) @@ -15408,7 +16243,7 @@ snapshots: '@embroider/vite@1.5.2(@embroider/core@4.4.3)(rollup@4.57.1)(vite@5.4.21(@types/node@22.19.11)(terser@5.46.0))': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@embroider/core': 4.4.3 '@embroider/macros': 1.19.7(@babel/core@7.29.0) '@embroider/reverse-exports': 0.2.0 @@ -15436,7 +16271,7 @@ snapshots: '@embroider/vite@1.5.2(@embroider/core@4.4.3)(rollup@4.57.1)(vite@6.4.1(@types/node@22.19.11)(terser@5.46.0)(yaml@2.8.2))': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@embroider/core': 4.4.3 '@embroider/macros': 1.19.7(@babel/core@7.29.0) '@embroider/reverse-exports': 0.2.0 @@ -15464,7 +16299,7 @@ snapshots: '@embroider/vite@1.5.2(@embroider/core@4.4.3)(rollup@4.57.1)(vite@7.3.1(@types/node@22.19.11)(terser@5.46.0)(yaml@2.8.2))': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@embroider/core': 4.4.3 '@embroider/macros': 1.19.7(@babel/core@7.29.0) '@embroider/reverse-exports': 0.2.0 @@ -15493,14 +16328,14 @@ snapshots: '@embroider/webpack@4.1.2(@embroider/core@3.5.9)(webpack@5.105.1(@swc/core@1.15.11))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) - '@babel/preset-env': 7.29.0(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/preset-env': 7.29.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) '@embroider/babel-loader-9': 3.1.3(@embroider/core@3.5.9)(supports-color@8.1.1)(webpack@5.105.1(@swc/core@1.15.11)) '@embroider/core': 3.5.9 '@embroider/hbs-loader': 3.0.5(@embroider/core@3.5.9)(webpack@5.105.1(@swc/core@1.15.11)) '@embroider/shared-internals': 2.9.2(supports-color@8.1.1) '@types/supports-color': 8.1.3 assert-never: 1.4.0 - babel-loader: 8.4.1(@babel/core@7.29.0)(webpack@5.105.1(@swc/core@1.15.11)) + babel-loader: 8.4.1(@babel/core@7.29.0(supports-color@8.1.1))(webpack@5.105.1(@swc/core@1.15.11)) css-loader: 5.2.7(webpack@5.105.1(@swc/core@1.15.11)) csso: 4.2.0 debug: 4.4.3(supports-color@8.1.1) @@ -16621,7 +17456,7 @@ snapshots: '@rollup/plugin-babel@6.1.0(@babel/core@7.29.0)(rollup@4.57.1)': dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6(supports-color@8.1.1) '@rollup/pluginutils': 5.3.0(rollup@4.57.1) optionalDependencies: @@ -18097,7 +18932,7 @@ snapshots: babel-import-util@3.0.1: {} - babel-loader@8.4.1(@babel/core@7.29.0)(webpack@5.105.1(@swc/core@1.15.11)): + babel-loader@8.4.1(@babel/core@7.29.0(supports-color@8.1.1))(webpack@5.105.1(@swc/core@1.15.11)): dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) find-cache-dir: 3.3.2 @@ -18108,14 +18943,14 @@ snapshots: babel-loader@8.4.1(@babel/core@7.29.0)(webpack@5.105.1): dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 webpack: 5.105.1 - babel-loader@9.2.1(@babel/core@7.29.0)(webpack@5.105.1(@swc/core@1.15.11)): + babel-loader@9.2.1(@babel/core@7.29.0(supports-color@8.1.1))(webpack@5.105.1(@swc/core@1.15.11)): dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) find-cache-dir: 4.0.0 @@ -18124,7 +18959,7 @@ snapshots: babel-loader@9.2.1(@babel/core@7.29.0)(webpack@5.105.1): dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 find-cache-dir: 4.0.0 schema-utils: 4.3.3 webpack: 5.105.1 @@ -18132,18 +18967,18 @@ snapshots: babel-plugin-debug-macros@0.3.4(@babel/core@7.29.0): dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 semver: 5.7.2 babel-plugin-debug-macros@1.0.0(@babel/core@7.29.0): dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 babel-import-util: 2.1.1 semver: 7.7.4 babel-plugin-debug-macros@2.0.0(@babel/core@7.29.0): dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 babel-import-util: 2.1.1 semver: 7.7.4 @@ -18201,10 +19036,19 @@ snapshots: reselect: 4.1.8 resolve: 1.22.11 - babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.29.0)(supports-color@8.1.1): + babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1): dependencies: '@babel/compat-data': 7.29.0 '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.29.0)(supports-color@8.1.1): + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/core': 7.29.0 '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0)(supports-color@8.1.1) semver: 6.3.1 transitivePeerDependencies: @@ -18212,23 +19056,38 @@ snapshots: babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.0): dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0)(supports-color@8.1.1) core-js-compat: 3.48.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.14.0(@babel/core@7.29.0)(supports-color@8.1.1): + babel-plugin-polyfill-corejs3@0.14.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1): dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + core-js-compat: 3.48.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.14.0(@babel/core@7.29.0)(supports-color@8.1.1): + dependencies: + '@babel/core': 7.29.0 '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0)(supports-color@8.1.1) core-js-compat: 3.48.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.29.0)(supports-color@8.1.1): + babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1): dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.29.0)(supports-color@8.1.1): + dependencies: + '@babel/core': 7.29.0 '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0)(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -18237,7 +19096,7 @@ snapshots: babel-remove-types@1.1.0: dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/plugin-syntax-decorators': 7.28.6(@babel/core@7.29.0) '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) prettier: 2.8.8 @@ -18440,7 +19299,7 @@ snapshots: broccoli-babel-transpiler@7.8.1: dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/polyfill': 7.12.1 broccoli-funnel: 2.0.2 broccoli-merge-trees: 3.0.2 @@ -18457,7 +19316,7 @@ snapshots: broccoli-babel-transpiler@8.0.2(@babel/core@7.29.0): dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 broccoli-persistent-filter: 3.1.3 clone: 2.1.2 hash-for-dep: 1.5.1 @@ -19761,12 +20620,12 @@ snapshots: ember-auto-import@2.12.0(webpack@5.105.1): dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.29.0) '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.29.0) - '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) - '@babel/preset-env': 7.29.0(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0) + '@babel/preset-env': 7.29.0(@babel/core@7.29.0) '@embroider/macros': 1.19.7(@babel/core@7.29.0) '@embroider/reverse-exports': 0.2.0 '@embroider/shared-internals': 2.9.2(supports-color@8.1.1) @@ -19815,17 +20674,17 @@ snapshots: ember-cli-babel@7.26.11: dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.29.0) '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.29.0) '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.29.0) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0) '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) '@babel/polyfill': 7.12.1 - '@babel/preset-env': 7.29.0(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/preset-env': 7.29.0(@babel/core@7.29.0) '@babel/runtime': 7.12.18 amd-name-resolver: 1.3.1 babel-plugin-debug-macros: 0.3.4(@babel/core@7.29.0) @@ -19850,17 +20709,17 @@ snapshots: ember-cli-babel@8.3.1(@babel/core@7.29.0): dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 '@babel/plugin-proposal-decorators': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) - '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0)(supports-color@8.1.1) - '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) - '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0) '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) - '@babel/preset-env': 7.29.0(@babel/core@7.29.0)(supports-color@8.1.1) + '@babel/preset-env': 7.29.0(@babel/core@7.29.0) '@babel/runtime': 7.12.18 amd-name-resolver: 1.3.1 babel-plugin-debug-macros: 0.3.4(@babel/core@7.29.0) @@ -19924,7 +20783,7 @@ snapshots: ember-cli-deprecation-workflow@3.4.0(ember-source@): dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 ember-cli-babel: 8.3.1(@babel/core@7.29.0) ember-source: 'link:' transitivePeerDependencies: @@ -19932,28 +20791,9 @@ snapshots: ember-cli-get-component-path-option@1.0.0: {} - ember-cli-htmlbars@6.3.0: - dependencies: - '@ember/edition-utils': 1.2.0 - babel-plugin-ember-template-compilation: 2.4.1 - babel-plugin-htmlbars-inline-precompile: 5.3.1 - broccoli-debug: 0.6.5 - broccoli-persistent-filter: 3.1.3 - broccoli-plugin: 4.0.7 - ember-cli-version-checker: 5.1.2 - fs-tree-diff: 2.0.1 - hash-for-dep: 1.5.1 - heimdalljs-logger: 0.1.10 - js-string-escape: 1.0.1 - semver: 7.7.4 - silent-error: 1.1.1 - walk-sync: 2.2.0 - transitivePeerDependencies: - - supports-color - ember-cli-htmlbars@7.0.0(@babel/core@7.29.0)(ember-source@): dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@ember/edition-utils': 1.2.0 babel-plugin-ember-template-compilation: 2.4.1 broccoli-debug: 0.6.5 @@ -20437,7 +21277,7 @@ snapshots: ember-eslint-parser@0.5.13(@babel/core@7.29.0)(@typescript-eslint/parser@8.55.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3): dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/eslint-parser': 7.28.6(@babel/core@7.29.0)(eslint@8.57.1) '@glimmer/syntax': 0.95.0 '@typescript-eslint/tsconfig-utils': 8.55.0(typescript@5.9.3) @@ -20454,7 +21294,7 @@ snapshots: ember-eslint-parser@0.5.13(@babel/core@7.29.0)(@typescript-eslint/parser@8.55.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3): dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/eslint-parser': 7.28.6(@babel/core@7.29.0)(eslint@9.39.2) '@glimmer/syntax': 0.95.0 '@typescript-eslint/tsconfig-utils': 8.55.0(typescript@5.9.3) @@ -24566,7 +25406,7 @@ snapshots: remove-types@1.0.0: dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 '@babel/plugin-syntax-decorators': 7.28.6(@babel/core@7.29.0) '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) prettier: 2.8.8 @@ -26516,7 +27356,7 @@ snapshots: workerpool@3.1.2: dependencies: - '@babel/core': 7.29.0(supports-color@8.1.1) + '@babel/core': 7.29.0 object-assign: 4.1.1 rsvp: 4.8.5 transitivePeerDependencies: From 8b5a3f05b1b3f4a0da97b34aa064b45e986aa66e Mon Sep 17 00:00:00 2001 From: Peter Wagenet Date: Thu, 19 Feb 2026 10:53:29 -0800 Subject: [PATCH 3/7] Fix AMD removal follow-ups: template compiler compat, implicit-modules paths, smoke-test deps Three issues discovered after the AMD bundle removal: 1. @embroider/compat and babel-plugin-ember-template-compilation hardcode `dist/ember-template-compiler.js`. Add an ESM re-export at that path plus `dist/package.json` with `{"type":"module"}` so that Node 20.19+ `require(esm)` works on it without a separate CJS build. 2. The `implicit-modules` paths in `lib/index.js` for all `exposedDependencies()` packages (@glimmer/*, @simple-dom/*, dag-map, route-recognizer, router_js, rsvp) referenced non-existent flat `.js` files. The rollup build actually emits these as `pkg/index.js` directories. This was masked by the AMD bundle (which provided those AMD modules directly); without the bundle, AMD module resolution for these packages was broken in classic and embroider/webpack builds. 3. The smoke-test app-template was using packages that access the `ember` barrel (`@ember/test-helpers@3.x` via Ember._ContainerProxyMixin, `ember-qunit@8` via Ember.Test.adapter) which throws in Ember 7.0. Update to: - ember-cli-app-version@7 (uses @ember/-internals/metal directly) - @ember/test-helpers@5.x (v2 addon, no barrel access) - ember-qunit@9 (uses setAdapter/setTesting directly, no barrel) - ember-qunit@9 removed loadTests() from start(); call it explicitly Co-Authored-By: Claude Sonnet 4.6 --- lib/index.js | 42 +- package.json | 3 + pnpm-lock.yaml | 583 +----------------- rollup.config.mjs | 12 +- smoke-tests/app-template/package.json | 18 +- smoke-tests/app-template/tests/test-helper.js | 2 + 6 files changed, 68 insertions(+), 592 deletions(-) diff --git a/lib/index.js b/lib/index.js index 481f3a73d8f..72f195918d5 100644 --- a/lib/index.js +++ b/lib/index.js @@ -153,31 +153,31 @@ const shim = addonV1Shim(path.join(__dirname, '..'), { './dist/packages/@ember/utils/lib/is_present.js', './dist/packages/@ember/utils/lib/type-of.js', './dist/packages/@ember/version/index.js', - './dist/packages/@glimmer/destroyable.js', - './dist/packages/@glimmer/encoder.js', - './dist/packages/@glimmer/env.js', - './dist/packages/@glimmer/global-context.js', - './dist/packages/@glimmer/manager.js', - './dist/packages/@glimmer/node.js', - './dist/packages/@glimmer/opcode-compiler.js', - './dist/packages/@glimmer/owner.js', - './dist/packages/@glimmer/program.js', - './dist/packages/@glimmer/reference.js', - './dist/packages/@glimmer/runtime.js', + './dist/packages/@glimmer/destroyable/index.js', + './dist/packages/@glimmer/encoder/index.js', + './dist/packages/@glimmer/env/index.js', + './dist/packages/@glimmer/global-context/index.js', + './dist/packages/@glimmer/manager/index.js', + './dist/packages/@glimmer/node/index.js', + './dist/packages/@glimmer/opcode-compiler/index.js', + './dist/packages/@glimmer/owner/index.js', + './dist/packages/@glimmer/program/index.js', + './dist/packages/@glimmer/reference/index.js', + './dist/packages/@glimmer/runtime/index.js', './dist/packages/@glimmer/tracking/index.js', - './dist/packages/@glimmer/tracking/primitives/cache.js', - './dist/packages/@glimmer/util.js', - './dist/packages/@glimmer/validator.js', - './dist/packages/@glimmer/vm.js', - './dist/packages/@glimmer/wire-format.js', - './dist/packages/@simple-dom/document.js', + './dist/packages/@glimmer/tracking/primitives/cache/index.js', + './dist/packages/@glimmer/util/index.js', + './dist/packages/@glimmer/validator/index.js', + './dist/packages/@glimmer/vm/index.js', + './dist/packages/@glimmer/wire-format/index.js', + './dist/packages/@simple-dom/document/index.js', './dist/packages/backburner.js/index.js', - './dist/packages/dag-map.js', + './dist/packages/dag-map/index.js', './dist/packages/ember/index.js', './dist/packages/ember/version.js', - './dist/packages/route-recognizer.js', - './dist/packages/router_js.js', - './dist/packages/rsvp.js', + './dist/packages/route-recognizer/index.js', + './dist/packages/router_js/index.js', + './dist/packages/rsvp/index.js', ], 'implicit-test-modules': [ './dist/packages/ember-testing/index.js', diff --git a/package.json b/package.json index 660890c32bf..9749d5f263d 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "ember-addon" ], "exports": { + "./dist/ember-template-compiler.js": "./dist/ember-template-compiler.js", "./*": "./dist/packages/*", "./types": { "types": "./types/stable/index.d.ts" @@ -21,6 +22,8 @@ "files": [ "build-metadata.json", "blueprints", + "dist/package.json", + "dist/ember-template-compiler.js", "dist/packages", "dist/dependencies", "docs/data.json", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 873c929d911..fc9da5c6853 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2806,14 +2806,14 @@ importers: specifier: ^2.3.0 version: 2.3.0 '@ember/string': - specifier: ^3.0.1 - version: 3.1.1 + specifier: ^4.0.1 + version: 4.0.1 '@ember/test-helpers': - specifier: ^3.3.0 - version: 3.3.1(@babel/core@7.29.0)(ember-source@)(webpack@5.105.1) + specifier: ^5.2.2 + version: 5.4.1(@babel/core@7.29.0) '@ember/test-waiters': - specifier: ^3.1.0 - version: 3.1.0 + specifier: ^4.1.0 + version: 4.1.1(@babel/core@7.29.0) '@embroider/test-setup': specifier: ^4.0.0 version: 4.0.0(@embroider/compat@3.9.3(@embroider/core@3.5.9))(@embroider/core@3.5.9)(@embroider/webpack@4.1.2(@embroider/core@3.5.9)(webpack@5.105.1)) @@ -2833,8 +2833,8 @@ importers: specifier: ~5.7.0 version: 5.7.0(@types/node@22.19.11) ember-cli-app-version: - specifier: ^6.0.1 - version: 6.0.1(ember-source@) + specifier: ^7.0.0 + version: 7.0.0(ember-source@) ember-cli-babel: specifier: ^8.2.0 version: 8.3.1(@babel/core@7.29.0) @@ -2854,20 +2854,20 @@ importers: specifier: ^4.0.2 version: 4.0.2 ember-data: - specifier: ~5.3.3 - version: 5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.29.0)(ember-source@)(webpack@5.105.1))(@ember/test-waiters@3.1.0)(ember-source@)(qunit@2.25.0) + specifier: ~5.5.0 + version: 5.5.0(@babel/core@7.29.0)(@ember/string@4.0.1)(@ember/test-helpers@5.4.1(@babel/core@7.29.0))(@ember/test-waiters@4.1.1(@babel/core@7.29.0))(ember-source@)(qunit@2.25.0) ember-load-initializers: - specifier: ^2.1.2 - version: 2.1.2(@babel/core@7.29.0) + specifier: ^3.0.1 + version: 3.0.1(ember-source@) ember-page-title: - specifier: ^8.2.3 - version: 8.2.4(ember-source@) + specifier: ^9.0.2 + version: 9.0.3 ember-qunit: - specifier: ^8.0.2 - version: 8.1.1(@babel/core@7.29.0)(@ember/test-helpers@3.3.1(@babel/core@7.29.0)(ember-source@)(webpack@5.105.1))(ember-source@)(qunit@2.25.0) + specifier: ^9.0.3 + version: 9.0.4(@babel/core@7.29.0)(@ember/test-helpers@5.4.1(@babel/core@7.29.0))(qunit@2.25.0) ember-resolver: - specifier: ^11.0.1 - version: 11.0.1(ember-source@) + specifier: ^13.1.1 + version: 13.1.1 ember-source: specifier: workspace:* version: link:../.. @@ -3862,11 +3862,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.4.5': - resolution: {integrity: sha512-RPB/YeGr4ZrFKNwfuQRlMf2lxoCUaU01MTw39/OFE/RiL8HDjtn68BwEPft1P7JN4akyEmjGWAMNldOV7o9V2g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-escapes@7.27.1': resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} engines: {node: '>=6.9.0'} @@ -3999,16 +3994,6 @@ packages: '@dual-bundle/import-meta-resolve@4.2.1': resolution: {integrity: sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==} - '@ember-data/adapter@5.3.13': - resolution: {integrity: sha512-tXx8XftDEAH/biUPZuWm73x6wPyXDlCf+k3IlgLVoGtY4MtqmX3e44JadhzrflqVcs38Ic2oosWZORP7UJ5wPg==} - engines: {node: '>= 18.20.8'} - peerDependencies: - '@ember-data/legacy-compat': 5.3.13 - '@ember-data/request-utils': 5.3.13 - '@ember-data/store': 5.3.13 - '@warp-drive/core-types': 0.0.3 - ember-source: 3.28.12 || ^4.0.4 || ^5.0.0 || ^6.0.0 - '@ember-data/adapter@5.5.0': resolution: {integrity: sha512-nOXbLR3koUagDeBOaTeEGCw2OqnI0XWbzP6CEFqVw5AC7wFY0G9JLcOtezU3d45pRpRryfcnxwLiS1LwaoYWTQ==} engines: {node: '>= 18.20.8'} @@ -4019,16 +4004,6 @@ packages: '@warp-drive/core-types': 5.5.0 ember-source: 3.28.12 || ^4.0.4 || ^5.0.0 || ^6.0.0 - '@ember-data/debug@5.3.13': - resolution: {integrity: sha512-O8YH65JdrDbGNtaUs8ql/0YZkIVhMsbaDHab4x0SuwfeoqlMtuK6Ym6LosMv/36vzTtIUQh9xJ+td4rcSoErWg==} - engines: {node: '>= 18.20.8'} - peerDependencies: - '@ember-data/model': 5.3.13 - '@ember-data/request-utils': 5.3.13 - '@ember-data/store': 5.3.13 - '@warp-drive/core-types': 0.0.3 - ember-source: 3.28.12 || ^4.0.4 || ^5.0.0 || ^6.0.0 - '@ember-data/debug@5.5.0': resolution: {integrity: sha512-aYWyFurPxuBkTmKWaK5XazBEjACKOmNWtf31zM8uAcEfoJESOuiIR/o92aciIgwHK/sOgOm56k9iilgmP4iArw==} engines: {node: '>= 18.20.8'} @@ -4039,14 +4014,6 @@ packages: '@warp-drive/core-types': 5.5.0 ember-source: 3.28.12 || ^4.0.4 || ^5.0.0 || ^6.0.0 - '@ember-data/graph@5.3.13': - resolution: {integrity: sha512-NMt1nP7dMVf/tzxamyQi59DaRHZF6F8aSuJmoC4zOcuGqE6QPURpcoIwbo3RM+R4e+4kVKHmp40kcNA0Bfu4zQ==} - engines: {node: '>= 18.20.8'} - peerDependencies: - '@ember-data/store': 5.3.13 - '@warp-drive/core-types': 0.0.3 - ember-source: 3.28.12 || ^4.0.4 || ^5.0.0 || ^6.0.0 - '@ember-data/graph@5.5.0': resolution: {integrity: sha512-F1gC7F/WyZHuR2Y14uYnPMMVAjoOIBiKr5WUGUb6or6JQBcV4eJpJnIELvJFPnBPdI+dD0acWLNx/78ibdy6Bg==} engines: {node: '>= 18.20.8'} @@ -4054,15 +4021,6 @@ packages: '@ember-data/store': 5.5.0 '@warp-drive/core-types': 5.5.0 - '@ember-data/json-api@5.3.13': - resolution: {integrity: sha512-pD4rKQ1weGb0e8g5hjqMxbbaoSJrdYvxHt4Qu38v/5321qdAMwZQ503m6FDhUe+S39MaYA/qIel/wbiuRWzbFw==} - engines: {node: '>= 18.20.8'} - peerDependencies: - '@ember-data/graph': 5.3.13 - '@ember-data/request-utils': 5.3.13 - '@ember-data/store': 5.3.13 - '@warp-drive/core-types': 0.0.3 - '@ember-data/json-api@5.5.0': resolution: {integrity: sha512-aBXnYPRLYkU1JKxLyzbUQXva7suZ7o/New7QMC/LWi408lbrqPYgKENW72Nd8XmWVvRubBxMEJd4hbPcsQ+zdQ==} engines: {node: '>= 18.20.8'} @@ -4072,24 +4030,6 @@ packages: '@ember-data/store': 5.5.0 '@warp-drive/core-types': 5.5.0 - '@ember-data/legacy-compat@5.3.13': - resolution: {integrity: sha512-NMnC43VlQ8x+i1uwCcf/oQiEiZ9DDxVZ3/NJWoviN+ajg6UHtCk8N3HryhDbxTxytVjSrUpO9Igq69TjN7XNqw==} - engines: {node: '>= 18.20.8'} - peerDependencies: - '@ember-data/graph': 5.3.13 - '@ember-data/json-api': 5.3.13 - '@ember-data/request': 5.3.13 - '@ember-data/request-utils': 5.3.13 - '@ember-data/store': 5.3.13 - '@ember/test-waiters': ^3.1.0 || >= 4.0.0 - '@warp-drive/core-types': 0.0.3 - ember-source: 3.28.12 || ^4.0.4 || ^5.0.0 || ^6.0.0 - peerDependenciesMeta: - '@ember-data/graph': - optional: true - '@ember-data/json-api': - optional: true - '@ember-data/legacy-compat@5.5.0': resolution: {integrity: sha512-tnnBJzrU4Np7ThVHPAPUMiWdz4CRpv/AH2WMdc77O2gshBb5GkUsu2IAMTW47s0dJSVvibJAZ082TbNHCBqj5Q==} engines: {node: '>= 18.20.8'} @@ -4108,24 +4048,6 @@ packages: '@ember-data/json-api': optional: true - '@ember-data/model@5.3.13': - resolution: {integrity: sha512-zz7KSxCWmqFkM5pOJPmJbSLii/IpYOZ2EFKcw5PApW/pDtd/bw0PQsj1vBy+iAzI3go2maYZip730s4t1VTjhA==} - engines: {node: '>= 18.20.8'} - peerDependencies: - '@ember-data/graph': 5.3.13 - '@ember-data/json-api': 5.3.13 - '@ember-data/legacy-compat': 5.3.13 - '@ember-data/request-utils': 5.3.13 - '@ember-data/store': 5.3.13 - '@ember-data/tracking': 5.3.13 - '@warp-drive/core-types': 0.0.3 - ember-source: 3.28.12 || ^4.0.4 || ^5.0.0 || ^6.0.0 - peerDependenciesMeta: - '@ember-data/graph': - optional: true - '@ember-data/json-api': - optional: true - '@ember-data/model@5.5.0': resolution: {integrity: sha512-/F1YWrGDCE9kNEAGgisfx2wzTgYC2yWIRocjrDe8e+opskv+bJAM/a5N/jqfJSzNipLc26BOTStvo8HPtCTu4g==} engines: {node: '>= 18.20.8'} @@ -4143,20 +4065,6 @@ packages: '@ember-data/json-api': optional: true - '@ember-data/request-utils@5.3.13': - resolution: {integrity: sha512-a6JLegqJ/GwLkOXU77RE38E8hkhsvFjpZFQUIVMdFuINz7sy1lhC8koatxDzTU3glAYH1zoA12UZ8AJU0wXoKQ==} - engines: {node: '>= 18.20.8'} - peerDependencies: - '@ember/string': ^3.1.1 || ^4.0.0 - '@warp-drive/core-types': 0.0.3 - ember-inflector: ^4.0.2 || ^5.0.0 || ^6.0.0 - ember-source: 3.28.12 || ^4.0.4 || ^5.0.0 || ^6.0.0 - peerDependenciesMeta: - '@ember/string': - optional: true - ember-inflector: - optional: true - '@ember-data/request-utils@5.5.0': resolution: {integrity: sha512-tObMa2LIYqQ+QPNasbv4UNN44t5r/z5It2nuhcG2m04nJRBnOGvT0HPRwvdznANRNSDEv9L4QwRCrvIW+xbOwQ==} engines: {node: '>= 18.20.8'} @@ -4171,13 +4079,6 @@ packages: ember-inflector: optional: true - '@ember-data/request@5.3.13': - resolution: {integrity: sha512-BtneB/msAnvq1lgpthQ9avbuLkOP2i9BNwGLvJGmiPQAplM/ny1M9vS26UEmdwn0F3+uC36IgcJbXplO/rDq3Q==} - engines: {node: '>= 18.20.8'} - peerDependencies: - '@ember/test-waiters': ^3.1.0 || ^4.0.0 - '@warp-drive/core-types': 0.0.3 - '@ember-data/request@5.5.0': resolution: {integrity: sha512-Omu39FbKiDylq8PVnKnXsjljWa6qIyQx65O0hNAasNi2rV1Uhv04g0UBZ3L0L+7R6Od8n1/9aqbrcfK/oNEhHA==} engines: {node: '>= 18.20.8'} @@ -4188,16 +4089,6 @@ packages: '@ember-data/rfc395-data@0.0.4': resolution: {integrity: sha512-tGRdvgC9/QMQSuSuJV45xoyhI0Pzjm7A9o/MVVA3HakXIImJbbzx/k/6dO9CUEQXIyS2y0fW6C1XaYOG7rY0FQ==} - '@ember-data/serializer@5.3.13': - resolution: {integrity: sha512-ZARVjMM66YVEooDMzvMRrcdZQaXlQDNKVzERgPcluiLZGhxalFX5wXLyNV7vTV4OShZZdrZSlGrpSk/3uyGGBg==} - engines: {node: '>= 18.20.8'} - peerDependencies: - '@ember-data/legacy-compat': 5.3.13 - '@ember-data/request-utils': 5.3.13 - '@ember-data/store': 5.3.13 - '@warp-drive/core-types': 0.0.3 - ember-source: 3.28.12 || ^4.0.4 || ^5.0.0 || ^6.0.0 - '@ember-data/serializer@5.5.0': resolution: {integrity: sha512-rrbJzcruDni3dShluGjxFbbKfARMTJWAPN17HFrVfnrDHUAbXWXpQYofpAI/FPabEir3/1SKQHWds/ZO5TZstw==} engines: {node: '>= 18.20.8'} @@ -4208,16 +4099,6 @@ packages: '@warp-drive/core-types': 5.5.0 ember-source: 3.28.12 || ^4.0.4 || ^5.0.0 || ^6.0.0 - '@ember-data/store@5.3.13': - resolution: {integrity: sha512-5Mx4k/p0z+PN5NtY+CepXHNerGmtQpHyDr80PzUw65Mtmftdcns0LJiSMxbuvObt3fXH8PA54cSBxwpS9G3y1w==} - engines: {node: '>= 18.20.8'} - peerDependencies: - '@ember-data/request': 5.3.13 - '@ember-data/request-utils': 5.3.13 - '@ember-data/tracking': 5.3.13 - '@warp-drive/core-types': 0.0.3 - ember-source: 3.28.12 || ^4.0.4 || ^5.0.0 || ^6.0.0 - '@ember-data/store@5.5.0': resolution: {integrity: sha512-4Oa3ObaqkSZ0ESRuLcITn1fmXdhkbcsvfFskH3sh4VmQW1kylTgS7qlU5n2nJE7GqMw43IM2ta/s1F0DFKC9Vw==} engines: {node: '>= 18.20.8'} @@ -4233,13 +4114,6 @@ packages: ember-source: optional: true - '@ember-data/tracking@5.3.13': - resolution: {integrity: sha512-9qD038n0MRXq+wfsVtPo0feZ7iq3yrvofXadfQhJgVQU5ieHyFaSsM8cfPRsGXeBk5nEdaUmB471TqqCPtjeag==} - engines: {node: '>= 18.20.8'} - peerDependencies: - '@warp-drive/core-types': 0.0.3 - ember-source: 3.28.12 || ^4.0.4 || ^5.0.0 || ^6.0.0 - '@ember-data/tracking@5.5.0': resolution: {integrity: sha512-VmEzLZr3/CqGR/Wvs5NIMvX51k3gR1bunB0wJnB9UtChy3WdICiF002byWpL/GkKbg8krYQ4zT5yOWKC2cK4HA==} deprecated: Use @warp-drive/ember @@ -4254,26 +4128,12 @@ packages: resolution: {integrity: sha512-+M8CkPledQEaDbfIlwlq6Phgpm5jdT3a6WVDJk7b/zadw5xAJkuQKVK7DgR0SFgHGiWlyn6a8AU5p2mCA706RA==} engines: {node: 10.* || 12.* || >= 14} - '@ember/string@3.1.1': - resolution: {integrity: sha512-UbXJ+k3QOrYN4SRPHgXCqYIJ+yWWUg1+vr0H4DhdQPTy8LJfyqwZ2tc5uqpSSnEXE+/1KopHBE5J8GDagAg5cg==} - engines: {node: 12.* || 14.* || >= 16} - '@ember/string@4.0.1': resolution: {integrity: sha512-VWeng8BSWrIsdPfffOQt/bKwNKJL7+37gPFh/6iZZ9bke+S83kKqkS30poo4bTGfRcMnvAE0ie7txom+iDu81Q==} - '@ember/test-helpers@3.3.1': - resolution: {integrity: sha512-h4uFBy4pquBtHsHI+tx9S0wtMmn1L+8dkXiDiyoqG1+3e0Awk6GBujiFM9s4ANq6wC8uIhC3wEFyts10h2OAoQ==} - engines: {node: 16.* || >= 18} - peerDependencies: - ember-source: ^4.0.0 || ^5.0.0 - '@ember/test-helpers@5.4.1': resolution: {integrity: sha512-BUdT91ra+QibEWAUwtZmvTGFoDHJCxDU+fkQENA8Zs0FR3pZiICxxP/fgdlNExCjjdm1letut7ENoueBuDdixQ==} - '@ember/test-waiters@3.1.0': - resolution: {integrity: sha512-bb9h95ktG2wKY9+ja1sdsFBdOms2lB19VWs8wmNpzgHv1NCetonBoV5jHBV4DHt0uS1tg9z66cZqhUVlYs96KQ==} - engines: {node: 10.* || 12.* || >= 14.*} - '@ember/test-waiters@4.1.1': resolution: {integrity: sha512-HbK70JYCDJcGI0CrwcbjeL2QHAn0HLwa3oGep7mr6l/yO95U7JYA8VN+/9VTsWJTmKueLtWayUqEmGS3a3mVOg==} @@ -6216,18 +6076,10 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@warp-drive/build-config@0.0.3': - resolution: {integrity: sha512-cvaZE2tF73o+DvXkKmu7WU65tDffAZKQgRh3HWnVWksWs7B4rn86zGg3uUh6edKnpZ76o7xQ0cBaqdQkoDJ5Ng==} - engines: {node: '>= 18.20.8'} - '@warp-drive/build-config@5.5.0': resolution: {integrity: sha512-l0ZyDsalwcgb9nw02GC8H62fo9E9US42p+5fVQsNOj2oleCb9f3DmLNqcbJG0w22kxJol+GU0YppO8hSqNHL2w==} engines: {node: '>= 18.20.8'} - '@warp-drive/core-types@0.0.3': - resolution: {integrity: sha512-8dJY4CIekQSndEL5ORvWoYOLBL1u7YREth3jPmZQTpMGmUFc23f1WzgBKNesXV1cXGl7AUum+wvavOtvyUFzzg==} - engines: {node: '>= 18.20.8'} - '@warp-drive/core-types@5.5.0': resolution: {integrity: sha512-PWc3QI9Ykc6zqGH0UUEuSthIaPN60WjKBUsievhD4YB5sjMVqRFIawrrD1Z9SOd2cgmidAJWDNT/zWsi7OI2OQ==} engines: {node: '>= 18.20.8'} @@ -6444,11 +6296,6 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} - ansi-to-html@0.6.15: - resolution: {integrity: sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==} - engines: {node: '>=8.0.0'} - hasBin: true - ansicolors@0.2.1: resolution: {integrity: sha512-tOIuy1/SK/dr94ZA0ckDohKXNeBNqZ4us6PjMVLs5h1w2GBB6uPtOknp2+VF4F/zcy9LI70W+Z+pE2Soajky1w==} @@ -8097,9 +7944,9 @@ packages: resolution: {integrity: sha512-J9wVTddnpx1ZPf6CgtMs8byp5t9ZZITUX9v+H+PgSDSgbYbDrVlKr2RGDfJLrnaTpuWwZqh1b54/9jLaERr6QA==} engines: {node: 12.* || 14.* || >= 16} - ember-cli-app-version@6.0.1: - resolution: {integrity: sha512-XA1FwkWA5QytmWF0jcJqEr3jcZoiCl9Fb33TZgOVfClL7Voxe+/RwzISEprBRQgbf7j8z1xf8/RJCKfclUy3rQ==} - engines: {node: 14.* || 16.* || >= 18} + ember-cli-app-version@7.0.0: + resolution: {integrity: sha512-zWIkxvlRrW7w1/vp+bGkmS27QsVum7NKp8N9DgAjhFMWuKewVqGyl/jeYaujMS/I4WSKBzSG9WHwBy2rjbUWxA==} + engines: {node: '>= 18'} peerDependencies: ember-source: ^3.28.0 || >= 4.0.0 @@ -8186,17 +8033,9 @@ packages: ember-cli-test-info@1.0.0: resolution: {integrity: sha512-dEVTIpmUfCzweC97NGf6p7L6XKBwV2GmSM4elmzKvkttEp5P7AvGA9uGyN4GqFq+RwhW+2b0I2qlX00w+skm+A==} - ember-cli-test-loader@3.1.0: - resolution: {integrity: sha512-0aocZV9SIoOHiU3hrH3IuLR6busWhTX6UVXgd490hmJkIymmOXNH2+jJoC7Ebkeo3PiOfAdjqhb765QDlHSJOw==} - engines: {node: 10.* || >= 12} - ember-cli-typescript-blueprint-polyfill@0.1.0: resolution: {integrity: sha512-g0weUTOnHmPGqVZzkQTl3Nbk9fzEdFkEXydCs5mT1qBjXh8eQ6VlmjjGD5/998UXKuA0pLSCVVMbSp/linLzGA==} - ember-cli-typescript@2.0.2: - resolution: {integrity: sha512-7I5azCTxOgRDN8aSSnJZIKSqr+MGnT+jLTUbBYqF8wu6ojs2DUnTePxUcQMcvNh3Q3B1ySv7Q/uZFSjdU9gSjA==} - engines: {node: 6.* || 8.* || >= 10.*} - ember-cli-version-checker@3.1.3: resolution: {integrity: sha512-PZNSvpzwWgv68hcXxyjREpj3WWb81A7rtYNQq1lLEgrWIchF8ApKJjWP3NBpHjaatwILkZAV8klair5WFlXAKg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -8223,22 +8062,6 @@ packages: engines: {node: '>= 18'} hasBin: true - ember-data@5.3.13: - resolution: {integrity: sha512-Jke7Bx45GDrq72Co/eHtOb6wfeyMUAmxKaRhibVrEQqy9jXwFWPKIcPwF20v7oWkO/bBEK2BDpM5enLDiVEmsQ==} - engines: {node: '>= 18.20.8'} - peerDependencies: - '@ember/test-helpers': ^3.3.0 || ^4.0.4 || ^5.1.0 - '@ember/test-waiters': ^3.1.0 || ^4.0.0 - ember-source: 3.28.12 || ^4.0.4 || ^5.0.0 || ^6.0.0 - qunit: ^2.18.0 - peerDependenciesMeta: - '@ember/test-helpers': - optional: true - '@ember/test-waiters': - optional: true - qunit: - optional: true - ember-data@5.5.0: resolution: {integrity: sha512-qAuVKeCXn4tiqON9orbjS7H3iitCw5GC+XGdbqRk4Ow2phn/RRsCWf98KJLtB8tmflyp4l3Q1o4nJwjsNeDpeQ==} engines: {node: '>= 18.20.8'} @@ -8265,10 +8088,6 @@ packages: '@typescript-eslint/parser': optional: true - ember-load-initializers@2.1.2: - resolution: {integrity: sha512-CYR+U/wRxLbrfYN3dh+0Tb6mFaxJKfdyz+wNql6cqTrA0BBi9k6J3AaKXj273TqvEpyyXegQFFkZEiuZdYtgJw==} - engines: {node: 6.* || 8.* || >= 10.*} - ember-load-initializers@3.0.1: resolution: {integrity: sha512-qV3vxJKw5+7TVDdtdLPy8PhVsh58MlK8jwzqh5xeOwJPNP7o0+BlhvwoIlLYTPzGaHdfjEIFCgVSyMRGd74E1g==} engines: {node: '>= 18.*'} @@ -8278,38 +8097,16 @@ packages: ember-modifier@4.3.0: resolution: {integrity: sha512-O0rirSLQbGg0VJ/NqoQ4uN1bh2iAekZC/Ykma+FkjCM2ofrO38u+d8n3+AK6uVWeMJmogGX2KL+Is5fofoInJg==} - ember-page-title@8.2.4: - resolution: {integrity: sha512-ZZ912IRItIEfD5+35w65DT9TmqppK+suXJeaJenD5OSuvujUnYl6KxBpyAbfjw4mYtURwJO/TmSe+4GGJbsJ0w==} - engines: {node: 16.* || >= 18} - peerDependencies: - ember-source: '>= 3.28.0' - ember-page-title@9.0.3: resolution: {integrity: sha512-fedRHUsvq8tIZgOii8jTrfAyeq+la/9H5eAzhNNwEyzo7nDMmqK2SxsyBUGXprd8fOacsPabLlzlucMi/4mUpA==} engines: {node: 16.* || >= 18} - ember-qunit@8.1.1: - resolution: {integrity: sha512-nT+6s74j3BKNn+QQY/hINC3Xw3kn0NF0cU9zlgVQmCBWoyis1J24xWrY2LFOMThPmF6lHqcrUb5JwvBD4BXEXg==} - peerDependencies: - '@ember/test-helpers': '>=3.0.3' - ember-source: '>=4.0.0' - qunit: ^2.13.0 - ember-qunit@9.0.4: resolution: {integrity: sha512-rv6gKvrdXdPBTdSZC5co82eIcDWWVR7RjafU/c+5TTz290oXhIHPoVuZbcO2F5RiAqkTW0jKzwkCP8y+2tCjFw==} peerDependencies: '@ember/test-helpers': '>=3.0.3' qunit: ^2.13.0 - ember-resolver@11.0.1: - resolution: {integrity: sha512-ucBk3oM+PR+AfYoSUXeQh8cDQS1sSiEKp4Pcgbew5cFMSqPxJfqd1zyZsfQKNTuyubeGmWxBOyMVSTvX2LeCyg==} - engines: {node: 14.* || 16.* || >= 18} - peerDependencies: - ember-source: ^4.8.3 || >= 5.0.0 - peerDependenciesMeta: - ember-source: - optional: true - ember-resolver@13.1.1: resolution: {integrity: sha512-rA4RDuTm/F9AzYX2+g7EY3QWU48kyF9+Ck8IE8VQipnlwv2Q42kdRWiw7hfeQbRxx6XoSZCak6nzAG9ePd/+Ug==} engines: {node: 14.* || 16.* || >= 18} @@ -8397,9 +8194,6 @@ packages: entities@1.1.2: resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} - entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - entities@3.0.1: resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} engines: {node: '>=0.12'} @@ -12176,10 +11970,6 @@ packages: stacktracey@2.1.8: resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} - stagehand@1.0.1: - resolution: {integrity: sha512-GqXBq2SPWv9hTXDFKS8WrKK1aISB0aKGHZzH+uD4ShAgs+Fz20ZfoerLOm8U+f62iRWLrw6nimOY/uYuTcVhvg==} - engines: {node: 6.* || 8.* || >= 10.*} - static-extend@0.1.2: resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} engines: {node: '>=0.10.0'} @@ -15138,12 +14928,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-typescript@7.4.5(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.0(supports-color@8.1.1))': dependencies: '@babel/core': 7.29.0(supports-color@8.1.1) @@ -15545,24 +15329,6 @@ snapshots: '@dual-bundle/import-meta-resolve@4.2.1': {} - '@ember-data/adapter@5.3.13(@babel/core@7.29.0)(@ember-data/legacy-compat@5.3.13(b2c52ef688c381e5a1dee39fc6194ffa))(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/store@5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@)': - dependencies: - '@ember-data/legacy-compat': 5.3.13(b2c52ef688c381e5a1dee39fc6194ffa) - '@ember-data/request-utils': 5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember-data/store': 5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.19.7(@babel/core@7.29.0) - '@warp-drive/build-config': 0.0.3(@babel/core@7.29.0) - '@warp-drive/core-types': 0.0.3(@babel/core@7.29.0) - ember-cli-path-utils: 1.0.0 - ember-cli-string-utils: 1.1.0 - ember-cli-test-info: 1.0.0 - ember-source: 'link:' - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - '@ember-data/adapter@5.5.0(4f640e9d5544d27fb4b0a972bef18db1)': dependencies: '@ember-data/legacy-compat': 5.5.0(b562c63095138abf35e8881b2313ad7e) @@ -15581,21 +15347,6 @@ snapshots: - '@glint/template' - supports-color - '@ember-data/debug@5.3.13(@babel/core@7.29.0)(@ember-data/model@5.3.13(94d135367b2392cd3afdde8d51ef777f))(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/store@5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@)': - dependencies: - '@ember-data/model': 5.3.13(94d135367b2392cd3afdde8d51ef777f) - '@ember-data/request-utils': 5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember-data/store': 5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.19.7(@babel/core@7.29.0) - '@warp-drive/build-config': 0.0.3(@babel/core@7.29.0) - '@warp-drive/core-types': 0.0.3(@babel/core@7.29.0) - ember-source: 'link:' - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - '@ember-data/debug@5.5.0(6297034c22ae5f3221054c3d5cdd1ece)': dependencies: '@ember-data/model': 5.5.0(98b4142b8b7e5a0174a5b276b686b5af) @@ -15611,18 +15362,6 @@ snapshots: - '@glint/template' - supports-color - '@ember-data/graph@5.3.13(@babel/core@7.29.0)(@ember-data/store@5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@)': - dependencies: - '@ember-data/store': 5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@embroider/macros': 1.19.7(@babel/core@7.29.0) - '@warp-drive/build-config': 0.0.3(@babel/core@7.29.0) - '@warp-drive/core-types': 0.0.3(@babel/core@7.29.0) - ember-source: 'link:' - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - '@ember-data/graph@5.5.0(@babel/core@7.29.0)(@ember-data/store@5.5.0(@babel/core@7.29.0)(@ember-data/request-utils@5.5.0(@babel/core@7.29.0)(@ember-data/request@5.5.0(@babel/core@7.29.0)(@ember/test-waiters@4.1.1(@babel/core@7.29.0))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0)))(@ember/string@4.0.1)(@warp-drive/core-types@5.5.0(@babel/core@7.29.0)))(@ember-data/request@5.5.0(@babel/core@7.29.0)(@ember/test-waiters@4.1.1(@babel/core@7.29.0))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0)))(@ember-data/tracking@5.5.0(@babel/core@7.29.0)(@warp-drive/core-types@5.5.0(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0))': dependencies: '@ember-data/store': 5.5.0(@babel/core@7.29.0)(@ember-data/request-utils@5.5.0(@babel/core@7.29.0)(@ember-data/request@5.5.0(@babel/core@7.29.0)(@ember/test-waiters@4.1.1(@babel/core@7.29.0))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0)))(@ember/string@4.0.1)(@warp-drive/core-types@5.5.0(@babel/core@7.29.0)))(@ember-data/request@5.5.0(@babel/core@7.29.0)(@ember/test-waiters@4.1.1(@babel/core@7.29.0))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0)))(@ember-data/tracking@5.5.0(@babel/core@7.29.0)(@warp-drive/core-types@5.5.0(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0))(ember-source@) @@ -15634,21 +15373,6 @@ snapshots: - '@glint/template' - supports-color - '@ember-data/json-api@5.3.13(2b27332414b505036c0c17aa2e231d60)': - dependencies: - '@ember-data/graph': 5.3.13(@babel/core@7.29.0)(@ember-data/store@5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember-data/request-utils': 5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember-data/store': 5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@embroider/macros': 1.19.7(@babel/core@7.29.0) - '@warp-drive/build-config': 0.0.3(@babel/core@7.29.0) - '@warp-drive/core-types': 0.0.3(@babel/core@7.29.0) - fuse.js: 7.1.0 - json-to-ast: 2.1.0 - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - '@ember-data/json-api@5.5.0(2c2fff7f2e2a437c5a6693b5703509cb)': dependencies: '@ember-data/graph': 5.5.0(@babel/core@7.29.0)(@ember-data/store@5.5.0(@babel/core@7.29.0)(@ember-data/request-utils@5.5.0(@babel/core@7.29.0)(@ember-data/request@5.5.0(@babel/core@7.29.0)(@ember/test-waiters@4.1.1(@babel/core@7.29.0))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0)))(@ember/string@4.0.1)(@warp-drive/core-types@5.5.0(@babel/core@7.29.0)))(@ember-data/request@5.5.0(@babel/core@7.29.0)(@ember/test-waiters@4.1.1(@babel/core@7.29.0))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0)))(@ember-data/tracking@5.5.0(@babel/core@7.29.0)(@warp-drive/core-types@5.5.0(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0)) @@ -15664,24 +15388,6 @@ snapshots: - '@glint/template' - supports-color - '@ember-data/legacy-compat@5.3.13(b2c52ef688c381e5a1dee39fc6194ffa)': - dependencies: - '@ember-data/request': 5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)) - '@ember-data/request-utils': 5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember-data/store': 5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember/test-waiters': 3.1.0 - '@embroider/macros': 1.19.7(@babel/core@7.29.0) - '@warp-drive/build-config': 0.0.3(@babel/core@7.29.0) - '@warp-drive/core-types': 0.0.3(@babel/core@7.29.0) - ember-source: 'link:' - optionalDependencies: - '@ember-data/graph': 5.3.13(@babel/core@7.29.0)(@ember-data/store@5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember-data/json-api': 5.3.13(2b27332414b505036c0c17aa2e231d60) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - '@ember-data/legacy-compat@5.5.0(b562c63095138abf35e8881b2313ad7e)': dependencies: '@ember-data/request': 5.5.0(@babel/core@7.29.0)(@ember/test-waiters@4.1.1(@babel/core@7.29.0))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0)) @@ -15700,28 +15406,6 @@ snapshots: - '@glint/template' - supports-color - '@ember-data/model@5.3.13(94d135367b2392cd3afdde8d51ef777f)': - dependencies: - '@ember-data/legacy-compat': 5.3.13(b2c52ef688c381e5a1dee39fc6194ffa) - '@ember-data/request-utils': 5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember-data/store': 5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember-data/tracking': 5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.19.7(@babel/core@7.29.0) - '@warp-drive/build-config': 0.0.3(@babel/core@7.29.0) - '@warp-drive/core-types': 0.0.3(@babel/core@7.29.0) - ember-cli-string-utils: 1.1.0 - ember-cli-test-info: 1.0.0 - ember-source: 'link:' - inflection: 3.0.2 - optionalDependencies: - '@ember-data/graph': 5.3.13(@babel/core@7.29.0)(@ember-data/store@5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember-data/json-api': 5.3.13(2b27332414b505036c0c17aa2e231d60) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - '@ember-data/model@5.5.0(98b4142b8b7e5a0174a5b276b686b5af)': dependencies: '@ember-data/legacy-compat': 5.5.0(b562c63095138abf35e8881b2313ad7e) @@ -15743,19 +15427,6 @@ snapshots: - '@glint/template' - supports-color - '@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@)': - dependencies: - '@embroider/macros': 1.19.7(@babel/core@7.29.0) - '@warp-drive/build-config': 0.0.3(@babel/core@7.29.0) - '@warp-drive/core-types': 0.0.3(@babel/core@7.29.0) - ember-source: 'link:' - optionalDependencies: - '@ember/string': 3.1.1 - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - '@ember-data/request-utils@5.5.0(@babel/core@7.29.0)(@ember-data/request@5.5.0(@babel/core@7.29.0)(@ember/test-waiters@4.1.1(@babel/core@7.29.0))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0)))(@ember/string@4.0.1)(@warp-drive/core-types@5.5.0(@babel/core@7.29.0))': dependencies: '@ember-data/request': 5.5.0(@babel/core@7.29.0)(@ember/test-waiters@4.1.1(@babel/core@7.29.0))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0)) @@ -15769,17 +15440,6 @@ snapshots: - '@glint/template' - supports-color - '@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))': - dependencies: - '@ember/test-waiters': 3.1.0 - '@embroider/macros': 1.19.7(@babel/core@7.29.0) - '@warp-drive/build-config': 0.0.3(@babel/core@7.29.0) - '@warp-drive/core-types': 0.0.3(@babel/core@7.29.0) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - '@ember-data/request@5.5.0(@babel/core@7.29.0)(@ember/test-waiters@4.1.1(@babel/core@7.29.0))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0))': dependencies: '@ember/test-waiters': 4.1.1(@babel/core@7.29.0) @@ -15793,24 +15453,6 @@ snapshots: '@ember-data/rfc395-data@0.0.4': {} - '@ember-data/serializer@5.3.13(@babel/core@7.29.0)(@ember-data/legacy-compat@5.3.13(b2c52ef688c381e5a1dee39fc6194ffa))(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/store@5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@)': - dependencies: - '@ember-data/legacy-compat': 5.3.13(b2c52ef688c381e5a1dee39fc6194ffa) - '@ember-data/request-utils': 5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember-data/store': 5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.19.7(@babel/core@7.29.0) - '@warp-drive/build-config': 0.0.3(@babel/core@7.29.0) - '@warp-drive/core-types': 0.0.3(@babel/core@7.29.0) - ember-cli-path-utils: 1.0.0 - ember-cli-string-utils: 1.1.0 - ember-cli-test-info: 1.0.0 - ember-source: 'link:' - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - '@ember-data/serializer@5.5.0(4f640e9d5544d27fb4b0a972bef18db1)': dependencies: '@ember-data/legacy-compat': 5.5.0(b562c63095138abf35e8881b2313ad7e) @@ -15829,20 +15471,6 @@ snapshots: - '@glint/template' - supports-color - '@ember-data/store@5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@)': - dependencies: - '@ember-data/request': 5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)) - '@ember-data/request-utils': 5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember-data/tracking': 5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@embroider/macros': 1.19.7(@babel/core@7.29.0) - '@warp-drive/build-config': 0.0.3(@babel/core@7.29.0) - '@warp-drive/core-types': 0.0.3(@babel/core@7.29.0) - ember-source: 'link:' - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - '@ember-data/store@5.5.0(@babel/core@7.29.0)(@ember-data/request-utils@5.5.0(@babel/core@7.29.0)(@ember-data/request@5.5.0(@babel/core@7.29.0)(@ember/test-waiters@4.1.1(@babel/core@7.29.0))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0)))(@ember/string@4.0.1)(@warp-drive/core-types@5.5.0(@babel/core@7.29.0)))(@ember-data/request@5.5.0(@babel/core@7.29.0)(@ember/test-waiters@4.1.1(@babel/core@7.29.0))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0)))(@ember-data/tracking@5.5.0(@babel/core@7.29.0)(@warp-drive/core-types@5.5.0(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0))(ember-source@)': dependencies: '@ember-data/request': 5.5.0(@babel/core@7.29.0)(@ember/test-waiters@4.1.1(@babel/core@7.29.0))(@warp-drive/core-types@5.5.0(@babel/core@7.29.0)) @@ -15858,17 +15486,6 @@ snapshots: - '@glint/template' - supports-color - '@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@)': - dependencies: - '@embroider/macros': 1.19.7(@babel/core@7.29.0) - '@warp-drive/build-config': 0.0.3(@babel/core@7.29.0) - '@warp-drive/core-types': 0.0.3(@babel/core@7.29.0) - ember-source: 'link:' - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - '@ember-data/tracking@5.5.0(@babel/core@7.29.0)(@warp-drive/core-types@5.5.0(@babel/core@7.29.0))(ember-source@)': dependencies: '@embroider/macros': 1.19.7(@babel/core@7.29.0) @@ -15893,32 +15510,8 @@ snapshots: transitivePeerDependencies: - supports-color - '@ember/string@3.1.1': - dependencies: - ember-cli-babel: 7.26.11 - transitivePeerDependencies: - - supports-color - '@ember/string@4.0.1': {} - '@ember/test-helpers@3.3.1(@babel/core@7.29.0)(ember-source@)(webpack@5.105.1)': - dependencies: - '@ember/test-waiters': 3.1.0 - '@embroider/macros': 1.19.7(@babel/core@7.29.0) - '@simple-dom/interface': 1.4.0 - broccoli-debug: 0.6.5 - broccoli-funnel: 3.0.8 - dom-element-descriptors: 0.5.1 - ember-auto-import: 2.12.0(webpack@5.105.1) - ember-cli-babel: 8.3.1(@babel/core@7.29.0) - ember-cli-htmlbars: 7.0.0(@babel/core@7.29.0)(ember-source@) - ember-source: 'link:' - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - - webpack - '@ember/test-helpers@5.4.1(@babel/core@7.29.0)': dependencies: '@ember/test-waiters': 4.1.1(@babel/core@7.29.0) @@ -15932,15 +15525,6 @@ snapshots: - '@glint/template' - supports-color - '@ember/test-waiters@3.1.0': - dependencies: - calculate-cache-key-for-tree: 2.0.0 - ember-cli-babel: 7.26.11 - ember-cli-version-checker: 5.1.2 - semver: 7.7.4 - transitivePeerDependencies: - - supports-color - '@ember/test-waiters@4.1.1(@babel/core@7.29.0)': dependencies: '@embroider/addon-shim': 1.10.2 @@ -18412,17 +17996,6 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@warp-drive/build-config@0.0.3(@babel/core@7.29.0)': - dependencies: - '@embroider/addon-shim': 1.10.2 - '@embroider/macros': 1.19.7(@babel/core@7.29.0) - babel-import-util: 2.1.1 - semver: 7.7.4 - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - '@warp-drive/build-config@5.5.0(@babel/core@7.29.0)': dependencies: '@embroider/addon-shim': 1.10.2 @@ -18434,15 +18007,6 @@ snapshots: - '@glint/template' - supports-color - '@warp-drive/core-types@0.0.3(@babel/core@7.29.0)': - dependencies: - '@embroider/macros': 1.19.7(@babel/core@7.29.0) - '@warp-drive/build-config': 0.0.3(@babel/core@7.29.0) - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - '@warp-drive/core-types@5.5.0(@babel/core@7.29.0)': dependencies: '@embroider/macros': 1.19.7(@babel/core@7.29.0) @@ -18669,10 +18233,6 @@ snapshots: ansi-styles@6.2.3: {} - ansi-to-html@0.6.15: - dependencies: - entities: 2.2.0 - ansicolors@0.2.1: {} ansicolors@0.3.2: {} @@ -20662,7 +20222,7 @@ snapshots: - supports-color - webpack - ember-cli-app-version@6.0.1(ember-source@): + ember-cli-app-version@7.0.0(ember-source@): dependencies: ember-cli-babel: 7.26.11 ember-source: 'link:' @@ -20867,12 +20427,6 @@ snapshots: dependencies: ember-cli-string-utils: 1.1.0 - ember-cli-test-loader@3.1.0: - dependencies: - ember-cli-babel: 7.26.11 - transitivePeerDependencies: - - supports-color - ember-cli-typescript-blueprint-polyfill@0.1.0: dependencies: chalk: 4.1.2 @@ -20880,24 +20434,6 @@ snapshots: transitivePeerDependencies: - supports-color - ember-cli-typescript@2.0.2(@babel/core@7.29.0): - dependencies: - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.29.0) - '@babel/plugin-transform-typescript': 7.4.5(@babel/core@7.29.0) - ansi-to-html: 0.6.15 - debug: 4.4.3(supports-color@8.1.1) - ember-cli-babel-plugin-helpers: 1.1.1 - execa: 1.0.0 - fs-extra: 7.0.1 - resolve: 1.22.11 - rsvp: 4.8.5 - semver: 6.3.1 - stagehand: 1.0.1 - walk-sync: 1.1.4 - transitivePeerDependencies: - - '@babel/core' - - supports-color - ember-cli-version-checker@3.1.3: dependencies: resolve-package-path: 1.2.7 @@ -21215,35 +20751,6 @@ snapshots: - walrus - whiskers - ember-data@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@ember/test-helpers@3.3.1(@babel/core@7.29.0)(ember-source@)(webpack@5.105.1))(@ember/test-waiters@3.1.0)(ember-source@)(qunit@2.25.0): - dependencies: - '@ember-data/adapter': 5.3.13(@babel/core@7.29.0)(@ember-data/legacy-compat@5.3.13(b2c52ef688c381e5a1dee39fc6194ffa))(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/store@5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember-data/debug': 5.3.13(@babel/core@7.29.0)(@ember-data/model@5.3.13(94d135367b2392cd3afdde8d51ef777f))(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/store@5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember-data/graph': 5.3.13(@babel/core@7.29.0)(@ember-data/store@5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember-data/json-api': 5.3.13(2b27332414b505036c0c17aa2e231d60) - '@ember-data/legacy-compat': 5.3.13(b2c52ef688c381e5a1dee39fc6194ffa) - '@ember-data/model': 5.3.13(94d135367b2392cd3afdde8d51ef777f) - '@ember-data/request': 5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)) - '@ember-data/request-utils': 5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember-data/serializer': 5.3.13(@babel/core@7.29.0)(@ember-data/legacy-compat@5.3.13(b2c52ef688c381e5a1dee39fc6194ffa))(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/store@5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember-data/store': 5.3.13(@babel/core@7.29.0)(@ember-data/request-utils@5.3.13(@babel/core@7.29.0)(@ember/string@3.1.1)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@ember-data/request@5.3.13(@babel/core@7.29.0)(@ember/test-waiters@3.1.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0)))(@ember-data/tracking@5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@))(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember-data/tracking': 5.3.13(@babel/core@7.29.0)(@warp-drive/core-types@0.0.3(@babel/core@7.29.0))(ember-source@) - '@ember/edition-utils': 1.2.0 - '@embroider/macros': 1.19.7(@babel/core@7.29.0) - '@warp-drive/build-config': 0.0.3(@babel/core@7.29.0) - '@warp-drive/core-types': 0.0.3(@babel/core@7.29.0) - ember-source: 'link:' - optionalDependencies: - '@ember/test-helpers': 3.3.1(@babel/core@7.29.0)(ember-source@)(webpack@5.105.1) - '@ember/test-waiters': 3.1.0 - qunit: 2.25.0 - transitivePeerDependencies: - - '@babel/core' - - '@ember/string' - - '@glint/template' - - ember-inflector - - supports-color - ember-data@5.5.0(@babel/core@7.29.0)(@ember/string@4.0.1)(@ember/test-helpers@5.4.1(@babel/core@7.29.0))(@ember/test-waiters@4.1.1(@babel/core@7.29.0))(ember-source@)(qunit@2.25.0): dependencies: '@ember-data/adapter': 5.5.0(4f640e9d5544d27fb4b0a972bef18db1) @@ -21309,14 +20816,6 @@ snapshots: - eslint - typescript - ember-load-initializers@2.1.2(@babel/core@7.29.0): - dependencies: - ember-cli-babel: 7.26.11 - ember-cli-typescript: 2.0.2(@babel/core@7.29.0) - transitivePeerDependencies: - - '@babel/core' - - supports-color - ember-load-initializers@3.0.1(ember-source@): dependencies: ember-source: 'link:' @@ -21329,14 +20828,6 @@ snapshots: - '@babel/core' - supports-color - ember-page-title@8.2.4(ember-source@): - dependencies: - '@embroider/addon-shim': 1.10.2 - '@simple-dom/document': 1.4.0 - ember-source: 'link:' - transitivePeerDependencies: - - supports-color - ember-page-title@9.0.3: dependencies: '@embroider/addon-shim': 1.10.2 @@ -21344,20 +20835,6 @@ snapshots: transitivePeerDependencies: - supports-color - ember-qunit@8.1.1(@babel/core@7.29.0)(@ember/test-helpers@3.3.1(@babel/core@7.29.0)(ember-source@)(webpack@5.105.1))(ember-source@)(qunit@2.25.0): - dependencies: - '@ember/test-helpers': 3.3.1(@babel/core@7.29.0)(ember-source@)(webpack@5.105.1) - '@embroider/addon-shim': 1.10.2 - '@embroider/macros': 1.19.7(@babel/core@7.29.0) - ember-cli-test-loader: 3.1.0 - ember-source: 'link:' - qunit: 2.25.0 - qunit-theme-ember: 1.0.0 - transitivePeerDependencies: - - '@babel/core' - - '@glint/template' - - supports-color - ember-qunit@9.0.4(@babel/core@7.29.0)(@ember/test-helpers@5.4.1(@babel/core@7.29.0))(qunit@2.25.0): dependencies: '@ember/test-helpers': 5.4.1(@babel/core@7.29.0) @@ -21370,14 +20847,6 @@ snapshots: - '@glint/template' - supports-color - ember-resolver@11.0.1(ember-source@): - dependencies: - ember-cli-babel: 7.26.11 - optionalDependencies: - ember-source: 'link:' - transitivePeerDependencies: - - supports-color - ember-resolver@13.1.1: dependencies: ember-cli-babel: 7.26.11 @@ -21533,8 +21002,6 @@ snapshots: entities@1.1.2: {} - entities@2.2.0: {} - entities@3.0.1: {} entities@4.5.0: {} @@ -26057,12 +25524,6 @@ snapshots: as-table: 1.0.55 get-source: 2.0.12 - stagehand@1.0.1: - dependencies: - debug: 4.4.3(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - static-extend@0.1.2: dependencies: define-property: 0.2.5 diff --git a/rollup.config.mjs b/rollup.config.mjs index 637d7424fe7..95e1b035153 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -1,5 +1,5 @@ import { dirname, parse, resolve, join } from 'node:path'; -import { existsSync, readFileSync, statSync, writeFileSync } from 'node:fs'; +import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from 'node:fs'; import { createRequire } from 'node:module'; import { fileURLToPath } from 'node:url'; import glob from 'glob'; @@ -469,6 +469,16 @@ function packageMeta() { } pkg['ember-addon']['renamed-modules'] = renamedModules; writeFileSync('package.json', JSON.stringify(pkg, null, 2)); + + // Mark all dist/ files as ESM so Node 20.19+ require(esm) works + mkdirSync('dist', { recursive: true }); + writeFileSync('dist/package.json', JSON.stringify({ type: 'module' })); + + // ESM re-export at the legacy path that @embroider/compat and babel-plugin hardcode + writeFileSync( + 'dist/ember-template-compiler.js', + "export * from './packages/ember-template-compiler/index.js';\n" + ); }, }; } diff --git a/smoke-tests/app-template/package.json b/smoke-tests/app-template/package.json index 24c5817dfbe..9ea4dd24465 100644 --- a/smoke-tests/app-template/package.json +++ b/smoke-tests/app-template/package.json @@ -25,27 +25,27 @@ "devDependencies": { "@babel/core": "^7.24.4", "@ember/optional-features": "^2.3.0", - "@ember/string": "^3.0.1", - "@ember/test-helpers": "^3.3.0", - "@ember/test-waiters": "^3.1.0", + "@ember/string": "^4.0.1", + "@ember/test-helpers": "^5.2.2", + "@ember/test-waiters": "^4.1.0", "@embroider/test-setup": "^4.0.0", "@glimmer/component": "workspace:^", "@glimmer/tracking": "^1.1.2", "broccoli-asset-rev": "^3.0.0", "ember-auto-import": "^2.12.0", "ember-cli": "~5.7.0", - "ember-cli-app-version": "^6.0.1", + "ember-cli-app-version": "^7.0.0", "ember-cli-babel": "^8.2.0", "ember-cli-dependency-checker": "^3.3.1", "ember-cli-htmlbars": "^7.0.0", "ember-cli-inject-live-reload": "^2.1.0", "ember-cli-sri": "^2.1.1", "ember-cli-terser": "^4.0.2", - "ember-data": "~5.3.3", - "ember-load-initializers": "^2.1.2", - "ember-page-title": "^8.2.3", - "ember-qunit": "^8.0.2", - "ember-resolver": "^11.0.1", + "ember-data": "~5.5.0", + "ember-load-initializers": "^3.0.1", + "ember-page-title": "^9.0.2", + "ember-qunit": "^9.0.3", + "ember-resolver": "^13.1.1", "ember-source": "workspace:*", "ember-template-imports": "^4.1.2", "ember-template-lint": "^6.0.0", diff --git a/smoke-tests/app-template/tests/test-helper.js b/smoke-tests/app-template/tests/test-helper.js index 2edd1d30e3c..942b925912d 100644 --- a/smoke-tests/app-template/tests/test-helper.js +++ b/smoke-tests/app-template/tests/test-helper.js @@ -4,9 +4,11 @@ import * as QUnit from 'qunit'; import { setApplication } from '@ember/test-helpers'; import { setup } from 'qunit-dom'; import { start } from 'ember-qunit'; +import { loadTests } from 'ember-qunit/test-loader'; setApplication(Application.create(config.APP)); setup(QUnit.assert); +loadTests(); start(); From 87e8f36cca6311956ab48dfce1c2fb28193ff668 Mon Sep 17 00:00:00 2001 From: Peter Wagenet Date: Thu, 19 Feb 2026 12:25:06 -0800 Subject: [PATCH 4/7] Remove explicit compilerPath from smoke-test babel configs babel-plugin-ember-template-compilation auto-discovers the template compiler path, so the explicit compilerPath option is unnecessary. Co-Authored-By: Claude Sonnet 4.6 --- smoke-tests/benchmark-app/babel.config.mjs | 1 - smoke-tests/v2-app-template/babel.config.cjs | 1 - 2 files changed, 2 deletions(-) diff --git a/smoke-tests/benchmark-app/babel.config.mjs b/smoke-tests/benchmark-app/babel.config.mjs index 1250fd27e75..4a0aaf2ecd3 100644 --- a/smoke-tests/benchmark-app/babel.config.mjs +++ b/smoke-tests/benchmark-app/babel.config.mjs @@ -9,7 +9,6 @@ export default { [ 'babel-plugin-ember-template-compilation', { - compilerPath: 'ember-source/ember-template-compiler/index.js', transforms: [...macros.templateMacros], }, ], diff --git a/smoke-tests/v2-app-template/babel.config.cjs b/smoke-tests/v2-app-template/babel.config.cjs index 45df237c529..4523b8b415d 100644 --- a/smoke-tests/v2-app-template/babel.config.cjs +++ b/smoke-tests/v2-app-template/babel.config.cjs @@ -8,7 +8,6 @@ module.exports = { [ 'babel-plugin-ember-template-compilation', { - compilerPath: 'ember-source/ember-template-compiler/index.js', enableLegacyModules: [ 'ember-cli-htmlbars', 'ember-cli-htmlbars-inline-precompile', From 00452b745a1a1da9d7ca1318ff3d72238399e4b2 Mon Sep 17 00:00:00 2001 From: Peter Wagenet Date: Thu, 19 Feb 2026 13:18:47 -0800 Subject: [PATCH 5/7] Restore node tests for ESM using loader hook for @embroider/macros MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The AMD removal commit deleted node tests that depended on loading dist/ember.debug.js globally. This restores them using ESM dynamic imports of the individual dist packages. Key additions: - tests/node/helpers/ember-esm.js: async loader caching all needed dist packages, including a compile() helper using precompile + createTemplateFactory - tests/node/helpers/build-owner.js: rewritten to accept modules object instead of the Ember barrel - tests/node/helpers/setup-component.js: async beforeEach using loadEmberModules() - tests/node/helpers/setup-app.js: async beforeEach using loadEmberModules() - tests/node/instrumentation-test.js: direct ESM import of instrumentation module - Restored unchanged: assert-html-matches.js, component-rendering-test.js, app-boot-test.js, visit-test.js The non-template-compiler dist packages leave @embroider/macros as a live external import (Embroider replaces it at app build time). Running them directly in Node.js causes isDevelopingApp() to throw. Fixed via a Node.js ESM loader hook (macros-loader.mjs) registered by NODE_OPTIONS in test:node, which redirects @embroider/macros to a stub returning true for debug flags. Test count: 50 → 69, all passing. Co-Authored-By: Claude Sonnet 4.6 --- package.json | 2 +- tests/node/app-boot-test.js | 137 +++++++ tests/node/component-rendering-test.js | 45 +++ tests/node/helpers/assert-html-matches.js | 27 ++ tests/node/helpers/build-owner.js | 28 ++ tests/node/helpers/ember-esm.js | 80 +++++ tests/node/helpers/embroider-macros-stub.mjs | 32 ++ tests/node/helpers/macros-loader.mjs | 14 + tests/node/helpers/register-loader.mjs | 4 + tests/node/helpers/setup-app.js | 154 ++++++++ tests/node/helpers/setup-component.js | 108 ++++++ tests/node/instrumentation-test.js | 27 ++ tests/node/visit-test.js | 357 +++++++++++++++++++ 13 files changed, 1014 insertions(+), 1 deletion(-) create mode 100644 tests/node/app-boot-test.js create mode 100644 tests/node/component-rendering-test.js create mode 100644 tests/node/helpers/assert-html-matches.js create mode 100644 tests/node/helpers/build-owner.js create mode 100644 tests/node/helpers/ember-esm.js create mode 100644 tests/node/helpers/embroider-macros-stub.mjs create mode 100644 tests/node/helpers/macros-loader.mjs create mode 100644 tests/node/helpers/register-loader.mjs create mode 100644 tests/node/helpers/setup-app.js create mode 100644 tests/node/helpers/setup-component.js create mode 100644 tests/node/instrumentation-test.js create mode 100644 tests/node/visit-test.js diff --git a/package.json b/package.json index 9749d5f263d..3b8407ac9eb 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "lint:format:fix": "prettier --write .", "test": "testem ci -f testem.js --host 127.0.0.1 --port 13141", "test:blueprints": "mocha node-tests/blueprints/**/*-test.js", - "test:node": "qunit tests/node/**/*-test.js", + "test:node": "NODE_OPTIONS=\"--import ./tests/node/helpers/register-loader.mjs ${NODE_OPTIONS:-}\" qunit tests/node/**/*-test.js", "test:browserstack": "node bin/run-browserstack-tests.js", "test:wip": "vite build --mode development --minify false && testem ci", "type-check:internals": "tsc --noEmit", diff --git a/tests/node/app-boot-test.js b/tests/node/app-boot-test.js new file mode 100644 index 00000000000..6f16236bc3c --- /dev/null +++ b/tests/node/app-boot-test.js @@ -0,0 +1,137 @@ +const setupAppTest = require('./helpers/setup-app'); + +require('./helpers/assert-html-matches').register(); + +QUnit.module('App Boot', function (hooks) { + setupAppTest(hooks); + + QUnit.test('App boots and routes to a URL', function (assert) { + this.visit('/'); + assert.ok(this.app); + }); + + QUnit.test('nested {{component}}', function (assert) { + this.template('index', '{{root-component}}'); + + this.component( + 'root-component', + { + location: 'World', + hasExistence: true, + }, + "\ +

Hello {{#if this.hasExistence}}{{this.location}}{{/if}}

\ +
{{component 'foo-bar'}}
\ + " + ); + + this.component( + 'foo-bar', + undefined, + '\ +

The files are *inside* the computer?!

\ + ' + ); + + return this.renderToHTML('/').then(function (html) { + assert.htmlMatches( + html, + '

Hello World

The files are *inside* the computer?!

' + ); + }); + }); + + QUnit.test('', function (assert) { + this.template('application', "

Go to photos

"); + this.routes(function () { + this.route('photos'); + }); + + return this.renderToHTML('/').then(function (html) { + assert.htmlMatches( + html, + '

Go to photos

' + ); + }); + }); + + QUnit.test('{{link-to}}', function (assert) { + this.template('application', "

{{#link-to route='photos'}}Go to photos{{/link-to}}

"); + this.routes(function () { + this.route('photos'); + }); + + return this.renderToHTML('/').then(function (html) { + assert.htmlMatches( + html, + '

Go to photos

' + ); + }); + }); + + QUnit.test('non-escaped content', function (assert) { + this.routes(function () { + this.route('photos'); + }); + + this.template('application', '

{{{this.title}}}

'); + this.controller('application', { + title: 'Hello world', + }); + + return this.renderToHTML('/').then(function (html) { + assert.htmlMatches(html, '

Hello world

'); + }); + }); + + QUnit.test('outlets', function (assert) { + this.routes(function () { + this.route('photos'); + }); + + this.template('application', '

{{outlet}}

'); + this.template('index', 'index'); + this.template('photos', 'photos'); + + let promises = []; + promises.push( + this.renderToHTML('/').then(function (html) { + assert.htmlMatches(html, '

index

'); + }) + ); + + promises.push( + this.renderToHTML('/photos').then(function (html) { + assert.htmlMatches(html, '

photos

'); + }) + ); + + return this.all(promises); + }); + + QUnit.test('lifecycle hooks disabled', function (assert) { + assert.expect(1); + + this.template('application', "{{my-component foo='bar'}}{{outlet}}"); + + this.component('my-component', { + didReceiveAttrs() { + assert.ok(true, 'should trigger didReceiveAttrs hook'); + }, + willRender() { + assert.ok(false, 'should not trigger willRender hook'); + }, + didRender() { + assert.ok(false, 'should not trigger didRender hook'); + }, + willInsertElement() { + assert.ok(false, 'should not trigger willInsertElement hook'); + }, + didInsertElement() { + assert.ok(false, 'should not trigger didInsertElement hook'); + }, + }); + + return this.renderToHTML('/'); + }); +}); diff --git a/tests/node/component-rendering-test.js b/tests/node/component-rendering-test.js new file mode 100644 index 00000000000..826c9322ca4 --- /dev/null +++ b/tests/node/component-rendering-test.js @@ -0,0 +1,45 @@ +const setupComponentTest = require('./helpers/setup-component'); + +QUnit.module('Components can be rendered without a DOM dependency', function (hooks) { + setupComponentTest(hooks); + + QUnit.test('Simple component', function (assert) { + let html = this.render('

Hello

'); + + assert.ok(html.match(/

Hello<\/h1>/)); + }); + + QUnit.test('Component with dynamic value', function (assert) { + this.set('location', 'World'); + + let html = this.render('

Hello {{this.location}}

'); + + assert.ok(html.match(/

Hello World<\/h1>/)); + }); + + QUnit.test( + 'Ensure undefined attributes requiring protocol sanitization do not error', + function (assert) { + this.owner.register( + 'component:fake-link', + class extends this.Ember.Component { + tagName = 'link'; + attributeBindings = ['href', 'rel']; + rel = 'canonical'; + } + ); + + let html = this.render('{{fake-link}}'); + + assert.ok(html.match(/rel="canonical"/)); + } + ); + + QUnit.test('attributes requiring protocol sanitization do not error', function (assert) { + this.set('someHref', 'https://foo.com/'); + + let html = this.render('Some Link'); + + assert.ok(html.match(/Some Link<\/a>/)); + }); +}); diff --git a/tests/node/helpers/assert-html-matches.js b/tests/node/helpers/assert-html-matches.js new file mode 100644 index 00000000000..49cb64c23bb --- /dev/null +++ b/tests/node/helpers/assert-html-matches.js @@ -0,0 +1,27 @@ +const { HtmlDiffer } = require('html-differ'); + +const htmlDiffer = new HtmlDiffer({ + ignoreAttributes: ['id'], + ignoreWhitespaces: true, +}); + +module.exports = { + /* + * This assertion helper tests whether two fragments of Html 'appear' + * to match. In terms of fragments rendered by Ember, we want to explicitly + * ignore whitespace and certain attributes values, such as IDs, which Ember + * auto-generates. Attribute ordering is also ignored. + */ + register() { + QUnit.assert.htmlMatches = function (actual, expected, message) { + let isEqual = htmlDiffer.isEqual(actual, expected); + + this.pushResult({ + result: isEqual, + actual, + expected, + message, + }); + }; + }, +}; diff --git a/tests/node/helpers/build-owner.js b/tests/node/helpers/build-owner.js new file mode 100644 index 00000000000..f2a4f1f24ab --- /dev/null +++ b/tests/node/helpers/build-owner.js @@ -0,0 +1,28 @@ +module.exports = function buildOwner(m, resolver) { + let Owner = m.EmberObject.extend(m.RegistryProxyMixin, m.ContainerProxyMixin); + + let namespace = m.EmberObject.create({ + Resolver: { + create: function () { + return resolver; + }, + }, + }); + + let fallbackRegistry = m.Application.buildRegistry(namespace); + let registry = new m.Registry({ + fallback: fallbackRegistry, + }); + + m.ApplicationInstance.setupRegistry(registry); + + let owner = Owner.create({ + __registry__: registry, + __container__: null, + }); + + let container = registry.container({ owner: owner }); + owner.__container__ = container; + + return owner; +}; diff --git a/tests/node/helpers/ember-esm.js b/tests/node/helpers/ember-esm.js new file mode 100644 index 00000000000..da673059435 --- /dev/null +++ b/tests/node/helpers/ember-esm.js @@ -0,0 +1,80 @@ +'use strict'; +const path = require('path'); +const distRoot = path.join(__dirname, '../../../dist/packages'); +function p(...parts) { + return path.join(distRoot, ...parts); +} + +let cachedModules = null; + +async function loadEmberModules() { + if (cachedModules) return cachedModules; + + const [ + appMod, + appInstanceMod, + routerMod, + routeMod, + componentMod, + templateOnlyMod, + controllerMod, + objectMod, + serviceMod, + runloopMod, + rsvpMod, + templateFactoryMod, + templateCompilerMod, + instrumentationMod, + runtimeMod, + containerMod, + ] = await Promise.all([ + import(p('@ember/application/index.js')), + import(p('@ember/application/instance.js')), + import(p('@ember/routing/router.js')), + import(p('@ember/routing/route.js')), + import(p('@ember/component/index.js')), + import(p('@ember/component/template-only.js')), + import(p('@ember/controller/index.js')), + import(p('@ember/object/index.js')), + import(p('@ember/service/index.js')), + import(p('@ember/runloop/index.js')), + import(p('rsvp/index.js')), + import(p('@ember/template-factory/index.js')), + import(p('ember-template-compiler/index.js')), + import(p('@ember/instrumentation/index.js')), + import(p('@ember/-internals/runtime/index.js')), + import(p('@ember/-internals/container/index.js')), + ]); + + function compile(templateString, options) { + const spec = templateCompilerMod.precompile(templateString, options); + const template = new Function('return ' + spec)(); + return templateFactoryMod.createTemplateFactory(template); + } + + cachedModules = { + Application: appMod.default, + ApplicationInstance: appInstanceMod.default, + Router: routerMod.default, + Route: routeMod.default, + Component: componentMod.default, + setComponentTemplate: componentMod.setComponentTemplate, + templateOnly: templateOnlyMod.default, + Controller: controllerMod.default, + EmberObject: objectMod.default, + service: serviceMod.service, + run: runloopMod.run, + all: rsvpMod.all, + createTemplateFactory: templateFactoryMod.createTemplateFactory, + precompile: templateCompilerMod.precompile, + instrument: instrumentationMod.instrument, + resetInstrumentation: instrumentationMod.reset, + RegistryProxyMixin: runtimeMod.RegistryProxyMixin, + ContainerProxyMixin: runtimeMod.ContainerProxyMixin, + Registry: containerMod.Registry, + compile, + }; + return cachedModules; +} + +module.exports = { loadEmberModules }; diff --git a/tests/node/helpers/embroider-macros-stub.mjs b/tests/node/helpers/embroider-macros-stub.mjs new file mode 100644 index 00000000000..8640105b7ff --- /dev/null +++ b/tests/node/helpers/embroider-macros-stub.mjs @@ -0,0 +1,32 @@ +// Stub for @embroider/macros when running dist packages directly in Node.js. +// In a real Ember app build (via Embroider/webpack), these functions are +// replaced at compile time by babel-plugin-debug-macros. We return true here +// to get debug-mode behavior in the test environment. +export function isDevelopingApp() { + return true; +} +export function isTesting() { + return true; +} +export function macroCondition(predicate) { + return predicate; +} +export function dependencySatisfies() { + return false; +} +export function getConfig() { + return {}; +} +export function getOwnConfig() { + return {}; +} +export function getGlobalConfig() { + return {}; +} +export function importSync(specifier) { + // eslint-disable-next-line no-undef + return require(specifier); +} +export function moduleExists() { + return false; +} diff --git a/tests/node/helpers/macros-loader.mjs b/tests/node/helpers/macros-loader.mjs new file mode 100644 index 00000000000..e98918e7718 --- /dev/null +++ b/tests/node/helpers/macros-loader.mjs @@ -0,0 +1,14 @@ +// ESM loader hook: redirects @embroider/macros imports to the test stub. +import { pathToFileURL } from 'node:url'; +import { dirname } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const stubUrl = pathToFileURL(`${__dirname}/embroider-macros-stub.mjs`).href; + +export async function resolve(specifier, context, nextResolve) { + if (specifier === '@embroider/macros') { + return { shortCircuit: true, url: stubUrl }; + } + return nextResolve(specifier, context); +} diff --git a/tests/node/helpers/register-loader.mjs b/tests/node/helpers/register-loader.mjs new file mode 100644 index 00000000000..a6c3b3d927f --- /dev/null +++ b/tests/node/helpers/register-loader.mjs @@ -0,0 +1,4 @@ +// Preload file (--import) that registers a custom ESM loader to stub +// @embroider/macros for direct Node.js import of dist packages in tests. +import { register } from 'node:module'; +register('./macros-loader.mjs', import.meta.url); diff --git a/tests/node/helpers/setup-app.js b/tests/node/helpers/setup-app.js new file mode 100644 index 00000000000..42a4f24a877 --- /dev/null +++ b/tests/node/helpers/setup-app.js @@ -0,0 +1,154 @@ +/* eslint-disable no-console */ + +'use strict'; + +const SimpleDOM = require('simple-dom'); +const { loadEmberModules } = require('./ember-esm'); + +module.exports = function (hooks) { + hooks.beforeEach(async function () { + let m = await loadEmberModules(); + this._m = m; + + this.compile = m.compile; + this.setComponentTemplate = m.setComponentTemplate; + this.templateOnlyComponent = m.templateOnly; + this.run = m.run; + this.all = m.all; + + this.visit = visit; + this.createApplication = createApplication; + this.register = register; + this.template = registerTemplate; + this.component = registerComponent; + this.controller = registerController; + this.route = registerRoute; + this.service = registerService; + this.routes = registerRoutes; + this.registry = {}; + this.renderToHTML = renderToHTML; + }); + + hooks.afterEach(function () { + if (this.app) { + this.run(this.app, 'destroy'); + this.app = null; + } + this._m = null; + }); +}; + +function createApplication() { + if (this.app) return this.app; + + let m = this._m; + + let app = class extends m.Application {}.create({ + autoboot: false, + Resolver: { + create: (specifier) => { + return this.registry[specifier]; + }, + }, + }); + + let Router = class extends m.Router { + location = 'none'; + }; + + if (this.routesCallback) { + Router.map(this.routesCallback); + } + + this.register('router:main', Router); + + registerApplicationClasses(app, this.registry); + + // Run application initializers + this.run(app, 'boot'); + + this.app = app; + + return app; +} + +function register(containerKey, klass) { + this.registry[containerKey] = klass; +} + +function visit(url) { + let app = this.createApplication(); + let dom = new SimpleDOM.Document(); + + return this.run(app, 'visit', url, { + isBrowser: false, + document: dom, + rootElement: dom.body, + }).catch(function (error) { + console.error(error.stack); + }); +} + +function renderToHTML(url) { + let app = this.createApplication(); + let dom = new SimpleDOM.Document(); + let root = dom.body; + + return this.run(app, 'visit', url, { + isBrowser: false, + document: dom, + rootElement: root, + }).then(function () { + let serializer = new SimpleDOM.HTMLSerializer(SimpleDOM.voidMap); + return serializer.serialize(root); + }); +} + +function registerApplicationClasses(app, registry) { + app.initializer({ + name: 'register-application-classes', + initialize: function (app) { + for (let key in registry) { + app.register(key, registry[key]); + } + }, + }); +} + +function registerTemplate(name, template) { + this.register('template:' + name, this.compile(template)); +} + +function registerComponent(name, componentProps, templateContents) { + let m = this._m; + let component = m.setComponentTemplate( + m.compile(templateContents), + componentProps ? m.Component.extend(componentProps) : m.templateOnly() + ); + this.register('component:' + name, component); +} + +function registerController(name, controllerProps) { + let m = this._m; + let controller = m.Controller.extend(controllerProps); + this.register('controller:' + name, controller); +} + +function registerRoute(name, routeProps) { + let m = this._m; + let route = m.Route.extend({ + router: m.service('router'), + ...routeProps, + }); + this.register('route:' + name, route); +} + +function registerService(name, serviceProps) { + let m = this._m; + let service = m.EmberObject.extend(serviceProps); + this.register('service:' + name, service); +} + +function registerRoutes(cb) { + this.routesCallback = cb; +} diff --git a/tests/node/helpers/setup-component.js b/tests/node/helpers/setup-component.js new file mode 100644 index 00000000000..1c92cb7e96d --- /dev/null +++ b/tests/node/helpers/setup-component.js @@ -0,0 +1,108 @@ +'use strict'; + +const SimpleDOM = require('simple-dom'); +const buildOwner = require('./build-owner'); +const { loadEmberModules } = require('./ember-esm'); + +module.exports = function (hooks) { + hooks.beforeEach(async function () { + let m = await loadEmberModules(); + this._m = m; + + setupComponentTest.call(this); + }); + + hooks.afterEach(function () { + let module = this; + + if (this.component) { + this._m.run(function () { + module.component.destroy(); + }); + + this.component = null; + } + + this._m.run(this.owner, 'destroy'); + this.owner = null; + this._m = null; + }); +}; + +function setupComponentTest() { + let module = this; + let m = this._m; + + module.element = new SimpleDOM.Document(); + module.owner = buildOwner(m, { resolve: function () {} }); + module.owner.register('service:-document', new SimpleDOM.Document(), { + instantiate: false, + }); + + this._hasRendered = false; + let OutletView = module.owner.factoryFor('view:-outlet'); + let outletTemplateFactory = module.owner.lookup('template:-outlet'); + let environment = module.owner.lookup('-environment:main'); + module.component = OutletView.create({ environment, template: outletTemplateFactory }); + this._outletState = { + render: { + owner: module.owner || undefined, + name: 'application', + controller: module, + model: undefined, + template: outletTemplateFactory(module.owner), + }, + + outlets: {}, + }; + + m.run(function () { + module.component.setOutletState(module._outletState); + }); + + module.render = render; + module.serializeElement = serializeElement; + module.set = function (property, value) { + module._m.run(function () { + module[property] = value; + }); + }; + + // Expose Component for tests that reference this.Ember.Component + module.Ember = { Component: m.Component }; +} + +function render(_template) { + let module = this; + let templateFactory = this._m.compile(_template); + + let stateToRender = { + owner: this.owner, + name: 'index', + controller: this, + model: undefined, + template: templateFactory(this.owner), + }; + + stateToRender.name = 'index'; + this._outletState.outlets.main = { render: stateToRender, outlets: {} }; + + this._m.run(function () { + module.component.setOutletState(module._outletState); + }); + + if (!this._hasRendered) { + this._m.run(function () { + module.component.appendTo(module.element); + }); + this._hasRendered = true; + } + + return this.serializeElement(); +} + +function serializeElement() { + let serializer = new SimpleDOM.HTMLSerializer(SimpleDOM.voidMap); + + return serializer.serialize(this.element); +} diff --git a/tests/node/instrumentation-test.js b/tests/node/instrumentation-test.js new file mode 100644 index 00000000000..312d84381db --- /dev/null +++ b/tests/node/instrumentation-test.js @@ -0,0 +1,27 @@ +'use strict'; + +const path = require('path'); +const distPath = path.join(__dirname, '../../dist/packages/@ember/instrumentation/index.js'); + +let mod; + +QUnit.module('instrumentation', function (hooks) { + hooks.beforeEach(async function () { + if (!mod) mod = await import(distPath); + mod.reset(); + }); + + QUnit.test('it works in FastBoot environment', function (assert) { + let _originalWindow = global.window; + + global.window = {}; // mock window without `performance` property + + let result = mod.instrument('render', {}, function () { + return 'hello'; + }); + + assert.equal(result, 'hello', 'called block'); + + global.window = _originalWindow; + }); +}); diff --git a/tests/node/visit-test.js b/tests/node/visit-test.js new file mode 100644 index 00000000000..4b7dca9008a --- /dev/null +++ b/tests/node/visit-test.js @@ -0,0 +1,357 @@ +const SimpleDOM = require('simple-dom'); +const setupAppTest = require('./helpers/setup-app'); + +function assertHTMLMatches(assert, actualHTML, expectedHTML) { + assert.ok(actualHTML.match(expectedHTML), actualHTML + ' matches ' + expectedHTML); +} + +function handleError(assert) { + return function (error) { + assert.ok(false, error.stack); + }; +} + +// This is based on what fastboot-server does +let HTMLSerializer = new SimpleDOM.HTMLSerializer(SimpleDOM.voidMap); + +function fastbootVisit(App, url) { + let doc = new SimpleDOM.Document(); + let rootElement = doc.body; + let options = { isBrowser: false, document: doc, rootElement: rootElement }; + + return App.visit(url, options).then(function (instance) { + try { + return { + url: instance.getURL(), + title: doc.title, + body: HTMLSerializer.serialize(rootElement), + }; + } finally { + instance.destroy(); + } + }); +} + +function assertFastbootResult(assert, expected) { + return function (actual) { + assert.equal(actual.url, expected.url); + assertHTMLMatches(assert, actual.body, expected.body); + }; +} + +QUnit.module('Ember.Application - visit() Integration Tests', function (hooks) { + setupAppTest(hooks); + + QUnit.test('FastBoot: basic', function (assert) { + this.routes(function () { + this.route('a'); + this.route('b'); + }); + + this.template('application', '

Hello world

\n{{outlet}}'); + this.template('a', '

Welcome to {{x-foo page="A"}}

'); + this.template('b', '

{{x-foo page="B"}}

'); + + let initCalled = false; + let didInsertElementCalled = false; + + this.component( + 'x-foo', + { + tagName: 'span', + init: function () { + this._super(); + initCalled = true; + }, + didInsertElement: function () { + didInsertElementCalled = true; + }, + }, + 'Page {{this.page}}' + ); + + let App = this.createApplication(); + + return Promise.all([ + fastbootVisit(App, '/a').then( + assertFastbootResult(assert, { + url: '/a', + body: '

Hello world

\n

Welcome to Page A

', + }), + handleError(assert) + ), + fastbootVisit(App, '/b').then( + assertFastbootResult(assert, { + url: '/b', + body: '

Hello world

\n

Page B

', + }), + handleError + ), + ]).then(function () { + assert.ok(initCalled, 'Component#init should be called'); + assert.notOk(didInsertElementCalled, 'Component#didInsertElement should not be called'); + }); + }); + + QUnit.test('FastBoot: redirect', function (assert) { + this.routes(function () { + this.route('a'); + this.route('b'); + this.route('c'); + }); + + this.template('a', '

Hello from A

'); + this.template('b', '

Hello from B

'); + this.template('c', '

Hello from C

'); + + this.route('a', { + beforeModel: function () { + this.router.replaceWith('b'); + }, + }); + + this.route('b', { + afterModel: function () { + this.router.transitionTo('c'); + }, + }); + + let App = this.createApplication(); + + return Promise.all([ + fastbootVisit(App, '/a').then( + assertFastbootResult(assert, { + url: '/c', + body: '

Hello from C

', + }), + handleError(assert) + ), + fastbootVisit(App, '/b').then( + assertFastbootResult(assert, { + url: '/c', + body: '

Hello from C

', + }), + handleError(assert) + ), + ]); + }); + + QUnit.test('FastBoot: attributes are sanitized', function (assert) { + this.template('application', '
'); + + this.controller('application', { + test: 'javascript:alert("hello")', + }); + + let App = this.createApplication(); + + return Promise.all([ + fastbootVisit(App, '/').then( + assertFastbootResult(assert, { + url: '/', + body: '', + }), + handleError(assert) + ), + ]); + }); + + QUnit.test('FastBoot: route error', function (assert) { + this.routes(function () { + this.route('a'); + this.route('b'); + }); + + this.template('a', '

Hello from A

'); + this.template('b', '

Hello from B

'); + + this.route('a', { + beforeModel: function () { + throw new Error('Error from A'); + }, + }); + + this.route('b', { + afterModel: function () { + throw new Error('Error from B'); + }, + }); + + let App = this.createApplication(); + + return Promise.all([ + fastbootVisit(App, '/a').then( + function (instance) { + assert.ok(false, 'It should not render'); + instance.destroy(); + }, + function (error) { + assert.equal(error.message, 'Error from A'); + } + ), + fastbootVisit(App, '/b').then( + function (instance) { + assert.ok(false, 'It should not render'); + instance.destroy(); + }, + function (error) { + assert.equal(error.message, 'Error from B'); + } + ), + ]); + }); + + QUnit.test('FastBoot: route error template', function (assert) { + this.routes(function () { + this.route('a'); + }); + + this.template('error', '

Error template rendered!

'); + this.template('a', '

Hello from A

'); + + this.route('a', { + model: function () { + throw new Error('Error from A'); + }, + }); + + let App = this.createApplication(); + + return Promise.all([ + fastbootVisit(App, '/a').then( + assertFastbootResult(assert, { + url: '/a', + body: '

Error template rendered!

', + }), + handleError(assert) + ), + ]); + }); + + QUnit.test('Resource-discovery setup', function (assert) { + class Network { + constructor() { + this.requests = []; + } + + fetch(url) { + this.requests.push(url); + return Promise.resolve(); + } + } + + this.routes(function () { + this.route('a'); + this.route('b'); + this.route('c'); + this.route('d'); + this.route('e'); + }); + + let network; + this.route('a', { + model: function () { + return network.fetch('/a'); + }, + afterModel: function () { + this.router.replaceWith('b'); + }, + }); + + this.route('b', { + model: function () { + return network.fetch('/b'); + }, + afterModel: function () { + this.router.replaceWith('c'); + }, + }); + + this.route('c', { + model: function () { + return network.fetch('/c'); + }, + }); + + this.route('d', { + model: function () { + return network.fetch('/d'); + }, + afterModel: function () { + this.router.replaceWith('e'); + }, + }); + + this.route('e', { + model: function () { + return network.fetch('/e'); + }, + }); + + this.template('a', '{{x-foo}}'); + this.template('b', '{{x-foo}}'); + this.template('c', '{{x-foo}}'); + this.template('d', '{{x-foo}}'); + this.template('e', '{{x-foo}}'); + + let xFooInstances = 0; + + this.component('x-foo', { + init: function () { + this._super(); + xFooInstances++; + }, + }); + + let App = this.createApplication(); + + function assertResources(url, resources) { + network = new Network(); + + return App.visit(url, { isBrowser: false, shouldRender: false }).then(function (instance) { + try { + let viewRegistry = instance.lookup('-view-registry:main'); + assert.strictEqual(Object.keys(viewRegistry).length, 0, 'did not create any views'); + + assert.deepEqual(network.requests, resources); + } finally { + instance.destroy(); + } + }, handleError(assert)); + } + + return assertResources('/a', ['/a', '/b', '/c']) + .then(() => { + return assertResources('/b', ['/b', '/c']); + }) + .then(() => { + return assertResources('/c', ['/c']); + }) + .then(() => { + return assertResources('/d', ['/d', '/e']); + }) + .then(() => { + return assertResources('/e', ['/e']); + }) + .then(() => { + assert.strictEqual(xFooInstances, 0, 'it should not create any x-foo components'); + }); + }); + + QUnit.test('FastBoot: tagless components can render', function (assert) { + this.template('application', "
{{my-component}}
"); + this.component('my-component', { tagName: '' }, '

hello world

'); + + let App = this.createApplication(); + + return Promise.all([ + fastbootVisit(App, '/').then( + assertFastbootResult(assert, { + url: '/', + body: /

hello world<\/h1><\/div>/, + }), + handleError(assert) + ), + ]); + }); +}); From 8cd464d20213ca4a6d8d0db3ef0dfab16700e410 Mon Sep 17 00:00:00 2001 From: Peter Wagenet Date: Thu, 19 Feb 2026 13:39:53 -0800 Subject: [PATCH 6/7] =?UTF-8?q?Rename=20emberAMDBundles=20=E2=86=92=20embe?= =?UTF-8?q?rVendorShims;=20fix=20async=20lint=20error?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- lib/index.js | 4 ++-- tests/node/helpers/macros-loader.mjs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/index.js b/lib/index.js index 72f195918d5..1bf629a0e25 100644 --- a/lib/index.js +++ b/lib/index.js @@ -259,7 +259,7 @@ module.exports = { treeForVendor() { // ember-cli always tries to append these to vendor.js, so even when we // don't want to put anything in them they need to exist as empty files. - let emberAMDBundles = new MergeTrees([ + let emberVendorShims = new MergeTrees([ createFile('ember/ember.js', ''), createFile('ember/ember.js.map', ''), createFile('ember/ember-testing.js', ''), @@ -270,7 +270,7 @@ module.exports = { // this is primarily so we get preset-env with the app's targets. All our // special stuff was already accounted for in the building of the bundles. - return emberCliBabel.transpileTree(emberAMDBundles, { + return emberCliBabel.transpileTree(emberVendorShims, { 'ember-cli-babel': { compileModules: false, disableDebugTooling: true, diff --git a/tests/node/helpers/macros-loader.mjs b/tests/node/helpers/macros-loader.mjs index e98918e7718..120d60415e1 100644 --- a/tests/node/helpers/macros-loader.mjs +++ b/tests/node/helpers/macros-loader.mjs @@ -6,7 +6,7 @@ import { fileURLToPath } from 'node:url'; const __dirname = dirname(fileURLToPath(import.meta.url)); const stubUrl = pathToFileURL(`${__dirname}/embroider-macros-stub.mjs`).href; -export async function resolve(specifier, context, nextResolve) { +export function resolve(specifier, context, nextResolve) { if (specifier === '@embroider/macros') { return { shortCircuit: true, url: stubUrl }; } From c7a6bfb8bb4198e878ffa72a3eefb53c7bfaaf63 Mon Sep 17 00:00:00 2001 From: Peter Wagenet Date: Thu, 19 Feb 2026 13:42:24 -0800 Subject: [PATCH 7/7] Restore usage comment in setup-app.js Co-Authored-By: Claude Sonnet 4.6 --- tests/node/helpers/setup-app.js | 50 +++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/tests/node/helpers/setup-app.js b/tests/node/helpers/setup-app.js index 42a4f24a877..29620bcfafe 100644 --- a/tests/node/helpers/setup-app.js +++ b/tests/node/helpers/setup-app.js @@ -5,6 +5,56 @@ const SimpleDOM = require('simple-dom'); const { loadEmberModules } = require('./ember-esm'); +/* + * This helper sets up a QUnit test module with all of the environment and + * helper methods necessary to test an Ember.js application running in the + * server-side environment. + * + * On each test, it loads the compiled Ember.js ESM packages from `dist`, + * just like how FastBoot works. It uses the `visit()` API to simulate a + * FastBoot environment. + * + * To test an app, register the objects that make up the app. For example, + * to register a component: + * + * this.component('component-name', { + * componentProperty: true + * }); + * + * Or a template: + * + * this.template('application', '{{outlet}}'); + * this.template('components/foo-bar', '

Hello world

'); + * + * Or a controller: + * + * this.controller('controller-name', { + * actions: { + * sendEmail: function() { } + * } + * }); + * + * You can also provide the routes for the application by calling `this.routes()`, + * which is equivalent to `App.Router.map()`: + * + * this.routes(function() { + * this.route('photos'); + * this.route('admin', function() { + * this.route('logout'); + * }); + * }); + * + * Once all of the constituent parts of the app are registered, you can kick off + * app boot by calling either `this.visit(url)` or `this.renderToHTML(url)`. + * + * `visit` returns a promise that resolves to the application instance, and + * `renderToHTML` returns a promise that resolves to the rendered HTML of the + * application. + * + * return this.renderToHTML('/photos').then(function(html) { + * assert.ok(html.matches('

Hello world

')); + * }); + */ module.exports = function (hooks) { hooks.beforeEach(async function () { let m = await loadEmberModules();