@embroider/core 3.4.18 → 3.4.20-unstable.0aa8fc6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/package.json +20 -10
  2. package/src/app-files.d.ts +3 -5
  3. package/src/app-files.js +25 -8
  4. package/src/app-files.js.map +1 -1
  5. package/src/index.d.ts +2 -3
  6. package/src/index.js +1 -3
  7. package/src/index.js.map +1 -1
  8. package/src/measure-concat.js +1 -2
  9. package/src/measure-concat.js.map +1 -1
  10. package/src/module-resolver-options.d.ts +42 -0
  11. package/src/module-resolver-options.js +164 -0
  12. package/src/module-resolver-options.js.map +1 -0
  13. package/src/module-resolver.d.ts +28 -44
  14. package/src/module-resolver.js +430 -304
  15. package/src/module-resolver.js.map +1 -1
  16. package/src/node-resolve.d.ts +33 -0
  17. package/src/node-resolve.js +131 -0
  18. package/src/node-resolve.js.map +1 -0
  19. package/src/options.d.ts +0 -7
  20. package/src/options.js +0 -1
  21. package/src/options.js.map +1 -1
  22. package/src/resolver-loader.js +8 -1
  23. package/src/resolver-loader.js.map +1 -1
  24. package/src/virtual-content.d.ts +6 -4
  25. package/src/virtual-content.js +67 -99
  26. package/src/virtual-content.js.map +1 -1
  27. package/src/virtual-entrypoint.d.ts +19 -0
  28. package/src/virtual-entrypoint.js +289 -0
  29. package/src/virtual-entrypoint.js.map +1 -0
  30. package/src/virtual-route-entrypoint.d.ts +15 -0
  31. package/src/virtual-route-entrypoint.js +94 -0
  32. package/src/virtual-route-entrypoint.js.map +1 -0
  33. package/src/virtual-test-support-styles.d.ts +4 -0
  34. package/src/virtual-test-support-styles.js +64 -0
  35. package/src/virtual-test-support-styles.js.map +1 -0
  36. package/src/virtual-test-support.d.ts +4 -0
  37. package/src/virtual-test-support.js +68 -0
  38. package/src/virtual-test-support.js.map +1 -0
  39. package/src/virtual-vendor-styles.d.ts +4 -0
  40. package/src/virtual-vendor-styles.js +82 -0
  41. package/src/virtual-vendor-styles.js.map +1 -0
  42. package/src/virtual-vendor.d.ts +4 -0
  43. package/src/virtual-vendor.js +57 -0
  44. package/src/virtual-vendor.js.map +1 -0
  45. package/types/virtual/index.d.ts +9 -0
  46. package/types/virtual/index.js +3 -0
  47. package/src/asset.d.ts +0 -32
  48. package/src/asset.js +0 -3
  49. package/src/asset.js.map +0 -1
  50. package/src/ember-html.d.ts +0 -43
  51. package/src/ember-html.js +0 -110
  52. package/src/ember-html.js.map +0 -1
  53. package/src/portable-babel-config.d.ts +0 -11
  54. package/src/portable-babel-config.js +0 -132
  55. package/src/portable-babel-config.js.map +0 -1
  56. package/src/portable-babel-launcher.d.ts +0 -6
  57. package/src/portable-babel-launcher.js +0 -75
  58. package/src/portable-babel-launcher.js.map +0 -1
  59. package/src/to-broccoli-plugin.d.ts +0 -8
  60. package/src/to-broccoli-plugin.js +0 -30
  61. package/src/to-broccoli-plugin.js.map +0 -1
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.decodeEntrypoint = decodeEntrypoint;
7
+ exports.staticAppPathsPattern = staticAppPathsPattern;
8
+ exports.renderEntrypoint = renderEntrypoint;
9
+ exports.importPaths = importPaths;
10
+ exports.splitRoute = splitRoute;
11
+ exports.getAppFiles = getAppFiles;
12
+ exports.getFastbootFiles = getFastbootFiles;
13
+ const app_files_1 = require("./app-files");
14
+ const js_handlebars_1 = require("./js-handlebars");
15
+ const lodash_1 = require("lodash");
16
+ const path_1 = require("path");
17
+ const shared_internals_1 = require("@embroider/shared-internals");
18
+ const walk_sync_1 = __importDefault(require("walk-sync"));
19
+ const virtual_route_entrypoint_1 = require("./virtual-route-entrypoint");
20
+ const escape_string_regexp_1 = __importDefault(require("escape-string-regexp"));
21
+ const options_1 = require("./options");
22
+ const entrypointPattern = /(?<filename>.*)[\\/]-embroider-entrypoint.js/;
23
+ function decodeEntrypoint(filename) {
24
+ // Performance: avoid paying regex exec cost unless needed
25
+ if (!filename.includes('-embroider-entrypoint')) {
26
+ return;
27
+ }
28
+ let m = entrypointPattern.exec(filename);
29
+ if (m) {
30
+ return {
31
+ fromDir: m.groups.filename,
32
+ };
33
+ }
34
+ }
35
+ function staticAppPathsPattern(staticAppPaths) {
36
+ if (staticAppPaths && staticAppPaths.length > 0) {
37
+ return new RegExp('^(?:' + staticAppPaths.map(staticAppPath => (0, escape_string_regexp_1.default)(staticAppPath)).join('|') + ')(?:$|/)');
38
+ }
39
+ }
40
+ function renderEntrypoint(resolver, { fromDir }) {
41
+ var _a;
42
+ // this is new
43
+ const owner = resolver.packageCache.ownerOfFile(fromDir);
44
+ let eagerModules = [];
45
+ if (!owner) {
46
+ throw new Error('Owner expected'); // ToDo: Really bad error, update message
47
+ }
48
+ let engine = resolver.owningEngine(owner);
49
+ let isApp = (owner === null || owner === void 0 ? void 0 : owner.root) === resolver.options.engines[0].root;
50
+ let hasFastboot = Boolean(resolver.options.engines[0].activeAddons.find(a => a.name === 'ember-cli-fastboot'));
51
+ let appFiles = new app_files_1.AppFiles({
52
+ package: owner,
53
+ addons: new Map(engine.activeAddons.map(addon => [
54
+ resolver.packageCache.get(addon.root),
55
+ addon.canResolveFromFile,
56
+ ])),
57
+ isApp,
58
+ modulePrefix: isApp ? resolver.options.modulePrefix : engine.packageName,
59
+ appRelativePath: 'NOT_USED_DELETE_ME',
60
+ }, getAppFiles(fromDir), hasFastboot ? getFastbootFiles(owner.root) : new Set(), (0, shared_internals_1.extensionsPattern)(resolver.options.resolvableExtensions), staticAppPathsPattern(resolver.options.staticAppPaths), resolver.options.podModulePrefix);
61
+ let options = (_a = resolver.options.options) !== null && _a !== void 0 ? _a : (0, options_1.optionsWithDefaults)();
62
+ let requiredAppFiles = [appFiles.otherAppFiles];
63
+ if (!options.staticComponents) {
64
+ requiredAppFiles.push(appFiles.components);
65
+ }
66
+ if (!options.staticHelpers) {
67
+ requiredAppFiles.push(appFiles.helpers);
68
+ }
69
+ if (!options.staticModifiers) {
70
+ requiredAppFiles.push(appFiles.modifiers);
71
+ }
72
+ let styles = [];
73
+ // only import styles from engines with a parent (this excludeds the parent application) as their styles
74
+ // will be inserted via a direct <link> tag.
75
+ if (!appFiles.engine.isApp && appFiles.engine.package.isLazyEngine()) {
76
+ styles.push({
77
+ path: '@embroider/virtual/vendor.css',
78
+ });
79
+ }
80
+ let lazyEngines = [];
81
+ if (isApp) {
82
+ // deliberately ignoring the app (which is the first entry in the engines array)
83
+ let [, ...childEngines] = resolver.options.engines;
84
+ for (let childEngine of childEngines) {
85
+ let target = `@embroider/virtual/compat-modules/${childEngine.packageName}`;
86
+ if (childEngine.isLazy) {
87
+ lazyEngines.push({
88
+ names: [childEngine.packageName],
89
+ path: target,
90
+ });
91
+ }
92
+ else {
93
+ eagerModules.push(target);
94
+ }
95
+ }
96
+ }
97
+ let lazyRoutes = [];
98
+ for (let [routeName, routeFiles] of appFiles.routeFiles.children) {
99
+ splitRoute(routeName, routeFiles, resolver.options.splitAtRoutes, (_, filename) => {
100
+ requiredAppFiles.push([filename]);
101
+ }, (routeNames, _files) => {
102
+ lazyRoutes.push({
103
+ names: routeNames,
104
+ path: (0, virtual_route_entrypoint_1.encodePublicRouteEntrypoint)(routeNames, _files),
105
+ });
106
+ });
107
+ }
108
+ let [fastboot, nonFastboot] = (0, lodash_1.partition)(excludeDotFiles((0, lodash_1.flatten)(requiredAppFiles)), file => appFiles.isFastbootOnly.get(file));
109
+ let amdModules = nonFastboot.map(file => importPaths(resolver, appFiles, file));
110
+ let fastbootOnlyAmdModules = fastboot.map(file => importPaths(resolver, appFiles, file));
111
+ let params = {
112
+ amdModules,
113
+ fastbootOnlyAmdModules,
114
+ lazyRoutes,
115
+ lazyEngines,
116
+ eagerModules,
117
+ styles,
118
+ // this is a backward-compatibility feature: addons can force inclusion of modules.
119
+ defineModulesFrom: './-embroider-implicit-modules.js',
120
+ };
121
+ return {
122
+ src: entryTemplate(params),
123
+ watches: [fromDir],
124
+ };
125
+ }
126
+ const entryTemplate = (0, js_handlebars_1.compile)(`
127
+ import { macroCondition, getGlobalConfig } from '@embroider/macros';
128
+
129
+ {{#if styles}}
130
+ if (macroCondition(!getGlobalConfig().fastboot?.isRunning)) {
131
+ {{#each styles as |stylePath| ~}}
132
+ await import("{{js-string-escape stylePath.path}}");
133
+ {{/each}}
134
+ }
135
+ {{/if}}
136
+
137
+ {{#if defineModulesFrom ~}}
138
+ import implicitModules from "{{js-string-escape defineModulesFrom}}";
139
+ {{/if}}
140
+
141
+ {{#each eagerModules as |eagerModule| ~}}
142
+ import "{{js-string-escape eagerModule}}";
143
+ {{/each}}
144
+
145
+ {{#each amdModules as |amdModule index| ~}}
146
+ import * as amdModule{{index}} from "{{js-string-escape amdModule.buildtime}}"
147
+ {{/each}}
148
+
149
+ let exportFastbootModules = {};
150
+
151
+ {{#if fastbootOnlyAmdModules}}
152
+ if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {
153
+ let fastbootModules = {};
154
+
155
+ {{#each fastbootOnlyAmdModules as |amdModule| ~}}
156
+ fastbootModules["{{js-string-escape amdModule.runtime}}"] = import("{{js-string-escape amdModule.buildtime}}");
157
+ {{/each}}
158
+
159
+ const resolvedValues = await Promise.all(Object.values(fastbootModules));
160
+
161
+ Object.keys(fastbootModules).forEach((k, i) => {
162
+ exportFasbootModules[k] = resolvedValues[i];
163
+ })
164
+ }
165
+ {{/if}}
166
+
167
+
168
+ {{#if lazyRoutes}}
169
+ window._embroiderRouteBundles_ = [
170
+ {{#each lazyRoutes as |route|}}
171
+ {
172
+ names: {{json-stringify route.names}},
173
+ load: function() {
174
+ return import("{{js-string-escape route.path}}");
175
+ }
176
+ },
177
+ {{/each}}
178
+ ]
179
+ {{/if}}
180
+
181
+ {{#if lazyEngines}}
182
+ window._embroiderEngineBundles_ = [
183
+ {{#each lazyEngines as |engine|}}
184
+ {
185
+ names: {{json-stringify engine.names}},
186
+ load: function() {
187
+ return import("{{js-string-escape engine.path}}");
188
+ }
189
+ },
190
+ {{/each}}
191
+ ]
192
+ {{/if}}
193
+
194
+ export default Object.assign(
195
+ {},
196
+ implicitModules,
197
+ {
198
+ {{#each amdModules as |amdModule index| ~}}
199
+ "{{js-string-escape amdModule.runtime}}": amdModule{{index}},
200
+ {{/each}}
201
+ },
202
+ exportFastbootModules
203
+ );
204
+ `);
205
+ function excludeDotFiles(files) {
206
+ return files.filter(file => !file.startsWith('.') && !file.includes('/.'));
207
+ }
208
+ function importPaths(resolver, { engine }, engineRelativePath) {
209
+ let resolvableExtensionsPattern = (0, shared_internals_1.extensionsPattern)(resolver.options.resolvableExtensions);
210
+ let noHBS = engineRelativePath.replace(resolvableExtensionsPattern, '').replace(/\.hbs$/, '');
211
+ return {
212
+ runtime: `${engine.modulePrefix}/${noHBS}`,
213
+ buildtime: `./${engineRelativePath}`,
214
+ };
215
+ }
216
+ function splitRoute(routeName, files, splitAtRoutes, addToParent, addLazyBundle) {
217
+ let shouldSplit = routeName && shouldSplitRoute(routeName, splitAtRoutes);
218
+ let ownFiles = [];
219
+ let ownNames = new Set();
220
+ if (files.template) {
221
+ if (shouldSplit) {
222
+ ownFiles.push(files.template);
223
+ ownNames.add(routeName);
224
+ }
225
+ else {
226
+ addToParent(routeName, files.template);
227
+ }
228
+ }
229
+ if (files.controller) {
230
+ if (shouldSplit) {
231
+ ownFiles.push(files.controller);
232
+ ownNames.add(routeName);
233
+ }
234
+ else {
235
+ addToParent(routeName, files.controller);
236
+ }
237
+ }
238
+ if (files.route) {
239
+ if (shouldSplit) {
240
+ ownFiles.push(files.route);
241
+ ownNames.add(routeName);
242
+ }
243
+ else {
244
+ addToParent(routeName, files.route);
245
+ }
246
+ }
247
+ for (let [childName, childFiles] of files.children) {
248
+ splitRoute(`${routeName}.${childName}`, childFiles, splitAtRoutes, (childRouteName, childFile) => {
249
+ // this is our child calling "addToParent"
250
+ if (shouldSplit) {
251
+ ownFiles.push(childFile);
252
+ ownNames.add(childRouteName);
253
+ }
254
+ else {
255
+ addToParent(childRouteName, childFile);
256
+ }
257
+ }, (routeNames, files) => {
258
+ addLazyBundle(routeNames, files);
259
+ });
260
+ }
261
+ if (ownFiles.length > 0) {
262
+ addLazyBundle([...ownNames], ownFiles);
263
+ }
264
+ }
265
+ function shouldSplitRoute(routeName, splitAtRoutes) {
266
+ if (!splitAtRoutes) {
267
+ return false;
268
+ }
269
+ return splitAtRoutes.find(pattern => {
270
+ if (typeof pattern === 'string') {
271
+ return pattern === routeName;
272
+ }
273
+ else {
274
+ return pattern.test(routeName);
275
+ }
276
+ });
277
+ }
278
+ function getAppFiles(appRoot) {
279
+ const files = (0, walk_sync_1.default)(appRoot, {
280
+ ignore: ['_babel_filter_.js', 'app.js', 'assets', 'testem.js', 'node_modules'],
281
+ });
282
+ return new Set(files);
283
+ }
284
+ function getFastbootFiles(appRoot) {
285
+ const appDirPath = (0, path_1.join)(appRoot, '_fastboot_');
286
+ const files = (0, walk_sync_1.default)(appDirPath);
287
+ return new Set(files);
288
+ }
289
+ //# sourceMappingURL=virtual-entrypoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-entrypoint.js","sourceRoot":"","sources":["virtual-entrypoint.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppFiles, type RouteFiles } from './app-files';\nimport { compile } from './js-handlebars';\nimport type { Resolver } from './module-resolver';\nimport type { CompatResolverOptions } from '../../compat/src/resolver-transform';\nimport { flatten, partition } from 'lodash';\nimport { join } from 'path';\nimport { extensionsPattern } from '@embroider/shared-internals';\nimport walkSync from 'walk-sync';\nimport type { V2AddonPackage } from '@embroider/shared-internals/src/package';\nimport { encodePublicRouteEntrypoint } from './virtual-route-entrypoint';\nimport escapeRegExp from 'escape-string-regexp';\nimport { optionsWithDefaults } from './options';\n\nconst entrypointPattern = /(?<filename>.*)[\\\\/]-embroider-entrypoint.js/;\n\nexport function decodeEntrypoint(filename: string): { fromDir: string } | undefined {\n // Performance: avoid paying regex exec cost unless needed\n if (!filename.includes('-embroider-entrypoint')) {\n return;\n }\n let m = entrypointPattern.exec(filename);\n if (m) {\n return {\n fromDir: m.groups!.filename,\n };\n }\n}\n\nexport function staticAppPathsPattern(staticAppPaths: string[] | undefined): RegExp | undefined {\n if (staticAppPaths && staticAppPaths.length > 0) {\n return new RegExp('^(?:' + staticAppPaths.map(staticAppPath => escapeRegExp(staticAppPath)).join('|') + ')(?:$|/)');\n }\n}\n\nexport function renderEntrypoint(\n resolver: Resolver,\n { fromDir }: { fromDir: string }\n): { src: string; watches: string[] } {\n // this is new\n const owner = resolver.packageCache.ownerOfFile(fromDir);\n\n let eagerModules: string[] = [];\n\n if (!owner) {\n throw new Error('Owner expected'); // ToDo: Really bad error, update message\n }\n\n let engine = resolver.owningEngine(owner);\n let isApp = owner?.root === resolver.options.engines[0]!.root;\n let hasFastboot = Boolean(resolver.options.engines[0]!.activeAddons.find(a => a.name === 'ember-cli-fastboot'));\n\n let appFiles = new AppFiles(\n {\n package: owner,\n addons: new Map(\n engine.activeAddons.map(addon => [\n resolver.packageCache.get(addon.root) as V2AddonPackage,\n addon.canResolveFromFile,\n ])\n ),\n isApp,\n modulePrefix: isApp ? resolver.options.modulePrefix : engine.packageName,\n appRelativePath: 'NOT_USED_DELETE_ME',\n },\n getAppFiles(fromDir),\n hasFastboot ? getFastbootFiles(owner.root) : new Set(),\n extensionsPattern(resolver.options.resolvableExtensions),\n staticAppPathsPattern(resolver.options.staticAppPaths),\n resolver.options.podModulePrefix\n );\n\n let options = (resolver.options as CompatResolverOptions).options ?? optionsWithDefaults();\n\n let requiredAppFiles = [appFiles.otherAppFiles];\n if (!options.staticComponents) {\n requiredAppFiles.push(appFiles.components);\n }\n if (!options.staticHelpers) {\n requiredAppFiles.push(appFiles.helpers);\n }\n if (!options.staticModifiers) {\n requiredAppFiles.push(appFiles.modifiers);\n }\n\n let styles = [];\n // only import styles from engines with a parent (this excludeds the parent application) as their styles\n // will be inserted via a direct <link> tag.\n if (!appFiles.engine.isApp && appFiles.engine.package.isLazyEngine()) {\n styles.push({\n path: '@embroider/virtual/vendor.css',\n });\n }\n\n let lazyEngines: { names: string[]; path: string }[] = [];\n\n if (isApp) {\n // deliberately ignoring the app (which is the first entry in the engines array)\n let [, ...childEngines] = resolver.options.engines;\n for (let childEngine of childEngines) {\n let target = `@embroider/virtual/compat-modules/${childEngine.packageName}`;\n\n if (childEngine.isLazy) {\n lazyEngines.push({\n names: [childEngine.packageName],\n path: target,\n });\n } else {\n eagerModules.push(target);\n }\n }\n }\n\n let lazyRoutes: { names: string[]; path: string }[] = [];\n for (let [routeName, routeFiles] of appFiles.routeFiles.children) {\n splitRoute(\n routeName,\n routeFiles,\n resolver.options.splitAtRoutes,\n (_: string, filename: string) => {\n requiredAppFiles.push([filename]);\n },\n (routeNames: string[], _files: string[]) => {\n lazyRoutes.push({\n names: routeNames,\n path: encodePublicRouteEntrypoint(routeNames, _files),\n });\n }\n );\n }\n\n let [fastboot, nonFastboot] = partition(excludeDotFiles(flatten(requiredAppFiles)), file =>\n appFiles.isFastbootOnly.get(file)\n );\n\n let amdModules = nonFastboot.map(file => importPaths(resolver, appFiles, file));\n let fastbootOnlyAmdModules = fastboot.map(file => importPaths(resolver, appFiles, file));\n\n let params = {\n amdModules,\n fastbootOnlyAmdModules,\n lazyRoutes,\n lazyEngines,\n eagerModules,\n styles,\n // this is a backward-compatibility feature: addons can force inclusion of modules.\n defineModulesFrom: './-embroider-implicit-modules.js',\n };\n\n return {\n src: entryTemplate(params),\n watches: [fromDir],\n };\n}\n\nconst entryTemplate = compile(`\nimport { macroCondition, getGlobalConfig } from '@embroider/macros';\n\n{{#if styles}}\n if (macroCondition(!getGlobalConfig().fastboot?.isRunning)) {\n {{#each styles as |stylePath| ~}}\n await import(\"{{js-string-escape stylePath.path}}\");\n {{/each}}\n }\n{{/if}}\n\n{{#if defineModulesFrom ~}}\n import implicitModules from \"{{js-string-escape defineModulesFrom}}\";\n{{/if}}\n\n{{#each eagerModules as |eagerModule| ~}}\n import \"{{js-string-escape eagerModule}}\";\n{{/each}}\n\n{{#each amdModules as |amdModule index| ~}}\n import * as amdModule{{index}} from \"{{js-string-escape amdModule.buildtime}}\"\n{{/each}}\n\nlet exportFastbootModules = {};\n\n{{#if fastbootOnlyAmdModules}}\n if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {\n let fastbootModules = {};\n\n {{#each fastbootOnlyAmdModules as |amdModule| ~}}\n fastbootModules[\"{{js-string-escape amdModule.runtime}}\"] = import(\"{{js-string-escape amdModule.buildtime}}\");\n {{/each}}\n\n const resolvedValues = await Promise.all(Object.values(fastbootModules));\n\n Object.keys(fastbootModules).forEach((k, i) => {\n exportFasbootModules[k] = resolvedValues[i];\n })\n }\n{{/if}}\n\n\n{{#if lazyRoutes}}\nwindow._embroiderRouteBundles_ = [\n {{#each lazyRoutes as |route|}}\n {\n names: {{json-stringify route.names}},\n load: function() {\n return import(\"{{js-string-escape route.path}}\");\n }\n },\n {{/each}}\n]\n{{/if}}\n\n{{#if lazyEngines}}\nwindow._embroiderEngineBundles_ = [\n {{#each lazyEngines as |engine|}}\n {\n names: {{json-stringify engine.names}},\n load: function() {\n return import(\"{{js-string-escape engine.path}}\");\n }\n },\n {{/each}}\n]\n{{/if}}\n\nexport default Object.assign(\n {},\n implicitModules,\n {\n {{#each amdModules as |amdModule index| ~}}\n \"{{js-string-escape amdModule.runtime}}\": amdModule{{index}},\n {{/each}}\n },\n exportFastbootModules\n);\n`) as (params: {\n amdModules: { runtime: string; buildtime: string }[];\n fastbootOnlyAmdModules?: { runtime: string; buildtime: string }[];\n defineModulesFrom?: string;\n eagerModules?: string[];\n lazyRoutes?: { names: string[]; path: string }[];\n lazyEngines?: { names: string[]; path: string }[];\n styles?: { path: string }[];\n}) => string;\n\nfunction excludeDotFiles(files: string[]) {\n return files.filter(file => !file.startsWith('.') && !file.includes('/.'));\n}\n\nexport function importPaths(resolver: Resolver, { engine }: AppFiles, engineRelativePath: string) {\n let resolvableExtensionsPattern = extensionsPattern(resolver.options.resolvableExtensions);\n let noHBS = engineRelativePath.replace(resolvableExtensionsPattern, '').replace(/\\.hbs$/, '');\n return {\n runtime: `${engine.modulePrefix}/${noHBS}`,\n buildtime: `./${engineRelativePath}`,\n };\n}\n\nexport function splitRoute(\n routeName: string,\n files: RouteFiles,\n splitAtRoutes: (RegExp | string)[] | undefined,\n addToParent: (routeName: string, filename: string) => void,\n addLazyBundle: (routeNames: string[], files: string[]) => void\n) {\n let shouldSplit = routeName && shouldSplitRoute(routeName, splitAtRoutes);\n let ownFiles = [];\n let ownNames = new Set() as Set<string>;\n\n if (files.template) {\n if (shouldSplit) {\n ownFiles.push(files.template);\n ownNames.add(routeName);\n } else {\n addToParent(routeName, files.template);\n }\n }\n\n if (files.controller) {\n if (shouldSplit) {\n ownFiles.push(files.controller);\n ownNames.add(routeName);\n } else {\n addToParent(routeName, files.controller);\n }\n }\n\n if (files.route) {\n if (shouldSplit) {\n ownFiles.push(files.route);\n ownNames.add(routeName);\n } else {\n addToParent(routeName, files.route);\n }\n }\n\n for (let [childName, childFiles] of files.children) {\n splitRoute(\n `${routeName}.${childName}`,\n childFiles,\n splitAtRoutes,\n (childRouteName: string, childFile: string) => {\n // this is our child calling \"addToParent\"\n if (shouldSplit) {\n ownFiles.push(childFile);\n ownNames.add(childRouteName);\n } else {\n addToParent(childRouteName, childFile);\n }\n },\n (routeNames: string[], files: string[]) => {\n addLazyBundle(routeNames, files);\n }\n );\n }\n\n if (ownFiles.length > 0) {\n addLazyBundle([...ownNames], ownFiles);\n }\n}\n\nfunction shouldSplitRoute(routeName: string, splitAtRoutes: (RegExp | string)[] | undefined) {\n if (!splitAtRoutes) {\n return false;\n }\n return splitAtRoutes.find(pattern => {\n if (typeof pattern === 'string') {\n return pattern === routeName;\n } else {\n return pattern.test(routeName);\n }\n });\n}\n\nexport function getAppFiles(appRoot: string): Set<string> {\n const files: string[] = walkSync(appRoot, {\n ignore: ['_babel_filter_.js', 'app.js', 'assets', 'testem.js', 'node_modules'],\n });\n return new Set(files);\n}\n\nexport function getFastbootFiles(appRoot: string): Set<string> {\n const appDirPath = join(appRoot, '_fastboot_');\n const files: string[] = walkSync(appDirPath);\n return new Set(files);\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import type { Resolver } from './module-resolver';
2
+ export declare function encodeRouteEntrypoint(packagePath: string, matched: string | undefined, routeName: string): string;
3
+ export declare function decodeRouteEntrypoint(filename: string): {
4
+ fromDir: string;
5
+ route: string;
6
+ } | undefined;
7
+ export declare function encodePublicRouteEntrypoint(routeNames: string[], _files: string[]): string;
8
+ export declare function decodePublicRouteEntrypoint(specifier: string): string | null;
9
+ export declare function renderRouteEntrypoint(resolver: Resolver, { fromDir, route }: {
10
+ fromDir: string;
11
+ route: string;
12
+ }): {
13
+ src: string;
14
+ watches: string[];
15
+ };
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encodeRouteEntrypoint = encodeRouteEntrypoint;
4
+ exports.decodeRouteEntrypoint = decodeRouteEntrypoint;
5
+ exports.encodePublicRouteEntrypoint = encodePublicRouteEntrypoint;
6
+ exports.decodePublicRouteEntrypoint = decodePublicRouteEntrypoint;
7
+ exports.renderRouteEntrypoint = renderRouteEntrypoint;
8
+ const app_files_1 = require("./app-files");
9
+ const path_1 = require("path");
10
+ const js_handlebars_1 = require("./js-handlebars");
11
+ const shared_internals_1 = require("@embroider/shared-internals");
12
+ const lodash_1 = require("lodash");
13
+ const virtual_entrypoint_1 = require("./virtual-entrypoint");
14
+ const entrypointPattern = /(?<filename>.*)[\\/]-embroider-route-entrypoint.js:route=(?<route>.*)/;
15
+ function encodeRouteEntrypoint(packagePath, matched, routeName) {
16
+ return (0, path_1.resolve)(packagePath, matched ? `${matched}:route=${routeName}` : `-embroider-route-entrypoint.js:route=${routeName}`);
17
+ }
18
+ function decodeRouteEntrypoint(filename) {
19
+ // Performance: avoid paying regex exec cost unless needed
20
+ if (!filename.includes('-embroider-route-entrypoint')) {
21
+ return;
22
+ }
23
+ let m = entrypointPattern.exec(filename);
24
+ if (m) {
25
+ return {
26
+ fromDir: m.groups.filename,
27
+ route: m.groups.route,
28
+ };
29
+ }
30
+ }
31
+ function encodePublicRouteEntrypoint(routeNames, _files) {
32
+ return `@embroider/core/route/${encodeURIComponent(routeNames[0])}`;
33
+ }
34
+ function decodePublicRouteEntrypoint(specifier) {
35
+ const publicPrefix = '@embroider/core/route/';
36
+ if (!specifier.startsWith(publicPrefix)) {
37
+ return null;
38
+ }
39
+ return specifier.slice(publicPrefix.length);
40
+ }
41
+ function renderRouteEntrypoint(resolver, { fromDir, route }) {
42
+ const owner = resolver.packageCache.ownerOfFile(fromDir);
43
+ if (!owner) {
44
+ throw new Error('Owner expected'); // ToDo: Really bad error, update message
45
+ }
46
+ let engine = resolver.owningEngine(owner);
47
+ let isApp = (owner === null || owner === void 0 ? void 0 : owner.root) === resolver.options.engines[0].root;
48
+ let hasFastboot = Boolean(resolver.options.engines[0].activeAddons.find(a => a.name === 'ember-cli-fastboot'));
49
+ let appFiles = new app_files_1.AppFiles({
50
+ package: owner,
51
+ addons: new Map(engine.activeAddons.map(addon => [
52
+ resolver.packageCache.get(addon.root),
53
+ addon.canResolveFromFile,
54
+ ])),
55
+ isApp,
56
+ modulePrefix: isApp ? resolver.options.modulePrefix : engine.packageName,
57
+ appRelativePath: 'NOT_USED_DELETE_ME',
58
+ }, (0, virtual_entrypoint_1.getAppFiles)(fromDir), hasFastboot ? (0, virtual_entrypoint_1.getFastbootFiles)(owner.root) : new Set(), (0, shared_internals_1.extensionsPattern)(resolver.options.resolvableExtensions), (0, virtual_entrypoint_1.staticAppPathsPattern)(resolver.options.staticAppPaths), resolver.options.podModulePrefix);
59
+ let src = '';
60
+ for (let [routeName, routeFiles] of appFiles.routeFiles.children) {
61
+ (0, virtual_entrypoint_1.splitRoute)(routeName, routeFiles, resolver.options.splitAtRoutes, (_, _filename) => {
62
+ // noop
63
+ }, (routeNames, routeFiles) => {
64
+ if (routeNames[0] === route) {
65
+ let [fastboot, nonFastboot] = (0, lodash_1.partition)(routeFiles, file => appFiles.isFastbootOnly.get(file));
66
+ const amdModules = nonFastboot.map(f => (0, virtual_entrypoint_1.importPaths)(resolver, appFiles, f));
67
+ const fastbootOnlyAmdModules = fastboot.map(f => (0, virtual_entrypoint_1.importPaths)(resolver, appFiles, f));
68
+ src = routeEntryTemplate({
69
+ amdModules,
70
+ fastbootOnlyAmdModules,
71
+ });
72
+ }
73
+ });
74
+ }
75
+ return { src, watches: [] };
76
+ }
77
+ const routeEntryTemplate = (0, js_handlebars_1.compile)(`
78
+ const output = {};
79
+ export default output;
80
+
81
+ {{#each amdModules as |amdModule index| ~}}
82
+ import * as amdModule{{index}} from "{{js-string-escape amdModule.buildtime}}"
83
+ output["{{js-string-escape amdModule.runtime}}"] = amdModule{{index}};
84
+ {{/each}}
85
+
86
+ {{#if fastbootOnlyAmdModules}}
87
+ if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {
88
+ {{#each fastbootOnlyAmdModules as |amdModule| ~}}
89
+ output["{{js-string-escape amdModule.runtime}}"] = await import("{{js-string-escape amdModule.buildtime}}");
90
+ {{/each}}
91
+ }
92
+ {{/if}}
93
+ `);
94
+ //# sourceMappingURL=virtual-route-entrypoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-route-entrypoint.js","sourceRoot":"","sources":["virtual-route-entrypoint.ts"],"names":[],"mappings":";;AAWA,sDAKC;AAED,sDAYC;AAED,kEAEC;AAED,kEAOC;AAED,sDA6DC;AAzGD,2CAAuC;AAEvC,+BAA+B;AAC/B,mDAA0C;AAC1C,kEAAgE;AAChE,mCAAmC;AACnC,6DAAqH;AAErH,MAAM,iBAAiB,GAAG,uEAAuE,CAAC;AAElG,SAAgB,qBAAqB,CAAC,WAAmB,EAAE,OAA2B,EAAE,SAAiB;IACvG,OAAO,IAAA,cAAO,EACZ,WAAW,EACX,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,UAAU,SAAS,EAAE,CAAC,CAAC,CAAC,wCAAwC,SAAS,EAAE,CAChG,CAAC;AACJ,CAAC;AAED,SAAgB,qBAAqB,CAAC,QAAgB;IACpD,0DAA0D;IAC1D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;QACtD,OAAO;IACT,CAAC;IACD,IAAI,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,CAAC;QACN,OAAO;YACL,OAAO,EAAE,CAAC,CAAC,MAAO,CAAC,QAAQ;YAC3B,KAAK,EAAE,CAAC,CAAC,MAAO,CAAC,KAAK;SACvB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,2BAA2B,CAAC,UAAoB,EAAE,MAAgB;IAChF,OAAO,yBAAyB,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,SAAgB,2BAA2B,CAAC,SAAiB;IAC3D,MAAM,YAAY,GAAG,wBAAwB,CAAC;IAC9C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED,SAAgB,qBAAqB,CACnC,QAAkB,EAClB,EAAE,OAAO,EAAE,KAAK,EAAsC;IAEtD,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAEzD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,yCAAyC;IAC9E,CAAC;IAED,IAAI,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,KAAK,GAAG,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,MAAK,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC;IAC9D,IAAI,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAC,CAAC;IAEhH,IAAI,QAAQ,GAAG,IAAI,oBAAQ,CACzB;QACE,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,IAAI,GAAG,CACb,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAmB;YACvD,KAAK,CAAC,kBAAkB;SACzB,CAAC,CACH;QACD,KAAK;QACL,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;QACxE,eAAe,EAAE,oBAAoB;KACtC,EACD,IAAA,gCAAW,EAAC,OAAO,CAAC,EACpB,WAAW,CAAC,CAAC,CAAC,IAAA,qCAAgB,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EACtD,IAAA,oCAAiB,EAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,EACxD,IAAA,0CAAqB,EAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,EACtD,QAAQ,CAAC,OAAO,CAAC,eAAe,CACjC,CAAC;IAEF,IAAI,GAAG,GAAG,EAAE,CAAC;IAEb,KAAK,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QACjE,IAAA,+BAAU,EACR,SAAS,EACT,UAAU,EACV,QAAQ,CAAC,OAAO,CAAC,aAAa,EAC9B,CAAC,CAAS,EAAE,SAAiB,EAAE,EAAE;YAC/B,OAAO;QACT,CAAC,EACD,CAAC,UAAoB,EAAE,UAAoB,EAAE,EAAE;YAC7C,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC5B,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,kBAAS,EAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;gBAE/F,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,gCAAW,EAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5E,MAAM,sBAAsB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,gCAAW,EAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;gBAErF,GAAG,GAAG,kBAAkB,CAAC;oBACvB,UAAU;oBACV,sBAAsB;iBACvB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,kBAAkB,GAAG,IAAA,uBAAO,EAAC;;;;;;;;;;;;;;;;CAgBlC,CAGW,CAAC","sourcesContent":["import type { V2AddonPackage } from '@embroider/shared-internals/src/package';\nimport { AppFiles } from './app-files';\nimport type { Resolver } from './module-resolver';\nimport { resolve } from 'path';\nimport { compile } from './js-handlebars';\nimport { extensionsPattern } from '@embroider/shared-internals';\nimport { partition } from 'lodash';\nimport { getAppFiles, getFastbootFiles, importPaths, splitRoute, staticAppPathsPattern } from './virtual-entrypoint';\n\nconst entrypointPattern = /(?<filename>.*)[\\\\/]-embroider-route-entrypoint.js:route=(?<route>.*)/;\n\nexport function encodeRouteEntrypoint(packagePath: string, matched: string | undefined, routeName: string): string {\n return resolve(\n packagePath,\n matched ? `${matched}:route=${routeName}` : `-embroider-route-entrypoint.js:route=${routeName}`\n );\n}\n\nexport function decodeRouteEntrypoint(filename: string): { fromDir: string; route: string } | undefined {\n // Performance: avoid paying regex exec cost unless needed\n if (!filename.includes('-embroider-route-entrypoint')) {\n return;\n }\n let m = entrypointPattern.exec(filename);\n if (m) {\n return {\n fromDir: m.groups!.filename,\n route: m.groups!.route,\n };\n }\n}\n\nexport function encodePublicRouteEntrypoint(routeNames: string[], _files: string[]) {\n return `@embroider/core/route/${encodeURIComponent(routeNames[0])}`;\n}\n\nexport function decodePublicRouteEntrypoint(specifier: string): string | null {\n const publicPrefix = '@embroider/core/route/';\n if (!specifier.startsWith(publicPrefix)) {\n return null;\n }\n\n return specifier.slice(publicPrefix.length);\n}\n\nexport function renderRouteEntrypoint(\n resolver: Resolver,\n { fromDir, route }: { fromDir: string; route: string }\n): { src: string; watches: string[] } {\n const owner = resolver.packageCache.ownerOfFile(fromDir);\n\n if (!owner) {\n throw new Error('Owner expected'); // ToDo: Really bad error, update message\n }\n\n let engine = resolver.owningEngine(owner);\n let isApp = owner?.root === resolver.options.engines[0]!.root;\n let hasFastboot = Boolean(resolver.options.engines[0]!.activeAddons.find(a => a.name === 'ember-cli-fastboot'));\n\n let appFiles = new AppFiles(\n {\n package: owner,\n addons: new Map(\n engine.activeAddons.map(addon => [\n resolver.packageCache.get(addon.root) as V2AddonPackage,\n addon.canResolveFromFile,\n ])\n ),\n isApp,\n modulePrefix: isApp ? resolver.options.modulePrefix : engine.packageName,\n appRelativePath: 'NOT_USED_DELETE_ME',\n },\n getAppFiles(fromDir),\n hasFastboot ? getFastbootFiles(owner.root) : new Set(),\n extensionsPattern(resolver.options.resolvableExtensions),\n staticAppPathsPattern(resolver.options.staticAppPaths),\n resolver.options.podModulePrefix\n );\n\n let src = '';\n\n for (let [routeName, routeFiles] of appFiles.routeFiles.children) {\n splitRoute(\n routeName,\n routeFiles,\n resolver.options.splitAtRoutes,\n (_: string, _filename: string) => {\n // noop\n },\n (routeNames: string[], routeFiles: string[]) => {\n if (routeNames[0] === route) {\n let [fastboot, nonFastboot] = partition(routeFiles, file => appFiles.isFastbootOnly.get(file));\n\n const amdModules = nonFastboot.map(f => importPaths(resolver, appFiles, f));\n const fastbootOnlyAmdModules = fastboot.map(f => importPaths(resolver, appFiles, f));\n\n src = routeEntryTemplate({\n amdModules,\n fastbootOnlyAmdModules,\n });\n }\n }\n );\n }\n\n return { src, watches: [] };\n}\n\nconst routeEntryTemplate = compile(`\nconst output = {};\nexport default output;\n\n{{#each amdModules as |amdModule index| ~}}\n import * as amdModule{{index}} from \"{{js-string-escape amdModule.buildtime}}\"\n output[\"{{js-string-escape amdModule.runtime}}\"] = amdModule{{index}};\n{{/each}}\n\n{{#if fastbootOnlyAmdModules}}\n if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {\n {{#each fastbootOnlyAmdModules as |amdModule| ~}}\n output[\"{{js-string-escape amdModule.runtime}}\"] = await import(\"{{js-string-escape amdModule.buildtime}}\");\n {{/each}}\n }\n{{/if}}\n`) as (params: {\n amdModules: { runtime: string; buildtime: string }[];\n fastbootOnlyAmdModules: { runtime: string; buildtime: string }[];\n}) => string;\n"]}
@@ -0,0 +1,4 @@
1
+ import type { Resolver } from './module-resolver';
2
+ import type { VirtualContentResult } from './virtual-content';
3
+ export declare function decodeTestSupportStyles(filename: string): boolean;
4
+ export declare function renderTestSupportStyles(filename: string, resolver: Resolver): VirtualContentResult;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.decodeTestSupportStyles = decodeTestSupportStyles;
7
+ exports.renderTestSupportStyles = renderTestSupportStyles;
8
+ const fs_1 = require("fs");
9
+ const lodash_1 = require("lodash");
10
+ const resolve_1 = __importDefault(require("resolve"));
11
+ function decodeTestSupportStyles(filename) {
12
+ return filename.endsWith('-embroider-test-support-styles.css');
13
+ }
14
+ function renderTestSupportStyles(filename, resolver) {
15
+ const owner = resolver.packageCache.ownerOfFile(filename);
16
+ if (!owner) {
17
+ throw new Error(`Failed to find a valid owner for ${filename}`);
18
+ }
19
+ return { src: getTestSupportStyles(owner, resolver), watches: [] };
20
+ }
21
+ function getTestSupportStyles(owner, resolver) {
22
+ let engineConfig = resolver.owningEngine(owner);
23
+ let engine = {
24
+ package: owner,
25
+ addons: new Map(engineConfig.activeAddons.map(addon => [
26
+ resolver.packageCache.get(addon.root),
27
+ addon.canResolveFromFile,
28
+ ])),
29
+ isApp: true,
30
+ modulePrefix: resolver.options.modulePrefix,
31
+ appRelativePath: 'NOT_USED_DELETE_ME',
32
+ };
33
+ return generateTestSupportStyles(engine);
34
+ }
35
+ function generateTestSupportStyles(engine) {
36
+ let result = impliedAddonTestSupportStyles(engine).map((sourcePath) => {
37
+ let source = (0, fs_1.readFileSync)(sourcePath);
38
+ return `${source}`;
39
+ });
40
+ return result.join('');
41
+ }
42
+ function impliedAddonTestSupportStyles(engine) {
43
+ let result = [];
44
+ for (let addon of (0, lodash_1.sortBy)(Array.from(engine.addons.keys()), pkg => {
45
+ switch (pkg.name) {
46
+ case 'loader.js':
47
+ return 0;
48
+ case 'ember-source':
49
+ return 10;
50
+ default:
51
+ return 1000;
52
+ }
53
+ })) {
54
+ let implicitStyles = addon.meta['implicit-test-styles'];
55
+ if (implicitStyles) {
56
+ let options = { basedir: addon.root };
57
+ for (let mod of implicitStyles) {
58
+ result.push(resolve_1.default.sync(mod, options));
59
+ }
60
+ }
61
+ }
62
+ return result;
63
+ }
64
+ //# sourceMappingURL=virtual-test-support-styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-test-support-styles.js","sourceRoot":"","sources":["virtual-test-support-styles.ts"],"names":[],"mappings":";;;;;AASA,0DAEC;AAED,0DAMC;AAjBD,2BAAkC;AAClC,mCAAgC;AAChC,sDAA8B;AAK9B,SAAgB,uBAAuB,CAAC,QAAgB;IACtD,OAAO,QAAQ,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC;AACjE,CAAC;AAED,SAAgB,uBAAuB,CAAC,QAAgB,EAAE,QAAkB;IAC1E,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc,EAAE,QAAkB;IAC9D,IAAI,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,MAAM,GAAW;QACnB,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,IAAI,GAAG,CACb,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAmB;YACvD,KAAK,CAAC,kBAAkB;SACzB,CAAC,CACH;QACD,KAAK,EAAE,IAAI;QACX,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY;QAC3C,eAAe,EAAE,oBAAoB;KACtC,CAAC;IAEF,OAAO,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAc;IAC/C,IAAI,MAAM,GAAa,6BAA6B,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,UAAkB,EAAU,EAAE;QAC9F,IAAI,MAAM,GAAG,IAAA,iBAAY,EAAC,UAAU,CAAC,CAAC;QACtC,OAAO,GAAG,MAAM,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAW,CAAC;AACnC,CAAC;AAED,SAAS,6BAA6B,CAAC,MAAc;IACnD,IAAI,MAAM,GAAkB,EAAE,CAAC;IAC/B,KAAK,IAAI,KAAK,IAAI,IAAA,eAAM,EAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;QAC/D,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,WAAW;gBACd,OAAO,CAAC,CAAC;YACX,KAAK,cAAc;gBACjB,OAAO,EAAE,CAAC;YACZ;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;QACH,IAAI,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACxD,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;YACtC,KAAK,IAAI,GAAG,IAAI,cAAc,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,iBAAO,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import type { Package } from '@embroider/shared-internals';\nimport type { V2AddonPackage } from '@embroider/shared-internals/src/package';\nimport { readFileSync } from 'fs';\nimport { sortBy } from 'lodash';\nimport resolve from 'resolve';\nimport type { Engine } from './app-files';\nimport type { Resolver } from './module-resolver';\nimport type { VirtualContentResult } from './virtual-content';\n\nexport function decodeTestSupportStyles(filename: string): boolean {\n return filename.endsWith('-embroider-test-support-styles.css');\n}\n\nexport function renderTestSupportStyles(filename: string, resolver: Resolver): VirtualContentResult {\n const owner = resolver.packageCache.ownerOfFile(filename);\n if (!owner) {\n throw new Error(`Failed to find a valid owner for ${filename}`);\n }\n return { src: getTestSupportStyles(owner, resolver), watches: [] };\n}\n\nfunction getTestSupportStyles(owner: Package, resolver: Resolver): string {\n let engineConfig = resolver.owningEngine(owner);\n let engine: Engine = {\n package: owner,\n addons: new Map(\n engineConfig.activeAddons.map(addon => [\n resolver.packageCache.get(addon.root) as V2AddonPackage,\n addon.canResolveFromFile,\n ])\n ),\n isApp: true,\n modulePrefix: resolver.options.modulePrefix,\n appRelativePath: 'NOT_USED_DELETE_ME',\n };\n\n return generateTestSupportStyles(engine);\n}\n\nfunction generateTestSupportStyles(engine: Engine): string {\n let result: string[] = impliedAddonTestSupportStyles(engine).map((sourcePath: string): string => {\n let source = readFileSync(sourcePath);\n return `${source}`;\n });\n\n return result.join('') as string;\n}\n\nfunction impliedAddonTestSupportStyles(engine: Engine): string[] {\n let result: Array<string> = [];\n for (let addon of sortBy(Array.from(engine.addons.keys()), pkg => {\n switch (pkg.name) {\n case 'loader.js':\n return 0;\n case 'ember-source':\n return 10;\n default:\n return 1000;\n }\n })) {\n let implicitStyles = addon.meta['implicit-test-styles'];\n if (implicitStyles) {\n let options = { basedir: addon.root };\n for (let mod of implicitStyles) {\n result.push(resolve.sync(mod, options));\n }\n }\n }\n return result;\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { Resolver } from './module-resolver';
2
+ import type { VirtualContentResult } from './virtual-content';
3
+ export declare function decodeImplicitTestScripts(filename: string): boolean;
4
+ export declare function renderImplicitTestScripts(filename: string, resolver: Resolver): VirtualContentResult;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.decodeImplicitTestScripts = decodeImplicitTestScripts;
7
+ exports.renderImplicitTestScripts = renderImplicitTestScripts;
8
+ const fs_1 = require("fs");
9
+ const resolve_1 = __importDefault(require("resolve"));
10
+ function decodeImplicitTestScripts(filename) {
11
+ return filename.endsWith('-embroider-test-support.js');
12
+ }
13
+ function renderImplicitTestScripts(filename, resolver) {
14
+ const owner = resolver.packageCache.ownerOfFile(filename);
15
+ if (!owner) {
16
+ throw new Error(`Failed to find a valid owner for ${filename}`);
17
+ }
18
+ return { src: getTestSupport(owner, resolver), watches: [] };
19
+ }
20
+ function getTestSupport(owner, resolver) {
21
+ let engineConfig = resolver.owningEngine(owner);
22
+ let engine = {
23
+ package: owner,
24
+ addons: new Map(engineConfig.activeAddons.map(addon => [
25
+ resolver.packageCache.get(addon.root),
26
+ addon.canResolveFromFile,
27
+ ])),
28
+ isApp: true,
29
+ modulePrefix: resolver.options.modulePrefix,
30
+ appRelativePath: 'NOT_USED_DELETE_ME',
31
+ };
32
+ return generateTestSupport(engine);
33
+ }
34
+ function generateTestSupport(engine) {
35
+ // Add classic addons test-support
36
+ let result = impliedAddonTestSupport(engine);
37
+ let hasEmbroiderMacrosTestSupport = result.find(sourcePath => sourcePath.endsWith('embroider-macros-test-support.js'));
38
+ result = result.map((sourcePath) => {
39
+ let source = (0, fs_1.readFileSync)(sourcePath);
40
+ return `${source}`;
41
+ });
42
+ // Add _testing_suffix_.js
43
+ result.push(`
44
+ var runningTests=true;
45
+ if (typeof Testem !== 'undefined' && (typeof QUnit !== 'undefined' || typeof Mocha !== 'undefined')) {
46
+ Testem.hookIntoTestFramework();
47
+ }`);
48
+ // whether or not anybody was actually using @embroider/macros explicitly
49
+ // as an addon, we ensure its test-support file is always present.
50
+ if (!hasEmbroiderMacrosTestSupport) {
51
+ result.unshift(`${(0, fs_1.readFileSync)(require.resolve('@embroider/macros/src/vendor/embroider-macros-test-support'))}`);
52
+ }
53
+ return result.join('');
54
+ }
55
+ function impliedAddonTestSupport(engine) {
56
+ let result = [];
57
+ for (let addon of Array.from(engine.addons.keys())) {
58
+ let implicitScripts = addon.meta['implicit-test-scripts'];
59
+ if (implicitScripts) {
60
+ let options = { basedir: addon.root };
61
+ for (let mod of implicitScripts) {
62
+ result.push(resolve_1.default.sync(mod, options));
63
+ }
64
+ }
65
+ }
66
+ return result;
67
+ }
68
+ //# sourceMappingURL=virtual-test-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-test-support.js","sourceRoot":"","sources":["virtual-test-support.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Package } from '@embroider/shared-internals';\nimport type { V2AddonPackage } from '@embroider/shared-internals/src/package';\nimport { readFileSync } from 'fs';\nimport resolve from 'resolve';\nimport type { Engine } from './app-files';\nimport type { Resolver } from './module-resolver';\nimport type { VirtualContentResult } from './virtual-content';\n\nexport function decodeImplicitTestScripts(filename: string): boolean {\n return filename.endsWith('-embroider-test-support.js');\n}\n\nexport function renderImplicitTestScripts(filename: string, resolver: Resolver): VirtualContentResult {\n const owner = resolver.packageCache.ownerOfFile(filename);\n if (!owner) {\n throw new Error(`Failed to find a valid owner for ${filename}`);\n }\n return { src: getTestSupport(owner, resolver), watches: [] };\n}\n\nfunction getTestSupport(owner: Package, resolver: Resolver): string {\n let engineConfig = resolver.owningEngine(owner);\n let engine: Engine = {\n package: owner,\n addons: new Map(\n engineConfig.activeAddons.map(addon => [\n resolver.packageCache.get(addon.root) as V2AddonPackage,\n addon.canResolveFromFile,\n ])\n ),\n isApp: true,\n modulePrefix: resolver.options.modulePrefix,\n appRelativePath: 'NOT_USED_DELETE_ME',\n };\n\n return generateTestSupport(engine);\n}\n\nfunction generateTestSupport(engine: Engine): string {\n // Add classic addons test-support\n let result: string[] = impliedAddonTestSupport(engine);\n let hasEmbroiderMacrosTestSupport = result.find(sourcePath =>\n sourcePath.endsWith('embroider-macros-test-support.js')\n );\n result = result.map((sourcePath: string): string => {\n let source = readFileSync(sourcePath);\n return `${source}`;\n });\n\n // Add _testing_suffix_.js\n result.push(`\nvar runningTests=true;\nif (typeof Testem !== 'undefined' && (typeof QUnit !== 'undefined' || typeof Mocha !== 'undefined')) {\n Testem.hookIntoTestFramework();\n}`);\n\n // whether or not anybody was actually using @embroider/macros explicitly\n // as an addon, we ensure its test-support file is always present.\n if (!hasEmbroiderMacrosTestSupport) {\n result.unshift(`${readFileSync(require.resolve('@embroider/macros/src/vendor/embroider-macros-test-support'))}`);\n }\n\n return result.join('') as string;\n}\n\nfunction impliedAddonTestSupport(engine: Engine): string[] {\n let result: Array<string> = [];\n for (let addon of Array.from(engine.addons.keys())) {\n let implicitScripts = addon.meta['implicit-test-scripts'];\n if (implicitScripts) {\n let options = { basedir: addon.root };\n for (let mod of implicitScripts) {\n result.push(resolve.sync(mod, options));\n }\n }\n }\n return result;\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { Resolver } from './module-resolver';
2
+ import type { VirtualContentResult } from './virtual-content';
3
+ export declare function decodeVirtualVendorStyles(filename: string): boolean;
4
+ export declare function renderVendorStyles(filename: string, resolver: Resolver): VirtualContentResult;