@embroider/core 3.4.10-unstable.1ea1c86 → 3.4.10-unstable.2f2e854

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.
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderTestEntrypoint = exports.decodeTestEntrypoint = void 0;
4
+ const app_files_1 = require("./app-files");
5
+ const js_handlebars_1 = require("./js-handlebars");
6
+ const shared_internals_1 = require("@embroider/shared-internals");
7
+ const virtual_entrypoint_1 = require("./virtual-entrypoint");
8
+ const entrypointPattern = /(?<filename>.*)[\\/]-embroider-test-entrypoint.js/;
9
+ function decodeTestEntrypoint(filename) {
10
+ // Performance: avoid paying regex exec cost unless needed
11
+ if (!filename.includes('-embroider-test-entrypoint.js')) {
12
+ return;
13
+ }
14
+ let m = entrypointPattern.exec(filename);
15
+ if (m) {
16
+ return {
17
+ fromFile: m.groups.filename,
18
+ };
19
+ }
20
+ }
21
+ exports.decodeTestEntrypoint = decodeTestEntrypoint;
22
+ function renderTestEntrypoint(resolver, { fromFile }) {
23
+ const owner = resolver.packageCache.ownerOfFile(fromFile);
24
+ if (!owner) {
25
+ throw new Error(`Owner expected while loading test entrypoint from file: ${fromFile}`);
26
+ }
27
+ let engine = resolver.owningEngine(owner);
28
+ let appFiles = new app_files_1.AppFiles({
29
+ package: owner,
30
+ addons: new Map(engine.activeAddons.map(addon => [
31
+ resolver.packageCache.get(addon.root),
32
+ addon.canResolveFromFile,
33
+ ])),
34
+ isApp: true,
35
+ modulePrefix: resolver.options.modulePrefix,
36
+ appRelativePath: 'NOT_USED_DELETE_ME',
37
+ }, (0, virtual_entrypoint_1.getAppFiles)(owner.root), new Set(), // no fastboot files
38
+ (0, shared_internals_1.extensionsPattern)(resolver.options.resolvableExtensions), (0, virtual_entrypoint_1.staticAppPathsPattern)(resolver.options.staticAppPaths), resolver.options.podModulePrefix);
39
+ let amdModules = [];
40
+ for (let relativePath of appFiles.tests) {
41
+ amdModules.push((0, virtual_entrypoint_1.importPaths)(resolver, appFiles, relativePath));
42
+ }
43
+ let src = entryTemplate({
44
+ amdModules,
45
+ });
46
+ return {
47
+ src,
48
+ watches: [],
49
+ };
50
+ }
51
+ exports.renderTestEntrypoint = renderTestEntrypoint;
52
+ const entryTemplate = (0, js_handlebars_1.compile)(`
53
+ import { importSync as i } from '@embroider/macros';
54
+ let w = window;
55
+ let d = w.define;
56
+
57
+ import "ember-testing";
58
+ import "@embroider/core/entrypoint";
59
+
60
+ {{#each amdModules as |amdModule| ~}}
61
+ d("{{js-string-escape amdModule.runtime}}", function(){ return i("{{js-string-escape amdModule.buildtime}}");});
62
+ {{/each}}
63
+
64
+ import('./tests/test-helper');
65
+ EmberENV.TESTS_FILE_LOADED = true;
66
+ `);
67
+ //# sourceMappingURL=virtual-test-entrypoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-test-entrypoint.js","sourceRoot":"","sources":["virtual-test-entrypoint.ts"],"names":[],"mappings":";;;AAAA,2CAAuC;AACvC,mDAA0C;AAE1C,kEAAgE;AAEhE,6DAAuF;AAEvF,MAAM,iBAAiB,GAAG,mDAAmD,CAAC;AAE9E,SAAgB,oBAAoB,CAAC,QAAgB;IACnD,0DAA0D;IAC1D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;QACxD,OAAO;IACT,CAAC;IACD,IAAI,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,CAAC;QACN,OAAO;YACL,QAAQ,EAAE,CAAC,CAAC,MAAO,CAAC,QAAQ;SAC7B,CAAC;IACJ,CAAC;AACH,CAAC;AAXD,oDAWC;AAED,SAAgB,oBAAoB,CAClC,QAAkB,EAClB,EAAE,QAAQ,EAAwB;IAElC,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAE1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,2DAA2D,QAAQ,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAE1C,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,EAAE,IAAI;QACX,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY;QAC3C,eAAe,EAAE,oBAAoB;KACtC,EACD,IAAA,gCAAW,EAAC,KAAK,CAAC,IAAI,CAAC,EACvB,IAAI,GAAG,EAAE,EAAE,oBAAoB;IAC/B,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,UAAU,GAA6C,EAAE,CAAC;IAE9D,KAAK,IAAI,YAAY,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACxC,UAAU,CAAC,IAAI,CAAC,IAAA,gCAAW,EAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,GAAG,GAAG,aAAa,CAAC;QACtB,UAAU;KACX,CAAC,CAAC;IAEH,OAAO;QACL,GAAG;QACH,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AA9CD,oDA8CC;AAED,MAAM,aAAa,GAAG,IAAA,uBAAO,EAAC;;;;;;;;;;;;;;CAc7B,CAAiF,CAAC","sourcesContent":["import { AppFiles } from './app-files';\nimport { compile } from './js-handlebars';\nimport type { Resolver } from './module-resolver';\nimport { extensionsPattern } from '@embroider/shared-internals';\nimport type { V2AddonPackage } from '@embroider/shared-internals/src/package';\nimport { getAppFiles, importPaths, staticAppPathsPattern } from './virtual-entrypoint';\n\nconst entrypointPattern = /(?<filename>.*)[\\\\/]-embroider-test-entrypoint.js/;\n\nexport function decodeTestEntrypoint(filename: string): { fromFile: string } | undefined {\n // Performance: avoid paying regex exec cost unless needed\n if (!filename.includes('-embroider-test-entrypoint.js')) {\n return;\n }\n let m = entrypointPattern.exec(filename);\n if (m) {\n return {\n fromFile: m.groups!.filename,\n };\n }\n}\n\nexport function renderTestEntrypoint(\n resolver: Resolver,\n { fromFile }: { fromFile: string }\n): { src: string; watches: string[] } {\n const owner = resolver.packageCache.ownerOfFile(fromFile);\n\n if (!owner) {\n throw new Error(`Owner expected while loading test entrypoint from file: ${fromFile}`);\n }\n\n let engine = resolver.owningEngine(owner);\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: true,\n modulePrefix: resolver.options.modulePrefix,\n appRelativePath: 'NOT_USED_DELETE_ME',\n },\n getAppFiles(owner.root),\n new Set(), // no fastboot files\n extensionsPattern(resolver.options.resolvableExtensions),\n staticAppPathsPattern(resolver.options.staticAppPaths),\n resolver.options.podModulePrefix\n );\n\n let amdModules: { runtime: string; buildtime: string }[] = [];\n\n for (let relativePath of appFiles.tests) {\n amdModules.push(importPaths(resolver, appFiles, relativePath));\n }\n\n let src = entryTemplate({\n amdModules,\n });\n\n return {\n src,\n watches: [],\n };\n}\n\nconst entryTemplate = compile(`\nimport { importSync as i } from '@embroider/macros';\nlet w = window;\nlet d = w.define;\n\nimport \"ember-testing\";\nimport \"@embroider/core/entrypoint\";\n\n{{#each amdModules as |amdModule| ~}}\n d(\"{{js-string-escape amdModule.runtime}}\", function(){ return i(\"{{js-string-escape amdModule.buildtime}}\");});\n{{/each}}\n\nimport('./tests/test-helper');\nEmberENV.TESTS_FILE_LOADED = true;\n`) as (params: { amdModules: { runtime: string; buildtime: string }[] }) => string;\n"]}
@@ -27,17 +27,23 @@ function getVendorStyles(owner, resolver) {
27
27
  resolver.packageCache.get(addon.root),
28
28
  addon.canResolveFromFile,
29
29
  ])),
30
- isApp: true,
30
+ isApp: engineConfig.root === resolver.options.engines[0].root,
31
31
  modulePrefix: resolver.options.modulePrefix,
32
32
  appRelativePath: 'NOT_USED_DELETE_ME',
33
33
  };
34
34
  return generateVendorStyles(engine);
35
35
  }
36
36
  function generateVendorStyles(engine) {
37
- let result = impliedAddonVendorStyles(engine).map((sourcePath) => {
38
- let source = (0, fs_1.readFileSync)(sourcePath);
39
- return `${source}`;
40
- });
37
+ let result = impliedAddonVendorStyles(engine).map(sourcePath => (0, fs_1.readFileSync)(sourcePath, 'utf-8'));
38
+ // add the engines own styles but only if it is not the top-level app, that is provided by @embroider/synthesized-styles
39
+ if (!engine.isApp) {
40
+ let engineStyles = [];
41
+ engineStyles = getAddonImplicitStyles(engine.package).map(sourcePath => (0, fs_1.readFileSync)(sourcePath, 'utf-8'));
42
+ // add engine's own implicit styles after all vendor styles
43
+ if (engineStyles.length) {
44
+ result = [...result, ...engineStyles];
45
+ }
46
+ }
41
47
  return result.join('');
42
48
  }
43
49
  function impliedAddonVendorStyles(engine) {
@@ -52,21 +58,26 @@ function impliedAddonVendorStyles(engine) {
52
58
  return 1000;
53
59
  }
54
60
  })) {
55
- let implicitStyles = addon.meta['implicit-styles'];
56
- if (implicitStyles) {
57
- let styles = [];
58
- let options = { basedir: addon.root };
59
- for (let mod of implicitStyles) {
60
- // exclude engines because they will handle their own css importation
61
- if (!addon.isLazyEngine()) {
62
- styles.push(resolve_1.default.sync(mod, options));
63
- }
64
- }
65
- if (styles.length) {
66
- result = [...styles, ...result];
67
- }
61
+ // exclude lazy engines because they will handle their own css importation
62
+ if (addon.isLazyEngine()) {
63
+ continue;
64
+ }
65
+ let styles = getAddonImplicitStyles(addon);
66
+ if (styles.length) {
67
+ result = [...styles, ...result];
68
68
  }
69
69
  }
70
70
  return result;
71
71
  }
72
+ function getAddonImplicitStyles(pkg) {
73
+ let implicitStyles = pkg.meta['implicit-styles'];
74
+ let styles = [];
75
+ if (implicitStyles) {
76
+ let options = { basedir: pkg.root };
77
+ for (let mod of implicitStyles) {
78
+ styles.push(resolve_1.default.sync(mod, options));
79
+ }
80
+ }
81
+ return styles;
82
+ }
72
83
  //# sourceMappingURL=virtual-vendor-styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"virtual-vendor-styles.js","sourceRoot":"","sources":["virtual-vendor-styles.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 { sortBy } from 'lodash';\nimport resolve from 'resolve';\nimport type { Resolver } from './module-resolver';\nimport type { VirtualContentResult } from './virtual-content';\nimport type { Engine } from './app-files';\n\nexport function decodeVirtualVendorStyles(filename: string): boolean {\n return filename.endsWith('-embroider-vendor-styles.css');\n}\n\nexport function renderVendorStyles(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: getVendorStyles(owner, resolver), watches: [] };\n}\n\nfunction getVendorStyles(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 generateVendorStyles(engine);\n}\n\nfunction generateVendorStyles(engine: Engine): string {\n let result: string[] = impliedAddonVendorStyles(engine).map((sourcePath: string): string => {\n let source = readFileSync(sourcePath);\n return `${source}`;\n });\n\n return result.join('') as string;\n}\n\nfunction impliedAddonVendorStyles(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-styles'];\n if (implicitStyles) {\n let styles = [];\n let options = { basedir: addon.root };\n for (let mod of implicitStyles) {\n // exclude engines because they will handle their own css importation\n if (!addon.isLazyEngine()) {\n styles.push(resolve.sync(mod, options));\n }\n }\n if (styles.length) {\n result = [...styles, ...result];\n }\n }\n }\n return result;\n}\n"]}
1
+ {"version":3,"file":"virtual-vendor-styles.js","sourceRoot":"","sources":["virtual-vendor-styles.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 { sortBy } from 'lodash';\nimport resolve from 'resolve';\nimport type { Resolver } from './module-resolver';\nimport type { VirtualContentResult } from './virtual-content';\nimport type { Engine } from './app-files';\n\nexport function decodeVirtualVendorStyles(filename: string): boolean {\n return filename.endsWith('-embroider-vendor-styles.css');\n}\n\nexport function renderVendorStyles(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: getVendorStyles(owner, resolver), watches: [] };\n}\n\nfunction getVendorStyles(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: engineConfig.root === resolver.options.engines[0].root,\n modulePrefix: resolver.options.modulePrefix,\n appRelativePath: 'NOT_USED_DELETE_ME',\n };\n\n return generateVendorStyles(engine);\n}\n\nfunction generateVendorStyles(engine: Engine): string {\n let result: string[] = impliedAddonVendorStyles(engine).map(sourcePath => readFileSync(sourcePath, 'utf-8'));\n\n // add the engines own styles but only if it is not the top-level app, that is provided by @embroider/synthesized-styles\n if (!engine.isApp) {\n let engineStyles = [];\n\n engineStyles = getAddonImplicitStyles(engine.package as V2AddonPackage).map(sourcePath =>\n readFileSync(sourcePath, 'utf-8')\n );\n\n // add engine's own implicit styles after all vendor styles\n if (engineStyles.length) {\n result = [...result, ...engineStyles];\n }\n }\n\n return result.join('') as string;\n}\n\nfunction impliedAddonVendorStyles(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 // exclude lazy engines because they will handle their own css importation\n if (addon.isLazyEngine()) {\n continue;\n }\n\n let styles = getAddonImplicitStyles(addon);\n\n if (styles.length) {\n result = [...styles, ...result];\n }\n }\n return result;\n}\n\nfunction getAddonImplicitStyles(pkg: V2AddonPackage): string[] {\n let implicitStyles = pkg.meta['implicit-styles'];\n let styles = [];\n if (implicitStyles) {\n let options = { basedir: pkg.root };\n for (let mod of implicitStyles) {\n styles.push(resolve.sync(mod, options));\n }\n }\n return styles;\n}\n"]}