From 76067d02db93ed714bed0ea98118f8f6ae9f4bca Mon Sep 17 00:00:00 2001 From: Edward Faulkner Date: Wed, 4 Mar 2026 13:08:56 -0500 Subject: [PATCH 1/6] extracing ember 6.10 upgrade from vite branch --- .../unpublished-development-types/index.d.ts | 2 +- .../types/@cardstack/boxel-motion/index.d.ts | 1 - .../types/boxel-motion-demo-app/index.d.ts | 1 - .../src/types/@cardstack/boxel-ui/index.d.ts | 1 - .../types/boxel-ui-test-app/index.d.ts | 1 - packages/host/app/deprecation-workflow.js | 25 ++++++++++++++++++- packages/host/app/lib/html-component.ts | 10 +++----- packages/host/app/lib/isolated-render.gts | 12 ++++----- packages/host/package.json | 14 +++++------ .../host/types/@cardstack/host/index.d.ts | 1 - packages/local-types/index.d.ts | 1 - .../matrix/types/@cardstack/matrix/index.d.ts | 1 - pnpm-workspace.yaml | 4 +-- 13 files changed, 43 insertions(+), 31 deletions(-) diff --git a/packages/boxel-icons/unpublished-development-types/index.d.ts b/packages/boxel-icons/unpublished-development-types/index.d.ts index 4f7deab2532..1afd42fe9be 100644 --- a/packages/boxel-icons/unpublished-development-types/index.d.ts +++ b/packages/boxel-icons/unpublished-development-types/index.d.ts @@ -2,7 +2,7 @@ // These will *not* be published as part of your addon, so be careful that your published code does not rely on them! import '@glint/environment-ember-loose'; -import 'ember-source/types/stable'; +import 'ember-source/types'; declare module '@glint/environment-ember-loose/registry' { export default interface Registry { diff --git a/packages/boxel-motion/addon/src/types/@cardstack/boxel-motion/index.d.ts b/packages/boxel-motion/addon/src/types/@cardstack/boxel-motion/index.d.ts index 42b849012e4..a2e59775409 100644 --- a/packages/boxel-motion/addon/src/types/@cardstack/boxel-motion/index.d.ts +++ b/packages/boxel-motion/addon/src/types/@cardstack/boxel-motion/index.d.ts @@ -1,4 +1,3 @@ import 'ember-source/types'; -import 'ember-source/types/preview'; export {}; diff --git a/packages/boxel-motion/test-app/types/boxel-motion-demo-app/index.d.ts b/packages/boxel-motion/test-app/types/boxel-motion-demo-app/index.d.ts index 42b849012e4..a2e59775409 100644 --- a/packages/boxel-motion/test-app/types/boxel-motion-demo-app/index.d.ts +++ b/packages/boxel-motion/test-app/types/boxel-motion-demo-app/index.d.ts @@ -1,4 +1,3 @@ import 'ember-source/types'; -import 'ember-source/types/preview'; export {}; diff --git a/packages/boxel-ui/addon/src/types/@cardstack/boxel-ui/index.d.ts b/packages/boxel-ui/addon/src/types/@cardstack/boxel-ui/index.d.ts index 42b849012e4..a2e59775409 100644 --- a/packages/boxel-ui/addon/src/types/@cardstack/boxel-ui/index.d.ts +++ b/packages/boxel-ui/addon/src/types/@cardstack/boxel-ui/index.d.ts @@ -1,4 +1,3 @@ import 'ember-source/types'; -import 'ember-source/types/preview'; export {}; diff --git a/packages/boxel-ui/test-app/types/boxel-ui-test-app/index.d.ts b/packages/boxel-ui/test-app/types/boxel-ui-test-app/index.d.ts index 42b849012e4..a2e59775409 100644 --- a/packages/boxel-ui/test-app/types/boxel-ui-test-app/index.d.ts +++ b/packages/boxel-ui/test-app/types/boxel-ui-test-app/index.d.ts @@ -1,4 +1,3 @@ import 'ember-source/types'; -import 'ember-source/types/preview'; export {}; diff --git a/packages/host/app/deprecation-workflow.js b/packages/host/app/deprecation-workflow.js index 7e793b0fd30..b0065f10e83 100644 --- a/packages/host/app/deprecation-workflow.js +++ b/packages/host/app/deprecation-workflow.js @@ -1,3 +1,26 @@ import setupDeprecationWorkflow from 'ember-cli-deprecation-workflow'; -setupDeprecationWorkflow(); +setupDeprecationWorkflow({ + workflow: [ + { + handler: 'silence', + matchId: 'importing-inject-from-ember-service', + }, + { + handler: 'silence', + matchId: 'deprecate-import--set-classic-decorator-from-ember', + }, + { + handler: 'silence', + matchId: 'deprecate-import-view-utils-from-ember', + }, + { + handler: 'silence', + matchId: 'deprecate-import-env-from-ember', + }, + { + handler: 'silence', + matchId: 'deprecate-import-onerror-from-ember', + }, + ], +}); diff --git a/packages/host/app/lib/html-component.ts b/packages/host/app/lib/html-component.ts index 9dce0f50d31..b5bf0eb3fb3 100644 --- a/packages/host/app/lib/html-component.ts +++ b/packages/host/app/lib/html-component.ts @@ -2,13 +2,12 @@ import { setComponentManager } from '@ember/component'; import { capabilities } from '@ember/component'; import { setComponentTemplate } from '@ember/component'; -import templateOnly from '@ember/component/template-only'; import { htmlSafe, type SafeString } from '@ember/template'; import { precompileTemplate } from '@ember/template-compilation'; -import { modifier } from 'ember-modifier'; +import { template } from '@ember/template-compiler/runtime'; -import { compiler } from '@cardstack/runtime-common/etc'; +import { modifier } from 'ember-modifier'; import type { ComponentLike } from '@glint/template'; @@ -72,10 +71,7 @@ export function htmlComponent( if (cache.has(source)) { component = cache.get(source)!; } else { - component = setComponentTemplate( - compiler.compile(source, { strictMode: true }), - templateOnly(), - ) as TopElement; + component = template(source) as TopElement; cache.set(source, component); } diff --git a/packages/host/app/lib/isolated-render.gts b/packages/host/app/lib/isolated-render.gts index 10ad63ba681..d5553bc0911 100644 --- a/packages/host/app/lib/isolated-render.gts +++ b/packages/host/app/lib/isolated-render.gts @@ -33,23 +33,23 @@ export function render( // clear any previous render work removeChildren(element); - let { _runtime, _context, _owner, _builder } = owner.lookup( - 'renderer:-dom', - ) as any; + let { + state: { owner: _owner, builder: _builder, context: _context }, + } = owner.lookup('renderer:-dom') as any; let self = createConstRef({}, 'this'); let layout = (getComponentTemplate as any)(root)(_owner).asLayout(); + let iterator = renderMain( - _runtime, _context, _owner, self, - _builder(_runtime.env, { element }), + _builder(_context.env, { element }), layout, ); let vm = (iterator as any).vm; try { - inTransaction(_runtime.env, () => vm._execute()); + inTransaction(_context.env, () => vm._execute()); } catch (err: any) { // This is to compensate for the commitCacheGroup op code that is not called because // of the error being thrown here. we do this so we can keep the TRANSACTION_STACK diff --git a/packages/host/package.json b/packages/host/package.json index c280d2bcc2f..e3c4fed5500 100644 --- a/packages/host/package.json +++ b/packages/host/package.json @@ -46,8 +46,8 @@ "@cardstack/runtime-common": "workspace:*", "@cardstack/view-transitions": "catalog:", "@ember/optional-features": "^2.0.0", - "@ember/string": "^3.1.1", - "@ember/test-helpers": "^3.3.1", + "@ember/string": "^4.0.0", + "@ember/test-helpers": "^5.4.1", "@ember/test-waiters": "catalog:", "@embroider/compat": "^3.5.5", "@embroider/core": "^3.4.15", @@ -101,7 +101,7 @@ "ember-async-data": "^1.0.3", "ember-auto-import": "^2.7.2", "ember-basic-dropdown": "8.0.4", - "ember-cli": "~5.4.1", + "ember-cli": "~6.10.0", "ember-cli-app-version": "^6.0.1", "ember-cli-babel": "^8.2.0", "ember-cli-clean-css": "^3.0.0", @@ -127,12 +127,12 @@ "ember-freestyle": "^0.20.0", "ember-keyboard": "^8.2.1", "ember-lifeline": "^7.0.0", - "ember-load-initializers": "^2.1.2", + "ember-load-initializers": "^3.0.0", "ember-modifier": "^4.1.0", - "ember-page-title": "^8.2.3", - "ember-provide-consume-context": "^0.7.0", + "ember-page-title": "^9.0.3", + "ember-provide-consume-context": "^0.8.0", "ember-qunit": "catalog:", - "ember-resolver": "^11.0.1", + "ember-resolver": "^13.0.0", "ember-resources": "catalog:", "ember-route-template": "^1.0.3", "ember-source": "catalog:", diff --git a/packages/host/types/@cardstack/host/index.d.ts b/packages/host/types/@cardstack/host/index.d.ts index 42b849012e4..a2e59775409 100644 --- a/packages/host/types/@cardstack/host/index.d.ts +++ b/packages/host/types/@cardstack/host/index.d.ts @@ -1,4 +1,3 @@ import 'ember-source/types'; -import 'ember-source/types/preview'; export {}; diff --git a/packages/local-types/index.d.ts b/packages/local-types/index.d.ts index 2e02b1d4e74..6ae60114b1e 100644 --- a/packages/local-types/index.d.ts +++ b/packages/local-types/index.d.ts @@ -1,5 +1,4 @@ import 'ember-source/types'; -import 'ember-source/types/preview'; import * as ContentTag from 'content-tag'; declare global { diff --git a/packages/matrix/types/@cardstack/matrix/index.d.ts b/packages/matrix/types/@cardstack/matrix/index.d.ts index 42b849012e4..a2e59775409 100644 --- a/packages/matrix/types/@cardstack/matrix/index.d.ts +++ b/packages/matrix/types/@cardstack/matrix/index.d.ts @@ -1,4 +1,3 @@ import 'ember-source/types'; -import 'ember-source/types/preview'; export {}; diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 6b097fb2300..ade10e10ffb 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -127,9 +127,9 @@ catalog: ember-concurrency: ^4.0.3 ember-concurrency-ts: ^0.3.1 ember-modify-based-class-resource: ^1.1.0 - ember-qunit: ^8.0.1 + ember-qunit: ^9.0.4 ember-resources: ^7.0.7 - ember-source: ~5.12.0 + ember-source: ~6.10.0 ember-template-lint: ^7.8.1 esbuild: ^0.24.0 eslint: ^8.57.1 From ee90b462fd50c5bc30c144c7ca55fd2a03251456 Mon Sep 17 00:00:00 2001 From: Edward Faulkner Date: Wed, 4 Mar 2026 14:35:38 -0500 Subject: [PATCH 2/6] ember compat updates --- packages/base/field-component.gts | 22 +- packages/base/field-support.ts | 6 +- packages/host/app/deprecation-workflow.js | 4 + packages/host/app/index.html | 11 +- packages/host/ember-cli-build.js | 3 - packages/host/tests/index.html | 9 + packages/runtime-common/etc.ts | 2 +- pnpm-lock.yaml | 2069 ++++++++++++++++----- 8 files changed, 1658 insertions(+), 468 deletions(-) diff --git a/packages/base/field-component.gts b/packages/base/field-component.gts index 650971ee6ab..019d6457b9c 100644 --- a/packages/base/field-component.gts +++ b/packages/base/field-component.gts @@ -86,18 +86,14 @@ export class CardContextConsumer extends Component }; } - + } export class CardCrudFunctionsConsumer extends Component { @consume(CardCrudFunctionsContextName) declare cardCrudFunctions: CardCrudFunctions; - + } interface DefaultFormatConsumerSignature { @@ -113,9 +109,7 @@ export class DefaultFormatsConsumer extends Component - {{yield this.effectiveDefaultFormats}} - + } interface DefaultFormatsProviderSignature { @@ -137,9 +131,7 @@ interface PermissionsConsumerSignature { export class PermissionsConsumer extends Component { @consume(PermissionsContextName) declare permissions: Permissions | undefined; - + } const componentCache = initSharedState( @@ -527,7 +519,11 @@ function getFields(card: typeof CardDef): { } return [[maybeFieldName, maybeField]]; }); - fields = { ...fields, ...Object.fromEntries(currentFields) }; + fields = Object.assign( + Object.create(null), + fields, + Object.fromEntries(currentFields), + ); obj = Reflect.getPrototypeOf(obj); } return fields; diff --git a/packages/base/field-support.ts b/packages/base/field-support.ts index 6ff64d4db8d..66ee5c93c35 100644 --- a/packages/base/field-support.ts +++ b/packages/base/field-support.ts @@ -280,7 +280,11 @@ export function getFields( } return [[maybeFieldName, maybeField]]; }); - fields = { ...fields, ...Object.fromEntries(currentFields) }; + fields = Object.assign( + Object.create(null), + fields, + Object.fromEntries(currentFields), + ); obj = Reflect.getPrototypeOf(obj); } return fields; diff --git a/packages/host/app/deprecation-workflow.js b/packages/host/app/deprecation-workflow.js index b0065f10e83..ed6e5da65e9 100644 --- a/packages/host/app/deprecation-workflow.js +++ b/packages/host/app/deprecation-workflow.js @@ -22,5 +22,9 @@ setupDeprecationWorkflow({ handler: 'silence', matchId: 'deprecate-import-onerror-from-ember', }, + { + handler: 'silence', + matchId: 'deprecate-import-libraries-from-ember', + }, ], }); diff --git a/packages/host/app/index.html b/packages/host/app/index.html index 0c8951cd565..358866cc61f 100644 --- a/packages/host/app/index.html +++ b/packages/host/app/index.html @@ -35,6 +35,15 @@
{{content-for "body"}} +