From debd649bf50ff850fa8f622cdc5d50f74d38c3e6 Mon Sep 17 00:00:00 2001 From: Ian Calvert Date: Thu, 19 Feb 2026 16:47:57 +0000 Subject: [PATCH] Cache card-api module in host test adapter --- packages/host/tests/helpers/adapter.ts | 40 +++++++++++++++++++++----- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/packages/host/tests/helpers/adapter.ts b/packages/host/tests/helpers/adapter.ts index 303738359d..46125f1e79 100644 --- a/packages/host/tests/helpers/adapter.ts +++ b/packages/host/tests/helpers/adapter.ts @@ -61,6 +61,8 @@ interface TestAdapterContents { } let shimmedModuleIndicator = '// this file is shimmed'; +let sharedCardApiModule: CardAPI | undefined; +let sharedCardApiImport: Promise | undefined; export class TestRealmAdapter implements RealmAdapter { #files: Dir = { kind: 'directory', contents: {} }; @@ -142,10 +144,7 @@ export class TestRealmAdapter implements RealmAdapter { if (!this.#loader) { throw new Error('bug: loader needs to be set in test adapter'); } - - let cardApi = await this.#loader.import( - `${baseRealm.url}card-api`, - ); + let cardApi = await getSharedCardApi(this.#loader); for (let { content, url } of this.#potentialModulesAndInstances) { if (cardApi.isCard(content)) { cardApi.setCardAsSavedForTest( @@ -167,6 +166,9 @@ export class TestRealmAdapter implements RealmAdapter { setLoader(loader: Loader) { // Should remove this once CS-6720 is finished this.#loader = loader; + if (sharedCardApiModule) { + shimSharedCardApi(loader, sharedCardApiModule); + } this.prepareInstances(); } @@ -258,9 +260,7 @@ export class TestRealmAdapter implements RealmAdapter { if (value instanceof Uint8Array) { fileRefContent = value; } else if (path.endsWith('.json')) { - let cardApi = await this.#loader.import( - `${baseRealm.url}card-api`, - ); + let cardApi = await getSharedCardApi(this.#loader); if (cardApi.isCard(value)) { let doc = cardApi.serializeCard(value); fileRefContent = JSON.stringify(doc); @@ -459,3 +459,29 @@ export class TestRealmAdapter implements RealmAdapter { }; } } + +async function getSharedCardApi(loader: Loader): Promise { + if (sharedCardApiModule) { + shimSharedCardApi(loader, sharedCardApiModule); + return sharedCardApiModule; + } + if (!sharedCardApiImport) { + sharedCardApiImport = loader + .import(`${baseRealm.url}card-api`) + .then((cardApi) => { + sharedCardApiModule = cardApi; + return cardApi; + }) + .catch((error) => { + sharedCardApiImport = undefined; + throw error; + }); + } + let cardApi = await sharedCardApiImport; + shimSharedCardApi(loader, cardApi); + return cardApi; +} + +function shimSharedCardApi(loader: Loader, cardApi: CardAPI): void { + loader.shimModule(`${baseRealm.url}card-api`, cardApi as Record); +}