Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
d1fa421
extracing ember 6.10 upgrade from vite branch
ef4 Mar 4, 2026
95f2cf2
ember compat updates
ef4 Mar 4, 2026
3396dd8
updates for ember-qunit 9
ef4 Mar 4, 2026
c180266
reset tracking at end of isolated renderer
ef4 Mar 4, 2026
eb1ec84
preserve formatting of trapped render errors
ef4 Mar 4, 2026
db1c70b
fixing tracking gaps
ef4 Mar 11, 2026
1fcc89e
fixup
ef4 Mar 19, 2026
fc65f24
Patching https://github.com/tracked-tools/tracked-built-ins/pull/453
ef4 Mar 19, 2026
1f09f10
update test fixuture for ember 6 format
ef4 Mar 19, 2026
6e5d863
use glimmerRenderComponent for isolated card rendering
lukemelia Mar 30, 2026
8ec217a
fix Message.status not tracked or updated after send
lukemelia Mar 30, 2026
cdfeb15
patch ember-source to handle Ember 5 template wire format
lukemelia Mar 30, 2026
6bffff1
Fix Ember 6.10 CI bootstrap
lukemelia Mar 30, 2026
91add26
use prefix form for uploaded card sourceUrl
lukemelia Mar 30, 2026
277ba73
fix unresolveCardReference crash when uploading unsaved cards
lukemelia Mar 31, 2026
939439d
fix glint lint error for untyped @glimmer imports
lukemelia Mar 31, 2026
edb03c7
fix test settlement for debounced command processing in Ember 6.10
lukemelia Mar 31, 2026
5a1c820
patch out Ember 6.10 AMD bundle deprecation console.log that breaks s…
lukemelia Mar 31, 2026
9454844
fix isolated render teardown leak
lukemelia Apr 1, 2026
b84e17e
fix highlights card rendering for Ember 6.10
lukemelia Apr 1, 2026
13ba73b
fix highlights filter lint types
lukemelia Apr 1, 2026
73e2af5
fix store test race condition in Ember 6.10
lukemelia Apr 1, 2026
4b68e1a
fix qunit/no-early-return lint error
lukemelia Apr 1, 2026
b2d8f4e
reverting unnecessary changes
ef4 Apr 1, 2026
bdcf18b
restore my tracked-built-ins fix
ef4 Apr 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"deploy:boxel-host": "pnpm run build-common-deps && cd packages/host && BASE_REALM_HOSTING_DISABLED=true NODE_OPTIONS='--max_old_space_size=8192' pnpm exec ember deploy",
"deploy:boxel-host:preview-staging": "pnpm run build-common-deps && cd packages/host && BASE_REALM_HOSTING_DISABLED=true NODE_OPTIONS='--max_old_space_size=8192' pnpm exec ember deploy s3-preview-staging --verbose",
"deploy:boxel-host:preview-production": "pnpm run build-common-deps && cd packages/host && BASE_REALM_HOSTING_DISABLED=true NODE_OPTIONS='--max_old_space_size=8192' pnpm exec ember deploy s3-preview-production --verbose",
"deploy:boxel-ui":"pnpm run build-common-deps && cd packages/boxel-ui/test-app && pnpm exec ember deploy",
"deploy:boxel-ui": "pnpm run build-common-deps && cd packages/boxel-ui/test-app && pnpm exec ember deploy",
"deploy:boxel-ui:preview-staging": "pnpm run build-common-deps && cd packages/boxel-ui/test-app && pnpm exec ember deploy s3-preview-staging --verbose",
"lint": "pnpm run --filter './packages/**' --if-present -r lint",
"lint:fix": "pnpm run --filter './packages/**' --if-present -r lint:fix",
Expand All @@ -28,7 +28,8 @@
"@glimmer/tracking>@glimmer/validator": "0.84.3",
"@glimmer/component": "^2.0.0",
"jsesc": "^3.0.0",
"ember-modifier": "^4.1.0"
"ember-modifier": "^4.1.0",
"tracked-built-ins": "^4.1.2"
},
"peerDependencyRules": {
"allowedVersions": {
Expand Down
20 changes: 10 additions & 10 deletions packages/base/components/cards-grid-layout.gts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import {
type Sort,
} from '@cardstack/runtime-common';

import type { CardContext, BoxComponent } from '../card-api';
import type { BoxComponent, CardContext } from '../card-api';

import CardList from './card-list';
import { htmlSafe } from '@ember/template';
Expand Down Expand Up @@ -150,7 +150,7 @@ export default class CardsGridLayout extends Component<Signature> {
</header>
{{#if (eq @activeFilter.displayName 'Highlights')}}
<div class='highlights-layout' data-test-highlights-layout>
{{#if this.getAiAppGeneratorCard}}
{{#if this.aiAppGeneratorCard}}
<div
class='highlights-section'
data-test-highlights-section='new-feature'
Expand All @@ -163,13 +163,13 @@ export default class CardsGridLayout extends Component<Signature> {
class='highlights-card-container'
data-test-highlights-card-container='ai-app-generator'
>
<this.getAiAppGeneratorCard @format='embedded' />
<this.aiAppGeneratorCard @format='embedded' />
</div>

</div>
{{/if}}

{{#if this.getWelcomeToBoxelCard}}
{{#if this.welcomeToBoxelCard}}
<div
class='highlights-section'
data-test-highlights-section='getting-started'
Expand All @@ -183,13 +183,13 @@ export default class CardsGridLayout extends Component<Signature> {
data-test-highlights-card-container='welcome-to-boxel'
>
<div class='highlights-card-container'>
<this.getWelcomeToBoxelCard @format='embedded' />
<this.welcomeToBoxelCard @format='embedded' />
</div>
</div>
</div>
{{/if}}

{{#if this.getCommunityCards}}
{{#if this.communityCards}}
<div
class='highlights-section'
data-test-highlights-section='join-community'
Expand All @@ -198,7 +198,7 @@ export default class CardsGridLayout extends Component<Signature> {
class='section-header'
data-test-section-header='join-the-community'
>JOIN THE COMMUNITY</h3>
<this.getCommunityCards @format='embedded' />
<this.communityCards @format='embedded' />
</div>
{{/if}}
</div>
Expand Down Expand Up @@ -347,15 +347,15 @@ export default class CardsGridLayout extends Component<Signature> {
return this.args.activeFilter.displayName !== 'Highlights';
}

private get getWelcomeToBoxelCard() {
private get welcomeToBoxelCard() {
return this.args.activeFilter.cards?.[0];
}

private get getAiAppGeneratorCard() {
private get aiAppGeneratorCard() {
return this.args.activeFilter.cards?.[1];
}

private get getCommunityCards() {
private get communityCards() {
return this.args.activeFilter.cards?.[2];
}

Expand Down
22 changes: 9 additions & 13 deletions packages/base/field-component.gts
Original file line number Diff line number Diff line change
Expand Up @@ -86,18 +86,14 @@ export class CardContextConsumer extends Component<CardContextConsumerSignature>
};
}

<template>
{{yield this.context}}
</template>
<template>{{yield this.context}}</template>
}

export class CardCrudFunctionsConsumer extends Component<CardCrudFunctionsConsumerSignature> {
@consume(CardCrudFunctionsContextName)
declare cardCrudFunctions: CardCrudFunctions;

<template>
{{yield this.cardCrudFunctions}}
</template>
<template>{{yield this.cardCrudFunctions}}</template>
}

interface DefaultFormatConsumerSignature {
Expand All @@ -113,9 +109,7 @@ export class DefaultFormatsConsumer extends Component<DefaultFormatConsumerSigna
return this.defaultFormats ?? { cardDef: 'isolated', fieldDef: 'embedded' };
}

<template>
{{yield this.effectiveDefaultFormats}}
</template>
<template>{{yield this.effectiveDefaultFormats}}</template>
}

interface DefaultFormatsProviderSignature {
Expand All @@ -137,9 +131,7 @@ interface PermissionsConsumerSignature {
export class PermissionsConsumer extends Component<PermissionsConsumerSignature> {
@consume(PermissionsContextName) declare permissions: Permissions | undefined;

<template>
{{yield this.permissions}}
</template>
<template>{{yield this.permissions}}</template>
}

const componentCache = initSharedState(
Expand Down Expand Up @@ -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;
Expand Down
6 changes: 5 additions & 1 deletion packages/base/field-support.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import 'ember-source/types';

export {};
14 changes: 14 additions & 0 deletions packages/boxel-motion/test-app/tests/test-helper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { setApplication } from '@ember/test-helpers';
import Application from 'boxel-motion-test-app/app';
import config from 'boxel-motion-test-app/config/environment';
import { start, setupEmberOnerrorValidation } from 'ember-qunit';
import { loadTests } from 'ember-qunit/test-loader';
import * as QUnit from 'qunit';
import { setup } from 'qunit-dom';

setApplication(Application.create(config.APP));

setup(QUnit.assert);
setupEmberOnerrorValidation();
loadTests();
start();
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import 'ember-source/types';

export {};
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import 'ember-source/types';
import 'ember-source/types/preview';

export {};
6 changes: 4 additions & 2 deletions packages/boxel-ui/test-app/tests/test-helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ import config from 'test-app/config/environment';
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';
import { start, setupEmberOnerrorValidation } from 'ember-qunit';
import {
setRunOptions,
setupConsoleLogger,
Expand All @@ -23,5 +24,6 @@ setRunOptions({
},
});
setupConsoleLogger();

setupEmberOnerrorValidation();
loadTests();
start();
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import 'ember-source/types';
import 'ember-source/types/preview';

export {};
29 changes: 28 additions & 1 deletion packages/host/app/deprecation-workflow.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,30 @@
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',
},
{
handler: 'silence',
matchId: 'deprecate-import-libraries-from-ember',
},
],
});
28 changes: 19 additions & 9 deletions packages/host/app/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,23 @@
<div id="ember-basic-dropdown-wormhole"></div>
{{content-for "body"}}

<script type="module">
import * as ContentTag from '{{rootURL}}assets/content-tag/standalone.js';
globalThis.ContentTagGlobal = ContentTag;
</script>
<script src="{{rootURL}}assets/vendor.js"></script>
<script src="{{rootURL}}assets/@cardstack/host.js"></script>

{{content-for "body-footer"}}
</body>
<script>
globalThis.process = {
env: {},
version: '',
cwd() {
return '/';
},
};
</script>
<script type="module">
import * as ContentTag from '{{rootURL}}assets/content-tag/standalone.js';
globalThis.ContentTagGlobal = ContentTag;
</script>
<script src="{{rootURL}}assets/vendor.js"></script>
<script src="{{rootURL}}assets/@cardstack/host.js"></script>

{{content-for "body-footer"}}
</body>

</html>
3 changes: 2 additions & 1 deletion packages/host/app/lib/file-def-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
inferContentType,
SupportedMimeType,
relativeTo,
unresolveCardReference,
type LooseSingleCardDocument,
type ResolvedCodeRef,
} from '@cardstack/runtime-common';
Expand Down Expand Up @@ -337,7 +338,7 @@ export default class FileDefManagerImpl
const content = JSON.stringify(entry.serialization);
const contentHash = await this.getContentHash(content);
let fileDef = this.fileAPI.createFileDef({
sourceUrl: entry.card.id,
sourceUrl: entry.card.id ? unresolveCardReference(entry.card.id) : '',
name: entry.card.cardTitle,
contentType: SupportedMimeType.CardJson,
contentHash,
Expand Down
10 changes: 3 additions & 7 deletions packages/host/app/lib/html-component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down Expand Up @@ -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);
}

Expand Down
Loading
Loading