Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Virtual entrypoint export modules #2006

Merged
merged 5 commits into from
Jun 27, 2024
Merged
Changes from 1 commit
Commits
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
Next Next commit
feat (new app-boot): the entry point exports the amdModules, which ar…
…e then define in app.js
BlueCutOfficial committed Jun 26, 2024
commit c404a2544980afc76f88f22d6fcc17b0f40608ea
7 changes: 6 additions & 1 deletion packages/core/src/virtual-entrypoint.ts
Original file line number Diff line number Diff line change
@@ -181,7 +181,6 @@ import environment from './config/environment';

{{#each amdModules as |amdModule index| ~}}
import * as amdModule{{index}} from "{{js-string-escape amdModule.buildtime}}"
d("{{js-string-escape amdModule.runtime}}", function(){ return amdModule{{index}}; });
{{/each}}

{{#if fastbootOnlyAmdModules}}
@@ -226,6 +225,12 @@ w._embroiderEngineBundles_ = [
{{/each}}
]
{{/if}}

export default {
{{#each amdModules as |amdModule index| ~}}
"{{js-string-escape amdModule.runtime}}": amdModule{{index}},
{{/each}}
};
`) as (params: {
amdModules: { runtime: string; buildtime: string }[];
fastbootOnlyAmdModules?: { runtime: string; buildtime: string }[];
10 changes: 9 additions & 1 deletion tests/addon-template/tests/dummy/app/app.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
import Application from '@ember/application';
import '@embroider/core/entrypoint';
import coreModules from '@embroider/core/entrypoint';
import Resolver from 'ember-resolver';
import loadInitializers from 'ember-load-initializers';
import config from 'dummy/config/environment';

import '@embroider/core/entrypoint';
let d = window.define;

for (const [name, module] of Object.entries(coreModules)) {
d(name, function () {
return module;
});
}

export default class App extends Application {
modulePrefix = config.modulePrefix;
10 changes: 9 additions & 1 deletion tests/app-template/app/app.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
import Application from '@ember/application';
import '@embroider/core/entrypoint';
import coreModules from '@embroider/core/entrypoint';
import Resolver from 'ember-resolver';
import loadInitializers from 'ember-load-initializers';
import config from './config/environment';

import '@embroider/core/entrypoint';
let d = window.define;

for (const [name, module] of Object.entries(coreModules)) {
d(name, function () {
return module;
});
}

export default class App extends Application {
modulePrefix = config.modulePrefix;
64 changes: 22 additions & 42 deletions tests/scenarios/compat-stage2-test.ts
Original file line number Diff line number Diff line change
@@ -246,33 +246,24 @@ stage2Scenarios
expectModule.withContents(contents => {
const result = /import \* as (\w+) from ".*in-repo-b\/_app_\/service\/in-repo.js.*/.exec(contents) ?? [];
const [, amdModule] = result;
assert.codeContains(
contents,
`d("my-app/service/in-repo", function () {
return ${amdModule};
});`
assert.ok(
contents.includes(`"my-app/service/in-repo": ${amdModule}`),
'expected module is in the export list'
);
return true;
}, 'module imports from the correct place');
expectModule.withContents(contents => {
const result = /import \* as (\w+) from ".*dep-b\/_app_\/service\/addon.js.*/.exec(contents) ?? [];
const [, amdModule] = result;
assert.codeContains(
contents,
`d("my-app/service/addon", function () {
return ${amdModule};
});`
);
assert.ok(contents.includes(`"my-app/service/addon": ${amdModule}`), 'expected module is in the export list');
return true;
}, 'module imports from the correct place');
expectModule.withContents(contents => {
const result = /import \* as (\w+) from ".*dev-c\/_app_\/service\/dev-addon.js.*/.exec(contents) ?? [];
const [, amdModule] = result;
assert.codeContains(
contents,
`d("my-app/service/dev-addon", function () {
return ${amdModule};
});`
assert.ok(
contents.includes(`"my-app/service/dev-addon": ${amdModule}`),
'expected module is in the export list'
);
return true;
}, 'module imports from the correct place');
@@ -283,11 +274,9 @@ stage2Scenarios
const result =
/import \* as (\w+) from ".*dep-b\/_app_\/service\/dep-wins-over-dev.js.*/.exec(contents) ?? [];
const [, amdModule] = result;
assert.codeContains(
contents,
`d("my-app/service/dep-wins-over-dev", function () {
return ${amdModule};
});`
assert.ok(
contents.includes(`"my-app/service/dep-wins-over-dev": ${amdModule}`),
'expected module is in the export list'
);
return true;
});
@@ -298,11 +287,9 @@ stage2Scenarios
const result =
/import \* as (\w+) from ".*in-repo-a\/_app_\/service\/in-repo-over-deps.js.*/.exec(contents) ?? [];
const [, amdModule] = result;
assert.codeContains(
contents,
`d("my-app/service/in-repo-over-deps", function () {
return ${amdModule};
});`
assert.ok(
contents.includes(`"my-app/service/in-repo-over-deps": ${amdModule}`),
'expected module is in the export list'
);
return true;
});
@@ -312,11 +299,9 @@ stage2Scenarios
resolveEntryPoint(expectAudit).withContents(contents => {
const result = /import \* as (\w+) from ".*dev-d\/_app_\/service\/test-before.js.*/.exec(contents) ?? [];
const [, amdModule] = result;
assert.codeContains(
contents,
`d("my-app/service/test-before", function () {
return ${amdModule};
});`
assert.ok(
contents.includes(`"my-app/service/test-before": ${amdModule}`),
'expected module is in the export list'
);
return true;
});
@@ -326,11 +311,9 @@ stage2Scenarios
resolveEntryPoint(expectAudit).withContents(contents => {
const result = /import \* as (\w+) from ".*dev-b\/_app_\/service\/test-after.js.*/.exec(contents) ?? [];
const [, amdModule] = result;
assert.codeContains(
contents,
`d("my-app/service/test-after", function () {
return ${amdModule};
});`
assert.ok(
contents.includes(`"my-app/service/test-after": ${amdModule}`),
'expected module is in the export list'
);
return true;
});
@@ -845,12 +828,9 @@ stage2Scenarios
}

const [, amdModule] = result;

assert.codeContains(
contents,
`d("my-app/non-static-dir/another-library", function () {
return ${amdModule};
});`
assert.ok(
contents.includes(`"my-app/non-static-dir/another-library": ${amdModule}`),
'expected module is in the export list'
);
return true;
});
36 changes: 12 additions & 24 deletions tests/scenarios/compat-template-colocation-test.ts
Original file line number Diff line number Diff line change
@@ -183,12 +183,9 @@ scenarios
}

const [, amdModule] = result;

assert.codeContains(
contents,
`d("my-app/components/has-colocated-template", function () {
return ${amdModule};
});`
assert.ok(
contents.includes(`"my-app/components/has-colocated-template": ${amdModule}`),
'expected module is in the export list'
);
});
});
@@ -395,12 +392,9 @@ appScenarios
}

const [, podComponentAmd] = result;

assert.codeContains(
content,
`d("my-app/components/pod-component/component", function () {
return ${podComponentAmd};
});`
assert.ok(
content.includes(`"my-app/components/pod-component/component": ${podComponentAmd}`),
'expected module is in the export list'
);

result = /import \* as (\w+) from "\/components\/pod-component\/template\.hbs.*"/.exec(content);
@@ -410,12 +404,9 @@ appScenarios
}

const [, podComponentTemplateAmd] = result;

assert.codeContains(
content,
`d("my-app/components/pod-component/template", function () {
return ${podComponentTemplateAmd};
});`
assert.ok(
content.includes(`"my-app/components/pod-component/template": ${podComponentTemplateAmd}`),
'expected module is in the export list'
);

result = /import \* as (\w+) from "\/components\/template-only\/template\.hbs.*"/.exec(content);
@@ -425,12 +416,9 @@ appScenarios
}

const [, templateOnlyAmd] = result;

assert.codeContains(
content,
`d("my-app/components/template-only/template", function () {
return ${templateOnlyAmd};
});`
assert.ok(
content.includes(`"my-app/components/template-only/template": ${templateOnlyAmd}`),
'expected module is in the export list'
);

return true;
12 changes: 11 additions & 1 deletion tests/ts-app-template/app/app.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,19 @@
import Application from '@ember/application';
import '@embroider/core/entrypoint';
// @ts-ignore
import coreModules from '@embroider/core/entrypoint';
import Resolver from 'ember-resolver';
import loadInitializers from 'ember-load-initializers';
import config from 'ts-app-template/config/environment';

import '@embroider/core/entrypoint';
// @ts-ignore
let d = window.define;

for (const [name, module] of Object.entries(coreModules)) {
d(name, function () {
return module;
});
}

export default class App extends Application {
modulePrefix = config.modulePrefix;