@embroider/compat 3.5.6 → 3.5.7-unstable.3b061c2
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.
- package/package.json +6 -6
- package/src/audit/babel-visitor.js +7 -1
- package/src/audit/babel-visitor.js.map +1 -1
- package/src/audit.d.ts +6 -53
- package/src/audit.js +92 -276
- package/src/audit.js.map +1 -1
- package/src/babel-plugin-adjust-imports.js +1 -1
- package/src/babel-plugin-adjust-imports.js.map +1 -1
- package/src/compat-adapters/@ember-data/store.d.ts +1 -5
- package/src/compat-adapters/@ember-data/store.js +3 -15
- package/src/compat-adapters/@ember-data/store.js.map +1 -1
- package/src/compat-adapters/ember-fetch.d.ts +5 -0
- package/src/compat-adapters/ember-fetch.js +19 -0
- package/src/compat-adapters/ember-fetch.js.map +1 -0
- package/src/compat-addons.js +1 -1
- package/src/compat-addons.js.map +1 -1
- package/src/compat-app-builder.d.ts +9 -31
- package/src/compat-app-builder.js +122 -854
- package/src/compat-app-builder.js.map +1 -1
- package/src/compat-app.d.ts +2 -10
- package/src/compat-app.js +52 -73
- package/src/compat-app.js.map +1 -1
- package/src/content-for-config.d.ts +11 -0
- package/src/content-for-config.js +66 -0
- package/src/content-for-config.js.map +1 -0
- package/src/default-pipeline.d.ts +2 -2
- package/src/default-pipeline.js +21 -0
- package/src/default-pipeline.js.map +1 -1
- package/src/http-audit.d.ts +13 -0
- package/src/http-audit.js +45 -0
- package/src/http-audit.js.map +1 -0
- package/src/index.d.ts +1 -1
- package/src/index.js +2 -1
- package/src/index.js.map +1 -1
- package/src/module-visitor.d.ts +52 -0
- package/src/module-visitor.js +285 -0
- package/src/module-visitor.js.map +1 -0
- package/src/options.d.ts +3 -0
- package/src/options.js +3 -0
- package/src/options.js.map +1 -1
- package/src/resolver-transform.js +3 -0
- package/src/resolver-transform.js.map +1 -1
- package/src/standalone-addon-build.js +4 -4
- package/src/standalone-addon-build.js.map +1 -1
- package/src/v1-config.d.ts +0 -8
- package/src/v1-config.js +1 -51
- package/src/v1-config.js.map +1 -1
- package/src/compat-adapters/@ember-data/debug.d.ts +0 -6
- package/src/compat-adapters/@ember-data/debug.js +0 -22
- package/src/compat-adapters/@ember-data/debug.js.map +0 -1
- package/src/v1-appboot.d.ts +0 -14
- package/src/v1-appboot.js +0 -47
- package/src/v1-appboot.js.map +0 -1
|
@@ -1,78 +1,46 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
2
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
3
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
4
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
5
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
7
|
};
|
|
24
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
|
-
if (mod && mod.__esModule) return mod;
|
|
26
|
-
var result = {};
|
|
27
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
28
|
-
__setModuleDefault(result, mod);
|
|
29
|
-
return result;
|
|
30
|
-
};
|
|
31
8
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
32
9
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
33
10
|
};
|
|
34
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
12
|
exports.CompatAppBuilder = void 0;
|
|
36
13
|
const core_1 = require("@embroider/core");
|
|
37
|
-
const walk_sync_1 = __importDefault(require("walk-sync"));
|
|
38
14
|
const path_1 = require("path");
|
|
39
15
|
const dependency_rules_1 = require("./dependency-rules");
|
|
40
16
|
const flatMap_1 = __importDefault(require("lodash/flatMap"));
|
|
41
|
-
const sortBy_1 = __importDefault(require("lodash/sortBy"));
|
|
42
|
-
const flatten_1 = __importDefault(require("lodash/flatten"));
|
|
43
|
-
const partition_1 = __importDefault(require("lodash/partition"));
|
|
44
17
|
const mergeWith_1 = __importDefault(require("lodash/mergeWith"));
|
|
45
18
|
const cloneDeep_1 = __importDefault(require("lodash/cloneDeep"));
|
|
46
|
-
const resolve_1 = require("resolve");
|
|
47
19
|
const bind_decorator_1 = __importDefault(require("bind-decorator"));
|
|
48
20
|
const fs_extra_1 = require("fs-extra");
|
|
49
|
-
const ember_html_1 = require("@embroider/core/src/ember-html");
|
|
50
21
|
const portable_babel_config_1 = require("@embroider/core/src/portable-babel-config");
|
|
51
22
|
const app_files_1 = require("@embroider/core/src/app-files");
|
|
52
23
|
const portable_1 = require("@embroider/core/src/portable");
|
|
53
|
-
const assert_never_1 = __importDefault(require("assert-never"));
|
|
54
24
|
const typescript_memoize_1 = require("typescript-memoize");
|
|
55
25
|
const path_2 = require("path");
|
|
56
|
-
const
|
|
26
|
+
const resolve_1 = __importDefault(require("resolve"));
|
|
57
27
|
const fs_extra_2 = require("fs-extra");
|
|
58
28
|
const node_1 = require("@embroider/macros/src/node");
|
|
59
|
-
const fast_sourcemap_concat_1 = __importDefault(require("fast-sourcemap-concat"));
|
|
60
29
|
const escape_string_regexp_1 = __importDefault(require("escape-string-regexp"));
|
|
61
30
|
const sync_dir_1 = require("./sync-dir");
|
|
62
31
|
// This exists during the actual broccoli build step. As opposed to CompatApp,
|
|
63
32
|
// which also exists during pipeline-construction time.
|
|
64
33
|
class CompatAppBuilder {
|
|
65
|
-
constructor(root, origAppPackage, appPackageWithMovedDeps, options, compatApp, configTree, synthVendor, synthStyles) {
|
|
34
|
+
constructor(root, origAppPackage, appPackageWithMovedDeps, options, compatApp, configTree, contentForTree, synthVendor, synthStyles) {
|
|
66
35
|
this.root = root;
|
|
67
36
|
this.origAppPackage = origAppPackage;
|
|
68
37
|
this.appPackageWithMovedDeps = appPackageWithMovedDeps;
|
|
69
38
|
this.options = options;
|
|
70
39
|
this.compatApp = compatApp;
|
|
71
40
|
this.configTree = configTree;
|
|
41
|
+
this.contentForTree = contentForTree;
|
|
72
42
|
this.synthVendor = synthVendor;
|
|
73
43
|
this.synthStyles = synthStyles;
|
|
74
|
-
// for each relativePath, an Asset we have already emitted
|
|
75
|
-
this.assets = new Map();
|
|
76
44
|
this.firstBuild = true;
|
|
77
45
|
}
|
|
78
46
|
fastbootJSSrcDir() {
|
|
@@ -81,54 +49,6 @@ class CompatAppBuilder {
|
|
|
81
49
|
return target;
|
|
82
50
|
}
|
|
83
51
|
}
|
|
84
|
-
extractAssets(treePaths) {
|
|
85
|
-
let assets = [];
|
|
86
|
-
// Everything in our traditional public tree is an on-disk asset
|
|
87
|
-
if (treePaths.publicTree) {
|
|
88
|
-
walk_sync_1.default
|
|
89
|
-
.entries(treePaths.publicTree, {
|
|
90
|
-
directories: false,
|
|
91
|
-
})
|
|
92
|
-
.forEach(entry => {
|
|
93
|
-
assets.push({
|
|
94
|
-
kind: 'on-disk',
|
|
95
|
-
relativePath: entry.relativePath,
|
|
96
|
-
sourcePath: entry.fullPath,
|
|
97
|
-
mtime: entry.mtime, // https://github.com/joliss/node-walk-sync/pull/38
|
|
98
|
-
size: entry.size,
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
// ember-cli traditionally outputs a dummy testem.js file to prevent
|
|
103
|
-
// spurious errors when running tests under "ember s".
|
|
104
|
-
if (this.compatApp.shouldBuildTests) {
|
|
105
|
-
let testemAsset = this.findTestemAsset();
|
|
106
|
-
if (testemAsset) {
|
|
107
|
-
assets.push(testemAsset);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
for (let asset of this.emberEntrypoints(treePaths.htmlTree)) {
|
|
111
|
-
assets.push(asset);
|
|
112
|
-
}
|
|
113
|
-
return assets;
|
|
114
|
-
}
|
|
115
|
-
findTestemAsset() {
|
|
116
|
-
let sourcePath;
|
|
117
|
-
try {
|
|
118
|
-
sourcePath = (0, resolve_1.sync)('ember-cli/lib/broccoli/testem.js', { basedir: this.root });
|
|
119
|
-
}
|
|
120
|
-
catch (err) { }
|
|
121
|
-
if (sourcePath) {
|
|
122
|
-
let stat = (0, fs_extra_1.statSync)(sourcePath);
|
|
123
|
-
return {
|
|
124
|
-
kind: 'on-disk',
|
|
125
|
-
relativePath: 'testem.js',
|
|
126
|
-
sourcePath,
|
|
127
|
-
mtime: stat.mtime.getTime(),
|
|
128
|
-
size: stat.size,
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
52
|
activeAddonChildren(pkg) {
|
|
133
53
|
let result = pkg.dependencies.filter(this.isActiveAddon).filter(
|
|
134
54
|
// When looking for child addons, we want to ignore 'peerDependencies' of
|
|
@@ -177,43 +97,19 @@ class CompatAppBuilder {
|
|
|
177
97
|
// For TS, we defer to ember-cli-babel, and the setting for
|
|
178
98
|
// "enableTypescriptTransform" can be set with and without
|
|
179
99
|
// ember-cli-typescript
|
|
180
|
-
return ['.wasm', '.mjs', '.js', '.json', '.ts', '.hbs', '.hbs.js'];
|
|
100
|
+
return ['.wasm', '.mjs', '.js', '.json', '.ts', '.hbs', '.hbs.js', '.gjs', '.gts'];
|
|
181
101
|
}
|
|
182
|
-
|
|
183
|
-
let classicEntrypoints = [
|
|
184
|
-
{ entrypoint: 'index.html', includeTests: false },
|
|
185
|
-
{ entrypoint: 'tests/index.html', includeTests: true },
|
|
186
|
-
];
|
|
102
|
+
addEmberEntrypoints(htmlTreePath) {
|
|
103
|
+
let classicEntrypoints = ['index.html', 'tests/index.html'];
|
|
187
104
|
if (!this.compatApp.shouldBuildTests) {
|
|
188
105
|
classicEntrypoints.pop();
|
|
189
106
|
}
|
|
190
|
-
for (let
|
|
107
|
+
for (let entrypoint of classicEntrypoints) {
|
|
191
108
|
let sourcePath = (0, path_2.join)(htmlTreePath, entrypoint);
|
|
192
|
-
let
|
|
193
|
-
|
|
194
|
-
kind: 'ember',
|
|
195
|
-
relativePath: entrypoint,
|
|
196
|
-
includeTests,
|
|
197
|
-
sourcePath,
|
|
198
|
-
mtime: stats.mtime.getTime(),
|
|
199
|
-
size: stats.size,
|
|
200
|
-
rootURL: this.rootURL(),
|
|
201
|
-
prepare: (dom) => {
|
|
202
|
-
let scripts = [...dom.window.document.querySelectorAll('script')];
|
|
203
|
-
let styles = [...dom.window.document.querySelectorAll('link[rel*="stylesheet"]')];
|
|
204
|
-
return {
|
|
205
|
-
javascript: this.compatApp.findAppScript(scripts, entrypoint),
|
|
206
|
-
styles: this.compatApp.findAppStyles(styles, entrypoint),
|
|
207
|
-
implicitScripts: this.compatApp.findVendorScript(scripts, entrypoint),
|
|
208
|
-
implicitStyles: this.compatApp.findVendorStyles(styles, entrypoint),
|
|
209
|
-
testJavascript: this.compatApp.findTestScript(scripts),
|
|
210
|
-
implicitTestScripts: this.compatApp.findTestSupportScript(scripts),
|
|
211
|
-
implicitTestStyles: this.compatApp.findTestSupportStyles(styles),
|
|
212
|
-
};
|
|
213
|
-
},
|
|
214
|
-
};
|
|
215
|
-
yield asset;
|
|
109
|
+
let rewrittenAppPath = (0, path_2.join)(this.root, entrypoint);
|
|
110
|
+
(0, fs_extra_1.writeFileSync)(rewrittenAppPath, (0, fs_extra_1.readFileSync)(sourcePath));
|
|
216
111
|
}
|
|
112
|
+
return classicEntrypoints;
|
|
217
113
|
}
|
|
218
114
|
modulePrefix() {
|
|
219
115
|
return this.configTree.readConfig().modulePrefix;
|
|
@@ -233,10 +129,6 @@ class CompatAppBuilder {
|
|
|
233
129
|
resolverConfig(engines) {
|
|
234
130
|
let renamePackages = Object.assign({}, ...this.allActiveAddons.map(dep => dep.meta['renamed-packages']));
|
|
235
131
|
let renameModules = Object.assign({}, ...this.allActiveAddons.map(dep => dep.meta['renamed-modules']));
|
|
236
|
-
let activeAddons = {};
|
|
237
|
-
for (let addon of this.allActiveAddons) {
|
|
238
|
-
activeAddons[addon.name] = addon.root;
|
|
239
|
-
}
|
|
240
132
|
let options = {
|
|
241
133
|
staticHelpers: this.options.staticHelpers,
|
|
242
134
|
staticModifiers: this.options.staticModifiers,
|
|
@@ -245,7 +137,6 @@ class CompatAppBuilder {
|
|
|
245
137
|
};
|
|
246
138
|
let config = {
|
|
247
139
|
// this part is the base ModuleResolverOptions as required by @embroider/core
|
|
248
|
-
activeAddons,
|
|
249
140
|
renameModules,
|
|
250
141
|
renamePackages,
|
|
251
142
|
resolvableExtensions: this.resolvableExtensions(),
|
|
@@ -257,118 +148,34 @@ class CompatAppBuilder {
|
|
|
257
148
|
root: (0, fs_extra_1.realpathSync)(index === 0 ? this.root : appFiles.engine.package.root),
|
|
258
149
|
fastbootFiles: appFiles.fastbootFiles,
|
|
259
150
|
activeAddons: [...appFiles.engine.addons]
|
|
260
|
-
.map(
|
|
261
|
-
name:
|
|
262
|
-
root:
|
|
151
|
+
.map(([addon, canResolveFromFile]) => ({
|
|
152
|
+
name: addon.name,
|
|
153
|
+
root: addon.root,
|
|
154
|
+
canResolveFromFile,
|
|
263
155
|
}))
|
|
264
156
|
// the traditional order is the order in which addons will run, such
|
|
265
157
|
// that the last one wins. Our resolver's order is the order to
|
|
266
158
|
// search, so first one wins.
|
|
267
159
|
.reverse(),
|
|
160
|
+
isLazy: appFiles.engine.package.isLazyEngine(),
|
|
268
161
|
})),
|
|
269
162
|
amdCompatibility: this.options.amdCompatibility,
|
|
270
163
|
// this is the additional stufff that @embroider/compat adds on top to do
|
|
271
164
|
// global template resolving
|
|
272
165
|
modulePrefix: this.modulePrefix(),
|
|
166
|
+
splitAtRoutes: this.options.splitAtRoutes,
|
|
273
167
|
podModulePrefix: this.podModulePrefix(),
|
|
274
168
|
activePackageRules: this.activeRules(),
|
|
275
169
|
options,
|
|
170
|
+
autoRun: this.compatApp.autoRun,
|
|
171
|
+
staticAppPaths: this.options.staticAppPaths,
|
|
276
172
|
};
|
|
277
173
|
return config;
|
|
278
174
|
}
|
|
279
|
-
scriptPriority(pkg) {
|
|
280
|
-
switch (pkg.name) {
|
|
281
|
-
case 'loader.js':
|
|
282
|
-
return 0;
|
|
283
|
-
case 'ember-source':
|
|
284
|
-
return 10;
|
|
285
|
-
default:
|
|
286
|
-
return 1000;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
175
|
get resolvableExtensionsPattern() {
|
|
290
176
|
return (0, core_1.extensionsPattern)(this.resolvableExtensions());
|
|
291
177
|
}
|
|
292
|
-
|
|
293
|
-
let result = this.impliedAddonAssets(type, engine).map((sourcePath) => {
|
|
294
|
-
let stats = (0, fs_extra_1.statSync)(sourcePath);
|
|
295
|
-
return {
|
|
296
|
-
kind: 'on-disk',
|
|
297
|
-
relativePath: (0, core_1.explicitRelative)(this.root, sourcePath),
|
|
298
|
-
sourcePath,
|
|
299
|
-
mtime: stats.mtimeMs,
|
|
300
|
-
size: stats.size,
|
|
301
|
-
};
|
|
302
|
-
});
|
|
303
|
-
if (type === 'implicit-scripts') {
|
|
304
|
-
result.unshift({
|
|
305
|
-
kind: 'in-memory',
|
|
306
|
-
relativePath: '_testing_prefix_.js',
|
|
307
|
-
source: `var runningTests=false;`,
|
|
308
|
-
});
|
|
309
|
-
result.unshift({
|
|
310
|
-
kind: 'in-memory',
|
|
311
|
-
relativePath: '_ember_env_.js',
|
|
312
|
-
source: `window.EmberENV={ ...(window.EmberENV || {}), ...${JSON.stringify(emberENV, null, 2)} };`,
|
|
313
|
-
});
|
|
314
|
-
result.push({
|
|
315
|
-
kind: 'in-memory',
|
|
316
|
-
relativePath: '_loader_.js',
|
|
317
|
-
source: `loader.makeDefaultExport=false;`,
|
|
318
|
-
});
|
|
319
|
-
}
|
|
320
|
-
if (type === 'implicit-test-scripts') {
|
|
321
|
-
// this is the traditional test-support-suffix.js
|
|
322
|
-
result.push({
|
|
323
|
-
kind: 'in-memory',
|
|
324
|
-
relativePath: '_testing_suffix_.js',
|
|
325
|
-
source: `
|
|
326
|
-
var runningTests=true;
|
|
327
|
-
if (typeof Testem !== 'undefined' && (typeof QUnit !== 'undefined' || typeof Mocha !== 'undefined')) {
|
|
328
|
-
Testem.hookIntoTestFramework();
|
|
329
|
-
}`,
|
|
330
|
-
});
|
|
331
|
-
// whether or not anybody was actually using @embroider/macros
|
|
332
|
-
// explicitly as an addon, we ensure its test-support file is always
|
|
333
|
-
// present.
|
|
334
|
-
if (!result.find(s => s.kind === 'on-disk' && s.sourcePath.endsWith('embroider-macros-test-support.js'))) {
|
|
335
|
-
result.unshift({
|
|
336
|
-
kind: 'on-disk',
|
|
337
|
-
sourcePath: require.resolve('@embroider/macros/src/vendor/embroider-macros-test-support'),
|
|
338
|
-
mtime: 0,
|
|
339
|
-
size: 0,
|
|
340
|
-
relativePath: 'embroider-macros-test-support.js',
|
|
341
|
-
});
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
return result;
|
|
345
|
-
}
|
|
346
|
-
impliedAddonAssets(type, { engine }) {
|
|
347
|
-
let result = [];
|
|
348
|
-
for (let addon of (0, sortBy_1.default)(Array.from(engine.addons), this.scriptPriority.bind(this))) {
|
|
349
|
-
let implicitScripts = addon.meta[type];
|
|
350
|
-
if (implicitScripts) {
|
|
351
|
-
let styles = [];
|
|
352
|
-
let options = { basedir: addon.root };
|
|
353
|
-
for (let mod of implicitScripts) {
|
|
354
|
-
if (type === 'implicit-styles') {
|
|
355
|
-
// exclude engines because they will handle their own css importation
|
|
356
|
-
if (!addon.isLazyEngine()) {
|
|
357
|
-
styles.push(resolve_2.default.sync(mod, options));
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
else {
|
|
361
|
-
result.push(resolve_2.default.sync(mod, options));
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
if (styles.length) {
|
|
365
|
-
result = [...styles, ...result];
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
return result;
|
|
370
|
-
}
|
|
371
|
-
babelConfig(resolverConfig) {
|
|
178
|
+
async babelConfig(resolverConfig) {
|
|
372
179
|
let babel = (0, cloneDeep_1.default)(this.compatApp.babelConfig());
|
|
373
180
|
if (!babel.plugins) {
|
|
374
181
|
babel.plugins = [];
|
|
@@ -378,7 +185,10 @@ class CompatAppBuilder {
|
|
|
378
185
|
babel.plugins.push(require.resolve('@babel/plugin-syntax-dynamic-import'));
|
|
379
186
|
// https://github.com/webpack/webpack/issues/12154
|
|
380
187
|
babel.plugins.push(require.resolve('./rename-require-plugin'));
|
|
381
|
-
babel.plugins.push([
|
|
188
|
+
babel.plugins.push([
|
|
189
|
+
require.resolve('babel-plugin-ember-template-compilation'),
|
|
190
|
+
await this.etcOptions(resolverConfig),
|
|
191
|
+
]);
|
|
382
192
|
// this is @embroider/macros configured for full stage3 resolution
|
|
383
193
|
babel.plugins.push(...this.compatApp.macrosConfig.babelPluginConfig());
|
|
384
194
|
let colocationOptions = {
|
|
@@ -430,107 +240,6 @@ class CompatAppBuilder {
|
|
|
430
240
|
addCachablePlugin(portable.config);
|
|
431
241
|
return portable;
|
|
432
242
|
}
|
|
433
|
-
insertEmberApp(asset, appFiles, prepared, emberENV) {
|
|
434
|
-
let html = asset.html;
|
|
435
|
-
if (this.fastbootConfig) {
|
|
436
|
-
// ignore scripts like ember-cli-livereload.js which are not really associated with
|
|
437
|
-
// "the app".
|
|
438
|
-
let ignoreScripts = html.dom.window.document.querySelectorAll('script');
|
|
439
|
-
ignoreScripts.forEach(script => {
|
|
440
|
-
script.setAttribute('data-fastboot-ignore', '');
|
|
441
|
-
});
|
|
442
|
-
}
|
|
443
|
-
// our tests entrypoint already includes a correct module dependency on the
|
|
444
|
-
// app, so we only insert the app when we're not inserting tests
|
|
445
|
-
if (!asset.fileAsset.includeTests) {
|
|
446
|
-
let appJS = this.topAppJSAsset(appFiles, prepared);
|
|
447
|
-
html.insertScriptTag(html.javascript, appJS.relativePath, { type: 'module' });
|
|
448
|
-
}
|
|
449
|
-
if (this.fastbootConfig) {
|
|
450
|
-
// any extra fastboot app files get inserted into our html.javascript
|
|
451
|
-
// section, after the app has been inserted.
|
|
452
|
-
for (let script of this.fastbootConfig.extraAppFiles) {
|
|
453
|
-
html.insertScriptTag(html.javascript, script, { tag: 'fastboot-script' });
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
html.insertStyleLink(html.styles, `assets/${this.origAppPackage.name}.css`);
|
|
457
|
-
const parentEngine = appFiles.find(e => !e.engine.parent);
|
|
458
|
-
let vendorJS = this.implicitScriptsAsset(prepared, parentEngine, emberENV);
|
|
459
|
-
if (vendorJS) {
|
|
460
|
-
html.insertScriptTag(html.implicitScripts, vendorJS.relativePath);
|
|
461
|
-
}
|
|
462
|
-
if (this.fastbootConfig) {
|
|
463
|
-
// any extra fastboot vendor files get inserted into our
|
|
464
|
-
// html.implicitScripts section, after the regular implicit script
|
|
465
|
-
// (vendor.js) have been inserted.
|
|
466
|
-
for (let script of this.fastbootConfig.extraVendorFiles) {
|
|
467
|
-
html.insertScriptTag(html.implicitScripts, script, { tag: 'fastboot-script' });
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
let implicitStyles = this.implicitStylesAsset(prepared, parentEngine);
|
|
471
|
-
if (implicitStyles) {
|
|
472
|
-
html.insertStyleLink(html.implicitStyles, implicitStyles.relativePath);
|
|
473
|
-
}
|
|
474
|
-
if (!asset.fileAsset.includeTests) {
|
|
475
|
-
return;
|
|
476
|
-
}
|
|
477
|
-
// Test-related assets happen below this point
|
|
478
|
-
let testJS = this.testJSEntrypoint(appFiles, prepared);
|
|
479
|
-
html.insertScriptTag(html.testJavascript, testJS.relativePath, { type: 'module' });
|
|
480
|
-
let implicitTestScriptsAsset = this.implicitTestScriptsAsset(prepared, parentEngine);
|
|
481
|
-
if (implicitTestScriptsAsset) {
|
|
482
|
-
html.insertScriptTag(html.implicitTestScripts, implicitTestScriptsAsset.relativePath);
|
|
483
|
-
}
|
|
484
|
-
let implicitTestStylesAsset = this.implicitTestStylesAsset(prepared, parentEngine);
|
|
485
|
-
if (implicitTestStylesAsset) {
|
|
486
|
-
html.insertStyleLink(html.implicitTestStyles, implicitTestStylesAsset.relativePath);
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
implicitScriptsAsset(prepared, application, emberENV) {
|
|
490
|
-
let asset = prepared.get('assets/vendor.js');
|
|
491
|
-
if (!asset) {
|
|
492
|
-
let implicitScripts = this.impliedAssets('implicit-scripts', application, emberENV);
|
|
493
|
-
if (implicitScripts.length > 0) {
|
|
494
|
-
asset = new ConcatenatedAsset('assets/vendor.js', implicitScripts, this.resolvableExtensionsPattern);
|
|
495
|
-
prepared.set(asset.relativePath, asset);
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
return asset;
|
|
499
|
-
}
|
|
500
|
-
implicitStylesAsset(prepared, application) {
|
|
501
|
-
let asset = prepared.get('assets/vendor.css');
|
|
502
|
-
if (!asset) {
|
|
503
|
-
let implicitStyles = this.impliedAssets('implicit-styles', application);
|
|
504
|
-
if (implicitStyles.length > 0) {
|
|
505
|
-
// we reverse because we want the synthetic vendor style at the top
|
|
506
|
-
asset = new ConcatenatedAsset('assets/vendor.css', implicitStyles.reverse(), this.resolvableExtensionsPattern);
|
|
507
|
-
prepared.set(asset.relativePath, asset);
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
return asset;
|
|
511
|
-
}
|
|
512
|
-
implicitTestScriptsAsset(prepared, application) {
|
|
513
|
-
let testSupportJS = prepared.get('assets/test-support.js');
|
|
514
|
-
if (!testSupportJS) {
|
|
515
|
-
let implicitTestScripts = this.impliedAssets('implicit-test-scripts', application);
|
|
516
|
-
if (implicitTestScripts.length > 0) {
|
|
517
|
-
testSupportJS = new ConcatenatedAsset('assets/test-support.js', implicitTestScripts, this.resolvableExtensionsPattern);
|
|
518
|
-
prepared.set(testSupportJS.relativePath, testSupportJS);
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
return testSupportJS;
|
|
522
|
-
}
|
|
523
|
-
implicitTestStylesAsset(prepared, application) {
|
|
524
|
-
let asset = prepared.get('assets/test-support.css');
|
|
525
|
-
if (!asset) {
|
|
526
|
-
let implicitTestStyles = this.impliedAssets('implicit-test-styles', application);
|
|
527
|
-
if (implicitTestStyles.length > 0) {
|
|
528
|
-
asset = new ConcatenatedAsset('assets/test-support.css', implicitTestStyles, this.resolvableExtensionsPattern);
|
|
529
|
-
prepared.set(asset.relativePath, asset);
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
|
-
return asset;
|
|
533
|
-
}
|
|
534
243
|
// recurse to find all active addons that don't cross an engine boundary.
|
|
535
244
|
// Inner engines themselves will be returned, but not those engines' children.
|
|
536
245
|
// The output set's insertion order is the proper ember-cli compatible
|
|
@@ -540,22 +249,31 @@ class CompatAppBuilder {
|
|
|
540
249
|
if (!child.isEngine()) {
|
|
541
250
|
this.findActiveAddons(child, engine, true);
|
|
542
251
|
}
|
|
543
|
-
|
|
252
|
+
let canResolveFrom;
|
|
253
|
+
if (pkg === this.appPackageWithMovedDeps) {
|
|
254
|
+
// we want canResolveFrom to always be a rewritten package path, and our
|
|
255
|
+
// app's package is not rewritten yet here.
|
|
256
|
+
canResolveFrom = (0, path_1.resolve)(this.root, 'package.json');
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
// whereas our addons are already moved
|
|
260
|
+
canResolveFrom = (0, path_1.resolve)(pkg.root, 'package.json');
|
|
261
|
+
}
|
|
262
|
+
engine.addons.set(child, canResolveFrom);
|
|
544
263
|
}
|
|
545
264
|
// ensure addons are applied in the correct order, if set (via @embroider/compat/v1-addon)
|
|
546
265
|
if (!isChild) {
|
|
547
|
-
engine.addons = new
|
|
266
|
+
engine.addons = new Map([...engine.addons].sort(([a], [b]) => {
|
|
548
267
|
return (a.meta['order-index'] || 0) - (b.meta['order-index'] || 0);
|
|
549
268
|
}));
|
|
550
269
|
}
|
|
551
270
|
}
|
|
552
|
-
partitionEngines(
|
|
271
|
+
partitionEngines() {
|
|
553
272
|
let queue = [
|
|
554
273
|
{
|
|
555
274
|
package: this.appPackageWithMovedDeps,
|
|
556
|
-
addons: new
|
|
557
|
-
|
|
558
|
-
sourcePath: appJSPath,
|
|
275
|
+
addons: new Map(),
|
|
276
|
+
isApp: true,
|
|
559
277
|
modulePrefix: this.modulePrefix(),
|
|
560
278
|
appRelativePath: '.',
|
|
561
279
|
},
|
|
@@ -568,14 +286,13 @@ class CompatAppBuilder {
|
|
|
568
286
|
break;
|
|
569
287
|
}
|
|
570
288
|
this.findActiveAddons(current.package, current);
|
|
571
|
-
for (let addon of current.addons) {
|
|
289
|
+
for (let addon of current.addons.keys()) {
|
|
572
290
|
if (addon.isEngine() && !seenEngines.has(addon)) {
|
|
573
291
|
seenEngines.add(addon);
|
|
574
292
|
queue.push({
|
|
575
293
|
package: addon,
|
|
576
|
-
addons: new
|
|
577
|
-
|
|
578
|
-
sourcePath: addon.root,
|
|
294
|
+
addons: new Map(),
|
|
295
|
+
isApp: !current,
|
|
579
296
|
modulePrefix: addon.name,
|
|
580
297
|
appRelativePath: (0, core_1.explicitRelative)(this.root, addon.root),
|
|
581
298
|
});
|
|
@@ -608,8 +325,8 @@ class CompatAppBuilder {
|
|
|
608
325
|
updateAppJS(appJSPath) {
|
|
609
326
|
var _a;
|
|
610
327
|
if (!this.engines) {
|
|
611
|
-
this.engines = this.partitionEngines(
|
|
612
|
-
if (engine.
|
|
328
|
+
this.engines = this.partitionEngines().map(engine => {
|
|
329
|
+
if (engine.isApp) {
|
|
613
330
|
// this is the app. We have more to do for the app than for other
|
|
614
331
|
// engines.
|
|
615
332
|
let fastbootSync;
|
|
@@ -631,7 +348,7 @@ class CompatAppBuilder {
|
|
|
631
348
|
// their files, not doing any actual copying or building.
|
|
632
349
|
return {
|
|
633
350
|
engine,
|
|
634
|
-
appSync: new sync_dir_1.SyncDir(engine.
|
|
351
|
+
appSync: new sync_dir_1.SyncDir(engine.package.root, undefined),
|
|
635
352
|
// AFAIK, we've never supported a fastboot overlay directory in an
|
|
636
353
|
// engine. But if we do need that, it would go here.
|
|
637
354
|
fastbootSync: undefined,
|
|
@@ -645,164 +362,13 @@ class CompatAppBuilder {
|
|
|
645
362
|
}
|
|
646
363
|
return this.engines.map(({ engine, appSync, fastbootSync }) => {
|
|
647
364
|
var _a;
|
|
648
|
-
return new app_files_1.AppFiles(engine, appSync.files, (_a = fastbootSync === null || fastbootSync === void 0 ? void 0 : fastbootSync.files) !== null && _a !== void 0 ? _a : new Set(), this.resolvableExtensionsPattern, this.podModulePrefix());
|
|
365
|
+
return new app_files_1.AppFiles(engine, appSync.files, (_a = fastbootSync === null || fastbootSync === void 0 ? void 0 : fastbootSync.files) !== null && _a !== void 0 ? _a : new Set(), this.resolvableExtensionsPattern, this.staticAppPathsPattern, this.podModulePrefix());
|
|
649
366
|
});
|
|
650
367
|
}
|
|
651
|
-
|
|
652
|
-
if (
|
|
653
|
-
|
|
654
|
-
let parsed;
|
|
655
|
-
if (prior && prior.kind === 'built-ember' && prior.parsedAsset.validFor(asset)) {
|
|
656
|
-
// we can reuse the parsed html
|
|
657
|
-
parsed = prior.parsedAsset;
|
|
658
|
-
parsed.html.clear();
|
|
659
|
-
}
|
|
660
|
-
else {
|
|
661
|
-
parsed = new ParsedEmberAsset(asset);
|
|
662
|
-
}
|
|
663
|
-
this.insertEmberApp(parsed, appFiles, prepared, emberENV);
|
|
664
|
-
prepared.set(asset.relativePath, new BuiltEmberAsset(parsed));
|
|
665
|
-
}
|
|
666
|
-
else {
|
|
667
|
-
prepared.set(asset.relativePath, asset);
|
|
668
|
-
}
|
|
669
|
-
}
|
|
670
|
-
prepareAssets(requestedAssets, appFiles, emberENV) {
|
|
671
|
-
let prepared = new Map();
|
|
672
|
-
for (let asset of requestedAssets) {
|
|
673
|
-
this.prepareAsset(asset, appFiles, prepared, emberENV);
|
|
674
|
-
}
|
|
675
|
-
return prepared;
|
|
676
|
-
}
|
|
677
|
-
assetIsValid(asset, prior) {
|
|
678
|
-
if (!prior) {
|
|
679
|
-
return false;
|
|
680
|
-
}
|
|
681
|
-
switch (asset.kind) {
|
|
682
|
-
case 'on-disk':
|
|
683
|
-
return prior.kind === 'on-disk' && prior.size === asset.size && prior.mtime === asset.mtime;
|
|
684
|
-
case 'in-memory':
|
|
685
|
-
return prior.kind === 'in-memory' && stringOrBufferEqual(prior.source, asset.source);
|
|
686
|
-
case 'built-ember':
|
|
687
|
-
return prior.kind === 'built-ember' && prior.source === asset.source;
|
|
688
|
-
case 'concatenated-asset':
|
|
689
|
-
return (prior.kind === 'concatenated-asset' &&
|
|
690
|
-
prior.sources.length === asset.sources.length &&
|
|
691
|
-
prior.sources.every((priorFile, index) => {
|
|
692
|
-
let newFile = asset.sources[index];
|
|
693
|
-
return this.assetIsValid(newFile, priorFile);
|
|
694
|
-
}));
|
|
695
|
-
}
|
|
696
|
-
}
|
|
697
|
-
updateOnDiskAsset(asset) {
|
|
698
|
-
let destination = (0, path_2.join)(this.root, asset.relativePath);
|
|
699
|
-
(0, fs_extra_2.ensureDirSync)((0, path_2.dirname)(destination));
|
|
700
|
-
(0, fs_extra_2.copySync)(asset.sourcePath, destination, { dereference: true });
|
|
701
|
-
}
|
|
702
|
-
updateInMemoryAsset(asset) {
|
|
703
|
-
let destination = (0, path_2.join)(this.root, asset.relativePath);
|
|
704
|
-
(0, fs_extra_2.ensureDirSync)((0, path_2.dirname)(destination));
|
|
705
|
-
(0, fs_extra_1.writeFileSync)(destination, asset.source, 'utf8');
|
|
706
|
-
}
|
|
707
|
-
updateBuiltEmberAsset(asset) {
|
|
708
|
-
let destination = (0, path_2.join)(this.root, asset.relativePath);
|
|
709
|
-
(0, fs_extra_2.ensureDirSync)((0, path_2.dirname)(destination));
|
|
710
|
-
(0, fs_extra_1.writeFileSync)(destination, asset.source, 'utf8');
|
|
711
|
-
}
|
|
712
|
-
async updateConcatenatedAsset(asset) {
|
|
713
|
-
let concat = new fast_sourcemap_concat_1.default({
|
|
714
|
-
outputFile: (0, path_2.join)(this.root, asset.relativePath),
|
|
715
|
-
mapCommentType: asset.relativePath.endsWith('.js') ? 'line' : 'block',
|
|
716
|
-
baseDir: this.root,
|
|
717
|
-
});
|
|
718
|
-
if (process.env.EMBROIDER_CONCAT_STATS) {
|
|
719
|
-
let MeasureConcat = (await Promise.resolve().then(() => __importStar(require('@embroider/core/src/measure-concat')))).default;
|
|
720
|
-
concat = new MeasureConcat(asset.relativePath, concat, this.root);
|
|
721
|
-
}
|
|
722
|
-
for (let source of asset.sources) {
|
|
723
|
-
switch (source.kind) {
|
|
724
|
-
case 'on-disk':
|
|
725
|
-
concat.addFile((0, core_1.explicitRelative)(this.root, source.sourcePath));
|
|
726
|
-
break;
|
|
727
|
-
case 'in-memory':
|
|
728
|
-
if (typeof source.source !== 'string') {
|
|
729
|
-
throw new Error(`attempted to concatenated a Buffer-backed in-memory asset`);
|
|
730
|
-
}
|
|
731
|
-
concat.addSpace(source.source);
|
|
732
|
-
break;
|
|
733
|
-
default:
|
|
734
|
-
(0, assert_never_1.default)(source);
|
|
735
|
-
}
|
|
736
|
-
}
|
|
737
|
-
await concat.end();
|
|
738
|
-
}
|
|
739
|
-
async updateAssets(requestedAssets, appFiles, emberENV) {
|
|
740
|
-
let assets = this.prepareAssets(requestedAssets, appFiles, emberENV);
|
|
741
|
-
for (let asset of assets.values()) {
|
|
742
|
-
if (this.assetIsValid(asset, this.assets.get(asset.relativePath))) {
|
|
743
|
-
continue;
|
|
744
|
-
}
|
|
745
|
-
(0, core_1.debug)('rebuilding %s', asset.relativePath);
|
|
746
|
-
switch (asset.kind) {
|
|
747
|
-
case 'on-disk':
|
|
748
|
-
this.updateOnDiskAsset(asset);
|
|
749
|
-
break;
|
|
750
|
-
case 'in-memory':
|
|
751
|
-
this.updateInMemoryAsset(asset);
|
|
752
|
-
break;
|
|
753
|
-
case 'built-ember':
|
|
754
|
-
this.updateBuiltEmberAsset(asset);
|
|
755
|
-
break;
|
|
756
|
-
case 'concatenated-asset':
|
|
757
|
-
await this.updateConcatenatedAsset(asset);
|
|
758
|
-
break;
|
|
759
|
-
default:
|
|
760
|
-
(0, assert_never_1.default)(asset);
|
|
761
|
-
}
|
|
762
|
-
}
|
|
763
|
-
for (let oldAsset of this.assets.values()) {
|
|
764
|
-
if (!assets.has(oldAsset.relativePath)) {
|
|
765
|
-
(0, fs_extra_1.unlinkSync)((0, path_2.join)(this.root, oldAsset.relativePath));
|
|
766
|
-
}
|
|
767
|
-
}
|
|
768
|
-
this.assets = assets;
|
|
769
|
-
return [...assets.values()];
|
|
770
|
-
}
|
|
771
|
-
gatherAssets(inputPaths) {
|
|
772
|
-
// first gather all the assets out of addons
|
|
773
|
-
let assets = [];
|
|
774
|
-
for (let pkg of this.allActiveAddons) {
|
|
775
|
-
if (pkg.meta['public-assets']) {
|
|
776
|
-
for (let [filename, appRelativeURL] of Object.entries(pkg.meta['public-assets'] || {})) {
|
|
777
|
-
let sourcePath = (0, path_1.resolve)(pkg.root, filename);
|
|
778
|
-
let stats = (0, fs_extra_1.statSync)(sourcePath);
|
|
779
|
-
assets.push({
|
|
780
|
-
kind: 'on-disk',
|
|
781
|
-
sourcePath,
|
|
782
|
-
relativePath: appRelativeURL,
|
|
783
|
-
mtime: stats.mtimeMs,
|
|
784
|
-
size: stats.size,
|
|
785
|
-
});
|
|
786
|
-
}
|
|
787
|
-
}
|
|
788
|
-
}
|
|
789
|
-
if (this.activeFastboot) {
|
|
790
|
-
const source = `
|
|
791
|
-
(function(){
|
|
792
|
-
var key = '_embroider_macros_runtime_config';
|
|
793
|
-
if (!window[key]){ window[key] = [];}
|
|
794
|
-
window[key].push(function(m) {
|
|
795
|
-
m.setGlobalConfig('fastboot', Object.assign({}, m.getGlobalConfig().fastboot, { isRunning: true }));
|
|
796
|
-
});
|
|
797
|
-
}())`;
|
|
798
|
-
assets.push({
|
|
799
|
-
kind: 'in-memory',
|
|
800
|
-
source,
|
|
801
|
-
relativePath: 'assets/embroider_macros_fastboot_init.js',
|
|
802
|
-
});
|
|
368
|
+
get staticAppPathsPattern() {
|
|
369
|
+
if (this.options.staticAppPaths.length > 0) {
|
|
370
|
+
return new RegExp('^(?:' + this.options.staticAppPaths.map(staticAppPath => (0, escape_string_regexp_1.default)(staticAppPath)).join('|') + ')(?:$|/)');
|
|
803
371
|
}
|
|
804
|
-
// and finally tack on the ones from our app itself
|
|
805
|
-
return assets.concat(this.extractAssets(inputPaths));
|
|
806
372
|
}
|
|
807
373
|
async build(inputPaths) {
|
|
808
374
|
// on the first build, we lock down the macros config. on subsequent builds,
|
|
@@ -814,22 +380,11 @@ class CompatAppBuilder {
|
|
|
814
380
|
this.firstBuild = false;
|
|
815
381
|
}
|
|
816
382
|
let appFiles = this.updateAppJS(inputPaths.appJS);
|
|
817
|
-
let
|
|
818
|
-
let assets = this.gatherAssets(inputPaths);
|
|
819
|
-
let finalAssets = await this.updateAssets(assets, appFiles, emberENV);
|
|
820
|
-
let assetPaths = assets.map(asset => asset.relativePath);
|
|
383
|
+
let assetPaths = this.addEmberEntrypoints(inputPaths.htmlTree);
|
|
821
384
|
if (this.activeFastboot) {
|
|
822
385
|
// when using fastboot, our own package.json needs to be in the output so fastboot can read it.
|
|
823
386
|
assetPaths.push('package.json');
|
|
824
387
|
}
|
|
825
|
-
for (let asset of finalAssets) {
|
|
826
|
-
// our concatenated assets all have map files that ride along. Here we're
|
|
827
|
-
// telling the final stage packager to be sure and serve the map files
|
|
828
|
-
// too.
|
|
829
|
-
if (asset.kind === 'concatenated-asset') {
|
|
830
|
-
assetPaths.push(asset.sourcemapPath);
|
|
831
|
-
}
|
|
832
|
-
}
|
|
833
388
|
let meta = {
|
|
834
389
|
type: 'app',
|
|
835
390
|
version: 2,
|
|
@@ -847,9 +402,15 @@ class CompatAppBuilder {
|
|
|
847
402
|
let pkg = this.combinePackageJSON(meta);
|
|
848
403
|
(0, fs_extra_1.writeFileSync)((0, path_2.join)(this.root, 'package.json'), JSON.stringify(pkg, null, 2), 'utf8');
|
|
849
404
|
let resolverConfig = this.resolverConfig(appFiles);
|
|
405
|
+
let config = this.configTree.readConfig();
|
|
406
|
+
let contentForConfig = this.contentForTree.readContents();
|
|
850
407
|
this.addResolverConfig(resolverConfig);
|
|
851
|
-
|
|
408
|
+
this.addContentForConfig(contentForConfig);
|
|
409
|
+
this.addEmberEnvConfig(config.EmberENV);
|
|
410
|
+
this.outputAppBootError(config.modulePrefix, config.APP, contentForConfig);
|
|
411
|
+
let babelConfig = await this.babelConfig(resolverConfig);
|
|
852
412
|
this.addBabelConfig(babelConfig);
|
|
413
|
+
this.addMacrosConfig(this.compatApp.macrosConfig.babelPluginConfig()[0]);
|
|
853
414
|
}
|
|
854
415
|
combinePackageJSON(meta) {
|
|
855
416
|
let pkgLayers = [this.origAppPackage.packageJSON];
|
|
@@ -859,10 +420,10 @@ class CompatAppBuilder {
|
|
|
859
420
|
pkgLayers.push(fastbootConfig.packageJSON);
|
|
860
421
|
}
|
|
861
422
|
// but our own new v2 app metadata takes precedence over both
|
|
862
|
-
pkgLayers.push({
|
|
423
|
+
pkgLayers.push({ 'ember-addon': meta });
|
|
863
424
|
return combinePackageJSON(...pkgLayers);
|
|
864
425
|
}
|
|
865
|
-
etcOptions(resolverConfig) {
|
|
426
|
+
async etcOptions(resolverConfig) {
|
|
866
427
|
let transforms = this.compatApp.htmlbarsPlugins;
|
|
867
428
|
let { plugins: macroPlugins, setConfig } = node_1.MacrosConfig.transforms();
|
|
868
429
|
setConfig(this.compatApp.macrosConfig);
|
|
@@ -880,7 +441,7 @@ class CompatAppBuilder {
|
|
|
880
441
|
transforms.push([require.resolve('./resolver-transform'), opts]);
|
|
881
442
|
}
|
|
882
443
|
let resolver = new core_1.Resolver(resolverConfig);
|
|
883
|
-
let resolution = resolver.nodeResolve('ember-source/vendor/ember/ember-template-compiler', (0, path_1.resolve)(this.root, 'package.json'));
|
|
444
|
+
let resolution = await resolver.nodeResolve('ember-source/vendor/ember/ember-template-compiler', (0, path_1.resolve)(this.root, 'package.json'));
|
|
884
445
|
if (resolution.type !== 'real') {
|
|
885
446
|
throw new Error(`bug: unable to resolve ember-template-compiler from ${this.root}`);
|
|
886
447
|
}
|
|
@@ -898,7 +459,7 @@ class CompatAppBuilder {
|
|
|
898
459
|
if (i < hint.resolve.length - 1) {
|
|
899
460
|
target = (0, path_2.join)(target, 'package.json');
|
|
900
461
|
}
|
|
901
|
-
cursor =
|
|
462
|
+
cursor = resolve_1.default.sync(target, { basedir: (0, path_2.dirname)(cursor) });
|
|
902
463
|
}
|
|
903
464
|
return {
|
|
904
465
|
requireFile: cursor,
|
|
@@ -911,246 +472,84 @@ class CompatAppBuilder {
|
|
|
911
472
|
if (!pconfig.isParallelSafe) {
|
|
912
473
|
(0, core_1.warn)('Your build is slower because some babel plugins are non-serializable');
|
|
913
474
|
}
|
|
914
|
-
(0, fs_extra_1.writeFileSync)((0, path_2.join)(this.root, '_babel_config_.js'), `module.exports = ${JSON.stringify(pconfig.config, null, 2)}`, 'utf8');
|
|
915
|
-
(0, fs_extra_1.writeFileSync)((0, path_2.join)(this.root, '_babel_filter_.js'), babelFilterTemplate({ skipBabel: this.options.skipBabel, appRoot: this.origAppPackage.root }), 'utf8');
|
|
475
|
+
(0, fs_extra_1.writeFileSync)((0, path_2.join)((0, core_1.locateEmbroiderWorkingDir)(this.compatApp.root), '_babel_config_.js'), `module.exports = ${JSON.stringify(pconfig.config, null, 2)}`, 'utf8');
|
|
476
|
+
(0, fs_extra_1.writeFileSync)((0, path_2.join)((0, core_1.locateEmbroiderWorkingDir)(this.compatApp.root), '_babel_filter_.js'), babelFilterTemplate({ skipBabel: this.options.skipBabel, appRoot: this.origAppPackage.root }), 'utf8');
|
|
916
477
|
}
|
|
917
478
|
addResolverConfig(config) {
|
|
918
479
|
(0, fs_extra_1.outputJSONSync)((0, path_2.join)((0, core_1.locateEmbroiderWorkingDir)(this.compatApp.root), 'resolver.json'), config, { spaces: 2 });
|
|
919
480
|
}
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
if (typeof pattern === 'string') {
|
|
924
|
-
return pattern === routeName;
|
|
925
|
-
}
|
|
926
|
-
else {
|
|
927
|
-
return pattern.test(routeName);
|
|
928
|
-
}
|
|
929
|
-
}));
|
|
930
|
-
}
|
|
931
|
-
splitRoute(routeName, files, addToParent, addLazyBundle) {
|
|
932
|
-
let shouldSplit = routeName && this.shouldSplitRoute(routeName);
|
|
933
|
-
let ownFiles = [];
|
|
934
|
-
let ownNames = new Set();
|
|
935
|
-
if (files.template) {
|
|
936
|
-
if (shouldSplit) {
|
|
937
|
-
ownFiles.push(files.template);
|
|
938
|
-
ownNames.add(routeName);
|
|
939
|
-
}
|
|
940
|
-
else {
|
|
941
|
-
addToParent(routeName, files.template);
|
|
942
|
-
}
|
|
943
|
-
}
|
|
944
|
-
if (files.controller) {
|
|
945
|
-
if (shouldSplit) {
|
|
946
|
-
ownFiles.push(files.controller);
|
|
947
|
-
ownNames.add(routeName);
|
|
948
|
-
}
|
|
949
|
-
else {
|
|
950
|
-
addToParent(routeName, files.controller);
|
|
951
|
-
}
|
|
952
|
-
}
|
|
953
|
-
if (files.route) {
|
|
954
|
-
if (shouldSplit) {
|
|
955
|
-
ownFiles.push(files.route);
|
|
956
|
-
ownNames.add(routeName);
|
|
957
|
-
}
|
|
958
|
-
else {
|
|
959
|
-
addToParent(routeName, files.route);
|
|
960
|
-
}
|
|
961
|
-
}
|
|
962
|
-
for (let [childName, childFiles] of files.children) {
|
|
963
|
-
this.splitRoute(`${routeName}.${childName}`, childFiles, (childRouteName, childFile) => {
|
|
964
|
-
// this is our child calling "addToParent"
|
|
965
|
-
if (shouldSplit) {
|
|
966
|
-
ownFiles.push(childFile);
|
|
967
|
-
ownNames.add(childRouteName);
|
|
968
|
-
}
|
|
969
|
-
else {
|
|
970
|
-
addToParent(childRouteName, childFile);
|
|
971
|
-
}
|
|
972
|
-
}, (routeNames, files) => {
|
|
973
|
-
addLazyBundle(routeNames, files);
|
|
974
|
-
});
|
|
975
|
-
}
|
|
976
|
-
if (ownFiles.length > 0) {
|
|
977
|
-
addLazyBundle([...ownNames], ownFiles);
|
|
978
|
-
}
|
|
979
|
-
}
|
|
980
|
-
topAppJSAsset(engines, prepared) {
|
|
981
|
-
let [app, ...childEngines] = engines;
|
|
982
|
-
let relativePath = `assets/${this.origAppPackage.name}.js`;
|
|
983
|
-
return this.appJSAsset(relativePath, app, childEngines, prepared, {
|
|
984
|
-
autoRun: this.compatApp.autoRun,
|
|
985
|
-
appBoot: !this.compatApp.autoRun ? this.compatApp.appBoot.readAppBoot() : '',
|
|
986
|
-
mainModule: (0, core_1.explicitRelative)((0, path_2.dirname)(relativePath), 'app'),
|
|
987
|
-
appConfig: this.configTree.readConfig().APP,
|
|
481
|
+
addContentForConfig(contentForConfig) {
|
|
482
|
+
(0, fs_extra_1.outputJSONSync)((0, path_2.join)((0, core_1.locateEmbroiderWorkingDir)(this.compatApp.root), 'content-for.json'), contentForConfig, {
|
|
483
|
+
spaces: 2,
|
|
988
484
|
});
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
}
|
|
1011
|
-
let eagerModules = [];
|
|
1012
|
-
let requiredAppFiles = [this.requiredOtherFiles(appFiles)];
|
|
1013
|
-
if (!this.options.staticComponents) {
|
|
1014
|
-
requiredAppFiles.push(appFiles.components);
|
|
1015
|
-
}
|
|
1016
|
-
if (!this.options.staticHelpers) {
|
|
1017
|
-
requiredAppFiles.push(appFiles.helpers);
|
|
1018
|
-
}
|
|
1019
|
-
if (!this.options.staticModifiers) {
|
|
1020
|
-
requiredAppFiles.push(appFiles.modifiers);
|
|
1021
|
-
}
|
|
1022
|
-
let styles = [];
|
|
1023
|
-
// only import styles from engines with a parent (this excludeds the parent application) as their styles
|
|
1024
|
-
// will be inserted via a direct <link> tag.
|
|
1025
|
-
if (appFiles.engine.parent && appFiles.engine.package.isLazyEngine()) {
|
|
1026
|
-
let implicitStyles = this.impliedAssets('implicit-styles', appFiles);
|
|
1027
|
-
for (let style of implicitStyles) {
|
|
1028
|
-
styles.push({
|
|
1029
|
-
path: (0, core_1.explicitRelative)('assets/_engine_', style.relativePath),
|
|
1030
|
-
});
|
|
1031
|
-
}
|
|
1032
|
-
let engineMeta = appFiles.engine.package.meta;
|
|
1033
|
-
if (engineMeta && engineMeta['implicit-styles']) {
|
|
1034
|
-
for (let style of engineMeta['implicit-styles']) {
|
|
1035
|
-
styles.push({
|
|
1036
|
-
path: (0, core_1.explicitRelative)((0, path_2.dirname)(relativePath), (0, path_2.join)(appFiles.engine.appRelativePath, style)),
|
|
1037
|
-
});
|
|
1038
|
-
}
|
|
1039
|
-
}
|
|
1040
|
-
}
|
|
1041
|
-
let lazyEngines = [];
|
|
1042
|
-
for (let childEngine of childEngines) {
|
|
1043
|
-
let asset = this.appJSAsset(`assets/_engine_/${encodeURIComponent(childEngine.engine.package.name)}.js`, childEngine, [], prepared);
|
|
1044
|
-
if (childEngine.engine.package.isLazyEngine()) {
|
|
1045
|
-
lazyEngines.push({
|
|
1046
|
-
names: [childEngine.engine.package.name],
|
|
1047
|
-
path: (0, core_1.explicitRelative)((0, path_2.dirname)(relativePath), asset.relativePath),
|
|
1048
|
-
});
|
|
1049
|
-
}
|
|
1050
|
-
else {
|
|
1051
|
-
eagerModules.push((0, core_1.explicitRelative)((0, path_2.dirname)(relativePath), asset.relativePath));
|
|
485
|
+
// In addition to outputting content-for.json, we also want to check if content-for 'config-module' has a custom content.
|
|
486
|
+
// If so, it means some classic addons used to provide this custom content, which is no longer supported.
|
|
487
|
+
// Developers can deactivate this check (and the subsequent warning) with useAddonConfigModule
|
|
488
|
+
if (this.compatApp.options.useAddonConfigModule) {
|
|
489
|
+
let modulePrefix = this.configTree.readConfig().modulePrefix;
|
|
490
|
+
// This is the default script provided by https://github.com/ember-cli/ember-cli/blob/master/lib/utilities/ember-app-utils.js#L84
|
|
491
|
+
// When storeConfigInMeta is true, this content is always present in the config-module key of content-for.json
|
|
492
|
+
const defaultConfigModule = `var prefix = '${modulePrefix}';\ntry {\n var metaName = prefix + '/config/environment';\n var rawConfig = document.querySelector('meta[name=\"' + metaName + '\"]').getAttribute('content');\n var config = JSON.parse(decodeURIComponent(rawConfig));\n\n var exports = { 'default': config };\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n return exports;\n}\ncatch(err) {\n throw new Error('Could not read config from meta tag with name \"' + metaName + '\".');\n}\n`.replace(/\s/g, '');
|
|
493
|
+
const configModule = contentForConfig['/index.html']['config-module'];
|
|
494
|
+
const diff = configModule.replace(/\s/g, '').replace(defaultConfigModule, '');
|
|
495
|
+
if (diff.length) {
|
|
496
|
+
throw new Error(`
|
|
497
|
+
Your app uses at least one classic addon that provides content-for 'config-module'. This is no longer supported.
|
|
498
|
+
With Embroider, you have full control over the config module, so classic addons no longer need to modify it under the hood.
|
|
499
|
+
The following code is included via content-for 'config-module':
|
|
500
|
+
|
|
501
|
+
${configModule}
|
|
502
|
+
|
|
503
|
+
1. If you want to keep the same behavior, add it to the app/environment.js.
|
|
504
|
+
2. Once app/environment.js has the content you need, remove the present error by setting "useAddonConfigModule" to false in the build options.
|
|
505
|
+
`);
|
|
1052
506
|
}
|
|
1053
507
|
}
|
|
1054
|
-
let lazyRoutes = [];
|
|
1055
|
-
for (let [routeName, routeFiles] of appFiles.routeFiles.children) {
|
|
1056
|
-
this.splitRoute(routeName, routeFiles, (_, filename) => {
|
|
1057
|
-
requiredAppFiles.push([filename]);
|
|
1058
|
-
}, (routeNames, files) => {
|
|
1059
|
-
let routeEntrypoint = `assets/_route_/${encodeURIComponent(routeNames[0])}.js`;
|
|
1060
|
-
if (!prepared.has(routeEntrypoint)) {
|
|
1061
|
-
prepared.set(routeEntrypoint, this.routeEntrypoint(appFiles, routeEntrypoint, files));
|
|
1062
|
-
}
|
|
1063
|
-
lazyRoutes.push({
|
|
1064
|
-
names: routeNames,
|
|
1065
|
-
path: this.importPaths(appFiles, routeEntrypoint).buildtime,
|
|
1066
|
-
});
|
|
1067
|
-
});
|
|
1068
|
-
}
|
|
1069
|
-
let [fastboot, nonFastboot] = (0, partition_1.default)(excludeDotFiles((0, flatten_1.default)(requiredAppFiles)), file => appFiles.isFastbootOnly.get(file));
|
|
1070
|
-
let amdModules = nonFastboot.map(file => this.importPaths(appFiles, file));
|
|
1071
|
-
let fastbootOnlyAmdModules = fastboot.map(file => this.importPaths(appFiles, file));
|
|
1072
|
-
// this is a backward-compatibility feature: addons can force inclusion of
|
|
1073
|
-
// modules.
|
|
1074
|
-
eagerModules.push('./-embroider-implicit-modules.js');
|
|
1075
|
-
let params = { amdModules, fastbootOnlyAmdModules, lazyRoutes, lazyEngines, eagerModules, styles };
|
|
1076
|
-
if (entryParams) {
|
|
1077
|
-
Object.assign(params, entryParams);
|
|
1078
|
-
}
|
|
1079
|
-
let source = entryTemplate(params);
|
|
1080
|
-
let asset = {
|
|
1081
|
-
kind: 'in-memory',
|
|
1082
|
-
source,
|
|
1083
|
-
relativePath,
|
|
1084
|
-
};
|
|
1085
|
-
prepared.set(relativePath, asset);
|
|
1086
|
-
return asset;
|
|
1087
508
|
}
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
buildtime: path_1.posix.join(engine.package.name, engineRelativePath),
|
|
1093
|
-
};
|
|
509
|
+
addEmberEnvConfig(emberEnvConfig) {
|
|
510
|
+
(0, fs_extra_1.outputJSONSync)((0, path_2.join)((0, core_1.locateEmbroiderWorkingDir)(this.compatApp.root), 'ember-env.json'), emberEnvConfig, {
|
|
511
|
+
spaces: 2,
|
|
512
|
+
});
|
|
1094
513
|
}
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
source: routeEntryTemplate({
|
|
1100
|
-
files: nonFastboot.map(f => this.importPaths(appFiles, f)),
|
|
1101
|
-
fastbootOnlyFiles: fastboot.map(f => this.importPaths(appFiles, f)),
|
|
1102
|
-
}),
|
|
1103
|
-
relativePath,
|
|
1104
|
-
};
|
|
1105
|
-
return asset;
|
|
514
|
+
addMacrosConfig(macrosConfig) {
|
|
515
|
+
(0, fs_extra_1.outputJSONSync)((0, path_2.join)((0, core_1.locateEmbroiderWorkingDir)(this.compatApp.root), 'macros-config.json'), macrosConfig, {
|
|
516
|
+
spaces: 2,
|
|
517
|
+
});
|
|
1106
518
|
}
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
519
|
+
// Classic addons providing custom content-for "app-boot" is no longer supported.
|
|
520
|
+
// The purpose of this error message is to help developers to move the classic addons code.
|
|
521
|
+
// Developers can deactivate it with useAddonAppBoot build option.
|
|
522
|
+
outputAppBootError(modulePrefix, appConfig, contentForConfig) {
|
|
523
|
+
if (!this.compatApp.options.useAddonAppBoot) {
|
|
524
|
+
return;
|
|
1111
525
|
}
|
|
1112
|
-
//
|
|
1113
|
-
//
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
526
|
+
// This is the default script provided by
|
|
527
|
+
// https://github.com/ember-cli/ember-cli/blob/master/lib/utilities/ember-app-utils.js#L103
|
|
528
|
+
const defaultAppBoot = `
|
|
529
|
+
if (!runningTests) {
|
|
530
|
+
require("${modulePrefix}/app")["default"].create(${JSON.stringify(appConfig || {})});
|
|
531
|
+
}
|
|
532
|
+
`.replace(/\s/g, '');
|
|
533
|
+
const appBoot = contentForConfig['/index.html']['app-boot'];
|
|
534
|
+
const diff = appBoot.replace(/\s/g, '').replace(defaultAppBoot, '');
|
|
535
|
+
if (diff.length) {
|
|
536
|
+
throw new Error(`
|
|
537
|
+
Your app uses at least one classic addon that provides content-for 'app-boot'. This is no longer supported.
|
|
538
|
+
With Embroider, you have full control over the app-boot script, so classic addons no longer need to modify it under the hood.
|
|
539
|
+
The following code is used for your app boot:
|
|
540
|
+
|
|
541
|
+
${appBoot}
|
|
542
|
+
|
|
543
|
+
1. If you want to keep the same behavior, copy and paste it to the app-boot script included in app/index.html.
|
|
544
|
+
2. Once app/index.html has the content you need, remove the present error by setting "useAddonAppBoot" to false in the build options.
|
|
545
|
+
`);
|
|
1132
546
|
}
|
|
1133
|
-
let source = entryTemplate({
|
|
1134
|
-
amdModules,
|
|
1135
|
-
eagerModules,
|
|
1136
|
-
testSuffix: true,
|
|
1137
|
-
});
|
|
1138
|
-
asset = {
|
|
1139
|
-
kind: 'in-memory',
|
|
1140
|
-
source,
|
|
1141
|
-
relativePath: myName,
|
|
1142
|
-
};
|
|
1143
|
-
prepared.set(asset.relativePath, asset);
|
|
1144
|
-
return asset;
|
|
1145
547
|
}
|
|
1146
548
|
}
|
|
1147
549
|
exports.CompatAppBuilder = CompatAppBuilder;
|
|
1148
550
|
__decorate([
|
|
1149
551
|
(0, typescript_memoize_1.Memoize)()
|
|
1150
552
|
], CompatAppBuilder.prototype, "fastbootJSSrcDir", null);
|
|
1151
|
-
__decorate([
|
|
1152
|
-
(0, typescript_memoize_1.Memoize)()
|
|
1153
|
-
], CompatAppBuilder.prototype, "findTestemAsset", null);
|
|
1154
553
|
__decorate([
|
|
1155
554
|
(0, typescript_memoize_1.Memoize)()
|
|
1156
555
|
], CompatAppBuilder.prototype, "allActiveAddons", null);
|
|
@@ -1177,10 +576,10 @@ __decorate([
|
|
|
1177
576
|
], CompatAppBuilder.prototype, "fastbootConfig", null);
|
|
1178
577
|
__decorate([
|
|
1179
578
|
(0, typescript_memoize_1.Memoize)()
|
|
1180
|
-
], CompatAppBuilder.prototype, "
|
|
579
|
+
], CompatAppBuilder.prototype, "staticAppPathsPattern", null);
|
|
1181
580
|
__decorate([
|
|
1182
581
|
(0, typescript_memoize_1.Memoize)()
|
|
1183
|
-
], CompatAppBuilder.prototype, "
|
|
582
|
+
], CompatAppBuilder.prototype, "portableHints", null);
|
|
1184
583
|
function defaultAddonPackageRules() {
|
|
1185
584
|
return (0, fs_extra_2.readdirSync)((0, path_2.join)(__dirname, 'addon-dependency-rules'))
|
|
1186
585
|
.map(filename => {
|
|
@@ -1192,104 +591,6 @@ function defaultAddonPackageRules() {
|
|
|
1192
591
|
.filter(Boolean)
|
|
1193
592
|
.reduce((a, b) => a.concat(b), []);
|
|
1194
593
|
}
|
|
1195
|
-
const entryTemplate = (0, core_1.jsHandlebarsCompile)(`
|
|
1196
|
-
import { importSync as i, macroCondition, getGlobalConfig } from '@embroider/macros';
|
|
1197
|
-
let w = window;
|
|
1198
|
-
let d = w.define;
|
|
1199
|
-
|
|
1200
|
-
{{#if styles}}
|
|
1201
|
-
if (macroCondition(!getGlobalConfig().fastboot?.isRunning)) {
|
|
1202
|
-
{{#each styles as |stylePath| ~}}
|
|
1203
|
-
i("{{js-string-escape stylePath.path}}");
|
|
1204
|
-
{{/each}}
|
|
1205
|
-
}
|
|
1206
|
-
{{/if}}
|
|
1207
|
-
|
|
1208
|
-
{{#each eagerModules as |eagerModule| ~}}
|
|
1209
|
-
i("{{js-string-escape eagerModule}}");
|
|
1210
|
-
{{/each}}
|
|
1211
|
-
|
|
1212
|
-
{{#each amdModules as |amdModule| ~}}
|
|
1213
|
-
d("{{js-string-escape amdModule.runtime}}", function(){ return i("{{js-string-escape amdModule.buildtime}}");});
|
|
1214
|
-
{{/each}}
|
|
1215
|
-
|
|
1216
|
-
{{#if fastbootOnlyAmdModules}}
|
|
1217
|
-
if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {
|
|
1218
|
-
{{#each fastbootOnlyAmdModules as |amdModule| ~}}
|
|
1219
|
-
d("{{js-string-escape amdModule.runtime}}", function(){ return i("{{js-string-escape amdModule.buildtime}}");});
|
|
1220
|
-
{{/each}}
|
|
1221
|
-
}
|
|
1222
|
-
{{/if}}
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
{{#if lazyRoutes}}
|
|
1226
|
-
w._embroiderRouteBundles_ = [
|
|
1227
|
-
{{#each lazyRoutes as |route|}}
|
|
1228
|
-
{
|
|
1229
|
-
names: {{json-stringify route.names}},
|
|
1230
|
-
load: function() {
|
|
1231
|
-
return import("{{js-string-escape route.path}}");
|
|
1232
|
-
}
|
|
1233
|
-
},
|
|
1234
|
-
{{/each}}
|
|
1235
|
-
]
|
|
1236
|
-
{{/if}}
|
|
1237
|
-
|
|
1238
|
-
{{#if lazyEngines}}
|
|
1239
|
-
w._embroiderEngineBundles_ = [
|
|
1240
|
-
{{#each lazyEngines as |engine|}}
|
|
1241
|
-
{
|
|
1242
|
-
names: {{json-stringify engine.names}},
|
|
1243
|
-
load: function() {
|
|
1244
|
-
return import("{{js-string-escape engine.path}}");
|
|
1245
|
-
}
|
|
1246
|
-
},
|
|
1247
|
-
{{/each}}
|
|
1248
|
-
]
|
|
1249
|
-
{{/if}}
|
|
1250
|
-
|
|
1251
|
-
{{#if autoRun ~}}
|
|
1252
|
-
if (!runningTests) {
|
|
1253
|
-
i("{{js-string-escape mainModule}}").default.create({{json-stringify appConfig}});
|
|
1254
|
-
}
|
|
1255
|
-
{{else if appBoot ~}}
|
|
1256
|
-
{{ appBoot }}
|
|
1257
|
-
{{/if}}
|
|
1258
|
-
|
|
1259
|
-
{{#if testSuffix ~}}
|
|
1260
|
-
{{!- TODO: both of these suffixes should get dynamically generated so they incorporate
|
|
1261
|
-
any content-for added by addons. -}}
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
{{!- this is the traditional tests-suffix.js -}}
|
|
1265
|
-
i('../tests/test-helper');
|
|
1266
|
-
EmberENV.TESTS_FILE_LOADED = true;
|
|
1267
|
-
{{/if}}
|
|
1268
|
-
`);
|
|
1269
|
-
const routeEntryTemplate = (0, core_1.jsHandlebarsCompile)(`
|
|
1270
|
-
import { importSync as i } from '@embroider/macros';
|
|
1271
|
-
let d = window.define;
|
|
1272
|
-
{{#each files as |amdModule| ~}}
|
|
1273
|
-
d("{{js-string-escape amdModule.runtime}}", function(){ return i("{{js-string-escape amdModule.buildtime}}");});
|
|
1274
|
-
{{/each}}
|
|
1275
|
-
{{#if fastbootOnlyFiles}}
|
|
1276
|
-
import { macroCondition, getGlobalConfig } from '@embroider/macros';
|
|
1277
|
-
if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {
|
|
1278
|
-
{{#each fastbootOnlyFiles as |amdModule| ~}}
|
|
1279
|
-
d("{{js-string-escape amdModule.runtime}}", function(){ return i("{{js-string-escape amdModule.buildtime}}");});
|
|
1280
|
-
{{/each}}
|
|
1281
|
-
}
|
|
1282
|
-
{{/if}}
|
|
1283
|
-
`);
|
|
1284
|
-
function stringOrBufferEqual(a, b) {
|
|
1285
|
-
if (typeof a === 'string' && typeof b === 'string') {
|
|
1286
|
-
return a === b;
|
|
1287
|
-
}
|
|
1288
|
-
if (a instanceof Buffer && b instanceof Buffer) {
|
|
1289
|
-
return Buffer.compare(a, b) === 0;
|
|
1290
|
-
}
|
|
1291
|
-
return false;
|
|
1292
|
-
}
|
|
1293
594
|
const babelFilterTemplate = (0, core_1.jsHandlebarsCompile)(`
|
|
1294
595
|
const { babelFilter } = require(${JSON.stringify(require.resolve('@embroider/core'))});
|
|
1295
596
|
module.exports = babelFilter({{json-stringify skipBabel}}, "{{js-string-escape appRoot}}");
|
|
@@ -1329,37 +630,4 @@ function addCachablePlugin(babelConfig) {
|
|
|
1329
630
|
]);
|
|
1330
631
|
}
|
|
1331
632
|
}
|
|
1332
|
-
function excludeDotFiles(files) {
|
|
1333
|
-
return files.filter(file => !file.startsWith('.') && !file.includes('/.'));
|
|
1334
|
-
}
|
|
1335
|
-
class ParsedEmberAsset {
|
|
1336
|
-
constructor(asset) {
|
|
1337
|
-
this.kind = 'parsed-ember';
|
|
1338
|
-
this.fileAsset = asset;
|
|
1339
|
-
this.html = new ember_html_1.PreparedEmberHTML(asset);
|
|
1340
|
-
this.relativePath = asset.relativePath;
|
|
1341
|
-
}
|
|
1342
|
-
validFor(other) {
|
|
1343
|
-
return this.fileAsset.mtime === other.mtime && this.fileAsset.size === other.size;
|
|
1344
|
-
}
|
|
1345
|
-
}
|
|
1346
|
-
class BuiltEmberAsset {
|
|
1347
|
-
constructor(asset) {
|
|
1348
|
-
this.kind = 'built-ember';
|
|
1349
|
-
this.parsedAsset = asset;
|
|
1350
|
-
this.source = asset.html.dom.serialize();
|
|
1351
|
-
this.relativePath = asset.relativePath;
|
|
1352
|
-
}
|
|
1353
|
-
}
|
|
1354
|
-
class ConcatenatedAsset {
|
|
1355
|
-
constructor(relativePath, sources, resolvableExtensions) {
|
|
1356
|
-
this.relativePath = relativePath;
|
|
1357
|
-
this.sources = sources;
|
|
1358
|
-
this.resolvableExtensions = resolvableExtensions;
|
|
1359
|
-
this.kind = 'concatenated-asset';
|
|
1360
|
-
}
|
|
1361
|
-
get sourcemapPath() {
|
|
1362
|
-
return this.relativePath.replace(this.resolvableExtensions, '') + '.map';
|
|
1363
|
-
}
|
|
1364
|
-
}
|
|
1365
633
|
//# sourceMappingURL=compat-app-builder.js.map
|