@embroider/compat 3.1.5 → 3.1.6-unstable.4a44b92
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 +15 -14
- package/src/babel-plugin-adjust-imports.js +1 -1
- package/src/babel-plugin-adjust-imports.js.map +1 -1
- package/src/compat-adapters/ember-source.d.ts +10 -0
- package/src/compat-adapters/ember-source.js +157 -0
- package/src/compat-adapters/ember-source.js.map +1 -1
- package/src/compat-app-builder.d.ts +0 -1
- package/src/compat-app-builder.js +10 -54
- package/src/compat-app-builder.js.map +1 -1
- package/src/dependency-rules.js +1 -1
- package/src/dependency-rules.js.map +1 -1
- package/src/options.d.ts +1 -0
- package/src/options.js +2 -0
- package/src/options.js.map +1 -1
- package/LICENSE +0 -21
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@embroider/compat",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.6-unstable.4a44b92",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Backward compatibility layer for the Embroider build system.",
|
|
6
6
|
"repository": {
|
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
"bin": {
|
|
20
20
|
"embroider-compat-audit": "./src/audit-cli.js"
|
|
21
21
|
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"test": "jest"
|
|
24
|
+
},
|
|
22
25
|
"dependencies": {
|
|
23
26
|
"@babel/code-frame": "^7.14.5",
|
|
24
27
|
"@babel/core": "^7.14.5",
|
|
@@ -27,11 +30,12 @@
|
|
|
27
30
|
"@babel/preset-env": "^7.14.5",
|
|
28
31
|
"@babel/runtime": "^7.18.6",
|
|
29
32
|
"@babel/traverse": "^7.14.5",
|
|
33
|
+
"@embroider/macros": "1.12.4-unstable.4a44b92",
|
|
30
34
|
"@types/babel__code-frame": "^7.0.2",
|
|
31
35
|
"@types/yargs": "^17.0.3",
|
|
32
36
|
"assert-never": "^1.1.0",
|
|
33
|
-
"babel-import-util": "^
|
|
34
|
-
"babel-plugin-ember-template-compilation": "^2.
|
|
37
|
+
"babel-import-util": "^2.0.0",
|
|
38
|
+
"babel-plugin-ember-template-compilation": "^2.1.1",
|
|
35
39
|
"babel-plugin-syntax-dynamic-import": "^6.18.0",
|
|
36
40
|
"babylon": "^6.18.0",
|
|
37
41
|
"bind-decorator": "^1.0.11",
|
|
@@ -59,11 +63,13 @@
|
|
|
59
63
|
"tree-sync": "^2.1.0",
|
|
60
64
|
"typescript-memoize": "^1.0.1",
|
|
61
65
|
"walk-sync": "^3.0.0",
|
|
62
|
-
"yargs": "^17.0.1"
|
|
63
|
-
"@embroider/macros": "1.12.3"
|
|
66
|
+
"yargs": "^17.0.1"
|
|
64
67
|
},
|
|
65
68
|
"devDependencies": {
|
|
66
|
-
"@
|
|
69
|
+
"@embroider/core": "3.1.4-unstable.4a44b92",
|
|
70
|
+
"@embroider/sample-transforms": "workspace:*",
|
|
71
|
+
"@embroider/test-support": "workspace:*",
|
|
72
|
+
"@glimmer/syntax": "^0.84.3",
|
|
67
73
|
"@glint/template": "^1.0.0",
|
|
68
74
|
"@types/babel__core": "^7.1.14",
|
|
69
75
|
"@types/babel__generator": "^7.6.2",
|
|
@@ -82,20 +88,15 @@
|
|
|
82
88
|
"code-equality-assertions": "^0.9.0",
|
|
83
89
|
"ember-engines": "^0.8.19",
|
|
84
90
|
"scenario-tester": "^2.1.2",
|
|
85
|
-
"typescript": "^5.1.6"
|
|
86
|
-
"@embroider/sample-transforms": "0.0.0",
|
|
87
|
-
"@embroider/test-support": "0.36.0"
|
|
91
|
+
"typescript": "^5.1.6"
|
|
88
92
|
},
|
|
89
93
|
"peerDependencies": {
|
|
90
|
-
"@embroider/core": "
|
|
94
|
+
"@embroider/core": "3.1.4-unstable.4a44b92"
|
|
91
95
|
},
|
|
92
96
|
"engines": {
|
|
93
97
|
"node": "12.* || 14.* || >= 16"
|
|
94
98
|
},
|
|
95
99
|
"volta": {
|
|
96
100
|
"extends": "../../package.json"
|
|
97
|
-
},
|
|
98
|
-
"scripts": {
|
|
99
|
-
"test": "jest"
|
|
100
101
|
}
|
|
101
|
-
}
|
|
102
|
+
}
|
|
@@ -128,7 +128,7 @@ function lazyPackageLookup(config, filename) {
|
|
|
128
128
|
return {
|
|
129
129
|
get owningPackage() {
|
|
130
130
|
if (!owningPackage) {
|
|
131
|
-
owningPackage = { result: config.resolver.
|
|
131
|
+
owningPackage = { result: config.resolver.packageCache.ownerOfFile(filename) };
|
|
132
132
|
}
|
|
133
133
|
return owningPackage.result;
|
|
134
134
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"babel-plugin-adjust-imports.js","sourceRoot":"","sources":["babel-plugin-adjust-imports.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from 'path';\nimport type { NodePath } from '@babel/traverse';\nimport type * as Babel from '@babel/core';\nimport type { types as t } from '@babel/core';\nimport { ImportUtil } from 'babel-import-util';\nimport { readJSONSync } from 'fs-extra';\nimport { CompatResolverOptions } from './resolver-transform';\nimport { locateEmbroiderWorkingDir, Package, packageName, Resolver, unrelativize } from '@embroider/core';\nimport { snippetToDasherizedName } from './dasherize-component-name';\nimport { ActivePackageRules, appTreeRulesDir, ComponentRules, ModuleRules, TemplateRules } from './dependency-rules';\n\nexport type Options = { appRoot: string };\n\ninterface State {\n opts: Options;\n}\n\ntype BabelTypes = typeof t;\n\ninterface ExtraImports {\n [key: string]: {\n dependsOnComponents?: string[]; // these are already standardized in dasherized form\n dependsOnModules?: string[];\n };\n}\n\ntype InternalConfig = {\n resolverOptions: CompatResolverOptions;\n resolver: Resolver;\n\n // rule-based extra dependencies, indexed by filename\n extraImports: ExtraImports;\n\n // rule-based extra dependencies, indexed by classical component name\n componentExtraImports: ExtraImports;\n};\n\nexport default function main(babel: typeof Babel) {\n let t = babel.types;\n let cached: InternalConfig | undefined;\n function getConfig(appRoot: string) {\n if (cached) {\n return cached;\n }\n let resolverOptions: CompatResolverOptions = readJSONSync(\n join(locateEmbroiderWorkingDir(appRoot), 'resolver.json')\n );\n let resolver = new Resolver(resolverOptions);\n cached = {\n resolverOptions,\n resolver,\n extraImports: preprocessExtraImports(resolverOptions, resolver),\n componentExtraImports: preprocessComponentExtraImports(resolverOptions),\n };\n return cached;\n }\n\n return {\n visitor: {\n Program: {\n enter(path: NodePath<t.Program>, state: State) {\n addExtraImports(t, path, getConfig(state.opts.appRoot));\n },\n },\n },\n };\n}\n\n(main as any).baseDir = function () {\n return join(__dirname, '..');\n};\n\nfunction addExtraImports(t: BabelTypes, path: NodePath<t.Program>, config: InternalConfig) {\n let filename: string = (path.hub as any).file.opts.filename;\n let entry = config.extraImports[filename];\n let adder = new ImportUtil(t, path);\n if (entry) {\n applyRules(t, path, entry, adder, config, filename);\n }\n\n let componentName = config.resolver.reverseComponentLookup(filename);\n if (componentName) {\n let rules = config.componentExtraImports[componentName];\n if (rules) {\n applyRules(t, path, rules, adder, config, filename);\n }\n }\n}\n\nfunction applyRules(\n t: BabelTypes,\n path: NodePath<t.Program>,\n rules: ExtraImports[string],\n adder: ImportUtil,\n config: InternalConfig,\n filename: string\n) {\n let lookup = lazyPackageLookup(config, filename);\n if (rules.dependsOnModules) {\n for (let target of rules.dependsOnModules) {\n if (lookup.owningPackage) {\n let runtimeName: string;\n if (packageName(target)) {\n runtimeName = target;\n } else {\n runtimeName = unrelativize(lookup.owningPackage, target, filename);\n }\n path.node.body.unshift(amdDefine(t, adder, path, target, runtimeName));\n }\n }\n }\n if (rules.dependsOnComponents) {\n for (let dasherizedName of rules.dependsOnComponents) {\n if (lookup.owningEngine) {\n path.node.body.unshift(\n amdDefine(\n t,\n adder,\n path,\n `#embroider_compat/components/${dasherizedName}`,\n `${lookup.owningEngine.packageName}/components/${dasherizedName}`\n )\n );\n }\n }\n }\n}\n\nfunction amdDefine(t: BabelTypes, adder: ImportUtil, path: NodePath<t.Program>, target: string, runtimeName: string) {\n let value = t.callExpression(adder.import(path, '@embroider/macros', 'importSync'), [t.stringLiteral(target)]);\n return t.expressionStatement(\n t.callExpression(t.memberExpression(t.identifier('window'), t.identifier('define')), [\n t.stringLiteral(runtimeName),\n t.functionExpression(null, [], t.blockStatement([t.returnStatement(value)])),\n ])\n );\n}\n\nfunction preprocessExtraImports(config: CompatResolverOptions, resolver: Resolver): ExtraImports {\n let extraImports: ExtraImports = {};\n for (let rule of config.activePackageRules) {\n if (rule.addonModules) {\n for (let [filename, moduleRules] of Object.entries(rule.addonModules)) {\n for (let root of rule.roots) {\n expandDependsOnRules(root, filename, moduleRules, extraImports);\n }\n }\n }\n if (rule.appModules) {\n for (let [filename, moduleRules] of Object.entries(rule.appModules)) {\n for (let root of rule.roots) {\n // in general v2 addons can keep their app tree stuff in other places\n // than \"_app_\" and we would need to check their package.json to see.\n // But this code is only for applying packageRules to auto-upgraded v1\n // addons, and those we always organize with their treeForApp output\n // in _app_.\n expandDependsOnRules(appTreeRulesDir(root, resolver), filename, moduleRules, extraImports);\n }\n }\n }\n if (rule.addonTemplates) {\n for (let [filename, moduleRules] of Object.entries(rule.addonTemplates)) {\n for (let root of rule.roots) {\n expandInvokesRules(root, filename, moduleRules, extraImports);\n }\n }\n }\n if (rule.appTemplates) {\n for (let [filename, moduleRules] of Object.entries(rule.appTemplates)) {\n for (let root of rule.roots) {\n expandInvokesRules(appTreeRulesDir(root, resolver), filename, moduleRules, extraImports);\n }\n }\n }\n }\n return extraImports;\n}\n\nfunction lazyPackageLookup(config: InternalConfig, filename: string) {\n let owningPackage: { result: Package | undefined } | undefined;\n let owningEngine: { result: ReturnType<Resolver['owningEngine']> | undefined } | undefined;\n return {\n get owningPackage() {\n if (!owningPackage) {\n owningPackage = { result: config.resolver.owningPackage(filename) };\n }\n return owningPackage.result;\n },\n get owningEngine() {\n if (!owningEngine) {\n owningEngine = { result: undefined };\n let p = this.owningPackage;\n if (p) {\n owningEngine.result = config.resolver.owningEngine(p);\n }\n }\n return owningEngine.result;\n },\n };\n}\n\nfunction preprocessComponentExtraImports(config: CompatResolverOptions): ExtraImports {\n let extraImports: ExtraImports = {};\n for (let rule of config.activePackageRules) {\n if (rule.components) {\n for (let [componentName, rules] of Object.entries(rule.components)) {\n if (rules.invokes) {\n extraImports[dasherizeComponent(componentName, rule)] = {\n dependsOnComponents: Object.values(rules.invokes)\n .flat()\n .map(c => dasherizeComponent(c, rules)),\n };\n }\n }\n }\n }\n return extraImports;\n}\n\nfunction dasherizeComponent(\n componentSnippet: string,\n rules: ModuleRules | ComponentRules | ActivePackageRules\n): string {\n let d = snippetToDasherizedName(componentSnippet);\n if (!d) {\n throw new Error(\n `unable to parse component snippet \"${componentSnippet}\" from rule ${JSON.stringify(rules, null, 2)}`\n );\n }\n return d;\n}\n\nfunction expandDependsOnRules(\n root: string,\n filename: string,\n rules: ModuleRules,\n extraImports: InternalConfig['extraImports']\n) {\n if (rules.dependsOnModules || rules.dependsOnComponents) {\n let entry: InternalConfig['extraImports'][string] = {};\n if (rules.dependsOnModules) {\n entry.dependsOnModules = rules.dependsOnModules;\n }\n if (rules.dependsOnComponents) {\n entry.dependsOnComponents = rules.dependsOnComponents.map(c => dasherizeComponent(c, rules));\n }\n extraImports[join(root, filename)] = entry;\n }\n}\n\nfunction expandInvokesRules(\n root: string,\n filename: string,\n rules: TemplateRules,\n extraImports: InternalConfig['extraImports']\n) {\n if (rules.invokes) {\n let dependsOnComponents: string[] = [];\n for (let componentList of Object.values(rules.invokes)) {\n for (let component of componentList) {\n let d = snippetToDasherizedName(component);\n if (!d) {\n throw new Error(\n `unable to parse component snippet \"${component}\" from rule ${JSON.stringify(rules, null, 2)}`\n );\n }\n dependsOnComponents.push(d);\n }\n }\n extraImports[join(root, filename)] = { dependsOnComponents };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"babel-plugin-adjust-imports.js","sourceRoot":"","sources":["babel-plugin-adjust-imports.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from 'path';\nimport type { NodePath } from '@babel/traverse';\nimport type * as Babel from '@babel/core';\nimport type { types as t } from '@babel/core';\nimport { ImportUtil } from 'babel-import-util';\nimport { readJSONSync } from 'fs-extra';\nimport { CompatResolverOptions } from './resolver-transform';\nimport { locateEmbroiderWorkingDir, Package, packageName, Resolver, unrelativize } from '@embroider/core';\nimport { snippetToDasherizedName } from './dasherize-component-name';\nimport { ActivePackageRules, appTreeRulesDir, ComponentRules, ModuleRules, TemplateRules } from './dependency-rules';\n\nexport type Options = { appRoot: string };\n\ninterface State {\n opts: Options;\n}\n\ntype BabelTypes = typeof t;\n\ninterface ExtraImports {\n [key: string]: {\n dependsOnComponents?: string[]; // these are already standardized in dasherized form\n dependsOnModules?: string[];\n };\n}\n\ntype InternalConfig = {\n resolverOptions: CompatResolverOptions;\n resolver: Resolver;\n\n // rule-based extra dependencies, indexed by filename\n extraImports: ExtraImports;\n\n // rule-based extra dependencies, indexed by classical component name\n componentExtraImports: ExtraImports;\n};\n\nexport default function main(babel: typeof Babel) {\n let t = babel.types;\n let cached: InternalConfig | undefined;\n function getConfig(appRoot: string) {\n if (cached) {\n return cached;\n }\n let resolverOptions: CompatResolverOptions = readJSONSync(\n join(locateEmbroiderWorkingDir(appRoot), 'resolver.json')\n );\n let resolver = new Resolver(resolverOptions);\n cached = {\n resolverOptions,\n resolver,\n extraImports: preprocessExtraImports(resolverOptions, resolver),\n componentExtraImports: preprocessComponentExtraImports(resolverOptions),\n };\n return cached;\n }\n\n return {\n visitor: {\n Program: {\n enter(path: NodePath<t.Program>, state: State) {\n addExtraImports(t, path, getConfig(state.opts.appRoot));\n },\n },\n },\n };\n}\n\n(main as any).baseDir = function () {\n return join(__dirname, '..');\n};\n\nfunction addExtraImports(t: BabelTypes, path: NodePath<t.Program>, config: InternalConfig) {\n let filename: string = (path.hub as any).file.opts.filename;\n let entry = config.extraImports[filename];\n let adder = new ImportUtil(t, path);\n if (entry) {\n applyRules(t, path, entry, adder, config, filename);\n }\n\n let componentName = config.resolver.reverseComponentLookup(filename);\n if (componentName) {\n let rules = config.componentExtraImports[componentName];\n if (rules) {\n applyRules(t, path, rules, adder, config, filename);\n }\n }\n}\n\nfunction applyRules(\n t: BabelTypes,\n path: NodePath<t.Program>,\n rules: ExtraImports[string],\n adder: ImportUtil,\n config: InternalConfig,\n filename: string\n) {\n let lookup = lazyPackageLookup(config, filename);\n if (rules.dependsOnModules) {\n for (let target of rules.dependsOnModules) {\n if (lookup.owningPackage) {\n let runtimeName: string;\n if (packageName(target)) {\n runtimeName = target;\n } else {\n runtimeName = unrelativize(lookup.owningPackage, target, filename);\n }\n path.node.body.unshift(amdDefine(t, adder, path, target, runtimeName));\n }\n }\n }\n if (rules.dependsOnComponents) {\n for (let dasherizedName of rules.dependsOnComponents) {\n if (lookup.owningEngine) {\n path.node.body.unshift(\n amdDefine(\n t,\n adder,\n path,\n `#embroider_compat/components/${dasherizedName}`,\n `${lookup.owningEngine.packageName}/components/${dasherizedName}`\n )\n );\n }\n }\n }\n}\n\nfunction amdDefine(t: BabelTypes, adder: ImportUtil, path: NodePath<t.Program>, target: string, runtimeName: string) {\n let value = t.callExpression(adder.import(path, '@embroider/macros', 'importSync'), [t.stringLiteral(target)]);\n return t.expressionStatement(\n t.callExpression(t.memberExpression(t.identifier('window'), t.identifier('define')), [\n t.stringLiteral(runtimeName),\n t.functionExpression(null, [], t.blockStatement([t.returnStatement(value)])),\n ])\n );\n}\n\nfunction preprocessExtraImports(config: CompatResolverOptions, resolver: Resolver): ExtraImports {\n let extraImports: ExtraImports = {};\n for (let rule of config.activePackageRules) {\n if (rule.addonModules) {\n for (let [filename, moduleRules] of Object.entries(rule.addonModules)) {\n for (let root of rule.roots) {\n expandDependsOnRules(root, filename, moduleRules, extraImports);\n }\n }\n }\n if (rule.appModules) {\n for (let [filename, moduleRules] of Object.entries(rule.appModules)) {\n for (let root of rule.roots) {\n // in general v2 addons can keep their app tree stuff in other places\n // than \"_app_\" and we would need to check their package.json to see.\n // But this code is only for applying packageRules to auto-upgraded v1\n // addons, and those we always organize with their treeForApp output\n // in _app_.\n expandDependsOnRules(appTreeRulesDir(root, resolver), filename, moduleRules, extraImports);\n }\n }\n }\n if (rule.addonTemplates) {\n for (let [filename, moduleRules] of Object.entries(rule.addonTemplates)) {\n for (let root of rule.roots) {\n expandInvokesRules(root, filename, moduleRules, extraImports);\n }\n }\n }\n if (rule.appTemplates) {\n for (let [filename, moduleRules] of Object.entries(rule.appTemplates)) {\n for (let root of rule.roots) {\n expandInvokesRules(appTreeRulesDir(root, resolver), filename, moduleRules, extraImports);\n }\n }\n }\n }\n return extraImports;\n}\n\nfunction lazyPackageLookup(config: InternalConfig, filename: string) {\n let owningPackage: { result: Package | undefined } | undefined;\n let owningEngine: { result: ReturnType<Resolver['owningEngine']> | undefined } | undefined;\n return {\n get owningPackage() {\n if (!owningPackage) {\n owningPackage = { result: config.resolver.packageCache.ownerOfFile(filename) };\n }\n return owningPackage.result;\n },\n get owningEngine() {\n if (!owningEngine) {\n owningEngine = { result: undefined };\n let p = this.owningPackage;\n if (p) {\n owningEngine.result = config.resolver.owningEngine(p);\n }\n }\n return owningEngine.result;\n },\n };\n}\n\nfunction preprocessComponentExtraImports(config: CompatResolverOptions): ExtraImports {\n let extraImports: ExtraImports = {};\n for (let rule of config.activePackageRules) {\n if (rule.components) {\n for (let [componentName, rules] of Object.entries(rule.components)) {\n if (rules.invokes) {\n extraImports[dasherizeComponent(componentName, rule)] = {\n dependsOnComponents: Object.values(rules.invokes)\n .flat()\n .map(c => dasherizeComponent(c, rules)),\n };\n }\n }\n }\n }\n return extraImports;\n}\n\nfunction dasherizeComponent(\n componentSnippet: string,\n rules: ModuleRules | ComponentRules | ActivePackageRules\n): string {\n let d = snippetToDasherizedName(componentSnippet);\n if (!d) {\n throw new Error(\n `unable to parse component snippet \"${componentSnippet}\" from rule ${JSON.stringify(rules, null, 2)}`\n );\n }\n return d;\n}\n\nfunction expandDependsOnRules(\n root: string,\n filename: string,\n rules: ModuleRules,\n extraImports: InternalConfig['extraImports']\n) {\n if (rules.dependsOnModules || rules.dependsOnComponents) {\n let entry: InternalConfig['extraImports'][string] = {};\n if (rules.dependsOnModules) {\n entry.dependsOnModules = rules.dependsOnModules;\n }\n if (rules.dependsOnComponents) {\n entry.dependsOnComponents = rules.dependsOnComponents.map(c => dasherizeComponent(c, rules));\n }\n extraImports[join(root, filename)] = entry;\n }\n}\n\nfunction expandInvokesRules(\n root: string,\n filename: string,\n rules: TemplateRules,\n extraImports: InternalConfig['extraImports']\n) {\n if (rules.invokes) {\n let dependsOnComponents: string[] = [];\n for (let componentList of Object.values(rules.invokes)) {\n for (let component of componentList) {\n let d = snippetToDasherizedName(component);\n if (!d) {\n throw new Error(\n `unable to parse component snippet \"${component}\" from rule ${JSON.stringify(rules, null, 2)}`\n );\n }\n dependsOnComponents.push(d);\n }\n }\n extraImports[join(root, filename)] = { dependsOnComponents };\n }\n}\n"]}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import V1Addon from '../v1-addon';
|
|
2
2
|
export default class extends V1Addon {
|
|
3
3
|
get v2Tree(): Node;
|
|
4
|
+
private get useStaticEmber();
|
|
5
|
+
private get includedDependencies();
|
|
6
|
+
get newPackageJSON(): import("@embroider/core").PackageInfo;
|
|
7
|
+
customizes(treeName: string): boolean;
|
|
8
|
+
invokeOriginalTreeFor(name: string, opts?: {
|
|
9
|
+
neuterPreprocessors: boolean;
|
|
10
|
+
}): any;
|
|
11
|
+
private customAddonTree;
|
|
12
|
+
private customVendorTree;
|
|
13
|
+
get packageMeta(): Partial<import("@embroider/core").AddonMeta>;
|
|
4
14
|
}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
2
8
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
9
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
10
|
};
|
|
@@ -6,10 +12,161 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
12
|
const v1_addon_1 = __importDefault(require("../v1-addon"));
|
|
7
13
|
const broccoli_funnel_1 = __importDefault(require("broccoli-funnel"));
|
|
8
14
|
const broccoli_merge_trees_1 = __importDefault(require("broccoli-merge-trees"));
|
|
15
|
+
const add_to_tree_1 = __importDefault(require("../add-to-tree"));
|
|
16
|
+
const fs_extra_1 = require("fs-extra");
|
|
17
|
+
const path_1 = require("path");
|
|
18
|
+
const typescript_memoize_1 = require("typescript-memoize");
|
|
19
|
+
const semver_1 = require("semver");
|
|
20
|
+
const core_1 = require("@babel/core");
|
|
21
|
+
const broccoli_plugin_1 = __importDefault(require("broccoli-plugin"));
|
|
9
22
|
class default_1 extends v1_addon_1.default {
|
|
10
23
|
get v2Tree() {
|
|
11
24
|
return (0, broccoli_merge_trees_1.default)([super.v2Tree, (0, broccoli_funnel_1.default)(this.rootTree, { include: ['dist/ember-template-compiler.js'] })]);
|
|
12
25
|
}
|
|
26
|
+
get useStaticEmber() {
|
|
27
|
+
return this.app.options.staticEmberSource;
|
|
28
|
+
}
|
|
29
|
+
// ember-source inlines a whole bunch of dependencies into itself
|
|
30
|
+
get includedDependencies() {
|
|
31
|
+
let result = [];
|
|
32
|
+
for (let name of (0, fs_extra_1.readdirSync)((0, path_1.resolve)(this.root, 'dist', 'dependencies'))) {
|
|
33
|
+
if (name[0] === '@') {
|
|
34
|
+
for (let innerName of (0, fs_extra_1.readdirSync)((0, path_1.resolve)(this.root, 'dist', 'dependencies', name))) {
|
|
35
|
+
if (innerName.endsWith('.js')) {
|
|
36
|
+
result.push(name + '/' + innerName.slice(0, -3));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
if (name.endsWith('.js')) {
|
|
42
|
+
result.push(name.slice(0, -3));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
get newPackageJSON() {
|
|
49
|
+
var _a;
|
|
50
|
+
let json = super.newPackageJSON;
|
|
51
|
+
if (this.useStaticEmber) {
|
|
52
|
+
for (let name of this.includedDependencies) {
|
|
53
|
+
// weirdly, many of the inlined dependency are still listed as real
|
|
54
|
+
// dependencies too. If we don't delete them here, they will take
|
|
55
|
+
// precedence over the inlined ones, because the embroider module-resolver
|
|
56
|
+
// tries to prioritize real deps.
|
|
57
|
+
(_a = json.dependencies) === null || _a === void 0 ? true : delete _a[name];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return json;
|
|
61
|
+
}
|
|
62
|
+
customizes(treeName) {
|
|
63
|
+
if (this.useStaticEmber) {
|
|
64
|
+
// we are adding custom implementations of these
|
|
65
|
+
return treeName === 'treeForAddon' || treeName === 'treeForVendor' || super.customizes(treeName);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
return super.customizes(treeName);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
invokeOriginalTreeFor(name, opts = { neuterPreprocessors: false }) {
|
|
72
|
+
if (this.useStaticEmber) {
|
|
73
|
+
if (name === 'addon') {
|
|
74
|
+
return this.customAddonTree();
|
|
75
|
+
}
|
|
76
|
+
if (name === 'vendor') {
|
|
77
|
+
return this.customVendorTree();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return super.invokeOriginalTreeFor(name, opts);
|
|
81
|
+
}
|
|
82
|
+
// Our addon tree is all of the "packages" we share. @embroider/compat already
|
|
83
|
+
// supports that pattern of emitting modules into other package's namespaces.
|
|
84
|
+
customAddonTree() {
|
|
85
|
+
let packages = (0, broccoli_funnel_1.default)(this.rootTree, {
|
|
86
|
+
srcDir: 'dist/packages',
|
|
87
|
+
});
|
|
88
|
+
let trees = [
|
|
89
|
+
packages,
|
|
90
|
+
(0, broccoli_funnel_1.default)(this.rootTree, {
|
|
91
|
+
srcDir: 'dist/dependencies',
|
|
92
|
+
}),
|
|
93
|
+
];
|
|
94
|
+
if ((0, semver_1.satisfies)(this.packageJSON.version, '>= 4.0.0-alpha.0 <4.10.0-alpha.0', { includePrerelease: true })) {
|
|
95
|
+
// import { loc } from '@ember/string' was removed in 4.0. but the
|
|
96
|
+
// top-level `ember` package tries to import it until 4.10. A
|
|
97
|
+
// spec-compliant ES modules implementation will treat this as a parse
|
|
98
|
+
// error.
|
|
99
|
+
trees.push(new FixStringLoc([packages]));
|
|
100
|
+
}
|
|
101
|
+
return (0, broccoli_merge_trees_1.default)(trees, { overwrite: true });
|
|
102
|
+
}
|
|
103
|
+
// We're zeroing out these files in vendor rather than deleting them, because
|
|
104
|
+
// we can't easily intercept the `app.import` that presumably exists for them,
|
|
105
|
+
// so rather than error they will just be empty.
|
|
106
|
+
//
|
|
107
|
+
// The reason we're zeroing these out is that we're going to consume all our
|
|
108
|
+
// modules directly out of treeForAddon instead, as real modules that webpack
|
|
109
|
+
// can see.
|
|
110
|
+
customVendorTree() {
|
|
111
|
+
return new add_to_tree_1.default(this.addonInstance._treeFor('vendor'), outputPath => {
|
|
112
|
+
(0, fs_extra_1.unlinkSync)((0, path_1.join)(outputPath, 'ember', 'ember.js'));
|
|
113
|
+
(0, fs_extra_1.outputFileSync)((0, path_1.join)(outputPath, 'ember', 'ember.js'), '');
|
|
114
|
+
(0, fs_extra_1.unlinkSync)((0, path_1.join)(outputPath, 'ember', 'ember-testing.js'));
|
|
115
|
+
(0, fs_extra_1.outputFileSync)((0, path_1.join)(outputPath, 'ember', 'ember-testing.js'), '');
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
get packageMeta() {
|
|
119
|
+
let meta = super.packageMeta;
|
|
120
|
+
if (this.useStaticEmber) {
|
|
121
|
+
if (!meta['implicit-modules']) {
|
|
122
|
+
meta['implicit-modules'] = [];
|
|
123
|
+
}
|
|
124
|
+
meta['implicit-modules'].push('./ember/index.js');
|
|
125
|
+
if (!meta['implicit-test-modules']) {
|
|
126
|
+
meta['implicit-test-modules'] = [];
|
|
127
|
+
}
|
|
128
|
+
meta['implicit-test-modules'].push('./ember-testing/index.js');
|
|
129
|
+
}
|
|
130
|
+
return meta;
|
|
131
|
+
}
|
|
13
132
|
}
|
|
14
133
|
exports.default = default_1;
|
|
134
|
+
__decorate([
|
|
135
|
+
(0, typescript_memoize_1.Memoize)()
|
|
136
|
+
], default_1.prototype, "includedDependencies", null);
|
|
137
|
+
class FixStringLoc extends broccoli_plugin_1.default {
|
|
138
|
+
build() {
|
|
139
|
+
let inSource = (0, fs_extra_1.readFileSync)((0, path_1.resolve)(this.inputPaths[0], 'ember', 'index.js'), 'utf8');
|
|
140
|
+
let outSource = (0, core_1.transform)(inSource, {
|
|
141
|
+
plugins: [fixStringLoc],
|
|
142
|
+
}).code;
|
|
143
|
+
(0, fs_extra_1.outputFileSync)((0, path_1.resolve)(this.outputPath, 'ember', 'index.js'), outSource, 'utf8');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function fixStringLoc(babel) {
|
|
147
|
+
let t = babel.types;
|
|
148
|
+
return {
|
|
149
|
+
visitor: {
|
|
150
|
+
Program(path) {
|
|
151
|
+
path.node.body.unshift(t.variableDeclaration('const', [t.variableDeclarator(t.identifier('loc'), t.identifier('undefined'))]));
|
|
152
|
+
},
|
|
153
|
+
ImportDeclaration: {
|
|
154
|
+
enter(path, state) {
|
|
155
|
+
if (path.node.source.value === '@ember/string') {
|
|
156
|
+
state.inEmberString = true;
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
exit(_path, state) {
|
|
160
|
+
state.inEmberString = false;
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
ImportSpecifier(path, state) {
|
|
164
|
+
let name = 'value' in path.node.imported ? path.node.imported.value : path.node.imported.name;
|
|
165
|
+
if (state.inEmberString && name === 'loc') {
|
|
166
|
+
path.remove();
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
}
|
|
15
172
|
//# sourceMappingURL=ember-source.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ember-source.js","sourceRoot":"","sources":["ember-source.ts"],"names":[],"mappings":";;;;;AAAA,2DAAkC;AAClC,sEAA0C;AAC1C,gFAA8C;AAE9C,eAAqB,SAAQ,kBAAO;IAClC,IAAI,MAAM;QACR,OAAO,IAAA,8BAAU,EAAC,CAAC,KAAK,CAAC,MAAM,EAAE,IAAA,yBAAW,EAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,iCAAiC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClH,CAAC;CACF;AAJD,4BAIC","sourcesContent":["import V1Addon from '../v1-addon';\nimport buildFunnel from 'broccoli-funnel';\nimport mergeTrees from 'broccoli-merge-trees';\n\nexport default class extends V1Addon {\n get v2Tree() {\n return mergeTrees([super.v2Tree, buildFunnel(this.rootTree, { include: ['dist/ember-template-compiler.js'] })]);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ember-source.js","sourceRoot":"","sources":["ember-source.ts"],"names":[],"mappings":"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","sourcesContent":["import V1Addon from '../v1-addon';\nimport buildFunnel from 'broccoli-funnel';\nimport mergeTrees from 'broccoli-merge-trees';\nimport AddToTree from '../add-to-tree';\nimport { outputFileSync, readFileSync, readdirSync, unlinkSync } from 'fs-extra';\nimport { join, resolve } from 'path';\nimport { Memoize } from 'typescript-memoize';\nimport { satisfies } from 'semver';\nimport { transform } from '@babel/core';\nimport type * as Babel from '@babel/core';\nimport type { NodePath } from '@babel/traverse';\nimport Plugin from 'broccoli-plugin';\nimport { Node } from 'broccoli-node-api';\n\nexport default class extends V1Addon {\n get v2Tree() {\n return mergeTrees([super.v2Tree, buildFunnel(this.rootTree, { include: ['dist/ember-template-compiler.js'] })]);\n }\n\n private get useStaticEmber(): boolean {\n return this.app.options.staticEmberSource;\n }\n\n // ember-source inlines a whole bunch of dependencies into itself\n @Memoize()\n private get includedDependencies() {\n let result: string[] = [];\n for (let name of readdirSync(resolve(this.root, 'dist', 'dependencies'))) {\n if (name[0] === '@') {\n for (let innerName of readdirSync(resolve(this.root, 'dist', 'dependencies', name))) {\n if (innerName.endsWith('.js')) {\n result.push(name + '/' + innerName.slice(0, -3));\n }\n }\n } else {\n if (name.endsWith('.js')) {\n result.push(name.slice(0, -3));\n }\n }\n }\n return result;\n }\n\n get newPackageJSON() {\n let json = super.newPackageJSON;\n if (this.useStaticEmber) {\n for (let name of this.includedDependencies) {\n // weirdly, many of the inlined dependency are still listed as real\n // dependencies too. If we don't delete them here, they will take\n // precedence over the inlined ones, because the embroider module-resolver\n // tries to prioritize real deps.\n delete json.dependencies?.[name];\n }\n }\n return json;\n }\n\n customizes(treeName: string) {\n if (this.useStaticEmber) {\n // we are adding custom implementations of these\n return treeName === 'treeForAddon' || treeName === 'treeForVendor' || super.customizes(treeName);\n } else {\n return super.customizes(treeName);\n }\n }\n\n invokeOriginalTreeFor(name: string, opts: { neuterPreprocessors: boolean } = { neuterPreprocessors: false }) {\n if (this.useStaticEmber) {\n if (name === 'addon') {\n return this.customAddonTree();\n }\n if (name === 'vendor') {\n return this.customVendorTree();\n }\n }\n return super.invokeOriginalTreeFor(name, opts);\n }\n\n // Our addon tree is all of the \"packages\" we share. @embroider/compat already\n // supports that pattern of emitting modules into other package's namespaces.\n private customAddonTree() {\n let packages = buildFunnel(this.rootTree, {\n srcDir: 'dist/packages',\n });\n\n let trees: Node[] = [\n packages,\n buildFunnel(this.rootTree, {\n srcDir: 'dist/dependencies',\n }),\n ];\n\n if (satisfies(this.packageJSON.version, '>= 4.0.0-alpha.0 <4.10.0-alpha.0', { includePrerelease: true })) {\n // import { loc } from '@ember/string' was removed in 4.0. but the\n // top-level `ember` package tries to import it until 4.10. A\n // spec-compliant ES modules implementation will treat this as a parse\n // error.\n trees.push(new FixStringLoc([packages]));\n }\n\n return mergeTrees(trees, { overwrite: true });\n }\n\n // We're zeroing out these files in vendor rather than deleting them, because\n // we can't easily intercept the `app.import` that presumably exists for them,\n // so rather than error they will just be empty.\n //\n // The reason we're zeroing these out is that we're going to consume all our\n // modules directly out of treeForAddon instead, as real modules that webpack\n // can see.\n private customVendorTree() {\n return new AddToTree(this.addonInstance._treeFor('vendor'), outputPath => {\n unlinkSync(join(outputPath, 'ember', 'ember.js'));\n outputFileSync(join(outputPath, 'ember', 'ember.js'), '');\n unlinkSync(join(outputPath, 'ember', 'ember-testing.js'));\n outputFileSync(join(outputPath, 'ember', 'ember-testing.js'), '');\n });\n }\n\n get packageMeta() {\n let meta = super.packageMeta;\n if (this.useStaticEmber) {\n if (!meta['implicit-modules']) {\n meta['implicit-modules'] = [];\n }\n meta['implicit-modules'].push('./ember/index.js');\n\n if (!meta['implicit-test-modules']) {\n meta['implicit-test-modules'] = [];\n }\n meta['implicit-test-modules'].push('./ember-testing/index.js');\n }\n return meta;\n }\n}\n\nclass FixStringLoc extends Plugin {\n build() {\n let inSource = readFileSync(resolve(this.inputPaths[0], 'ember', 'index.js'), 'utf8');\n let outSource = transform(inSource, {\n plugins: [fixStringLoc],\n })!.code!;\n outputFileSync(resolve(this.outputPath, 'ember', 'index.js'), outSource, 'utf8');\n }\n}\n\nfunction fixStringLoc(babel: typeof Babel) {\n let t = babel.types;\n return {\n visitor: {\n Program(path: NodePath<Babel.types.Program>) {\n path.node.body.unshift(\n t.variableDeclaration('const', [t.variableDeclarator(t.identifier('loc'), t.identifier('undefined'))])\n );\n },\n ImportDeclaration: {\n enter(path: NodePath<Babel.types.ImportDeclaration>, state: { inEmberString: boolean }) {\n if (path.node.source.value === '@ember/string') {\n state.inEmberString = true;\n }\n },\n exit(_path: NodePath<Babel.types.ImportDeclaration>, state: { inEmberString: boolean }) {\n state.inEmberString = false;\n },\n },\n ImportSpecifier(path: NodePath<Babel.types.ImportSpecifier>, state: { inEmberString: boolean }) {\n let name = 'value' in path.node.imported ? path.node.imported.value : path.node.imported.name;\n if (state.inEmberString && name === 'loc') {\n path.remove();\n }\n },\n },\n };\n}\n"]}
|
|
@@ -133,9 +133,9 @@ class CompatAppBuilder {
|
|
|
133
133
|
let result = pkg.dependencies.filter(this.isActiveAddon).filter(
|
|
134
134
|
// When looking for child addons, we want to ignore 'peerDependencies' of
|
|
135
135
|
// a given package, to align with how ember-cli resolves addons. So here
|
|
136
|
-
// we only include dependencies that definitely
|
|
137
|
-
// sections.
|
|
138
|
-
addon =>
|
|
136
|
+
// we only include dependencies that are definitely active due to one of
|
|
137
|
+
// the other sections.
|
|
138
|
+
addon => pkg.categorizeDependency(addon.name) !== 'peerDependencies');
|
|
139
139
|
if (pkg === this.appPackageWithMovedDeps) {
|
|
140
140
|
let extras = [this.synthVendor, this.synthStyles].filter(this.isActiveAddon);
|
|
141
141
|
result = [...result, ...extras];
|
|
@@ -595,11 +595,11 @@ class CompatAppBuilder {
|
|
|
595
595
|
return { packageJSON, extraAppFiles, extraVendorFiles };
|
|
596
596
|
}
|
|
597
597
|
}
|
|
598
|
-
updateAppJS(
|
|
598
|
+
updateAppJS(appJSPath) {
|
|
599
599
|
var _a;
|
|
600
600
|
if (!this.engines) {
|
|
601
|
-
this.engines = this.partitionEngines(
|
|
602
|
-
if (engine.sourcePath ===
|
|
601
|
+
this.engines = this.partitionEngines(appJSPath).map(engine => {
|
|
602
|
+
if (engine.sourcePath === appJSPath) {
|
|
603
603
|
// this is the app. We have more to do for the app than for other
|
|
604
604
|
// engines.
|
|
605
605
|
let fastbootSync;
|
|
@@ -611,7 +611,7 @@ class CompatAppBuilder {
|
|
|
611
611
|
}
|
|
612
612
|
return {
|
|
613
613
|
engine,
|
|
614
|
-
appSync: new sync_dir_1.SyncDir(
|
|
614
|
+
appSync: new sync_dir_1.SyncDir(appJSPath, this.root),
|
|
615
615
|
fastbootSync,
|
|
616
616
|
};
|
|
617
617
|
}
|
|
@@ -803,7 +803,7 @@ class CompatAppBuilder {
|
|
|
803
803
|
(0, fs_extra_1.rmSync)(this.root, { recursive: true, force: true });
|
|
804
804
|
this.firstBuild = false;
|
|
805
805
|
}
|
|
806
|
-
let appFiles = this.updateAppJS(inputPaths);
|
|
806
|
+
let appFiles = this.updateAppJS(inputPaths.appJS);
|
|
807
807
|
let emberENV = this.configTree.readConfig().EmberENV;
|
|
808
808
|
let assets = this.gatherAssets(inputPaths);
|
|
809
809
|
let finalAssets = await this.updateAssets(assets, appFiles, emberENV);
|
|
@@ -1060,7 +1060,7 @@ class CompatAppBuilder {
|
|
|
1060
1060
|
let fastbootOnlyAmdModules = fastboot.map(file => this.importPaths(appFiles, file));
|
|
1061
1061
|
// this is a backward-compatibility feature: addons can force inclusion of
|
|
1062
1062
|
// modules.
|
|
1063
|
-
|
|
1063
|
+
eagerModules.push('./#embroider-implicit-modules');
|
|
1064
1064
|
let params = { amdModules, fastbootOnlyAmdModules, lazyRoutes, lazyEngines, eagerModules, styles };
|
|
1065
1065
|
if (entryParams) {
|
|
1066
1066
|
Object.assign(params, entryParams);
|
|
@@ -1114,7 +1114,7 @@ class CompatAppBuilder {
|
|
|
1114
1114
|
let amdModules = [];
|
|
1115
1115
|
// this is a backward-compatibility feature: addons can force inclusion of
|
|
1116
1116
|
// test support modules.
|
|
1117
|
-
|
|
1117
|
+
eagerModules.push('./#embroider-implicit-test-modules');
|
|
1118
1118
|
for (let relativePath of engine.tests) {
|
|
1119
1119
|
amdModules.push(this.importPaths(engine, relativePath));
|
|
1120
1120
|
}
|
|
@@ -1131,37 +1131,6 @@ class CompatAppBuilder {
|
|
|
1131
1131
|
prepared.set(asset.relativePath, asset);
|
|
1132
1132
|
return asset;
|
|
1133
1133
|
}
|
|
1134
|
-
gatherImplicitModules(section, { engine }, lazyModules) {
|
|
1135
|
-
for (let addon of engine.addons) {
|
|
1136
|
-
let implicitModules = addon.meta[section];
|
|
1137
|
-
if (implicitModules) {
|
|
1138
|
-
let renamedModules = inverseRenamedModules(addon.meta, this.resolvableExtensionsPattern);
|
|
1139
|
-
for (let name of implicitModules) {
|
|
1140
|
-
let packageName = addon.name;
|
|
1141
|
-
if (addon.isV2Addon()) {
|
|
1142
|
-
let renamedMeta = addon.meta['renamed-packages'];
|
|
1143
|
-
if (renamedMeta) {
|
|
1144
|
-
Object.entries(renamedMeta).forEach(([key, value]) => {
|
|
1145
|
-
if (value === addon.name) {
|
|
1146
|
-
packageName = key;
|
|
1147
|
-
}
|
|
1148
|
-
});
|
|
1149
|
-
}
|
|
1150
|
-
}
|
|
1151
|
-
let runtime = (0, path_2.join)(packageName, name).replace(this.resolvableExtensionsPattern, '');
|
|
1152
|
-
let runtimeRenameLookup = runtime.split('\\').join('/');
|
|
1153
|
-
if (renamedModules && renamedModules[runtimeRenameLookup]) {
|
|
1154
|
-
runtime = renamedModules[runtimeRenameLookup];
|
|
1155
|
-
}
|
|
1156
|
-
runtime = runtime.split(path_2.sep).join('/');
|
|
1157
|
-
lazyModules.push({
|
|
1158
|
-
runtime,
|
|
1159
|
-
buildtime: path_1.posix.join(packageName, name),
|
|
1160
|
-
});
|
|
1161
|
-
}
|
|
1162
|
-
}
|
|
1163
|
-
}
|
|
1164
|
-
}
|
|
1165
1134
|
}
|
|
1166
1135
|
exports.CompatAppBuilder = CompatAppBuilder;
|
|
1167
1136
|
__decorate([
|
|
@@ -1322,19 +1291,6 @@ const babelFilterTemplate = (0, core_1.jsHandlebarsCompile)(`
|
|
|
1322
1291
|
const { babelFilter } = require(${JSON.stringify(require.resolve('@embroider/core'))});
|
|
1323
1292
|
module.exports = babelFilter({{json-stringify skipBabel}}, "{{js-string-escape appRoot}}");
|
|
1324
1293
|
`);
|
|
1325
|
-
// meta['renamed-modules'] has mapping from classic filename to real filename.
|
|
1326
|
-
// This takes that and converts it to the inverst mapping from real import path
|
|
1327
|
-
// to classic import path.
|
|
1328
|
-
function inverseRenamedModules(meta, extensions) {
|
|
1329
|
-
let renamed = meta['renamed-modules'];
|
|
1330
|
-
if (renamed) {
|
|
1331
|
-
let inverted = {};
|
|
1332
|
-
for (let [classic, real] of Object.entries(renamed)) {
|
|
1333
|
-
inverted[real.replace(extensions, '')] = classic.replace(extensions, '');
|
|
1334
|
-
}
|
|
1335
|
-
return inverted;
|
|
1336
|
-
}
|
|
1337
|
-
}
|
|
1338
1294
|
function combinePackageJSON(...layers) {
|
|
1339
1295
|
function custom(objValue, srcValue, key, _object, _source, stack) {
|
|
1340
1296
|
if (key === 'keywords' && stack.size === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compat-app-builder.js","sourceRoot":"","sources":["compat-app-builder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Node as BroccoliNode } from 'broccoli-node-api';\nimport {\n OutputPaths,\n Asset,\n EmberAsset,\n AddonPackage,\n Engine,\n AppMeta,\n explicitRelative,\n extensionsPattern,\n TemplateColocationPluginOptions,\n debug,\n warn,\n jsHandlebarsCompile,\n templateColocationPluginPath,\n cacheBustingPluginVersion,\n cacheBustingPluginPath,\n Resolver,\n locateEmbroiderWorkingDir,\n} from '@embroider/core';\nimport walkSync from 'walk-sync';\nimport { resolve as resolvePath, posix } from 'path';\nimport { JSDOM } from 'jsdom';\nimport Options from './options';\nimport { CompatResolverOptions } from './resolver-transform';\nimport { activePackageRules, PackageRules } from './dependency-rules';\nimport flatMap from 'lodash/flatMap';\nimport sortBy from 'lodash/sortBy';\nimport flatten from 'lodash/flatten';\nimport partition from 'lodash/partition';\nimport mergeWith from 'lodash/mergeWith';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { sync as resolveSync } from 'resolve';\nimport bind from 'bind-decorator';\nimport { outputJSONSync, readJSONSync, rmSync, statSync, unlinkSync, writeFileSync } from 'fs-extra';\nimport type { Options as EtcOptions } from 'babel-plugin-ember-template-compilation';\nimport type { Options as ResolverTransformOptions } from './resolver-transform';\nimport type { Options as AdjustImportsOptions } from './babel-plugin-adjust-imports';\nimport { PreparedEmberHTML } from '@embroider/core/src/ember-html';\nimport { InMemoryAsset, OnDiskAsset, ImplicitAssetPaths } from '@embroider/core/src/asset';\nimport { makePortable } from '@embroider/core/src/portable-babel-config';\nimport { AppFiles, RouteFiles } from '@embroider/core/src/app-files';\nimport { PortableHint, maybeNodeModuleVersion } from '@embroider/core/src/portable';\nimport assertNever from 'assert-never';\nimport { Memoize } from 'typescript-memoize';\nimport { join, dirname, sep } from 'path';\nimport resolve from 'resolve';\nimport { V1Config } from './v1-config';\nimport { AddonMeta, Package, PackageInfo } from '@embroider/core';\nimport { ensureDirSync, copySync, readdirSync, pathExistsSync } from 'fs-extra';\nimport { TransformOptions } from '@babel/core';\nimport { MacrosConfig } from '@embroider/macros/src/node';\nimport SourceMapConcat from 'fast-sourcemap-concat';\nimport escapeRegExp from 'escape-string-regexp';\n\nimport type CompatApp from './compat-app';\nimport { SyncDir } from './sync-dir';\n\n// This exists during the actual broccoli build step. As opposed to CompatApp,\n// which also exists during pipeline-construction time.\n\nexport class CompatAppBuilder {\n // for each relativePath, an Asset we have already emitted\n private assets: Map<string, InternalAsset> = new Map();\n\n constructor(\n private root: string,\n private origAppPackage: Package,\n private appPackageWithMovedDeps: Package,\n private options: Required<Options>,\n private compatApp: CompatApp,\n private configTree: V1Config,\n private synthVendor: Package,\n private synthStyles: Package\n ) {}\n\n @Memoize()\n private fastbootJSSrcDir() {\n let target = join(this.compatApp.root, 'fastboot');\n if (pathExistsSync(target)) {\n return target;\n }\n }\n\n private extractAssets(treePaths: OutputPaths<TreeNames>): Asset[] {\n let assets: Asset[] = [];\n\n // Everything in our traditional public tree is an on-disk asset\n if (treePaths.publicTree) {\n walkSync\n .entries(treePaths.publicTree, {\n directories: false,\n })\n .forEach(entry => {\n assets.push({\n kind: 'on-disk',\n relativePath: entry.relativePath,\n sourcePath: entry.fullPath,\n mtime: entry.mtime as unknown as number, // https://github.com/joliss/node-walk-sync/pull/38\n size: entry.size,\n });\n });\n }\n\n // ember-cli traditionally outputs a dummy testem.js file to prevent\n // spurious errors when running tests under \"ember s\".\n if (this.compatApp.shouldBuildTests) {\n let testemAsset = this.findTestemAsset();\n if (testemAsset) {\n assets.push(testemAsset);\n }\n }\n\n for (let asset of this.emberEntrypoints(treePaths.htmlTree)) {\n assets.push(asset);\n }\n\n return assets;\n }\n\n @Memoize()\n private findTestemAsset(): Asset | undefined {\n let sourcePath;\n try {\n sourcePath = resolveSync('ember-cli/lib/broccoli/testem.js', { basedir: this.root });\n } catch (err) {}\n if (sourcePath) {\n let stat = statSync(sourcePath);\n return {\n kind: 'on-disk',\n relativePath: 'testem.js',\n sourcePath,\n mtime: stat.mtime.getTime(),\n size: stat.size,\n };\n }\n }\n\n private activeAddonChildren(pkg: Package): AddonPackage[] {\n let result = (pkg.dependencies.filter(this.isActiveAddon) as AddonPackage[]).filter(\n // When looking for child addons, we want to ignore 'peerDependencies' of\n // a given package, to align with how ember-cli resolves addons. So here\n // we only include dependencies that definitely appear in one of the other\n // sections.\n addon => pkg.packageJSON.dependencies?.[addon.name] || pkg.packageJSON.devDependencies?.[addon.name]\n );\n if (pkg === this.appPackageWithMovedDeps) {\n let extras = [this.synthVendor, this.synthStyles].filter(this.isActiveAddon) as AddonPackage[];\n result = [...result, ...extras];\n }\n return result.sort(this.orderAddons);\n }\n\n @Memoize()\n private get allActiveAddons(): AddonPackage[] {\n let result = this.appPackageWithMovedDeps.findDescendants(this.isActiveAddon) as AddonPackage[];\n let extras = [this.synthVendor, this.synthStyles].filter(this.isActiveAddon) as AddonPackage[];\n let extraDescendants = flatMap(extras, dep => dep.findDescendants(this.isActiveAddon)) as AddonPackage[];\n result = [...result, ...extras, ...extraDescendants];\n return result.sort(this.orderAddons);\n }\n\n @bind\n private isActiveAddon(pkg: Package): boolean {\n // stage1 already took care of converting everything that's actually active\n // into v2 addons. If it's not a v2 addon, we don't want it.\n //\n // We can encounter v1 addons here when there is inactive stuff floating\n // around in the node_modules that accidentally satisfy something like an\n // optional peer dep.\n return pkg.isV2Addon();\n }\n\n @bind\n private orderAddons(depA: Package, depB: Package): number {\n let depAIdx = 0;\n let depBIdx = 0;\n\n if (depA && depA.meta && depA.isV2Addon()) {\n depAIdx = depA.meta['order-index'] || 0;\n }\n if (depB && depB.meta && depB.isV2Addon()) {\n depBIdx = depB.meta['order-index'] || 0;\n }\n\n return depAIdx - depBIdx;\n }\n\n private resolvableExtensions(): string[] {\n // webpack's default is ['.wasm', '.mjs', '.js', '.json']. Keeping that\n // subset in that order is sensible, since many third-party libraries will\n // expect it to work that way.\n //\n // For TS, we defer to ember-cli-babel, and the setting for\n // \"enableTypescriptTransform\" can be set with and without\n // ember-cli-typescript\n return ['.wasm', '.mjs', '.js', '.json', '.ts', '.hbs', '.hbs.js'];\n }\n\n private *emberEntrypoints(htmlTreePath: string): IterableIterator<Asset> {\n let classicEntrypoints = [\n { entrypoint: 'index.html', includeTests: false },\n { entrypoint: 'tests/index.html', includeTests: true },\n ];\n if (!this.compatApp.shouldBuildTests) {\n classicEntrypoints.pop();\n }\n for (let { entrypoint, includeTests } of classicEntrypoints) {\n let sourcePath = join(htmlTreePath, entrypoint);\n let stats = statSync(sourcePath);\n let asset: EmberAsset = {\n kind: 'ember',\n relativePath: entrypoint,\n includeTests,\n sourcePath,\n mtime: stats.mtime.getTime(),\n size: stats.size,\n rootURL: this.rootURL(),\n prepare: (dom: JSDOM) => {\n let scripts = [...dom.window.document.querySelectorAll('script')];\n let styles = [...dom.window.document.querySelectorAll('link[rel=\"stylesheet\"]')] as HTMLLinkElement[];\n\n return {\n javascript: definitelyReplace(dom, this.compatApp.findAppScript(scripts, entrypoint)),\n styles: definitelyReplace(dom, this.compatApp.findAppStyles(styles, entrypoint)),\n implicitScripts: definitelyReplace(dom, this.compatApp.findVendorScript(scripts, entrypoint)),\n implicitStyles: definitelyReplace(dom, this.compatApp.findVendorStyles(styles, entrypoint)),\n testJavascript: maybeReplace(dom, this.compatApp.findTestScript(scripts)),\n implicitTestScripts: maybeReplace(dom, this.compatApp.findTestSupportScript(scripts)),\n implicitTestStyles: maybeReplace(dom, this.compatApp.findTestSupportStyles(styles)),\n };\n },\n };\n yield asset;\n }\n }\n\n private modulePrefix(): string {\n return this.configTree.readConfig().modulePrefix;\n }\n\n private podModulePrefix(): string | undefined {\n return this.configTree.readConfig().podModulePrefix;\n }\n\n private rootURL(): string {\n return this.configTree.readConfig().rootURL;\n }\n\n @Memoize()\n private activeRules() {\n return activePackageRules(this.options.packageRules.concat(defaultAddonPackageRules()), [\n { name: this.origAppPackage.name, version: this.origAppPackage.version, root: this.root },\n ...this.allActiveAddons.filter(p => p.meta['auto-upgraded']),\n ]);\n }\n\n private resolverConfig(engines: AppFiles[]): CompatResolverOptions {\n let renamePackages = Object.assign({}, ...this.allActiveAddons.map(dep => dep.meta['renamed-packages']));\n let renameModules = Object.assign({}, ...this.allActiveAddons.map(dep => dep.meta['renamed-modules']));\n\n let activeAddons: CompatResolverOptions['activeAddons'] = {};\n for (let addon of this.allActiveAddons) {\n activeAddons[addon.name] = addon.root;\n }\n\n let options: CompatResolverOptions['options'] = {\n staticHelpers: this.options.staticHelpers,\n staticModifiers: this.options.staticModifiers,\n staticComponents: this.options.staticComponents,\n allowUnsafeDynamicComponents: this.options.allowUnsafeDynamicComponents,\n };\n\n let config: CompatResolverOptions = {\n // this part is the base ModuleResolverOptions as required by @embroider/core\n activeAddons,\n renameModules,\n renamePackages,\n resolvableExtensions: this.resolvableExtensions(),\n appRoot: this.origAppPackage.root,\n engines: engines.map((appFiles, index) => ({\n packageName: appFiles.engine.package.name,\n root: index === 0 ? this.root : appFiles.engine.package.root, // first engine is the app, which has been relocated to this.root\n fastbootFiles: appFiles.fastbootFiles,\n activeAddons: [...appFiles.engine.addons]\n .map(a => ({\n name: a.name,\n root: a.root,\n }))\n // the traditional order is the order in which addons will run, such\n // that the last one wins. Our resolver's order is the order to\n // search, so first one wins.\n .reverse(),\n })),\n\n // this is the additional stufff that @embroider/compat adds on top to do\n // global template resolving\n modulePrefix: this.modulePrefix(),\n podModulePrefix: this.podModulePrefix(),\n activePackageRules: this.activeRules(),\n options,\n };\n\n return config;\n }\n\n private scriptPriority(pkg: Package) {\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\n @Memoize()\n private get resolvableExtensionsPattern(): RegExp {\n return extensionsPattern(this.resolvableExtensions());\n }\n\n private impliedAssets(\n type: keyof ImplicitAssetPaths,\n engine: AppFiles,\n emberENV?: EmberENV\n ): (OnDiskAsset | InMemoryAsset)[] {\n let result: (OnDiskAsset | InMemoryAsset)[] = this.impliedAddonAssets(type, engine).map(\n (sourcePath: string): OnDiskAsset => {\n let stats = statSync(sourcePath);\n return {\n kind: 'on-disk',\n relativePath: explicitRelative(this.root, sourcePath),\n sourcePath,\n mtime: stats.mtimeMs,\n size: stats.size,\n };\n }\n );\n\n if (type === 'implicit-scripts') {\n result.unshift({\n kind: 'in-memory',\n relativePath: '_testing_prefix_.js',\n source: `var runningTests=false;`,\n });\n\n result.unshift({\n kind: 'in-memory',\n relativePath: '_ember_env_.js',\n source: `window.EmberENV={ ...(window.EmberENV || {}), ...${JSON.stringify(emberENV, null, 2)} };`,\n });\n\n result.push({\n kind: 'in-memory',\n relativePath: '_loader_.js',\n source: `loader.makeDefaultExport=false;`,\n });\n }\n\n if (type === 'implicit-test-scripts') {\n // this is the traditional test-support-suffix.js\n result.push({\n kind: 'in-memory',\n relativePath: '_testing_suffix_.js',\n source: `\n var runningTests=true;\n if (typeof Testem !== 'undefined' && (typeof QUnit !== 'undefined' || typeof Mocha !== 'undefined')) {\n Testem.hookIntoTestFramework();\n }`,\n });\n\n // whether or not anybody was actually using @embroider/macros\n // explicitly as an addon, we ensure its test-support file is always\n // present.\n if (!result.find(s => s.kind === 'on-disk' && s.sourcePath.endsWith('embroider-macros-test-support.js'))) {\n result.unshift({\n kind: 'on-disk',\n sourcePath: require.resolve('@embroider/macros/src/vendor/embroider-macros-test-support'),\n mtime: 0,\n size: 0,\n relativePath: 'embroider-macros-test-support.js',\n });\n }\n }\n\n return result;\n }\n\n private impliedAddonAssets(type: keyof ImplicitAssetPaths, { engine }: AppFiles): string[] {\n let result: Array<string> = [];\n for (let addon of sortBy(Array.from(engine.addons), this.scriptPriority.bind(this))) {\n let implicitScripts = addon.meta[type];\n if (implicitScripts) {\n let styles = [];\n let options = { basedir: addon.root };\n for (let mod of implicitScripts) {\n if (type === 'implicit-styles') {\n // exclude engines because they will handle their own css importation\n if (!addon.isLazyEngine()) {\n styles.push(resolve.sync(mod, options));\n }\n } else {\n result.push(resolve.sync(mod, options));\n }\n }\n if (styles.length) {\n result = [...styles, ...result];\n }\n }\n }\n return result;\n }\n\n @Memoize()\n private babelConfig(resolverConfig: CompatResolverOptions) {\n let babel = cloneDeep(this.compatApp.babelConfig());\n\n if (!babel.plugins) {\n babel.plugins = [];\n }\n\n // Our stage3 code is always allowed to use dynamic import. We may emit it\n // ourself when splitting routes.\n babel.plugins.push(require.resolve('@babel/plugin-syntax-dynamic-import'));\n\n // https://github.com/webpack/webpack/issues/12154\n babel.plugins.push(require.resolve('./rename-require-plugin'));\n\n babel.plugins.push([require.resolve('babel-plugin-ember-template-compilation'), this.etcOptions(resolverConfig)]);\n\n // this is @embroider/macros configured for full stage3 resolution\n babel.plugins.push(...this.compatApp.macrosConfig.babelPluginConfig());\n\n let colocationOptions: TemplateColocationPluginOptions = {\n appRoot: this.origAppPackage.root,\n\n // This extra weirdness is a compromise in favor of build performance.\n //\n // 1. When auto-upgrading an addon from v1 to v2, we definitely want to\n // run any custom AST transforms in stage1.\n //\n // 2. In general case, AST transforms are allowed to manipulate Javascript\n // scope. This means that running transforms -- even when we're doing\n // source-to-source compilation that emits handlebars and not wire\n // format -- implies changing .hbs files into .js files.\n //\n // 3. So stage1 may need to rewrite .hbs to .hbs.js (to avoid colliding\n // with an existing co-located .js file).\n //\n // 4. But stage1 doesn't necessarily want to run babel over the\n // corresponding JS file. Most of the time, that's just an\n // unnecessarily expensive second parse. (We only run it in stage1 to\n // eliminate an addon's custom babel plugins, and many addons don't\n // have any.)\n //\n // 5. Therefore, the work of template-colocation gets defered until here,\n // and it may see co-located templates named `.hbs.js` instead of the\n // usual `.hbs.\n templateExtensions: ['.hbs', '.hbs.js'],\n\n // All of the above only applies to auto-upgraded packages that were\n // authored in v1. V2 packages don't get any of this complexity, they're\n // supposed to take care of colocating their own templates explicitly.\n packageGuard: true,\n };\n babel.plugins.push([templateColocationPluginPath, colocationOptions]);\n\n babel.plugins.push([\n require.resolve('./babel-plugin-adjust-imports'),\n (() => {\n let pluginConfig: AdjustImportsOptions = {\n appRoot: resolverConfig.appRoot,\n };\n return pluginConfig;\n })(),\n ]);\n\n // we can use globally shared babel runtime by default\n babel.plugins.push([\n require.resolve('@babel/plugin-transform-runtime'),\n { absoluteRuntime: __dirname, useESModules: true, regenerator: false },\n ]);\n\n const portable = makePortable(babel, { basedir: this.root }, this.portableHints);\n addCachablePlugin(portable.config);\n return portable;\n }\n\n private insertEmberApp(\n asset: ParsedEmberAsset,\n appFiles: AppFiles[],\n prepared: Map<string, InternalAsset>,\n emberENV: EmberENV\n ) {\n let html = asset.html;\n\n if (this.fastbootConfig) {\n // ignore scripts like ember-cli-livereload.js which are not really associated with\n // \"the app\".\n let ignoreScripts = html.dom.window.document.querySelectorAll('script');\n ignoreScripts.forEach(script => {\n script.setAttribute('data-fastboot-ignore', '');\n });\n }\n\n // our tests entrypoint already includes a correct module dependency on the\n // app, so we only insert the app when we're not inserting tests\n if (!asset.fileAsset.includeTests) {\n let appJS = this.topAppJSAsset(appFiles, prepared);\n html.insertScriptTag(html.javascript, appJS.relativePath, { type: 'module' });\n }\n\n if (this.fastbootConfig) {\n // any extra fastboot app files get inserted into our html.javascript\n // section, after the app has been inserted.\n for (let script of this.fastbootConfig.extraAppFiles) {\n html.insertScriptTag(html.javascript, script, { tag: 'fastboot-script' });\n }\n }\n\n html.insertStyleLink(html.styles, `assets/${this.origAppPackage.name}.css`);\n\n const parentEngine = appFiles.find(e => !e.engine.parent)!;\n let vendorJS = this.implicitScriptsAsset(prepared, parentEngine, emberENV);\n if (vendorJS) {\n html.insertScriptTag(html.implicitScripts, vendorJS.relativePath);\n }\n\n if (this.fastbootConfig) {\n // any extra fastboot vendor files get inserted into our\n // html.implicitScripts section, after the regular implicit script\n // (vendor.js) have been inserted.\n for (let script of this.fastbootConfig.extraVendorFiles) {\n html.insertScriptTag(html.implicitScripts, script, { tag: 'fastboot-script' });\n }\n }\n\n let implicitStyles = this.implicitStylesAsset(prepared, parentEngine);\n if (implicitStyles) {\n html.insertStyleLink(html.implicitStyles, implicitStyles.relativePath);\n }\n\n if (!asset.fileAsset.includeTests) {\n return;\n }\n\n // Test-related assets happen below this point\n\n let testJS = this.testJSEntrypoint(appFiles, prepared);\n html.insertScriptTag(html.testJavascript, testJS.relativePath, { type: 'module' });\n\n let implicitTestScriptsAsset = this.implicitTestScriptsAsset(prepared, parentEngine);\n if (implicitTestScriptsAsset) {\n html.insertScriptTag(html.implicitTestScripts, implicitTestScriptsAsset.relativePath);\n }\n\n let implicitTestStylesAsset = this.implicitTestStylesAsset(prepared, parentEngine);\n if (implicitTestStylesAsset) {\n html.insertStyleLink(html.implicitTestStyles, implicitTestStylesAsset.relativePath);\n }\n }\n\n private implicitScriptsAsset(\n prepared: Map<string, InternalAsset>,\n application: AppFiles,\n emberENV: EmberENV\n ): InternalAsset | undefined {\n let asset = prepared.get('assets/vendor.js');\n if (!asset) {\n let implicitScripts = this.impliedAssets('implicit-scripts', application, emberENV);\n if (implicitScripts.length > 0) {\n asset = new ConcatenatedAsset('assets/vendor.js', implicitScripts, this.resolvableExtensionsPattern);\n prepared.set(asset.relativePath, asset);\n }\n }\n return asset;\n }\n\n private implicitStylesAsset(prepared: Map<string, InternalAsset>, application: AppFiles): InternalAsset | undefined {\n let asset = prepared.get('assets/vendor.css');\n if (!asset) {\n let implicitStyles = this.impliedAssets('implicit-styles', application);\n if (implicitStyles.length > 0) {\n // we reverse because we want the synthetic vendor style at the top\n asset = new ConcatenatedAsset('assets/vendor.css', implicitStyles.reverse(), this.resolvableExtensionsPattern);\n prepared.set(asset.relativePath, asset);\n }\n }\n return asset;\n }\n\n private implicitTestScriptsAsset(\n prepared: Map<string, InternalAsset>,\n application: AppFiles\n ): InternalAsset | undefined {\n let testSupportJS = prepared.get('assets/test-support.js');\n if (!testSupportJS) {\n let implicitTestScripts = this.impliedAssets('implicit-test-scripts', application);\n if (implicitTestScripts.length > 0) {\n testSupportJS = new ConcatenatedAsset(\n 'assets/test-support.js',\n implicitTestScripts,\n this.resolvableExtensionsPattern\n );\n prepared.set(testSupportJS.relativePath, testSupportJS);\n }\n }\n return testSupportJS;\n }\n\n private implicitTestStylesAsset(\n prepared: Map<string, InternalAsset>,\n application: AppFiles\n ): InternalAsset | undefined {\n let asset = prepared.get('assets/test-support.css');\n if (!asset) {\n let implicitTestStyles = this.impliedAssets('implicit-test-styles', application);\n if (implicitTestStyles.length > 0) {\n asset = new ConcatenatedAsset('assets/test-support.css', implicitTestStyles, this.resolvableExtensionsPattern);\n prepared.set(asset.relativePath, asset);\n }\n }\n return asset;\n }\n\n // recurse to find all active addons that don't cross an engine boundary.\n // Inner engines themselves will be returned, but not those engines' children.\n // The output set's insertion order is the proper ember-cli compatible\n // ordering of the addons.\n private findActiveAddons(pkg: Package, engine: Engine, isChild = false): void {\n for (let child of this.activeAddonChildren(pkg)) {\n if (!child.isEngine()) {\n this.findActiveAddons(child, engine, true);\n }\n engine.addons.add(child);\n }\n // ensure addons are applied in the correct order, if set (via @embroider/compat/v1-addon)\n if (!isChild) {\n engine.addons = new Set(\n [...engine.addons].sort((a, b) => {\n return (a.meta['order-index'] || 0) - (b.meta['order-index'] || 0);\n })\n );\n }\n }\n\n private partitionEngines(appJSPath: string): Engine[] {\n let queue: Engine[] = [\n {\n package: this.appPackageWithMovedDeps,\n addons: new Set(),\n parent: undefined,\n sourcePath: appJSPath,\n modulePrefix: this.modulePrefix(),\n appRelativePath: '.',\n },\n ];\n let done: Engine[] = [];\n let seenEngines: Set<Package> = new Set();\n while (true) {\n let current = queue.shift();\n if (!current) {\n break;\n }\n this.findActiveAddons(current.package, current);\n for (let addon of current.addons) {\n if (addon.isEngine() && !seenEngines.has(addon)) {\n seenEngines.add(addon);\n queue.push({\n package: addon,\n addons: new Set(),\n parent: current,\n sourcePath: addon.root,\n modulePrefix: addon.name,\n appRelativePath: explicitRelative(this.root, addon.root),\n });\n }\n }\n done.push(current);\n }\n return done;\n }\n\n @Memoize()\n private get activeFastboot() {\n return this.activeAddonChildren(this.appPackageWithMovedDeps).find(a => a.name === 'ember-cli-fastboot');\n }\n\n @Memoize()\n private get fastbootConfig():\n | { packageJSON: PackageInfo; extraAppFiles: string[]; extraVendorFiles: string[] }\n | undefined {\n if (this.activeFastboot) {\n // this is relying on work done in stage1 by @embroider/compat/src/compat-adapters/ember-cli-fastboot.ts\n let packageJSON = readJSONSync(join(this.activeFastboot.root, '_fastboot_', 'package.json'));\n let { extraAppFiles, extraVendorFiles } = packageJSON['embroider-fastboot'];\n delete packageJSON['embroider-fastboot'];\n extraVendorFiles.push('assets/embroider_macros_fastboot_init.js');\n return { packageJSON, extraAppFiles, extraVendorFiles };\n }\n }\n\n private engines: { engine: Engine; appSync: SyncDir; fastbootSync: SyncDir | undefined }[] | undefined;\n\n private updateAppJS(inputPaths: OutputPaths<TreeNames>): AppFiles[] {\n if (!this.engines) {\n this.engines = this.partitionEngines(inputPaths.appJS).map(engine => {\n if (engine.sourcePath === inputPaths.appJS) {\n // this is the app. We have more to do for the app than for other\n // engines.\n let fastbootSync: SyncDir | undefined;\n if (this.activeFastboot) {\n let fastbootDir = this.fastbootJSSrcDir();\n if (fastbootDir) {\n fastbootSync = new SyncDir(fastbootDir, resolvePath(this.root, '_fastboot_'));\n }\n }\n return {\n engine,\n appSync: new SyncDir(inputPaths.appJS, this.root),\n fastbootSync,\n };\n } else {\n // this is not the app, so it's some other engine. Engines are already\n // built by stage1 like all other addons, so we only need to observe\n // their files, not doing any actual copying or building.\n return {\n engine,\n appSync: new SyncDir(engine.sourcePath, undefined),\n\n // AFAIK, we've never supported a fastboot overlay directory in an\n // engine. But if we do need that, it would go here.\n fastbootSync: undefined,\n };\n }\n });\n }\n\n for (let engine of this.engines) {\n engine.appSync.update();\n engine.fastbootSync?.update();\n }\n\n return this.engines.map(\n ({ engine, appSync, fastbootSync }) =>\n new AppFiles(\n engine,\n appSync.files,\n fastbootSync?.files ?? new Set(),\n this.resolvableExtensionsPattern,\n this.podModulePrefix()\n )\n );\n }\n\n private prepareAsset(asset: Asset, appFiles: AppFiles[], prepared: Map<string, InternalAsset>, emberENV: EmberENV) {\n if (asset.kind === 'ember') {\n let prior = this.assets.get(asset.relativePath);\n let parsed: ParsedEmberAsset;\n if (prior && prior.kind === 'built-ember' && prior.parsedAsset.validFor(asset)) {\n // we can reuse the parsed html\n parsed = prior.parsedAsset;\n parsed.html.clear();\n } else {\n parsed = new ParsedEmberAsset(asset);\n }\n this.insertEmberApp(parsed, appFiles, prepared, emberENV);\n prepared.set(asset.relativePath, new BuiltEmberAsset(parsed));\n } else {\n prepared.set(asset.relativePath, asset);\n }\n }\n\n private prepareAssets(\n requestedAssets: Asset[],\n appFiles: AppFiles[],\n emberENV: EmberENV\n ): Map<string, InternalAsset> {\n let prepared: Map<string, InternalAsset> = new Map();\n for (let asset of requestedAssets) {\n this.prepareAsset(asset, appFiles, prepared, emberENV);\n }\n return prepared;\n }\n\n private assetIsValid(asset: InternalAsset, prior: InternalAsset | undefined): boolean {\n if (!prior) {\n return false;\n }\n switch (asset.kind) {\n case 'on-disk':\n return prior.kind === 'on-disk' && prior.size === asset.size && prior.mtime === asset.mtime;\n case 'in-memory':\n return prior.kind === 'in-memory' && stringOrBufferEqual(prior.source, asset.source);\n case 'built-ember':\n return prior.kind === 'built-ember' && prior.source === asset.source;\n case 'concatenated-asset':\n return (\n prior.kind === 'concatenated-asset' &&\n prior.sources.length === asset.sources.length &&\n prior.sources.every((priorFile, index) => {\n let newFile = asset.sources[index];\n return this.assetIsValid(newFile, priorFile);\n })\n );\n }\n }\n\n private updateOnDiskAsset(asset: OnDiskAsset) {\n let destination = join(this.root, asset.relativePath);\n ensureDirSync(dirname(destination));\n copySync(asset.sourcePath, destination, { dereference: true });\n }\n\n private updateInMemoryAsset(asset: InMemoryAsset) {\n let destination = join(this.root, asset.relativePath);\n ensureDirSync(dirname(destination));\n writeFileSync(destination, asset.source, 'utf8');\n }\n\n private updateBuiltEmberAsset(asset: BuiltEmberAsset) {\n let destination = join(this.root, asset.relativePath);\n ensureDirSync(dirname(destination));\n writeFileSync(destination, asset.source, 'utf8');\n }\n\n private async updateConcatenatedAsset(asset: ConcatenatedAsset) {\n let concat = new SourceMapConcat({\n outputFile: join(this.root, asset.relativePath),\n mapCommentType: asset.relativePath.endsWith('.js') ? 'line' : 'block',\n baseDir: this.root,\n });\n if (process.env.EMBROIDER_CONCAT_STATS) {\n let MeasureConcat = (await import('@embroider/core/src/measure-concat')).default;\n concat = new MeasureConcat(asset.relativePath, concat, this.root);\n }\n for (let source of asset.sources) {\n switch (source.kind) {\n case 'on-disk':\n concat.addFile(explicitRelative(this.root, source.sourcePath));\n break;\n case 'in-memory':\n if (typeof source.source !== 'string') {\n throw new Error(`attempted to concatenated a Buffer-backed in-memory asset`);\n }\n concat.addSpace(source.source);\n break;\n default:\n assertNever(source);\n }\n }\n await concat.end();\n }\n\n private async updateAssets(requestedAssets: Asset[], appFiles: AppFiles[], emberENV: EmberENV) {\n let assets = this.prepareAssets(requestedAssets, appFiles, emberENV);\n for (let asset of assets.values()) {\n if (this.assetIsValid(asset, this.assets.get(asset.relativePath))) {\n continue;\n }\n debug('rebuilding %s', asset.relativePath);\n switch (asset.kind) {\n case 'on-disk':\n this.updateOnDiskAsset(asset);\n break;\n case 'in-memory':\n this.updateInMemoryAsset(asset);\n break;\n case 'built-ember':\n this.updateBuiltEmberAsset(asset);\n break;\n case 'concatenated-asset':\n await this.updateConcatenatedAsset(asset);\n break;\n default:\n assertNever(asset);\n }\n }\n for (let oldAsset of this.assets.values()) {\n if (!assets.has(oldAsset.relativePath)) {\n unlinkSync(join(this.root, oldAsset.relativePath));\n }\n }\n this.assets = assets;\n return [...assets.values()];\n }\n\n private gatherAssets(inputPaths: OutputPaths<TreeNames>): Asset[] {\n // first gather all the assets out of addons\n let assets: Asset[] = [];\n for (let pkg of this.allActiveAddons) {\n if (pkg.meta['public-assets']) {\n for (let [filename, appRelativeURL] of Object.entries(pkg.meta['public-assets'] || {})) {\n let sourcePath = resolvePath(pkg.root, filename);\n let stats = statSync(sourcePath);\n assets.push({\n kind: 'on-disk',\n sourcePath,\n relativePath: appRelativeURL,\n mtime: stats.mtimeMs,\n size: stats.size,\n });\n }\n }\n }\n\n if (this.activeFastboot) {\n const source = `\n (function(){\n var key = '_embroider_macros_runtime_config';\n if (!window[key]){ window[key] = [];}\n window[key].push(function(m) {\n m.setGlobalConfig('fastboot', Object.assign({}, m.getGlobalConfig().fastboot, { isRunning: true }));\n });\n }())`;\n assets.push({\n kind: 'in-memory',\n source,\n relativePath: 'assets/embroider_macros_fastboot_init.js',\n });\n }\n\n // and finally tack on the ones from our app itself\n return assets.concat(this.extractAssets(inputPaths));\n }\n\n private firstBuild = true;\n\n async build(inputPaths: OutputPaths<TreeNames>) {\n // on the first build, we lock down the macros config. on subsequent builds,\n // this doesn't do anything anyway because it's idempotent.\n this.compatApp.macrosConfig.finalize();\n\n // on first build, clear the output directory completely\n if (this.firstBuild) {\n rmSync(this.root, { recursive: true, force: true });\n this.firstBuild = false;\n }\n\n let appFiles = this.updateAppJS(inputPaths);\n let emberENV = this.configTree.readConfig().EmberENV;\n let assets = this.gatherAssets(inputPaths);\n\n let finalAssets = await this.updateAssets(assets, appFiles, emberENV);\n\n let assetPaths = assets.map(asset => asset.relativePath);\n\n if (this.activeFastboot) {\n // when using fastboot, our own package.json needs to be in the output so fastboot can read it.\n assetPaths.push('package.json');\n }\n\n for (let asset of finalAssets) {\n // our concatenated assets all have map files that ride along. Here we're\n // telling the final stage packager to be sure and serve the map files\n // too.\n if (asset.kind === 'concatenated-asset') {\n assetPaths.push(asset.sourcemapPath);\n }\n }\n\n let meta: AppMeta = {\n type: 'app',\n version: 2,\n assets: assetPaths,\n babel: {\n filename: '_babel_config_.js',\n isParallelSafe: true, // TODO\n majorVersion: this.compatApp.babelMajorVersion(),\n fileFilter: '_babel_filter_.js',\n },\n 'root-url': this.rootURL(),\n };\n\n // all compat apps are auto-upgraded, there's no v2 app format here\n meta['auto-upgraded'] = true;\n\n let pkg = this.combinePackageJSON(meta);\n writeFileSync(join(this.root, 'package.json'), JSON.stringify(pkg, null, 2), 'utf8');\n\n let resolverConfig = this.resolverConfig(appFiles);\n this.addResolverConfig(resolverConfig);\n let babelConfig = this.babelConfig(resolverConfig);\n this.addBabelConfig(babelConfig);\n }\n\n private combinePackageJSON(meta: AppMeta): object {\n let pkgLayers: any[] = [this.origAppPackage.packageJSON];\n let fastbootConfig = this.fastbootConfig;\n if (fastbootConfig) {\n // fastboot-specific package.json output is allowed to add to our original package.json\n pkgLayers.push(fastbootConfig.packageJSON);\n }\n // but our own new v2 app metadata takes precedence over both\n pkgLayers.push({ keywords: ['ember-addon'], 'ember-addon': meta });\n return combinePackageJSON(...pkgLayers);\n }\n\n private etcOptions(resolverConfig: CompatResolverOptions): EtcOptions {\n let transforms = this.compatApp.htmlbarsPlugins;\n\n let { plugins: macroPlugins, setConfig } = MacrosConfig.transforms();\n setConfig(this.compatApp.macrosConfig);\n for (let macroPlugin of macroPlugins) {\n transforms.push(macroPlugin as any);\n }\n\n if (\n this.options.staticComponents ||\n this.options.staticHelpers ||\n this.options.staticModifiers ||\n (globalThis as any).embroider_audit\n ) {\n let opts: ResolverTransformOptions = {\n appRoot: resolverConfig.appRoot,\n };\n transforms.push([require.resolve('./resolver-transform'), opts]);\n }\n\n let resolver = new Resolver(resolverConfig);\n let resolution = resolver.nodeResolve(\n 'ember-source/vendor/ember/ember-template-compiler',\n resolvePath(this.root, 'package.json')\n );\n if (resolution.type !== 'real') {\n throw new Error(`bug: unable to resolve ember-template-compiler from ${this.root}`);\n }\n\n return {\n transforms,\n compilerPath: resolution.filename,\n enableLegacyModules: ['ember-cli-htmlbars', 'ember-cli-htmlbars-inline-precompile', 'htmlbars-inline-precompile'],\n };\n }\n\n @Memoize()\n private get portableHints(): PortableHint[] {\n return this.options.pluginHints.map(hint => {\n let cursor = join(this.origAppPackage.root, 'package.json');\n for (let i = 0; i < hint.resolve.length; i++) {\n let target = hint.resolve[i];\n if (i < hint.resolve.length - 1) {\n target = join(target, 'package.json');\n }\n cursor = resolve.sync(target, { basedir: dirname(cursor) });\n }\n\n return {\n requireFile: cursor,\n useMethod: hint.useMethod,\n packageVersion: maybeNodeModuleVersion(cursor),\n };\n });\n }\n\n private addBabelConfig(pconfig: { config: TransformOptions; isParallelSafe: boolean }) {\n if (!pconfig.isParallelSafe) {\n warn('Your build is slower because some babel plugins are non-serializable');\n }\n writeFileSync(\n join(this.root, '_babel_config_.js'),\n `module.exports = ${JSON.stringify(pconfig.config, null, 2)}`,\n 'utf8'\n );\n writeFileSync(\n join(this.root, '_babel_filter_.js'),\n babelFilterTemplate({ skipBabel: this.options.skipBabel, appRoot: this.origAppPackage.root }),\n 'utf8'\n );\n }\n\n private addResolverConfig(config: CompatResolverOptions) {\n outputJSONSync(join(locateEmbroiderWorkingDir(this.compatApp.root), 'resolver.json'), config, { spaces: 2 });\n }\n\n private shouldSplitRoute(routeName: string) {\n return (\n !this.options.splitAtRoutes ||\n this.options.splitAtRoutes.find(pattern => {\n if (typeof pattern === 'string') {\n return pattern === routeName;\n } else {\n return pattern.test(routeName);\n }\n })\n );\n }\n\n private splitRoute(\n routeName: string,\n files: RouteFiles,\n addToParent: (routeName: string, filename: string) => void,\n addLazyBundle: (routeNames: string[], files: string[]) => void\n ) {\n let shouldSplit = routeName && this.shouldSplitRoute(routeName);\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 this.splitRoute(\n `${routeName}.${childName}`,\n childFiles,\n\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\n private topAppJSAsset(engines: AppFiles[], prepared: Map<string, InternalAsset>): InternalAsset {\n let [app, ...childEngines] = engines;\n let relativePath = `assets/${this.origAppPackage.name}.js`;\n return this.appJSAsset(relativePath, app, childEngines, prepared, {\n autoRun: this.compatApp.autoRun,\n appBoot: !this.compatApp.autoRun ? this.compatApp.appBoot.readAppBoot() : '',\n mainModule: explicitRelative(dirname(relativePath), 'app'),\n appConfig: this.configTree.readConfig().APP,\n });\n }\n\n @Memoize()\n private get staticAppPathsPattern(): RegExp | undefined {\n if (this.options.staticAppPaths.length > 0) {\n return new RegExp(\n '^(?:' + this.options.staticAppPaths.map(staticAppPath => escapeRegExp(staticAppPath)).join('|') + ')(?:$|/)'\n );\n }\n }\n\n private requiredOtherFiles(appFiles: AppFiles): readonly string[] {\n let pattern = this.staticAppPathsPattern;\n if (pattern) {\n return appFiles.otherAppFiles.filter(f => {\n return !pattern!.test(f);\n });\n } else {\n return appFiles.otherAppFiles;\n }\n }\n\n private appJSAsset(\n relativePath: string,\n appFiles: AppFiles,\n childEngines: AppFiles[],\n prepared: Map<string, InternalAsset>,\n entryParams?: Partial<Parameters<typeof entryTemplate>[0]>\n ): InternalAsset {\n let cached = prepared.get(relativePath);\n if (cached) {\n return cached;\n }\n\n let eagerModules = [];\n\n let requiredAppFiles = [this.requiredOtherFiles(appFiles)];\n if (!this.options.staticComponents) {\n requiredAppFiles.push(appFiles.components);\n }\n if (!this.options.staticHelpers) {\n requiredAppFiles.push(appFiles.helpers);\n }\n if (!this.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.parent && appFiles.engine.package.isLazyEngine()) {\n let implicitStyles = this.impliedAssets('implicit-styles', appFiles);\n for (let style of implicitStyles) {\n styles.push({\n path: explicitRelative('assets/_engine_', style.relativePath),\n });\n }\n\n let engineMeta = appFiles.engine.package.meta as AddonMeta;\n if (engineMeta && engineMeta['implicit-styles']) {\n for (let style of engineMeta['implicit-styles']) {\n styles.push({\n path: explicitRelative(dirname(relativePath), join(appFiles.engine.appRelativePath, style)),\n });\n }\n }\n }\n\n let lazyEngines: { names: string[]; path: string }[] = [];\n for (let childEngine of childEngines) {\n let asset = this.appJSAsset(\n `assets/_engine_/${encodeURIComponent(childEngine.engine.package.name)}.js`,\n childEngine,\n [],\n prepared\n );\n if (childEngine.engine.package.isLazyEngine()) {\n lazyEngines.push({\n names: [childEngine.engine.package.name],\n path: explicitRelative(dirname(relativePath), asset.relativePath),\n });\n } else {\n eagerModules.push(explicitRelative(dirname(relativePath), asset.relativePath));\n }\n }\n let lazyRoutes: { names: string[]; path: string }[] = [];\n for (let [routeName, routeFiles] of appFiles.routeFiles.children) {\n this.splitRoute(\n routeName,\n routeFiles,\n (_: string, filename: string) => {\n requiredAppFiles.push([filename]);\n },\n (routeNames: string[], files: string[]) => {\n let routeEntrypoint = `assets/_route_/${encodeURIComponent(routeNames[0])}.js`;\n if (!prepared.has(routeEntrypoint)) {\n prepared.set(routeEntrypoint, this.routeEntrypoint(appFiles, routeEntrypoint, files));\n }\n lazyRoutes.push({\n names: routeNames,\n path: this.importPaths(appFiles, routeEntrypoint).buildtime,\n });\n }\n );\n }\n\n let [fastboot, nonFastboot] = partition(excludeDotFiles(flatten(requiredAppFiles)), file =>\n appFiles.isFastbootOnly.get(file)\n );\n let amdModules = nonFastboot.map(file => this.importPaths(appFiles, file));\n let fastbootOnlyAmdModules = fastboot.map(file => this.importPaths(appFiles, file));\n\n // this is a backward-compatibility feature: addons can force inclusion of\n // modules.\n this.gatherImplicitModules('implicit-modules', appFiles, amdModules);\n\n let params = { amdModules, fastbootOnlyAmdModules, lazyRoutes, lazyEngines, eagerModules, styles };\n if (entryParams) {\n Object.assign(params, entryParams);\n }\n\n let source = entryTemplate(params);\n\n let asset: InternalAsset = {\n kind: 'in-memory',\n source,\n relativePath,\n };\n prepared.set(relativePath, asset);\n return asset;\n }\n\n private importPaths({ engine }: AppFiles, engineRelativePath: string) {\n let noHBS = engineRelativePath.replace(this.resolvableExtensionsPattern, '').replace(/\\.hbs$/, '');\n return {\n runtime: `${engine.modulePrefix}/${noHBS}`,\n buildtime: posix.join(engine.package.name, engineRelativePath),\n };\n }\n\n private routeEntrypoint(appFiles: AppFiles, relativePath: string, files: string[]) {\n let [fastboot, nonFastboot] = partition(files, file => appFiles.isFastbootOnly.get(file));\n\n let asset: InternalAsset = {\n kind: 'in-memory',\n source: routeEntryTemplate({\n files: nonFastboot.map(f => this.importPaths(appFiles, f)),\n fastbootOnlyFiles: fastboot.map(f => this.importPaths(appFiles, f)),\n }),\n relativePath,\n };\n return asset;\n }\n\n private testJSEntrypoint(appFiles: AppFiles[], prepared: Map<string, InternalAsset>): InternalAsset {\n let asset = prepared.get(`assets/test.js`);\n if (asset) {\n return asset;\n }\n\n // We're only building tests from the first engine (the app). This is the\n // normal thing to do -- tests from engines don't automatically roll up into\n // the app.\n let engine = appFiles[0];\n\n const myName = 'assets/test.js';\n\n // tests necessarily also include the app. This is where we account for\n // that. The classic solution was to always include the app's separate\n // script tag in the tests HTML, but that isn't as easy for final stage\n // packagers to understand. It's better to express it here as a direct\n // module dependency.\n let eagerModules: string[] = [\n explicitRelative(dirname(myName), this.topAppJSAsset(appFiles, prepared).relativePath),\n ];\n\n let amdModules: { runtime: string; buildtime: string }[] = [];\n // this is a backward-compatibility feature: addons can force inclusion of\n // test support modules.\n this.gatherImplicitModules('implicit-test-modules', engine, amdModules);\n\n for (let relativePath of engine.tests) {\n amdModules.push(this.importPaths(engine, relativePath));\n }\n\n let source = entryTemplate({\n amdModules,\n eagerModules,\n testSuffix: true,\n });\n\n asset = {\n kind: 'in-memory',\n source,\n relativePath: myName,\n };\n prepared.set(asset.relativePath, asset);\n return asset;\n }\n\n private gatherImplicitModules(\n section: 'implicit-modules' | 'implicit-test-modules',\n { engine }: AppFiles,\n lazyModules: { runtime: string; buildtime: string }[]\n ) {\n for (let addon of engine.addons) {\n let implicitModules = addon.meta[section];\n if (implicitModules) {\n let renamedModules = inverseRenamedModules(addon.meta, this.resolvableExtensionsPattern);\n for (let name of implicitModules) {\n let packageName = addon.name;\n\n if (addon.isV2Addon()) {\n let renamedMeta = addon.meta['renamed-packages'];\n if (renamedMeta) {\n Object.entries(renamedMeta).forEach(([key, value]) => {\n if (value === addon!.name) {\n packageName = key;\n }\n });\n }\n }\n\n let runtime = join(packageName, name).replace(this.resolvableExtensionsPattern, '');\n let runtimeRenameLookup = runtime.split('\\\\').join('/');\n if (renamedModules && renamedModules[runtimeRenameLookup]) {\n runtime = renamedModules[runtimeRenameLookup];\n }\n runtime = runtime.split(sep).join('/');\n lazyModules.push({\n runtime,\n buildtime: posix.join(packageName, name),\n });\n }\n }\n }\n }\n}\n\nfunction maybeReplace(dom: JSDOM, element: Element | undefined): Node | undefined {\n if (element) {\n return definitelyReplace(dom, element);\n }\n}\n\nfunction definitelyReplace(dom: JSDOM, element: Element): Node {\n let placeholder = dom.window.document.createTextNode('');\n element.replaceWith(placeholder);\n return placeholder;\n}\n\nfunction defaultAddonPackageRules(): PackageRules[] {\n return readdirSync(join(__dirname, 'addon-dependency-rules'))\n .map(filename => {\n if (filename.endsWith('.js')) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require(join(__dirname, 'addon-dependency-rules', filename)).default;\n }\n })\n .filter(Boolean)\n .reduce((a, b) => a.concat(b), []);\n}\n\nconst entryTemplate = jsHandlebarsCompile(`\nimport { importSync as i, macroCondition, getGlobalConfig } from '@embroider/macros';\nlet w = window;\nlet d = w.define;\n\n{{#if styles}}\n if (macroCondition(!getGlobalConfig().fastboot?.isRunning)) {\n {{#each styles as |stylePath| ~}}\n i(\"{{js-string-escape stylePath.path}}\");\n {{/each}}\n }\n{{/if}}\n\n{{#each amdModules as |amdModule| ~}}\n d(\"{{js-string-escape amdModule.runtime}}\", function(){ return i(\"{{js-string-escape amdModule.buildtime}}\");});\n{{/each}}\n\n{{#if fastbootOnlyAmdModules}}\n if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {\n {{#each fastbootOnlyAmdModules as |amdModule| ~}}\n d(\"{{js-string-escape amdModule.runtime}}\", function(){ return i(\"{{js-string-escape amdModule.buildtime}}\");});\n {{/each}}\n }\n{{/if}}\n\n{{#each eagerModules as |eagerModule| ~}}\n i(\"{{js-string-escape eagerModule}}\");\n{{/each}}\n\n{{#if lazyRoutes}}\nw._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}}\nw._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\n{{#if autoRun ~}}\nif (!runningTests) {\n i(\"{{js-string-escape mainModule}}\").default.create({{json-stringify appConfig}});\n}\n{{else if appBoot ~}}\n {{ appBoot }}\n{{/if}}\n\n{{#if testSuffix ~}}\n {{!- TODO: both of these suffixes should get dynamically generated so they incorporate\n any content-for added by addons. -}}\n\n\n {{!- this is the traditional tests-suffix.js -}}\n i('../tests/test-helper');\n EmberENV.TESTS_FILE_LOADED = true;\n{{/if}}\n`) as (params: {\n amdModules: { runtime: string; buildtime: string }[];\n fastbootOnlyAmdModules?: { runtime: string; buildtime: string }[];\n eagerModules?: string[];\n autoRun?: boolean;\n appBoot?: string;\n mainModule?: string;\n appConfig?: unknown;\n testSuffix?: boolean;\n lazyRoutes?: { names: string[]; path: string }[];\n lazyEngines?: { names: string[]; path: string }[];\n styles?: { path: string }[];\n}) => string;\n\nconst routeEntryTemplate = jsHandlebarsCompile(`\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n{{#each files as |amdModule| ~}}\nd(\"{{js-string-escape amdModule.runtime}}\", function(){ return i(\"{{js-string-escape amdModule.buildtime}}\");});\n{{/each}}\n{{#if fastbootOnlyFiles}}\n import { macroCondition, getGlobalConfig } from '@embroider/macros';\n if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {\n {{#each fastbootOnlyFiles as |amdModule| ~}}\n d(\"{{js-string-escape amdModule.runtime}}\", function(){ return i(\"{{js-string-escape amdModule.buildtime}}\");});\n {{/each}}\n }\n{{/if}}\n`) as (params: {\n files: { runtime: string; buildtime: string }[];\n fastbootOnlyFiles: { runtime: string; buildtime: string }[];\n}) => string;\n\nfunction stringOrBufferEqual(a: string | Buffer, b: string | Buffer): boolean {\n if (typeof a === 'string' && typeof b === 'string') {\n return a === b;\n }\n if (a instanceof Buffer && b instanceof Buffer) {\n return Buffer.compare(a, b) === 0;\n }\n return false;\n}\n\nconst babelFilterTemplate = jsHandlebarsCompile(`\nconst { babelFilter } = require(${JSON.stringify(require.resolve('@embroider/core'))});\nmodule.exports = babelFilter({{json-stringify skipBabel}}, \"{{js-string-escape appRoot}}\");\n`) as (params: { skipBabel: Options['skipBabel']; appRoot: string }) => string;\n\n// meta['renamed-modules'] has mapping from classic filename to real filename.\n// This takes that and converts it to the inverst mapping from real import path\n// to classic import path.\nfunction inverseRenamedModules(meta: AddonPackage['meta'], extensions: RegExp) {\n let renamed = meta['renamed-modules'];\n if (renamed) {\n let inverted = {} as { [name: string]: string };\n for (let [classic, real] of Object.entries(renamed)) {\n inverted[real.replace(extensions, '')] = classic.replace(extensions, '');\n }\n return inverted;\n }\n}\n\nfunction combinePackageJSON(...layers: object[]) {\n function custom(objValue: any, srcValue: any, key: string, _object: any, _source: any, stack: { size: number }) {\n if (key === 'keywords' && stack.size === 0) {\n if (Array.isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n }\n }\n return mergeWith({}, ...layers, custom);\n}\n\nfunction addCachablePlugin(babelConfig: TransformOptions) {\n if (Array.isArray(babelConfig.plugins) && babelConfig.plugins.length > 0) {\n const plugins = Object.create(null);\n plugins[cacheBustingPluginPath] = cacheBustingPluginVersion;\n\n for (const plugin of babelConfig.plugins) {\n let absolutePathToPlugin: string;\n if (Array.isArray(plugin) && typeof plugin[0] === 'string') {\n absolutePathToPlugin = plugin[0] as string;\n } else if (typeof plugin === 'string') {\n absolutePathToPlugin = plugin;\n } else {\n throw new Error(`[Embroider] a babel plugin without an absolute path was from: ${plugin}`);\n }\n\n plugins[absolutePathToPlugin] = maybeNodeModuleVersion(absolutePathToPlugin);\n }\n\n babelConfig.plugins.push([\n cacheBustingPluginPath,\n {\n plugins,\n },\n ]);\n }\n}\n\nfunction excludeDotFiles(files: string[]) {\n return files.filter(file => !file.startsWith('.') && !file.includes('/.'));\n}\n\ninterface TreeNames {\n appJS: BroccoliNode;\n htmlTree: BroccoliNode;\n publicTree: BroccoliNode | undefined;\n configTree: BroccoliNode;\n}\n\ntype EmberENV = unknown;\n\ntype InternalAsset = OnDiskAsset | InMemoryAsset | BuiltEmberAsset | ConcatenatedAsset;\n\nclass ParsedEmberAsset {\n kind: 'parsed-ember' = 'parsed-ember';\n relativePath: string;\n fileAsset: EmberAsset;\n html: PreparedEmberHTML;\n\n constructor(asset: EmberAsset) {\n this.fileAsset = asset;\n this.html = new PreparedEmberHTML(asset);\n this.relativePath = asset.relativePath;\n }\n\n validFor(other: EmberAsset) {\n return this.fileAsset.mtime === other.mtime && this.fileAsset.size === other.size;\n }\n}\n\nclass BuiltEmberAsset {\n kind: 'built-ember' = 'built-ember';\n relativePath: string;\n parsedAsset: ParsedEmberAsset;\n source: string;\n\n constructor(asset: ParsedEmberAsset) {\n this.parsedAsset = asset;\n this.source = asset.html.dom.serialize();\n this.relativePath = asset.relativePath;\n }\n}\n\nclass ConcatenatedAsset {\n kind: 'concatenated-asset' = 'concatenated-asset';\n constructor(\n public relativePath: string,\n public sources: (OnDiskAsset | InMemoryAsset)[],\n private resolvableExtensions: RegExp\n ) {}\n get sourcemapPath() {\n return this.relativePath.replace(this.resolvableExtensions, '') + '.map';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"compat-app-builder.js","sourceRoot":"","sources":["compat-app-builder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Node as BroccoliNode } from 'broccoli-node-api';\nimport {\n OutputPaths,\n Asset,\n EmberAsset,\n AddonPackage,\n Engine,\n AppMeta,\n explicitRelative,\n extensionsPattern,\n TemplateColocationPluginOptions,\n debug,\n warn,\n jsHandlebarsCompile,\n templateColocationPluginPath,\n cacheBustingPluginVersion,\n cacheBustingPluginPath,\n Resolver,\n locateEmbroiderWorkingDir,\n} from '@embroider/core';\nimport walkSync from 'walk-sync';\nimport { resolve as resolvePath, posix } from 'path';\nimport { JSDOM } from 'jsdom';\nimport Options from './options';\nimport { CompatResolverOptions } from './resolver-transform';\nimport { activePackageRules, PackageRules } from './dependency-rules';\nimport flatMap from 'lodash/flatMap';\nimport sortBy from 'lodash/sortBy';\nimport flatten from 'lodash/flatten';\nimport partition from 'lodash/partition';\nimport mergeWith from 'lodash/mergeWith';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { sync as resolveSync } from 'resolve';\nimport bind from 'bind-decorator';\nimport { outputJSONSync, readJSONSync, rmSync, statSync, unlinkSync, writeFileSync } from 'fs-extra';\nimport type { Options as EtcOptions } from 'babel-plugin-ember-template-compilation';\nimport type { Options as ResolverTransformOptions } from './resolver-transform';\nimport type { Options as AdjustImportsOptions } from './babel-plugin-adjust-imports';\nimport { PreparedEmberHTML } from '@embroider/core/src/ember-html';\nimport { InMemoryAsset, OnDiskAsset, ImplicitAssetPaths } from '@embroider/core/src/asset';\nimport { makePortable } from '@embroider/core/src/portable-babel-config';\nimport { AppFiles, RouteFiles } from '@embroider/core/src/app-files';\nimport { PortableHint, maybeNodeModuleVersion } from '@embroider/core/src/portable';\nimport assertNever from 'assert-never';\nimport { Memoize } from 'typescript-memoize';\nimport { join, dirname } from 'path';\nimport resolve from 'resolve';\nimport { V1Config } from './v1-config';\nimport { AddonMeta, Package, PackageInfo } from '@embroider/core';\nimport { ensureDirSync, copySync, readdirSync, pathExistsSync } from 'fs-extra';\nimport { TransformOptions } from '@babel/core';\nimport { MacrosConfig } from '@embroider/macros/src/node';\nimport SourceMapConcat from 'fast-sourcemap-concat';\nimport escapeRegExp from 'escape-string-regexp';\n\nimport type CompatApp from './compat-app';\nimport { SyncDir } from './sync-dir';\n\n// This exists during the actual broccoli build step. As opposed to CompatApp,\n// which also exists during pipeline-construction time.\n\nexport class CompatAppBuilder {\n // for each relativePath, an Asset we have already emitted\n private assets: Map<string, InternalAsset> = new Map();\n\n constructor(\n private root: string,\n private origAppPackage: Package,\n private appPackageWithMovedDeps: Package,\n private options: Required<Options>,\n private compatApp: CompatApp,\n private configTree: V1Config,\n private synthVendor: Package,\n private synthStyles: Package\n ) {}\n\n @Memoize()\n private fastbootJSSrcDir() {\n let target = join(this.compatApp.root, 'fastboot');\n if (pathExistsSync(target)) {\n return target;\n }\n }\n\n private extractAssets(treePaths: OutputPaths<TreeNames>): Asset[] {\n let assets: Asset[] = [];\n\n // Everything in our traditional public tree is an on-disk asset\n if (treePaths.publicTree) {\n walkSync\n .entries(treePaths.publicTree, {\n directories: false,\n })\n .forEach(entry => {\n assets.push({\n kind: 'on-disk',\n relativePath: entry.relativePath,\n sourcePath: entry.fullPath,\n mtime: entry.mtime as unknown as number, // https://github.com/joliss/node-walk-sync/pull/38\n size: entry.size,\n });\n });\n }\n\n // ember-cli traditionally outputs a dummy testem.js file to prevent\n // spurious errors when running tests under \"ember s\".\n if (this.compatApp.shouldBuildTests) {\n let testemAsset = this.findTestemAsset();\n if (testemAsset) {\n assets.push(testemAsset);\n }\n }\n\n for (let asset of this.emberEntrypoints(treePaths.htmlTree)) {\n assets.push(asset);\n }\n\n return assets;\n }\n\n @Memoize()\n private findTestemAsset(): Asset | undefined {\n let sourcePath;\n try {\n sourcePath = resolveSync('ember-cli/lib/broccoli/testem.js', { basedir: this.root });\n } catch (err) {}\n if (sourcePath) {\n let stat = statSync(sourcePath);\n return {\n kind: 'on-disk',\n relativePath: 'testem.js',\n sourcePath,\n mtime: stat.mtime.getTime(),\n size: stat.size,\n };\n }\n }\n\n private activeAddonChildren(pkg: Package): AddonPackage[] {\n let result = (pkg.dependencies.filter(this.isActiveAddon) as AddonPackage[]).filter(\n // When looking for child addons, we want to ignore 'peerDependencies' of\n // a given package, to align with how ember-cli resolves addons. So here\n // we only include dependencies that are definitely active due to one of\n // the other sections.\n addon => pkg.categorizeDependency(addon.name) !== 'peerDependencies'\n );\n if (pkg === this.appPackageWithMovedDeps) {\n let extras = [this.synthVendor, this.synthStyles].filter(this.isActiveAddon) as AddonPackage[];\n result = [...result, ...extras];\n }\n return result.sort(this.orderAddons);\n }\n\n @Memoize()\n private get allActiveAddons(): AddonPackage[] {\n let result = this.appPackageWithMovedDeps.findDescendants(this.isActiveAddon) as AddonPackage[];\n let extras = [this.synthVendor, this.synthStyles].filter(this.isActiveAddon) as AddonPackage[];\n let extraDescendants = flatMap(extras, dep => dep.findDescendants(this.isActiveAddon)) as AddonPackage[];\n result = [...result, ...extras, ...extraDescendants];\n return result.sort(this.orderAddons);\n }\n\n @bind\n private isActiveAddon(pkg: Package): boolean {\n // stage1 already took care of converting everything that's actually active\n // into v2 addons. If it's not a v2 addon, we don't want it.\n //\n // We can encounter v1 addons here when there is inactive stuff floating\n // around in the node_modules that accidentally satisfy something like an\n // optional peer dep.\n return pkg.isV2Addon();\n }\n\n @bind\n private orderAddons(depA: Package, depB: Package): number {\n let depAIdx = 0;\n let depBIdx = 0;\n\n if (depA && depA.meta && depA.isV2Addon()) {\n depAIdx = depA.meta['order-index'] || 0;\n }\n if (depB && depB.meta && depB.isV2Addon()) {\n depBIdx = depB.meta['order-index'] || 0;\n }\n\n return depAIdx - depBIdx;\n }\n\n private resolvableExtensions(): string[] {\n // webpack's default is ['.wasm', '.mjs', '.js', '.json']. Keeping that\n // subset in that order is sensible, since many third-party libraries will\n // expect it to work that way.\n //\n // For TS, we defer to ember-cli-babel, and the setting for\n // \"enableTypescriptTransform\" can be set with and without\n // ember-cli-typescript\n return ['.wasm', '.mjs', '.js', '.json', '.ts', '.hbs', '.hbs.js'];\n }\n\n private *emberEntrypoints(htmlTreePath: string): IterableIterator<Asset> {\n let classicEntrypoints = [\n { entrypoint: 'index.html', includeTests: false },\n { entrypoint: 'tests/index.html', includeTests: true },\n ];\n if (!this.compatApp.shouldBuildTests) {\n classicEntrypoints.pop();\n }\n for (let { entrypoint, includeTests } of classicEntrypoints) {\n let sourcePath = join(htmlTreePath, entrypoint);\n let stats = statSync(sourcePath);\n let asset: EmberAsset = {\n kind: 'ember',\n relativePath: entrypoint,\n includeTests,\n sourcePath,\n mtime: stats.mtime.getTime(),\n size: stats.size,\n rootURL: this.rootURL(),\n prepare: (dom: JSDOM) => {\n let scripts = [...dom.window.document.querySelectorAll('script')];\n let styles = [...dom.window.document.querySelectorAll('link[rel=\"stylesheet\"]')] as HTMLLinkElement[];\n\n return {\n javascript: definitelyReplace(dom, this.compatApp.findAppScript(scripts, entrypoint)),\n styles: definitelyReplace(dom, this.compatApp.findAppStyles(styles, entrypoint)),\n implicitScripts: definitelyReplace(dom, this.compatApp.findVendorScript(scripts, entrypoint)),\n implicitStyles: definitelyReplace(dom, this.compatApp.findVendorStyles(styles, entrypoint)),\n testJavascript: maybeReplace(dom, this.compatApp.findTestScript(scripts)),\n implicitTestScripts: maybeReplace(dom, this.compatApp.findTestSupportScript(scripts)),\n implicitTestStyles: maybeReplace(dom, this.compatApp.findTestSupportStyles(styles)),\n };\n },\n };\n yield asset;\n }\n }\n\n private modulePrefix(): string {\n return this.configTree.readConfig().modulePrefix;\n }\n\n private podModulePrefix(): string | undefined {\n return this.configTree.readConfig().podModulePrefix;\n }\n\n private rootURL(): string {\n return this.configTree.readConfig().rootURL;\n }\n\n @Memoize()\n private activeRules() {\n return activePackageRules(this.options.packageRules.concat(defaultAddonPackageRules()), [\n { name: this.origAppPackage.name, version: this.origAppPackage.version, root: this.root },\n ...this.allActiveAddons.filter(p => p.meta['auto-upgraded']),\n ]);\n }\n\n private resolverConfig(engines: AppFiles[]): CompatResolverOptions {\n let renamePackages = Object.assign({}, ...this.allActiveAddons.map(dep => dep.meta['renamed-packages']));\n let renameModules = Object.assign({}, ...this.allActiveAddons.map(dep => dep.meta['renamed-modules']));\n\n let activeAddons: CompatResolverOptions['activeAddons'] = {};\n for (let addon of this.allActiveAddons) {\n activeAddons[addon.name] = addon.root;\n }\n\n let options: CompatResolverOptions['options'] = {\n staticHelpers: this.options.staticHelpers,\n staticModifiers: this.options.staticModifiers,\n staticComponents: this.options.staticComponents,\n allowUnsafeDynamicComponents: this.options.allowUnsafeDynamicComponents,\n };\n\n let config: CompatResolverOptions = {\n // this part is the base ModuleResolverOptions as required by @embroider/core\n activeAddons,\n renameModules,\n renamePackages,\n resolvableExtensions: this.resolvableExtensions(),\n appRoot: this.origAppPackage.root,\n engines: engines.map((appFiles, index) => ({\n packageName: appFiles.engine.package.name,\n root: index === 0 ? this.root : appFiles.engine.package.root, // first engine is the app, which has been relocated to this.root\n fastbootFiles: appFiles.fastbootFiles,\n activeAddons: [...appFiles.engine.addons]\n .map(a => ({\n name: a.name,\n root: a.root,\n }))\n // the traditional order is the order in which addons will run, such\n // that the last one wins. Our resolver's order is the order to\n // search, so first one wins.\n .reverse(),\n })),\n\n // this is the additional stufff that @embroider/compat adds on top to do\n // global template resolving\n modulePrefix: this.modulePrefix(),\n podModulePrefix: this.podModulePrefix(),\n activePackageRules: this.activeRules(),\n options,\n };\n\n return config;\n }\n\n private scriptPriority(pkg: Package) {\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\n @Memoize()\n private get resolvableExtensionsPattern(): RegExp {\n return extensionsPattern(this.resolvableExtensions());\n }\n\n private impliedAssets(\n type: keyof ImplicitAssetPaths,\n engine: AppFiles,\n emberENV?: EmberENV\n ): (OnDiskAsset | InMemoryAsset)[] {\n let result: (OnDiskAsset | InMemoryAsset)[] = this.impliedAddonAssets(type, engine).map(\n (sourcePath: string): OnDiskAsset => {\n let stats = statSync(sourcePath);\n return {\n kind: 'on-disk',\n relativePath: explicitRelative(this.root, sourcePath),\n sourcePath,\n mtime: stats.mtimeMs,\n size: stats.size,\n };\n }\n );\n\n if (type === 'implicit-scripts') {\n result.unshift({\n kind: 'in-memory',\n relativePath: '_testing_prefix_.js',\n source: `var runningTests=false;`,\n });\n\n result.unshift({\n kind: 'in-memory',\n relativePath: '_ember_env_.js',\n source: `window.EmberENV={ ...(window.EmberENV || {}), ...${JSON.stringify(emberENV, null, 2)} };`,\n });\n\n result.push({\n kind: 'in-memory',\n relativePath: '_loader_.js',\n source: `loader.makeDefaultExport=false;`,\n });\n }\n\n if (type === 'implicit-test-scripts') {\n // this is the traditional test-support-suffix.js\n result.push({\n kind: 'in-memory',\n relativePath: '_testing_suffix_.js',\n source: `\n var runningTests=true;\n if (typeof Testem !== 'undefined' && (typeof QUnit !== 'undefined' || typeof Mocha !== 'undefined')) {\n Testem.hookIntoTestFramework();\n }`,\n });\n\n // whether or not anybody was actually using @embroider/macros\n // explicitly as an addon, we ensure its test-support file is always\n // present.\n if (!result.find(s => s.kind === 'on-disk' && s.sourcePath.endsWith('embroider-macros-test-support.js'))) {\n result.unshift({\n kind: 'on-disk',\n sourcePath: require.resolve('@embroider/macros/src/vendor/embroider-macros-test-support'),\n mtime: 0,\n size: 0,\n relativePath: 'embroider-macros-test-support.js',\n });\n }\n }\n\n return result;\n }\n\n private impliedAddonAssets(type: keyof ImplicitAssetPaths, { engine }: AppFiles): string[] {\n let result: Array<string> = [];\n for (let addon of sortBy(Array.from(engine.addons), this.scriptPriority.bind(this))) {\n let implicitScripts = addon.meta[type];\n if (implicitScripts) {\n let styles = [];\n let options = { basedir: addon.root };\n for (let mod of implicitScripts) {\n if (type === 'implicit-styles') {\n // exclude engines because they will handle their own css importation\n if (!addon.isLazyEngine()) {\n styles.push(resolve.sync(mod, options));\n }\n } else {\n result.push(resolve.sync(mod, options));\n }\n }\n if (styles.length) {\n result = [...styles, ...result];\n }\n }\n }\n return result;\n }\n\n @Memoize()\n private babelConfig(resolverConfig: CompatResolverOptions) {\n let babel = cloneDeep(this.compatApp.babelConfig());\n\n if (!babel.plugins) {\n babel.plugins = [];\n }\n\n // Our stage3 code is always allowed to use dynamic import. We may emit it\n // ourself when splitting routes.\n babel.plugins.push(require.resolve('@babel/plugin-syntax-dynamic-import'));\n\n // https://github.com/webpack/webpack/issues/12154\n babel.plugins.push(require.resolve('./rename-require-plugin'));\n\n babel.plugins.push([require.resolve('babel-plugin-ember-template-compilation'), this.etcOptions(resolverConfig)]);\n\n // this is @embroider/macros configured for full stage3 resolution\n babel.plugins.push(...this.compatApp.macrosConfig.babelPluginConfig());\n\n let colocationOptions: TemplateColocationPluginOptions = {\n appRoot: this.origAppPackage.root,\n\n // This extra weirdness is a compromise in favor of build performance.\n //\n // 1. When auto-upgrading an addon from v1 to v2, we definitely want to\n // run any custom AST transforms in stage1.\n //\n // 2. In general case, AST transforms are allowed to manipulate Javascript\n // scope. This means that running transforms -- even when we're doing\n // source-to-source compilation that emits handlebars and not wire\n // format -- implies changing .hbs files into .js files.\n //\n // 3. So stage1 may need to rewrite .hbs to .hbs.js (to avoid colliding\n // with an existing co-located .js file).\n //\n // 4. But stage1 doesn't necessarily want to run babel over the\n // corresponding JS file. Most of the time, that's just an\n // unnecessarily expensive second parse. (We only run it in stage1 to\n // eliminate an addon's custom babel plugins, and many addons don't\n // have any.)\n //\n // 5. Therefore, the work of template-colocation gets defered until here,\n // and it may see co-located templates named `.hbs.js` instead of the\n // usual `.hbs.\n templateExtensions: ['.hbs', '.hbs.js'],\n\n // All of the above only applies to auto-upgraded packages that were\n // authored in v1. V2 packages don't get any of this complexity, they're\n // supposed to take care of colocating their own templates explicitly.\n packageGuard: true,\n };\n babel.plugins.push([templateColocationPluginPath, colocationOptions]);\n\n babel.plugins.push([\n require.resolve('./babel-plugin-adjust-imports'),\n (() => {\n let pluginConfig: AdjustImportsOptions = {\n appRoot: resolverConfig.appRoot,\n };\n return pluginConfig;\n })(),\n ]);\n\n // we can use globally shared babel runtime by default\n babel.plugins.push([\n require.resolve('@babel/plugin-transform-runtime'),\n { absoluteRuntime: __dirname, useESModules: true, regenerator: false },\n ]);\n\n const portable = makePortable(babel, { basedir: this.root }, this.portableHints);\n addCachablePlugin(portable.config);\n return portable;\n }\n\n private insertEmberApp(\n asset: ParsedEmberAsset,\n appFiles: AppFiles[],\n prepared: Map<string, InternalAsset>,\n emberENV: EmberENV\n ) {\n let html = asset.html;\n\n if (this.fastbootConfig) {\n // ignore scripts like ember-cli-livereload.js which are not really associated with\n // \"the app\".\n let ignoreScripts = html.dom.window.document.querySelectorAll('script');\n ignoreScripts.forEach(script => {\n script.setAttribute('data-fastboot-ignore', '');\n });\n }\n\n // our tests entrypoint already includes a correct module dependency on the\n // app, so we only insert the app when we're not inserting tests\n if (!asset.fileAsset.includeTests) {\n let appJS = this.topAppJSAsset(appFiles, prepared);\n html.insertScriptTag(html.javascript, appJS.relativePath, { type: 'module' });\n }\n\n if (this.fastbootConfig) {\n // any extra fastboot app files get inserted into our html.javascript\n // section, after the app has been inserted.\n for (let script of this.fastbootConfig.extraAppFiles) {\n html.insertScriptTag(html.javascript, script, { tag: 'fastboot-script' });\n }\n }\n\n html.insertStyleLink(html.styles, `assets/${this.origAppPackage.name}.css`);\n\n const parentEngine = appFiles.find(e => !e.engine.parent)!;\n let vendorJS = this.implicitScriptsAsset(prepared, parentEngine, emberENV);\n if (vendorJS) {\n html.insertScriptTag(html.implicitScripts, vendorJS.relativePath);\n }\n\n if (this.fastbootConfig) {\n // any extra fastboot vendor files get inserted into our\n // html.implicitScripts section, after the regular implicit script\n // (vendor.js) have been inserted.\n for (let script of this.fastbootConfig.extraVendorFiles) {\n html.insertScriptTag(html.implicitScripts, script, { tag: 'fastboot-script' });\n }\n }\n\n let implicitStyles = this.implicitStylesAsset(prepared, parentEngine);\n if (implicitStyles) {\n html.insertStyleLink(html.implicitStyles, implicitStyles.relativePath);\n }\n\n if (!asset.fileAsset.includeTests) {\n return;\n }\n\n // Test-related assets happen below this point\n\n let testJS = this.testJSEntrypoint(appFiles, prepared);\n html.insertScriptTag(html.testJavascript, testJS.relativePath, { type: 'module' });\n\n let implicitTestScriptsAsset = this.implicitTestScriptsAsset(prepared, parentEngine);\n if (implicitTestScriptsAsset) {\n html.insertScriptTag(html.implicitTestScripts, implicitTestScriptsAsset.relativePath);\n }\n\n let implicitTestStylesAsset = this.implicitTestStylesAsset(prepared, parentEngine);\n if (implicitTestStylesAsset) {\n html.insertStyleLink(html.implicitTestStyles, implicitTestStylesAsset.relativePath);\n }\n }\n\n private implicitScriptsAsset(\n prepared: Map<string, InternalAsset>,\n application: AppFiles,\n emberENV: EmberENV\n ): InternalAsset | undefined {\n let asset = prepared.get('assets/vendor.js');\n if (!asset) {\n let implicitScripts = this.impliedAssets('implicit-scripts', application, emberENV);\n if (implicitScripts.length > 0) {\n asset = new ConcatenatedAsset('assets/vendor.js', implicitScripts, this.resolvableExtensionsPattern);\n prepared.set(asset.relativePath, asset);\n }\n }\n return asset;\n }\n\n private implicitStylesAsset(prepared: Map<string, InternalAsset>, application: AppFiles): InternalAsset | undefined {\n let asset = prepared.get('assets/vendor.css');\n if (!asset) {\n let implicitStyles = this.impliedAssets('implicit-styles', application);\n if (implicitStyles.length > 0) {\n // we reverse because we want the synthetic vendor style at the top\n asset = new ConcatenatedAsset('assets/vendor.css', implicitStyles.reverse(), this.resolvableExtensionsPattern);\n prepared.set(asset.relativePath, asset);\n }\n }\n return asset;\n }\n\n private implicitTestScriptsAsset(\n prepared: Map<string, InternalAsset>,\n application: AppFiles\n ): InternalAsset | undefined {\n let testSupportJS = prepared.get('assets/test-support.js');\n if (!testSupportJS) {\n let implicitTestScripts = this.impliedAssets('implicit-test-scripts', application);\n if (implicitTestScripts.length > 0) {\n testSupportJS = new ConcatenatedAsset(\n 'assets/test-support.js',\n implicitTestScripts,\n this.resolvableExtensionsPattern\n );\n prepared.set(testSupportJS.relativePath, testSupportJS);\n }\n }\n return testSupportJS;\n }\n\n private implicitTestStylesAsset(\n prepared: Map<string, InternalAsset>,\n application: AppFiles\n ): InternalAsset | undefined {\n let asset = prepared.get('assets/test-support.css');\n if (!asset) {\n let implicitTestStyles = this.impliedAssets('implicit-test-styles', application);\n if (implicitTestStyles.length > 0) {\n asset = new ConcatenatedAsset('assets/test-support.css', implicitTestStyles, this.resolvableExtensionsPattern);\n prepared.set(asset.relativePath, asset);\n }\n }\n return asset;\n }\n\n // recurse to find all active addons that don't cross an engine boundary.\n // Inner engines themselves will be returned, but not those engines' children.\n // The output set's insertion order is the proper ember-cli compatible\n // ordering of the addons.\n private findActiveAddons(pkg: Package, engine: Engine, isChild = false): void {\n for (let child of this.activeAddonChildren(pkg)) {\n if (!child.isEngine()) {\n this.findActiveAddons(child, engine, true);\n }\n engine.addons.add(child);\n }\n // ensure addons are applied in the correct order, if set (via @embroider/compat/v1-addon)\n if (!isChild) {\n engine.addons = new Set(\n [...engine.addons].sort((a, b) => {\n return (a.meta['order-index'] || 0) - (b.meta['order-index'] || 0);\n })\n );\n }\n }\n\n private partitionEngines(appJSPath: string): Engine[] {\n let queue: Engine[] = [\n {\n package: this.appPackageWithMovedDeps,\n addons: new Set(),\n parent: undefined,\n sourcePath: appJSPath,\n modulePrefix: this.modulePrefix(),\n appRelativePath: '.',\n },\n ];\n let done: Engine[] = [];\n let seenEngines: Set<Package> = new Set();\n while (true) {\n let current = queue.shift();\n if (!current) {\n break;\n }\n this.findActiveAddons(current.package, current);\n for (let addon of current.addons) {\n if (addon.isEngine() && !seenEngines.has(addon)) {\n seenEngines.add(addon);\n queue.push({\n package: addon,\n addons: new Set(),\n parent: current,\n sourcePath: addon.root,\n modulePrefix: addon.name,\n appRelativePath: explicitRelative(this.root, addon.root),\n });\n }\n }\n done.push(current);\n }\n return done;\n }\n\n @Memoize()\n private get activeFastboot() {\n return this.activeAddonChildren(this.appPackageWithMovedDeps).find(a => a.name === 'ember-cli-fastboot');\n }\n\n @Memoize()\n private get fastbootConfig():\n | { packageJSON: PackageInfo; extraAppFiles: string[]; extraVendorFiles: string[] }\n | undefined {\n if (this.activeFastboot) {\n // this is relying on work done in stage1 by @embroider/compat/src/compat-adapters/ember-cli-fastboot.ts\n let packageJSON = readJSONSync(join(this.activeFastboot.root, '_fastboot_', 'package.json'));\n let { extraAppFiles, extraVendorFiles } = packageJSON['embroider-fastboot'];\n delete packageJSON['embroider-fastboot'];\n extraVendorFiles.push('assets/embroider_macros_fastboot_init.js');\n return { packageJSON, extraAppFiles, extraVendorFiles };\n }\n }\n\n private engines: { engine: Engine; appSync: SyncDir; fastbootSync: SyncDir | undefined }[] | undefined;\n\n private updateAppJS(appJSPath: string): AppFiles[] {\n if (!this.engines) {\n this.engines = this.partitionEngines(appJSPath).map(engine => {\n if (engine.sourcePath === appJSPath) {\n // this is the app. We have more to do for the app than for other\n // engines.\n let fastbootSync: SyncDir | undefined;\n if (this.activeFastboot) {\n let fastbootDir = this.fastbootJSSrcDir();\n if (fastbootDir) {\n fastbootSync = new SyncDir(fastbootDir, resolvePath(this.root, '_fastboot_'));\n }\n }\n return {\n engine,\n appSync: new SyncDir(appJSPath, this.root),\n fastbootSync,\n };\n } else {\n // this is not the app, so it's some other engine. Engines are already\n // built by stage1 like all other addons, so we only need to observe\n // their files, not doing any actual copying or building.\n return {\n engine,\n appSync: new SyncDir(engine.sourcePath, undefined),\n\n // AFAIK, we've never supported a fastboot overlay directory in an\n // engine. But if we do need that, it would go here.\n fastbootSync: undefined,\n };\n }\n });\n }\n\n for (let engine of this.engines) {\n engine.appSync.update();\n engine.fastbootSync?.update();\n }\n\n return this.engines.map(\n ({ engine, appSync, fastbootSync }) =>\n new AppFiles(\n engine,\n appSync.files,\n fastbootSync?.files ?? new Set(),\n this.resolvableExtensionsPattern,\n this.podModulePrefix()\n )\n );\n }\n\n private prepareAsset(asset: Asset, appFiles: AppFiles[], prepared: Map<string, InternalAsset>, emberENV: EmberENV) {\n if (asset.kind === 'ember') {\n let prior = this.assets.get(asset.relativePath);\n let parsed: ParsedEmberAsset;\n if (prior && prior.kind === 'built-ember' && prior.parsedAsset.validFor(asset)) {\n // we can reuse the parsed html\n parsed = prior.parsedAsset;\n parsed.html.clear();\n } else {\n parsed = new ParsedEmberAsset(asset);\n }\n this.insertEmberApp(parsed, appFiles, prepared, emberENV);\n prepared.set(asset.relativePath, new BuiltEmberAsset(parsed));\n } else {\n prepared.set(asset.relativePath, asset);\n }\n }\n\n private prepareAssets(\n requestedAssets: Asset[],\n appFiles: AppFiles[],\n emberENV: EmberENV\n ): Map<string, InternalAsset> {\n let prepared: Map<string, InternalAsset> = new Map();\n for (let asset of requestedAssets) {\n this.prepareAsset(asset, appFiles, prepared, emberENV);\n }\n return prepared;\n }\n\n private assetIsValid(asset: InternalAsset, prior: InternalAsset | undefined): boolean {\n if (!prior) {\n return false;\n }\n switch (asset.kind) {\n case 'on-disk':\n return prior.kind === 'on-disk' && prior.size === asset.size && prior.mtime === asset.mtime;\n case 'in-memory':\n return prior.kind === 'in-memory' && stringOrBufferEqual(prior.source, asset.source);\n case 'built-ember':\n return prior.kind === 'built-ember' && prior.source === asset.source;\n case 'concatenated-asset':\n return (\n prior.kind === 'concatenated-asset' &&\n prior.sources.length === asset.sources.length &&\n prior.sources.every((priorFile, index) => {\n let newFile = asset.sources[index];\n return this.assetIsValid(newFile, priorFile);\n })\n );\n }\n }\n\n private updateOnDiskAsset(asset: OnDiskAsset) {\n let destination = join(this.root, asset.relativePath);\n ensureDirSync(dirname(destination));\n copySync(asset.sourcePath, destination, { dereference: true });\n }\n\n private updateInMemoryAsset(asset: InMemoryAsset) {\n let destination = join(this.root, asset.relativePath);\n ensureDirSync(dirname(destination));\n writeFileSync(destination, asset.source, 'utf8');\n }\n\n private updateBuiltEmberAsset(asset: BuiltEmberAsset) {\n let destination = join(this.root, asset.relativePath);\n ensureDirSync(dirname(destination));\n writeFileSync(destination, asset.source, 'utf8');\n }\n\n private async updateConcatenatedAsset(asset: ConcatenatedAsset) {\n let concat = new SourceMapConcat({\n outputFile: join(this.root, asset.relativePath),\n mapCommentType: asset.relativePath.endsWith('.js') ? 'line' : 'block',\n baseDir: this.root,\n });\n if (process.env.EMBROIDER_CONCAT_STATS) {\n let MeasureConcat = (await import('@embroider/core/src/measure-concat')).default;\n concat = new MeasureConcat(asset.relativePath, concat, this.root);\n }\n for (let source of asset.sources) {\n switch (source.kind) {\n case 'on-disk':\n concat.addFile(explicitRelative(this.root, source.sourcePath));\n break;\n case 'in-memory':\n if (typeof source.source !== 'string') {\n throw new Error(`attempted to concatenated a Buffer-backed in-memory asset`);\n }\n concat.addSpace(source.source);\n break;\n default:\n assertNever(source);\n }\n }\n await concat.end();\n }\n\n private async updateAssets(requestedAssets: Asset[], appFiles: AppFiles[], emberENV: EmberENV) {\n let assets = this.prepareAssets(requestedAssets, appFiles, emberENV);\n for (let asset of assets.values()) {\n if (this.assetIsValid(asset, this.assets.get(asset.relativePath))) {\n continue;\n }\n debug('rebuilding %s', asset.relativePath);\n switch (asset.kind) {\n case 'on-disk':\n this.updateOnDiskAsset(asset);\n break;\n case 'in-memory':\n this.updateInMemoryAsset(asset);\n break;\n case 'built-ember':\n this.updateBuiltEmberAsset(asset);\n break;\n case 'concatenated-asset':\n await this.updateConcatenatedAsset(asset);\n break;\n default:\n assertNever(asset);\n }\n }\n for (let oldAsset of this.assets.values()) {\n if (!assets.has(oldAsset.relativePath)) {\n unlinkSync(join(this.root, oldAsset.relativePath));\n }\n }\n this.assets = assets;\n return [...assets.values()];\n }\n\n private gatherAssets(inputPaths: OutputPaths<TreeNames>): Asset[] {\n // first gather all the assets out of addons\n let assets: Asset[] = [];\n for (let pkg of this.allActiveAddons) {\n if (pkg.meta['public-assets']) {\n for (let [filename, appRelativeURL] of Object.entries(pkg.meta['public-assets'] || {})) {\n let sourcePath = resolvePath(pkg.root, filename);\n let stats = statSync(sourcePath);\n assets.push({\n kind: 'on-disk',\n sourcePath,\n relativePath: appRelativeURL,\n mtime: stats.mtimeMs,\n size: stats.size,\n });\n }\n }\n }\n\n if (this.activeFastboot) {\n const source = `\n (function(){\n var key = '_embroider_macros_runtime_config';\n if (!window[key]){ window[key] = [];}\n window[key].push(function(m) {\n m.setGlobalConfig('fastboot', Object.assign({}, m.getGlobalConfig().fastboot, { isRunning: true }));\n });\n }())`;\n assets.push({\n kind: 'in-memory',\n source,\n relativePath: 'assets/embroider_macros_fastboot_init.js',\n });\n }\n\n // and finally tack on the ones from our app itself\n return assets.concat(this.extractAssets(inputPaths));\n }\n\n private firstBuild = true;\n\n async build(inputPaths: OutputPaths<TreeNames>) {\n // on the first build, we lock down the macros config. on subsequent builds,\n // this doesn't do anything anyway because it's idempotent.\n this.compatApp.macrosConfig.finalize();\n\n // on first build, clear the output directory completely\n if (this.firstBuild) {\n rmSync(this.root, { recursive: true, force: true });\n this.firstBuild = false;\n }\n\n let appFiles = this.updateAppJS(inputPaths.appJS);\n let emberENV = this.configTree.readConfig().EmberENV;\n let assets = this.gatherAssets(inputPaths);\n\n let finalAssets = await this.updateAssets(assets, appFiles, emberENV);\n\n let assetPaths = assets.map(asset => asset.relativePath);\n\n if (this.activeFastboot) {\n // when using fastboot, our own package.json needs to be in the output so fastboot can read it.\n assetPaths.push('package.json');\n }\n\n for (let asset of finalAssets) {\n // our concatenated assets all have map files that ride along. Here we're\n // telling the final stage packager to be sure and serve the map files\n // too.\n if (asset.kind === 'concatenated-asset') {\n assetPaths.push(asset.sourcemapPath);\n }\n }\n\n let meta: AppMeta = {\n type: 'app',\n version: 2,\n assets: assetPaths,\n babel: {\n filename: '_babel_config_.js',\n isParallelSafe: true, // TODO\n majorVersion: this.compatApp.babelMajorVersion(),\n fileFilter: '_babel_filter_.js',\n },\n 'root-url': this.rootURL(),\n };\n\n // all compat apps are auto-upgraded, there's no v2 app format here\n meta['auto-upgraded'] = true;\n\n let pkg = this.combinePackageJSON(meta);\n writeFileSync(join(this.root, 'package.json'), JSON.stringify(pkg, null, 2), 'utf8');\n\n let resolverConfig = this.resolverConfig(appFiles);\n this.addResolverConfig(resolverConfig);\n let babelConfig = this.babelConfig(resolverConfig);\n this.addBabelConfig(babelConfig);\n }\n\n private combinePackageJSON(meta: AppMeta): object {\n let pkgLayers: any[] = [this.origAppPackage.packageJSON];\n let fastbootConfig = this.fastbootConfig;\n if (fastbootConfig) {\n // fastboot-specific package.json output is allowed to add to our original package.json\n pkgLayers.push(fastbootConfig.packageJSON);\n }\n // but our own new v2 app metadata takes precedence over both\n pkgLayers.push({ keywords: ['ember-addon'], 'ember-addon': meta });\n return combinePackageJSON(...pkgLayers);\n }\n\n private etcOptions(resolverConfig: CompatResolverOptions): EtcOptions {\n let transforms = this.compatApp.htmlbarsPlugins;\n\n let { plugins: macroPlugins, setConfig } = MacrosConfig.transforms();\n setConfig(this.compatApp.macrosConfig);\n for (let macroPlugin of macroPlugins) {\n transforms.push(macroPlugin as any);\n }\n\n if (\n this.options.staticComponents ||\n this.options.staticHelpers ||\n this.options.staticModifiers ||\n (globalThis as any).embroider_audit\n ) {\n let opts: ResolverTransformOptions = {\n appRoot: resolverConfig.appRoot,\n };\n transforms.push([require.resolve('./resolver-transform'), opts]);\n }\n\n let resolver = new Resolver(resolverConfig);\n let resolution = resolver.nodeResolve(\n 'ember-source/vendor/ember/ember-template-compiler',\n resolvePath(this.root, 'package.json')\n );\n if (resolution.type !== 'real') {\n throw new Error(`bug: unable to resolve ember-template-compiler from ${this.root}`);\n }\n\n return {\n transforms,\n compilerPath: resolution.filename,\n enableLegacyModules: ['ember-cli-htmlbars', 'ember-cli-htmlbars-inline-precompile', 'htmlbars-inline-precompile'],\n };\n }\n\n @Memoize()\n private get portableHints(): PortableHint[] {\n return this.options.pluginHints.map(hint => {\n let cursor = join(this.origAppPackage.root, 'package.json');\n for (let i = 0; i < hint.resolve.length; i++) {\n let target = hint.resolve[i];\n if (i < hint.resolve.length - 1) {\n target = join(target, 'package.json');\n }\n cursor = resolve.sync(target, { basedir: dirname(cursor) });\n }\n\n return {\n requireFile: cursor,\n useMethod: hint.useMethod,\n packageVersion: maybeNodeModuleVersion(cursor),\n };\n });\n }\n\n private addBabelConfig(pconfig: { config: TransformOptions; isParallelSafe: boolean }) {\n if (!pconfig.isParallelSafe) {\n warn('Your build is slower because some babel plugins are non-serializable');\n }\n writeFileSync(\n join(this.root, '_babel_config_.js'),\n `module.exports = ${JSON.stringify(pconfig.config, null, 2)}`,\n 'utf8'\n );\n writeFileSync(\n join(this.root, '_babel_filter_.js'),\n babelFilterTemplate({ skipBabel: this.options.skipBabel, appRoot: this.origAppPackage.root }),\n 'utf8'\n );\n }\n\n private addResolverConfig(config: CompatResolverOptions) {\n outputJSONSync(join(locateEmbroiderWorkingDir(this.compatApp.root), 'resolver.json'), config, { spaces: 2 });\n }\n\n private shouldSplitRoute(routeName: string) {\n return (\n !this.options.splitAtRoutes ||\n this.options.splitAtRoutes.find(pattern => {\n if (typeof pattern === 'string') {\n return pattern === routeName;\n } else {\n return pattern.test(routeName);\n }\n })\n );\n }\n\n private splitRoute(\n routeName: string,\n files: RouteFiles,\n addToParent: (routeName: string, filename: string) => void,\n addLazyBundle: (routeNames: string[], files: string[]) => void\n ) {\n let shouldSplit = routeName && this.shouldSplitRoute(routeName);\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 this.splitRoute(\n `${routeName}.${childName}`,\n childFiles,\n\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\n private topAppJSAsset(engines: AppFiles[], prepared: Map<string, InternalAsset>): InternalAsset {\n let [app, ...childEngines] = engines;\n let relativePath = `assets/${this.origAppPackage.name}.js`;\n return this.appJSAsset(relativePath, app, childEngines, prepared, {\n autoRun: this.compatApp.autoRun,\n appBoot: !this.compatApp.autoRun ? this.compatApp.appBoot.readAppBoot() : '',\n mainModule: explicitRelative(dirname(relativePath), 'app'),\n appConfig: this.configTree.readConfig().APP,\n });\n }\n\n @Memoize()\n private get staticAppPathsPattern(): RegExp | undefined {\n if (this.options.staticAppPaths.length > 0) {\n return new RegExp(\n '^(?:' + this.options.staticAppPaths.map(staticAppPath => escapeRegExp(staticAppPath)).join('|') + ')(?:$|/)'\n );\n }\n }\n\n private requiredOtherFiles(appFiles: AppFiles): readonly string[] {\n let pattern = this.staticAppPathsPattern;\n if (pattern) {\n return appFiles.otherAppFiles.filter(f => {\n return !pattern!.test(f);\n });\n } else {\n return appFiles.otherAppFiles;\n }\n }\n\n private appJSAsset(\n relativePath: string,\n appFiles: AppFiles,\n childEngines: AppFiles[],\n prepared: Map<string, InternalAsset>,\n entryParams?: Partial<Parameters<typeof entryTemplate>[0]>\n ): InternalAsset {\n let cached = prepared.get(relativePath);\n if (cached) {\n return cached;\n }\n\n let eagerModules: string[] = [];\n\n let requiredAppFiles = [this.requiredOtherFiles(appFiles)];\n if (!this.options.staticComponents) {\n requiredAppFiles.push(appFiles.components);\n }\n if (!this.options.staticHelpers) {\n requiredAppFiles.push(appFiles.helpers);\n }\n if (!this.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.parent && appFiles.engine.package.isLazyEngine()) {\n let implicitStyles = this.impliedAssets('implicit-styles', appFiles);\n for (let style of implicitStyles) {\n styles.push({\n path: explicitRelative('assets/_engine_', style.relativePath),\n });\n }\n\n let engineMeta = appFiles.engine.package.meta as AddonMeta;\n if (engineMeta && engineMeta['implicit-styles']) {\n for (let style of engineMeta['implicit-styles']) {\n styles.push({\n path: explicitRelative(dirname(relativePath), join(appFiles.engine.appRelativePath, style)),\n });\n }\n }\n }\n\n let lazyEngines: { names: string[]; path: string }[] = [];\n for (let childEngine of childEngines) {\n let asset = this.appJSAsset(\n `assets/_engine_/${encodeURIComponent(childEngine.engine.package.name)}.js`,\n childEngine,\n [],\n prepared\n );\n if (childEngine.engine.package.isLazyEngine()) {\n lazyEngines.push({\n names: [childEngine.engine.package.name],\n path: explicitRelative(dirname(relativePath), asset.relativePath),\n });\n } else {\n eagerModules.push(explicitRelative(dirname(relativePath), asset.relativePath));\n }\n }\n let lazyRoutes: { names: string[]; path: string }[] = [];\n for (let [routeName, routeFiles] of appFiles.routeFiles.children) {\n this.splitRoute(\n routeName,\n routeFiles,\n (_: string, filename: string) => {\n requiredAppFiles.push([filename]);\n },\n (routeNames: string[], files: string[]) => {\n let routeEntrypoint = `assets/_route_/${encodeURIComponent(routeNames[0])}.js`;\n if (!prepared.has(routeEntrypoint)) {\n prepared.set(routeEntrypoint, this.routeEntrypoint(appFiles, routeEntrypoint, files));\n }\n lazyRoutes.push({\n names: routeNames,\n path: this.importPaths(appFiles, routeEntrypoint).buildtime,\n });\n }\n );\n }\n\n let [fastboot, nonFastboot] = partition(excludeDotFiles(flatten(requiredAppFiles)), file =>\n appFiles.isFastbootOnly.get(file)\n );\n let amdModules = nonFastboot.map(file => this.importPaths(appFiles, file));\n let fastbootOnlyAmdModules = fastboot.map(file => this.importPaths(appFiles, file));\n\n // this is a backward-compatibility feature: addons can force inclusion of\n // modules.\n eagerModules.push('./#embroider-implicit-modules');\n\n let params = { amdModules, fastbootOnlyAmdModules, lazyRoutes, lazyEngines, eagerModules, styles };\n if (entryParams) {\n Object.assign(params, entryParams);\n }\n\n let source = entryTemplate(params);\n\n let asset: InternalAsset = {\n kind: 'in-memory',\n source,\n relativePath,\n };\n prepared.set(relativePath, asset);\n return asset;\n }\n\n private importPaths({ engine }: AppFiles, engineRelativePath: string) {\n let noHBS = engineRelativePath.replace(this.resolvableExtensionsPattern, '').replace(/\\.hbs$/, '');\n return {\n runtime: `${engine.modulePrefix}/${noHBS}`,\n buildtime: posix.join(engine.package.name, engineRelativePath),\n };\n }\n\n private routeEntrypoint(appFiles: AppFiles, relativePath: string, files: string[]) {\n let [fastboot, nonFastboot] = partition(files, file => appFiles.isFastbootOnly.get(file));\n\n let asset: InternalAsset = {\n kind: 'in-memory',\n source: routeEntryTemplate({\n files: nonFastboot.map(f => this.importPaths(appFiles, f)),\n fastbootOnlyFiles: fastboot.map(f => this.importPaths(appFiles, f)),\n }),\n relativePath,\n };\n return asset;\n }\n\n private testJSEntrypoint(appFiles: AppFiles[], prepared: Map<string, InternalAsset>): InternalAsset {\n let asset = prepared.get(`assets/test.js`);\n if (asset) {\n return asset;\n }\n\n // We're only building tests from the first engine (the app). This is the\n // normal thing to do -- tests from engines don't automatically roll up into\n // the app.\n let engine = appFiles[0];\n\n const myName = 'assets/test.js';\n\n // tests necessarily also include the app. This is where we account for\n // that. The classic solution was to always include the app's separate\n // script tag in the tests HTML, but that isn't as easy for final stage\n // packagers to understand. It's better to express it here as a direct\n // module dependency.\n let eagerModules: string[] = [\n explicitRelative(dirname(myName), this.topAppJSAsset(appFiles, prepared).relativePath),\n ];\n\n let amdModules: { runtime: string; buildtime: string }[] = [];\n // this is a backward-compatibility feature: addons can force inclusion of\n // test support modules.\n eagerModules.push('./#embroider-implicit-test-modules');\n\n for (let relativePath of engine.tests) {\n amdModules.push(this.importPaths(engine, relativePath));\n }\n\n let source = entryTemplate({\n amdModules,\n eagerModules,\n testSuffix: true,\n });\n\n asset = {\n kind: 'in-memory',\n source,\n relativePath: myName,\n };\n prepared.set(asset.relativePath, asset);\n return asset;\n }\n}\n\nfunction maybeReplace(dom: JSDOM, element: Element | undefined): Node | undefined {\n if (element) {\n return definitelyReplace(dom, element);\n }\n}\n\nfunction definitelyReplace(dom: JSDOM, element: Element): Node {\n let placeholder = dom.window.document.createTextNode('');\n element.replaceWith(placeholder);\n return placeholder;\n}\n\nfunction defaultAddonPackageRules(): PackageRules[] {\n return readdirSync(join(__dirname, 'addon-dependency-rules'))\n .map(filename => {\n if (filename.endsWith('.js')) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require(join(__dirname, 'addon-dependency-rules', filename)).default;\n }\n })\n .filter(Boolean)\n .reduce((a, b) => a.concat(b), []);\n}\n\nconst entryTemplate = jsHandlebarsCompile(`\nimport { importSync as i, macroCondition, getGlobalConfig } from '@embroider/macros';\nlet w = window;\nlet d = w.define;\n\n{{#if styles}}\n if (macroCondition(!getGlobalConfig().fastboot?.isRunning)) {\n {{#each styles as |stylePath| ~}}\n i(\"{{js-string-escape stylePath.path}}\");\n {{/each}}\n }\n{{/if}}\n\n{{#each amdModules as |amdModule| ~}}\n d(\"{{js-string-escape amdModule.runtime}}\", function(){ return i(\"{{js-string-escape amdModule.buildtime}}\");});\n{{/each}}\n\n{{#if fastbootOnlyAmdModules}}\n if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {\n {{#each fastbootOnlyAmdModules as |amdModule| ~}}\n d(\"{{js-string-escape amdModule.runtime}}\", function(){ return i(\"{{js-string-escape amdModule.buildtime}}\");});\n {{/each}}\n }\n{{/if}}\n\n{{#each eagerModules as |eagerModule| ~}}\n i(\"{{js-string-escape eagerModule}}\");\n{{/each}}\n\n{{#if lazyRoutes}}\nw._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}}\nw._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\n{{#if autoRun ~}}\nif (!runningTests) {\n i(\"{{js-string-escape mainModule}}\").default.create({{json-stringify appConfig}});\n}\n{{else if appBoot ~}}\n {{ appBoot }}\n{{/if}}\n\n{{#if testSuffix ~}}\n {{!- TODO: both of these suffixes should get dynamically generated so they incorporate\n any content-for added by addons. -}}\n\n\n {{!- this is the traditional tests-suffix.js -}}\n i('../tests/test-helper');\n EmberENV.TESTS_FILE_LOADED = true;\n{{/if}}\n`) as (params: {\n amdModules: { runtime: string; buildtime: string }[];\n fastbootOnlyAmdModules?: { runtime: string; buildtime: string }[];\n eagerModules?: string[];\n autoRun?: boolean;\n appBoot?: string;\n mainModule?: string;\n appConfig?: unknown;\n testSuffix?: boolean;\n lazyRoutes?: { names: string[]; path: string }[];\n lazyEngines?: { names: string[]; path: string }[];\n styles?: { path: string }[];\n}) => string;\n\nconst routeEntryTemplate = jsHandlebarsCompile(`\nimport { importSync as i } from '@embroider/macros';\nlet d = window.define;\n{{#each files as |amdModule| ~}}\nd(\"{{js-string-escape amdModule.runtime}}\", function(){ return i(\"{{js-string-escape amdModule.buildtime}}\");});\n{{/each}}\n{{#if fastbootOnlyFiles}}\n import { macroCondition, getGlobalConfig } from '@embroider/macros';\n if (macroCondition(getGlobalConfig().fastboot?.isRunning)) {\n {{#each fastbootOnlyFiles as |amdModule| ~}}\n d(\"{{js-string-escape amdModule.runtime}}\", function(){ return i(\"{{js-string-escape amdModule.buildtime}}\");});\n {{/each}}\n }\n{{/if}}\n`) as (params: {\n files: { runtime: string; buildtime: string }[];\n fastbootOnlyFiles: { runtime: string; buildtime: string }[];\n}) => string;\n\nfunction stringOrBufferEqual(a: string | Buffer, b: string | Buffer): boolean {\n if (typeof a === 'string' && typeof b === 'string') {\n return a === b;\n }\n if (a instanceof Buffer && b instanceof Buffer) {\n return Buffer.compare(a, b) === 0;\n }\n return false;\n}\n\nconst babelFilterTemplate = jsHandlebarsCompile(`\nconst { babelFilter } = require(${JSON.stringify(require.resolve('@embroider/core'))});\nmodule.exports = babelFilter({{json-stringify skipBabel}}, \"{{js-string-escape appRoot}}\");\n`) as (params: { skipBabel: Options['skipBabel']; appRoot: string }) => string;\n\nfunction combinePackageJSON(...layers: object[]) {\n function custom(objValue: any, srcValue: any, key: string, _object: any, _source: any, stack: { size: number }) {\n if (key === 'keywords' && stack.size === 0) {\n if (Array.isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n }\n }\n return mergeWith({}, ...layers, custom);\n}\n\nfunction addCachablePlugin(babelConfig: TransformOptions) {\n if (Array.isArray(babelConfig.plugins) && babelConfig.plugins.length > 0) {\n const plugins = Object.create(null);\n plugins[cacheBustingPluginPath] = cacheBustingPluginVersion;\n\n for (const plugin of babelConfig.plugins) {\n let absolutePathToPlugin: string;\n if (Array.isArray(plugin) && typeof plugin[0] === 'string') {\n absolutePathToPlugin = plugin[0] as string;\n } else if (typeof plugin === 'string') {\n absolutePathToPlugin = plugin;\n } else {\n throw new Error(`[Embroider] a babel plugin without an absolute path was from: ${plugin}`);\n }\n\n plugins[absolutePathToPlugin] = maybeNodeModuleVersion(absolutePathToPlugin);\n }\n\n babelConfig.plugins.push([\n cacheBustingPluginPath,\n {\n plugins,\n },\n ]);\n }\n}\n\nfunction excludeDotFiles(files: string[]) {\n return files.filter(file => !file.startsWith('.') && !file.includes('/.'));\n}\n\ninterface TreeNames {\n appJS: BroccoliNode;\n htmlTree: BroccoliNode;\n publicTree: BroccoliNode | undefined;\n configTree: BroccoliNode;\n}\n\ntype EmberENV = unknown;\n\ntype InternalAsset = OnDiskAsset | InMemoryAsset | BuiltEmberAsset | ConcatenatedAsset;\n\nclass ParsedEmberAsset {\n kind: 'parsed-ember' = 'parsed-ember';\n relativePath: string;\n fileAsset: EmberAsset;\n html: PreparedEmberHTML;\n\n constructor(asset: EmberAsset) {\n this.fileAsset = asset;\n this.html = new PreparedEmberHTML(asset);\n this.relativePath = asset.relativePath;\n }\n\n validFor(other: EmberAsset) {\n return this.fileAsset.mtime === other.mtime && this.fileAsset.size === other.size;\n }\n}\n\nclass BuiltEmberAsset {\n kind: 'built-ember' = 'built-ember';\n relativePath: string;\n parsedAsset: ParsedEmberAsset;\n source: string;\n\n constructor(asset: ParsedEmberAsset) {\n this.parsedAsset = asset;\n this.source = asset.html.dom.serialize();\n this.relativePath = asset.relativePath;\n }\n}\n\nclass ConcatenatedAsset {\n kind: 'concatenated-asset' = 'concatenated-asset';\n constructor(\n public relativePath: string,\n public sources: (OnDiskAsset | InMemoryAsset)[],\n private resolvableExtensions: RegExp\n ) {}\n get sourcemapPath() {\n return this.relativePath.replace(this.resolvableExtensions, '') + '.map';\n }\n}\n"]}
|
package/src/dependency-rules.js
CHANGED
|
@@ -65,7 +65,7 @@ function activePackageRules(packageRules, activePackages) {
|
|
|
65
65
|
}
|
|
66
66
|
exports.activePackageRules = activePackageRules;
|
|
67
67
|
function appTreeRulesDir(root, resolver) {
|
|
68
|
-
let pkg = resolver.
|
|
68
|
+
let pkg = resolver.packageCache.ownerOfFile(root);
|
|
69
69
|
if (pkg === null || pkg === void 0 ? void 0 : pkg.isV2Addon()) {
|
|
70
70
|
// in general v2 addons can keep their app tree stuff in other places than
|
|
71
71
|
// "_app_" and we would need to check their package.json to see. But this code
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-rules.js","sourceRoot":"","sources":["dependency-rules.ts"],"names":[],"mappings":"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","sourcesContent":["import { getOrCreate, Resolver } from '@embroider/core';\nimport { resolve } from 'path';\nimport { satisfies } from 'semver';\n\nexport interface PackageRules {\n // This whole set of rules will only apply when the given addon package\n // matching the given semver range is present and active.\n package: string;\n semverRange?: string;\n\n components?: {\n // I would prefer to write the key type here as `ComponentSnippet` to aid\n // documentation, but Typescript won't allow it. See ComponentSnippet below.\n [key: string]: ComponentRules;\n };\n\n addonModules?: {\n // `filename` is relative to your package root, and it assumes v2 package\n // format. Like \"templates/components/foo.hbs\".\n [filename: string]: ModuleRules;\n };\n\n appModules?: {\n // `filename` is relative to the app's root, and it assumes v2 package\n // format. Like \"templates/components/foo.hbs\".\n [filename: string]: ModuleRules;\n };\n\n addonTemplates?: {\n // `filename` is relative to your package root, and it assumes v2 package\n // format. Like \"templates/foo.hbs\".\n [filename: string]: TemplateRules;\n };\n\n appTemplates?: {\n // `filename` is relative to the app's root, and it assumes v2 package\n // format. Like \"templates/foo.hbs\".\n [filename: string]: TemplateRules;\n };\n}\n\nexport interface ActivePackageRules extends PackageRules {\n // the location(s) of active packages that match this rule.\n roots: string[];\n}\n\nexport interface TemplateRules {\n // Tells embroider which list of components may be needed for a given path.\n // For example, if your template says `{{component this.panel}}` and you know\n // that `this.panel` can be either \"light-panel\" or \"dark-panel\", you would\n // say: `invokes: { \"this.panel\": [\"<LightPanel/>\", \"<DarkPanel/>\"] }`\n invokes?: {\n [path: string]: ComponentSnippet[];\n };\n\n // Embroider will complain if you try to use staticHelper and/or\n // staticComponents and you have ambiguous forms that might be a component or\n // a helper or just some data that is being rendered. For example, if a\n // template says `{{something}}`, we can't tell if that is `<Something />` or\n // `{{ (something) }}` or `{{this.something}}`.\n disambiguate?: {\n [dasherizedName: string]: 'component' | 'helper' | 'data';\n };\n}\n\nexport interface ComponentRules extends TemplateRules {\n // This declares that our component yields other components that are safe to\n // invoke with the {{component}} helper.\n //\n // The array corresponds to your yielded positional arguments. Any value that\n // is true is considered a safe component. Any value can be a hash in which\n // individual keys that are true are considered safe components.\n //\n // Examples:\n //\n // If you do: {{yield (component \"x\") }}\n // Then say: yieldsSafeComponents: [true]\n //\n // If you do: {{yield (hash x=(component \"x\") y=(component \"y\")) }}\n // Then say: yieldsSafeComponents: [{x: true, y: true}]\n //\n yieldsSafeComponents?: (boolean | { [name: string]: boolean })[];\n\n // This declares that our component yields some of its arguments unchanged.\n //\n // The array corresponds to your yielded positional arguments. Each value can\n // be:\n // false, meaning this yielded value is not one of our arguments\n // a string, meaning this yielded value is our argument with that name\n // or a POJO, whose individual properties are string naming which arguments\n // from whence they came.\n //\n // Examples:\n //\n // If you do: {{yield @foo}}\n // Then say: yieldsArguments: ['foo']\n //\n // If you do: {{yield (hash x=@foo) }}\n // Then say: yieldsArguments: [{ x: 'foo' }]\n yieldsArguments?: (string | { [name: string]: string })[];\n\n // This declares that our component accepts arguments that will be invoked\n // with the {{component}} helper. This silences warnings in the places where\n // we consume them, while introducing warnings in the places where people are\n // passing them to us (if they are doing so in a way that is too dynamic to\n // analyze).\n //\n // If you use this, you may also need to set `layout`, see below.\n acceptsComponentArguments?: ArgumentMapping[];\n\n // If you want to use `acceptsComponentArguments` on a component that\n // customies its own `layout` (which is most addon-provided components), you\n // need to tell us here how to find its template by setting either `addonPath`\n // or `appPath`.\n layout?: {\n // This is a path relative to the addon root, assuming V2 format.\n addonPath?: string;\n // This is the path relative to the app root, assuming V2 format.\n appPath?: string;\n };\n\n // An unresolvable component is usually a build error (when your app has the\n // staticComponent Option enabled). But you can tell Embroider to ignore it by\n // setting this.\n safeToIgnore?: boolean;\n}\n\nexport interface ModuleRules {\n // We will resolve these components into the corresponding JS and HBS files\n // and generate imports such that this module depends on them.\n dependsOnComponents?: ComponentSnippet[];\n\n // This adds new imports to our module, as if they were really there. Helpful\n // for working around addons that depend on things but don't say so.\n dependsOnModules?: string[];\n}\n\n// The bare \"string\" short form implies that `becomes` is the same as `name`.\nexport type ArgumentMapping =\n | string\n | {\n // the name of the argument you accept\n name: string;\n // the name its consumed as in your template\n becomes: string;\n };\n\n// A component snippet is a string containing valid HBS that is a single\n// component invocation. We use it to refer to components in a way that doesn't\n// require any new syntax or rules, and that's necessarily supported by whatever\n// build-time template resolver is in use.\n//\n// Examples of valid ComponentSnippets:\n//\n// \"{{my-component}}\"\n// \"{{my-component/foo}}\"\n// \"<MyComponent />\"\n// \"{{component 'my-component'}}\"\n//\ntype ComponentSnippet = string;\n\nexport interface PreprocessedComponentRule {\n yieldsSafeComponents: Required<ComponentRules>['yieldsSafeComponents'];\n yieldsArguments: Required<ComponentRules>['yieldsArguments'];\n argumentsAreComponents: string[];\n safeToIgnore: boolean;\n safeInteriorPaths: string[];\n disambiguate: Record<string, 'component' | 'helper' | 'data'>;\n}\n\n// take a component rule from the authoring format to a format more optimized\n// for consumption in the resolver\nexport function preprocessComponentRule(componentRules: ComponentRules): PreprocessedComponentRule {\n let argumentsAreComponents = [];\n let safeInteriorPaths = [];\n if (componentRules.acceptsComponentArguments) {\n for (let entry of componentRules.acceptsComponentArguments) {\n let name, interior;\n if (typeof entry === 'string') {\n name = interior = entry;\n } else {\n name = entry.name;\n interior = entry.becomes;\n }\n if (name.startsWith('@')) {\n name = name.slice(1);\n }\n argumentsAreComponents.push(name);\n safeInteriorPaths.push(interior);\n safeInteriorPaths.push('this.' + interior);\n safeInteriorPaths.push('@' + name);\n }\n }\n if (componentRules.invokes) {\n for (let [path] of Object.entries(componentRules.invokes)) {\n safeInteriorPaths.push(path);\n }\n }\n return {\n safeInteriorPaths,\n safeToIgnore: Boolean(componentRules.safeToIgnore),\n argumentsAreComponents,\n yieldsSafeComponents: componentRules.yieldsSafeComponents || [],\n yieldsArguments: componentRules.yieldsArguments || [],\n disambiguate: componentRules?.disambiguate ?? {},\n };\n}\n\nexport function activePackageRules(\n packageRules: PackageRules[],\n activePackages: { name: string; root: string; version: string }[]\n): ActivePackageRules[] {\n // rule order implies precedence. The first rule that matches a given package\n // applies to that package, and no other rule does.\n let rootsPerRule = new Map();\n for (let pkg of activePackages) {\n for (let rule of packageRules) {\n if (rule.package === pkg.name && (!rule.semverRange || satisfies(pkg.version, rule.semverRange))) {\n let roots = getOrCreate(rootsPerRule, rule, () => []);\n roots.push(pkg.root);\n break;\n }\n }\n }\n let output = [];\n for (let [rule, roots] of rootsPerRule) {\n output.push(Object.assign({ roots }, rule));\n }\n return output;\n}\n\nexport function appTreeRulesDir(root: string, resolver: Resolver) {\n let pkg = resolver.owningPackage(root);\n if (pkg?.isV2Addon()) {\n // in general v2 addons can keep their app tree stuff in other places than\n // \"_app_\" and we would need to check their package.json to see. But this code\n // is only for applying packageRules to auto-upgraded v1 addons and apps, and\n // those we always organize predictably.\n return resolve(root, '_app_');\n } else {\n // auto-upgraded apps don't get an exist _app_ dir.\n return root;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dependency-rules.js","sourceRoot":"","sources":["dependency-rules.ts"],"names":[],"mappings":"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","sourcesContent":["import { getOrCreate, Resolver } from '@embroider/core';\nimport { resolve } from 'path';\nimport { satisfies } from 'semver';\n\nexport interface PackageRules {\n // This whole set of rules will only apply when the given addon package\n // matching the given semver range is present and active.\n package: string;\n semverRange?: string;\n\n components?: {\n // I would prefer to write the key type here as `ComponentSnippet` to aid\n // documentation, but Typescript won't allow it. See ComponentSnippet below.\n [key: string]: ComponentRules;\n };\n\n addonModules?: {\n // `filename` is relative to your package root, and it assumes v2 package\n // format. Like \"templates/components/foo.hbs\".\n [filename: string]: ModuleRules;\n };\n\n appModules?: {\n // `filename` is relative to the app's root, and it assumes v2 package\n // format. Like \"templates/components/foo.hbs\".\n [filename: string]: ModuleRules;\n };\n\n addonTemplates?: {\n // `filename` is relative to your package root, and it assumes v2 package\n // format. Like \"templates/foo.hbs\".\n [filename: string]: TemplateRules;\n };\n\n appTemplates?: {\n // `filename` is relative to the app's root, and it assumes v2 package\n // format. Like \"templates/foo.hbs\".\n [filename: string]: TemplateRules;\n };\n}\n\nexport interface ActivePackageRules extends PackageRules {\n // the location(s) of active packages that match this rule.\n roots: string[];\n}\n\nexport interface TemplateRules {\n // Tells embroider which list of components may be needed for a given path.\n // For example, if your template says `{{component this.panel}}` and you know\n // that `this.panel` can be either \"light-panel\" or \"dark-panel\", you would\n // say: `invokes: { \"this.panel\": [\"<LightPanel/>\", \"<DarkPanel/>\"] }`\n invokes?: {\n [path: string]: ComponentSnippet[];\n };\n\n // Embroider will complain if you try to use staticHelper and/or\n // staticComponents and you have ambiguous forms that might be a component or\n // a helper or just some data that is being rendered. For example, if a\n // template says `{{something}}`, we can't tell if that is `<Something />` or\n // `{{ (something) }}` or `{{this.something}}`.\n disambiguate?: {\n [dasherizedName: string]: 'component' | 'helper' | 'data';\n };\n}\n\nexport interface ComponentRules extends TemplateRules {\n // This declares that our component yields other components that are safe to\n // invoke with the {{component}} helper.\n //\n // The array corresponds to your yielded positional arguments. Any value that\n // is true is considered a safe component. Any value can be a hash in which\n // individual keys that are true are considered safe components.\n //\n // Examples:\n //\n // If you do: {{yield (component \"x\") }}\n // Then say: yieldsSafeComponents: [true]\n //\n // If you do: {{yield (hash x=(component \"x\") y=(component \"y\")) }}\n // Then say: yieldsSafeComponents: [{x: true, y: true}]\n //\n yieldsSafeComponents?: (boolean | { [name: string]: boolean })[];\n\n // This declares that our component yields some of its arguments unchanged.\n //\n // The array corresponds to your yielded positional arguments. Each value can\n // be:\n // false, meaning this yielded value is not one of our arguments\n // a string, meaning this yielded value is our argument with that name\n // or a POJO, whose individual properties are string naming which arguments\n // from whence they came.\n //\n // Examples:\n //\n // If you do: {{yield @foo}}\n // Then say: yieldsArguments: ['foo']\n //\n // If you do: {{yield (hash x=@foo) }}\n // Then say: yieldsArguments: [{ x: 'foo' }]\n yieldsArguments?: (string | { [name: string]: string })[];\n\n // This declares that our component accepts arguments that will be invoked\n // with the {{component}} helper. This silences warnings in the places where\n // we consume them, while introducing warnings in the places where people are\n // passing them to us (if they are doing so in a way that is too dynamic to\n // analyze).\n //\n // If you use this, you may also need to set `layout`, see below.\n acceptsComponentArguments?: ArgumentMapping[];\n\n // If you want to use `acceptsComponentArguments` on a component that\n // customies its own `layout` (which is most addon-provided components), you\n // need to tell us here how to find its template by setting either `addonPath`\n // or `appPath`.\n layout?: {\n // This is a path relative to the addon root, assuming V2 format.\n addonPath?: string;\n // This is the path relative to the app root, assuming V2 format.\n appPath?: string;\n };\n\n // An unresolvable component is usually a build error (when your app has the\n // staticComponent Option enabled). But you can tell Embroider to ignore it by\n // setting this.\n safeToIgnore?: boolean;\n}\n\nexport interface ModuleRules {\n // We will resolve these components into the corresponding JS and HBS files\n // and generate imports such that this module depends on them.\n dependsOnComponents?: ComponentSnippet[];\n\n // This adds new imports to our module, as if they were really there. Helpful\n // for working around addons that depend on things but don't say so.\n dependsOnModules?: string[];\n}\n\n// The bare \"string\" short form implies that `becomes` is the same as `name`.\nexport type ArgumentMapping =\n | string\n | {\n // the name of the argument you accept\n name: string;\n // the name its consumed as in your template\n becomes: string;\n };\n\n// A component snippet is a string containing valid HBS that is a single\n// component invocation. We use it to refer to components in a way that doesn't\n// require any new syntax or rules, and that's necessarily supported by whatever\n// build-time template resolver is in use.\n//\n// Examples of valid ComponentSnippets:\n//\n// \"{{my-component}}\"\n// \"{{my-component/foo}}\"\n// \"<MyComponent />\"\n// \"{{component 'my-component'}}\"\n//\ntype ComponentSnippet = string;\n\nexport interface PreprocessedComponentRule {\n yieldsSafeComponents: Required<ComponentRules>['yieldsSafeComponents'];\n yieldsArguments: Required<ComponentRules>['yieldsArguments'];\n argumentsAreComponents: string[];\n safeToIgnore: boolean;\n safeInteriorPaths: string[];\n disambiguate: Record<string, 'component' | 'helper' | 'data'>;\n}\n\n// take a component rule from the authoring format to a format more optimized\n// for consumption in the resolver\nexport function preprocessComponentRule(componentRules: ComponentRules): PreprocessedComponentRule {\n let argumentsAreComponents = [];\n let safeInteriorPaths = [];\n if (componentRules.acceptsComponentArguments) {\n for (let entry of componentRules.acceptsComponentArguments) {\n let name, interior;\n if (typeof entry === 'string') {\n name = interior = entry;\n } else {\n name = entry.name;\n interior = entry.becomes;\n }\n if (name.startsWith('@')) {\n name = name.slice(1);\n }\n argumentsAreComponents.push(name);\n safeInteriorPaths.push(interior);\n safeInteriorPaths.push('this.' + interior);\n safeInteriorPaths.push('@' + name);\n }\n }\n if (componentRules.invokes) {\n for (let [path] of Object.entries(componentRules.invokes)) {\n safeInteriorPaths.push(path);\n }\n }\n return {\n safeInteriorPaths,\n safeToIgnore: Boolean(componentRules.safeToIgnore),\n argumentsAreComponents,\n yieldsSafeComponents: componentRules.yieldsSafeComponents || [],\n yieldsArguments: componentRules.yieldsArguments || [],\n disambiguate: componentRules?.disambiguate ?? {},\n };\n}\n\nexport function activePackageRules(\n packageRules: PackageRules[],\n activePackages: { name: string; root: string; version: string }[]\n): ActivePackageRules[] {\n // rule order implies precedence. The first rule that matches a given package\n // applies to that package, and no other rule does.\n let rootsPerRule = new Map();\n for (let pkg of activePackages) {\n for (let rule of packageRules) {\n if (rule.package === pkg.name && (!rule.semverRange || satisfies(pkg.version, rule.semverRange))) {\n let roots = getOrCreate(rootsPerRule, rule, () => []);\n roots.push(pkg.root);\n break;\n }\n }\n }\n let output = [];\n for (let [rule, roots] of rootsPerRule) {\n output.push(Object.assign({ roots }, rule));\n }\n return output;\n}\n\nexport function appTreeRulesDir(root: string, resolver: Resolver) {\n let pkg = resolver.packageCache.ownerOfFile(root);\n if (pkg?.isV2Addon()) {\n // in general v2 addons can keep their app tree stuff in other places than\n // \"_app_\" and we would need to check their package.json to see. But this code\n // is only for applying packageRules to auto-upgraded v1 addons and apps, and\n // those we always organize predictably.\n return resolve(root, '_app_');\n } else {\n // auto-upgraded apps don't get an exist _app_ dir.\n return root;\n }\n}\n"]}
|
package/src/options.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { PackageRules } from './dependency-rules';
|
|
|
5
5
|
export default interface Options extends CoreOptions {
|
|
6
6
|
staticAddonTrees?: boolean;
|
|
7
7
|
staticAddonTestSupportTrees?: boolean;
|
|
8
|
+
staticEmberSource?: boolean;
|
|
8
9
|
compatAdapters?: Map<string, V1AddonConstructor | null>;
|
|
9
10
|
extraPublicTrees?: Node[];
|
|
10
11
|
packageRules?: PackageRules[];
|
package/src/options.js
CHANGED
|
@@ -5,6 +5,7 @@ const core_1 = require("@embroider/core");
|
|
|
5
5
|
const defaults = Object.assign((0, core_1.optionsWithDefaults)(), {
|
|
6
6
|
staticAddonTrees: false,
|
|
7
7
|
staticAddonTestSupportTrees: false,
|
|
8
|
+
staticEmberSource: false,
|
|
8
9
|
compatAdapters: new Map(),
|
|
9
10
|
extraPublicTrees: [],
|
|
10
11
|
workspaceDir: null,
|
|
@@ -27,6 +28,7 @@ exports.recommendedOptions = Object.freeze({
|
|
|
27
28
|
staticHelpers: true,
|
|
28
29
|
staticModifiers: true,
|
|
29
30
|
staticComponents: true,
|
|
31
|
+
staticEmberSource: true,
|
|
30
32
|
allowUnsafeDynamicComponents: false,
|
|
31
33
|
}),
|
|
32
34
|
});
|
package/src/options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["options.ts"],"names":[],"mappings":";;;AAEA,0CAAkG;
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["options.ts"],"names":[],"mappings":";;;AAEA,0CAAkG;AAgGlG,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAA,0BAAgB,GAAE,EAAE;IACjD,gBAAgB,EAAE,KAAK;IACvB,2BAA2B,EAAE,KAAK;IAClC,iBAAiB,EAAE,KAAK;IACxB,cAAc,EAAE,IAAI,GAAG,EAAE;IACzB,gBAAgB,EAAE,EAAE;IACpB,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,EAAE;IAChB,4BAA4B,EAAE,KAAK;CACpC,CAAC,CAAC;AAEH,SAAgB,mBAAmB,CAAC,OAAiB;IACnD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAFD,kDAEC;AAED,+EAA+E;AAC/E,6EAA6E;AAC7E,+EAA+E;AAC/E,cAAc;AACD,QAAA,kBAAkB,GAAgC,MAAM,CAAC,MAAM,CAAC;IAC3E,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,gBAAgB,EAAE,IAAI;QACtB,2BAA2B,EAAE,IAAI;QACjC,aAAa,EAAE,IAAI;QACnB,eAAe,EAAE,IAAI;QACrB,gBAAgB,EAAE,IAAI;QACtB,iBAAiB,EAAE,IAAI;QACvB,4BAA4B,EAAE,KAAK;KACpC,CAAC;CACH,CAAC,CAAC","sourcesContent":["import { V1AddonConstructor } from './v1-addon';\nimport { Node } from 'broccoli-node-api';\nimport { Options as CoreOptions, optionsWithDefaults as coreWithDefaults } from '@embroider/core';\nimport { PackageRules } from './dependency-rules';\n\n// These options control how hard we will try to achieve compatibility with v1\n// addons. The defaults are conservative and try to maximize compatibility, at\n// the cost of slower or bigger builds. As you eliminate sources of legacy\n// behavior you can benefit from the more aggressive modes.\nexport default interface Options extends CoreOptions {\n // Controls whether your addon's \"addon\" trees should be resolved statically\n // at build time.\n //\n // false (the default): implies maximum backward compatibility at the cost\n // of bigger builds. In this mode, we force every file into the Ember app,\n // which is the legacy behavior.\n //\n // true: produces smaller builds. The addon files must be imported from\n // somewhere we can statically see during the build. In this mode, your app\n // will only include files that are actually imported from somewhere.\n //\n // Commentary: most v1 addons already work well with this set to true, because\n // they tend to either offer Javascript that users are supposed to directly\n // `import` or components / helpers / services that get directly imported and\n // re-exported by code in App Javascript. The exceptions are addons that do\n // runtime shenanigans with `require` or scoped runtime resolutions.\n //\n // To workaround an addon that is preventing you from enabling this flag, you\n // can use addonDependencyRules.\n staticAddonTrees?: boolean;\n\n // Controls whether your addon's \"addonTestSupport\" trees should be resolved\n // statically at build time.\n //\n // false (the default): implies maximum backward compatibility at the cost\n // of bigger builds. All test support files will be forced into your Ember\n // app, which is the legacy behavior.\n //\n // true: produces smaller builds. Only files that are explicitly imported\n // will end up in your app.\n //\n // Commentary: this is analogous to staticAddonTrees and the same guidelines\n // apply.\n staticAddonTestSupportTrees?: boolean;\n\n // when true, we will load ember-source as ES modules. This means unused parts\n // of ember-source won't be included. But it also means that addons using old\n // APIs to try to `require()` things from Ember -- particularly from within\n // vendor.js -- cannot do that anymore.\n //\n // When false (the default) we load ember-source the traditional way, which is\n // that a big ol' script gets smooshed into vendor.js, and none of ember's\n // public module API actually exists as modules at build time.\n staticEmberSource?: boolean;\n\n // Allows you to override how specific addons will build. Like:\n //\n // import V1Addon from '@embroider/compat'; let compatAdapters = new Map();\n // compatAdapters.set('some-addon', class extends V1Addon {// do stuff here:\n // see examples in ./compat-adapters\n // });\n //\n // This should be understood as a temporary way to keep yourself from getting\n // stuck, not an alternative to actually fixing upstream. For the most part,\n // the real solution will be converting the addon in question to natively\n // publish as v2.\n //\n // We ship with some default compatAdapters to fix otherwise incompatible\n // behaviors in popular addons. You can override the default adapters by\n // setting your own value here (including null to completely disable it).\n compatAdapters?: Map<string, V1AddonConstructor | null>;\n\n // optional list of additional broccoli trees that should be incorporated into\n // the final build. This exists because the classic `app.toTree()` method\n // accepts an optional tree argument that has the same purpose.\n extraPublicTrees?: Node[];\n\n // Allows you to tell Embroider about otherwise dynamic dependencies within\n // your app and addons that it can't figure out on its own. These are combined\n // with the default rules that ship with Embroider. Your own rules take\n // precedence over the built-ins. Order matters, first matching rule will\n // apply to any given addon.\n //\n // See the addon-dependency-rules directory in the @embroider/compat package\n // for the built-in rules.\n //\n // These ONLY APPLY to v1-formatted addons. An addon that ships as native v2\n // is expected to do the right thing on its own.\n //\n // Follow to the definition of PackageRules for more info.\n packageRules?: PackageRules[];\n\n // This turns build errors into runtime errors. It is not a good idea to keep\n // it on in production. But it can be helpful when testing how much of your\n // app is able to work with staticComponents enabled.\n allowUnsafeDynamicComponents?: boolean;\n}\n\nconst defaults = Object.assign(coreWithDefaults(), {\n staticAddonTrees: false,\n staticAddonTestSupportTrees: false,\n staticEmberSource: false,\n compatAdapters: new Map(),\n extraPublicTrees: [],\n workspaceDir: null,\n packageRules: [],\n allowUnsafeDynamicComponents: false,\n});\n\nexport function optionsWithDefaults(options?: Options): Required<Options> {\n return Object.assign({}, defaults, options);\n}\n\n// These are recommended configurations for addons to test themselves under. By\n// keeping them here, it's easier to do ecosystem-wide compatibility testing.\n// See the `@embroider/test-setup` package which can help consume these to test\n// them in CI.\nexport const recommendedOptions: { [name: string]: Options } = Object.freeze({\n safe: Object.freeze({}),\n optimized: Object.freeze({\n staticAddonTrees: true,\n staticAddonTestSupportTrees: true,\n staticHelpers: true,\n staticModifiers: true,\n staticComponents: true,\n staticEmberSource: true,\n allowUnsafeDynamicComponents: false,\n }),\n});\n"]}
|
package/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2018 Edward Faulkner
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|