@embroider/compat 4.0.0-alpha.1 → 4.0.0-alpha.11
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 +9 -8
- package/src/babel-plugin-adjust-imports.js +5 -6
- package/src/babel-plugin-adjust-imports.js.map +1 -1
- package/src/babel.js +4 -14
- package/src/babel.js.map +1 -1
- package/src/compat-adapters/ember-source.js +261 -1
- package/src/compat-adapters/ember-source.js.map +1 -1
- package/src/compat-app-builder.d.ts +1 -0
- package/src/compat-app-builder.js +6 -0
- package/src/compat-app-builder.js.map +1 -1
- package/src/compat-app.js +1 -1
- package/src/compat-app.js.map +1 -1
- package/src/options.js +0 -8
- package/src/options.js.map +1 -1
- package/src/resolver-transform.d.ts +4 -2
- package/src/resolver-transform.js +75 -18
- package/src/resolver-transform.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@embroider/compat",
|
|
3
|
-
"version": "4.0.0-alpha.
|
|
3
|
+
"version": "4.0.0-alpha.11",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Backward compatibility layer for the Embroider build system.",
|
|
6
6
|
"repository": {
|
|
@@ -19,11 +19,12 @@
|
|
|
19
19
|
],
|
|
20
20
|
"release-plan": {
|
|
21
21
|
"semverIncrementAs": {
|
|
22
|
-
"major": "
|
|
22
|
+
"major": "prerelease",
|
|
23
23
|
"minor": "prerelease",
|
|
24
24
|
"patch": "prerelease"
|
|
25
25
|
},
|
|
26
|
-
"semverIncrementTag": "alpha"
|
|
26
|
+
"semverIncrementTag": "alpha",
|
|
27
|
+
"publishTag": "alpha"
|
|
27
28
|
},
|
|
28
29
|
"dependencies": {
|
|
29
30
|
"@babel/code-frame": "^7.14.5",
|
|
@@ -37,7 +38,7 @@
|
|
|
37
38
|
"@babel/traverse": "^7.14.5",
|
|
38
39
|
"@types/babel__code-frame": "^7.0.2",
|
|
39
40
|
"assert-never": "^1.1.0",
|
|
40
|
-
"babel-import-util": "^
|
|
41
|
+
"babel-import-util": "^3.0.1",
|
|
41
42
|
"babel-plugin-debug-macros": "^1.0.2",
|
|
42
43
|
"babel-plugin-ember-template-compilation": "^2.3.0",
|
|
43
44
|
"babel-plugin-syntax-dynamic-import": "^6.18.0",
|
|
@@ -68,7 +69,7 @@
|
|
|
68
69
|
"tree-sync": "^2.1.0",
|
|
69
70
|
"typescript-memoize": "^1.0.1",
|
|
70
71
|
"walk-sync": "^3.0.0",
|
|
71
|
-
"@embroider/macros": "1.17.0-alpha.
|
|
72
|
+
"@embroider/macros": "1.17.0-alpha.7"
|
|
72
73
|
},
|
|
73
74
|
"devDependencies": {
|
|
74
75
|
"@glimmer/syntax": "^0.84.3",
|
|
@@ -91,12 +92,12 @@
|
|
|
91
92
|
"ember-engines": "^0.8.19",
|
|
92
93
|
"scenario-tester": "^4.0.0",
|
|
93
94
|
"typescript": "^5.4.5",
|
|
94
|
-
"@embroider/
|
|
95
|
+
"@embroider/test-support": "0.36.0",
|
|
95
96
|
"@embroider/sample-transforms": "0.0.0",
|
|
96
|
-
"@embroider/
|
|
97
|
+
"@embroider/core": "^4.0.0-alpha.9"
|
|
97
98
|
},
|
|
98
99
|
"peerDependencies": {
|
|
99
|
-
"@embroider/core": "^4.0.0-alpha.
|
|
100
|
+
"@embroider/core": "^4.0.0-alpha.9"
|
|
100
101
|
},
|
|
101
102
|
"engines": {
|
|
102
103
|
"node": "12.* || 14.* || >= 16"
|
|
@@ -7,7 +7,6 @@ const core_1 = require("@embroider/core");
|
|
|
7
7
|
const dasherize_component_name_1 = require("./dasherize-component-name");
|
|
8
8
|
const dependency_rules_1 = require("./dependency-rules");
|
|
9
9
|
function main(babel) {
|
|
10
|
-
let t = babel.types;
|
|
11
10
|
let cached;
|
|
12
11
|
function getConfig(appRoot) {
|
|
13
12
|
if (cached) {
|
|
@@ -25,7 +24,7 @@ function main(babel) {
|
|
|
25
24
|
visitor: {
|
|
26
25
|
Program: {
|
|
27
26
|
enter(path, state) {
|
|
28
|
-
addExtraImports(
|
|
27
|
+
addExtraImports(babel, path, getConfig(state.opts.appRoot));
|
|
29
28
|
},
|
|
30
29
|
},
|
|
31
30
|
},
|
|
@@ -34,18 +33,18 @@ function main(babel) {
|
|
|
34
33
|
main.baseDir = function () {
|
|
35
34
|
return (0, path_1.join)(__dirname, '..');
|
|
36
35
|
};
|
|
37
|
-
function addExtraImports(
|
|
36
|
+
function addExtraImports(babel, path, config) {
|
|
38
37
|
let filename = (0, core_1.cleanUrl)(path.hub.file.opts.filename);
|
|
39
38
|
let entry = config.extraImports[filename];
|
|
40
|
-
let adder = new babel_import_util_1.ImportUtil(
|
|
39
|
+
let adder = new babel_import_util_1.ImportUtil(babel, path);
|
|
41
40
|
if (entry) {
|
|
42
|
-
applyRules(
|
|
41
|
+
applyRules(babel.types, path, entry, adder, config, filename);
|
|
43
42
|
}
|
|
44
43
|
let componentName = config.loader.resolver.reverseComponentLookup(filename);
|
|
45
44
|
if (componentName) {
|
|
46
45
|
let rules = config.componentExtraImports[componentName];
|
|
47
46
|
if (rules) {
|
|
48
|
-
applyRules(
|
|
47
|
+
applyRules(babel.types, path, rules, adder, config, filename);
|
|
49
48
|
}
|
|
50
49
|
}
|
|
51
50
|
}
|
|
@@ -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 type { CompatResolverOptions } from './resolver-transform';\nimport type { Package } from '@embroider/core';\nimport { cleanUrl, packageName, type Resolver, ResolverLoader, unrelativize } from '@embroider/core';\nimport { snippetToDasherizedName } from './dasherize-component-name';\nimport type { ActivePackageRules, ComponentRules, ModuleRules, TemplateRules } from './dependency-rules';\nimport { appTreeRulesDir } 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 loader: ResolverLoader;\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 loader = new ResolverLoader(appRoot);\n\n cached = {\n loader,\n extraImports: preprocessExtraImports(loader),\n componentExtraImports: preprocessComponentExtraImports(loader),\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 = cleanUrl((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.loader.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/virtual/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(loader: ResolverLoader): ExtraImports {\n let extraImports: ExtraImports = {};\n let config = loader.resolver.options as CompatResolverOptions;\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, loader.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, loader.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.loader.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.loader.resolver.owningEngine(p);\n }\n }\n return owningEngine.result;\n },\n };\n}\n\nfunction preprocessComponentExtraImports(loader: ResolverLoader): ExtraImports {\n let extraImports: ExtraImports = {};\n let config = loader.resolver.options as CompatResolverOptions;\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 type { CompatResolverOptions } from './resolver-transform';\nimport type { Package } from '@embroider/core';\nimport { cleanUrl, packageName, type Resolver, ResolverLoader, unrelativize } from '@embroider/core';\nimport { snippetToDasherizedName } from './dasherize-component-name';\nimport type { ActivePackageRules, ComponentRules, ModuleRules, TemplateRules } from './dependency-rules';\nimport { appTreeRulesDir } 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 loader: ResolverLoader;\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 cached: InternalConfig | undefined;\n function getConfig(appRoot: string) {\n if (cached) {\n return cached;\n }\n let loader = new ResolverLoader(appRoot);\n\n cached = {\n loader,\n extraImports: preprocessExtraImports(loader),\n componentExtraImports: preprocessComponentExtraImports(loader),\n };\n return cached;\n }\n\n return {\n visitor: {\n Program: {\n enter(path: NodePath<t.Program>, state: State) {\n addExtraImports(babel, 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(babel: typeof Babel, path: NodePath<t.Program>, config: InternalConfig) {\n let filename: string = cleanUrl((path.hub as any).file.opts.filename);\n let entry = config.extraImports[filename];\n let adder = new ImportUtil(babel, path);\n if (entry) {\n applyRules(babel.types, path, entry, adder, config, filename);\n }\n\n let componentName = config.loader.resolver.reverseComponentLookup(filename);\n if (componentName) {\n let rules = config.componentExtraImports[componentName];\n if (rules) {\n applyRules(babel.types, 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/virtual/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(loader: ResolverLoader): ExtraImports {\n let extraImports: ExtraImports = {};\n let config = loader.resolver.options as CompatResolverOptions;\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, loader.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, loader.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.loader.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.loader.resolver.owningEngine(p);\n }\n }\n return owningEngine.result;\n },\n };\n}\n\nfunction preprocessComponentExtraImports(loader: ResolverLoader): ExtraImports {\n let extraImports: ExtraImports = {};\n let config = loader.resolver.options as CompatResolverOptions;\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"]}
|
package/src/babel.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.pluginsFromV1Addons = pluginsFromV1Addons;
|
|
7
4
|
exports.transformsFromV1Addons = transformsFromV1Addons;
|
|
@@ -15,26 +12,19 @@ exports.templateCompatSupport = templateCompatSupport;
|
|
|
15
12
|
const fs_1 = require("fs");
|
|
16
13
|
const core_1 = require("@embroider/core");
|
|
17
14
|
const path_1 = require("path");
|
|
18
|
-
const
|
|
15
|
+
const babel_1 = require("@embroider/macros/babel");
|
|
19
16
|
function loadCompatConfig() {
|
|
20
17
|
let compatFile = (0, path_1.join)((0, core_1.locateEmbroiderWorkingDir)(process.cwd()), '_babel_compat_.js');
|
|
21
18
|
if ((0, fs_1.existsSync)(compatFile)) {
|
|
22
19
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
23
20
|
return require(compatFile);
|
|
24
21
|
}
|
|
25
|
-
let macros =
|
|
26
|
-
let { plugins: templateMacros, setConfig } = macros_config_1.default.transforms();
|
|
27
|
-
setConfig(macros);
|
|
28
|
-
if (process.env.NODE_ENV === 'development') {
|
|
29
|
-
macros.enablePackageDevelopment(process.cwd());
|
|
30
|
-
macros.enableRuntimeMode();
|
|
31
|
-
}
|
|
32
|
-
macros.finalize();
|
|
22
|
+
let macros = (0, babel_1.buildMacros)();
|
|
33
23
|
return {
|
|
34
24
|
plugins: [],
|
|
35
25
|
templateTransforms: [],
|
|
36
|
-
babelMacros: macros.
|
|
37
|
-
templateMacros: templateMacros,
|
|
26
|
+
babelMacros: macros.babelMacros,
|
|
27
|
+
templateMacros: macros.templateMacros,
|
|
38
28
|
};
|
|
39
29
|
}
|
|
40
30
|
const resolverLoader = new core_1.ResolverLoader(process.cwd());
|
package/src/babel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"babel.js","sourceRoot":"","sources":["babel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"babel.js","sourceRoot":"","sources":["babel.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PluginItem } from '@babel/core';\nimport { existsSync } from 'fs';\nimport {\n locateEmbroiderWorkingDir,\n ResolverLoader,\n templateColocationPluginPath,\n type TemplateColocationPluginOptions,\n} from '@embroider/core';\nimport { join } from 'path';\nimport type { Transform } from 'babel-plugin-ember-template-compilation';\nimport type { Options as ResolverTransformOptions } from './resolver-transform';\nimport { buildMacros } from '@embroider/macros/babel';\n\nexport interface CompatBabelState {\n plugins: PluginItem[];\n templateTransforms: Transform[];\n babelMacros: PluginItem[];\n templateMacros: Transform[];\n}\n\nfunction loadCompatConfig(): CompatBabelState {\n let compatFile = join(locateEmbroiderWorkingDir(process.cwd()), '_babel_compat_.js');\n if (existsSync(compatFile)) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require(compatFile);\n }\n\n let macros = buildMacros();\n\n return {\n plugins: [],\n templateTransforms: [],\n babelMacros: macros.babelMacros,\n templateMacros: macros.templateMacros as any,\n };\n}\n\nconst resolverLoader = new ResolverLoader(process.cwd());\n\nexport function pluginsFromV1Addons() {\n let config = loadCompatConfig();\n return config.plugins;\n}\n\nexport function transformsFromV1Addons() {\n let config = loadCompatConfig();\n return config.templateTransforms;\n}\n\nexport function looseModeSupport(): Transform {\n const { resolver } = resolverLoader;\n let opts: ResolverTransformOptions = {\n appRoot: resolver.options.appRoot,\n emberVersion: resolver.options.emberVersion,\n };\n return [require.resolve('./resolver-transform'), opts];\n}\n\nexport function templateMacros() {\n let config = loadCompatConfig();\n return config.templateMacros;\n}\n\nexport function babelMacros() {\n let config = loadCompatConfig();\n return config.babelMacros;\n}\n\nexport function oldDebugMacros(): PluginItem[] {\n let debugMacros = require.resolve('babel-plugin-debug-macros');\n return [\n [\n debugMacros,\n {\n flags: [\n {\n source: '@glimmer/env',\n flags: {\n DEBUG: true,\n CI: false,\n },\n },\n ],\n debugTools: {\n isDebug: true,\n source: '@ember/debug',\n assertPredicateIndex: 1,\n },\n externalizeHelpers: {\n module: '@ember/debug',\n },\n },\n '@ember/debug stripping',\n ],\n [\n debugMacros,\n {\n externalizeHelpers: {\n module: '@ember/application/deprecations',\n },\n debugTools: {\n isDebug: true,\n source: '@ember/application/deprecations',\n assertPredicateIndex: 1,\n },\n },\n '@ember/application/deprecations stripping',\n ],\n ];\n}\n\nexport function templateColocation(): PluginItem {\n let colocationOptions: TemplateColocationPluginOptions = {\n appRoot: resolverLoader.resolver.options.appRoot,\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 return [templateColocationPluginPath, colocationOptions];\n}\n\nexport function babelCompatSupport(): PluginItem[] {\n return [...babelMacros(), ...oldDebugMacros(), templateColocation(), ...pluginsFromV1Addons()];\n}\n\nexport function templateCompatSupport(): Transform[] {\n return [...transformsFromV1Addons(), ...templateMacros(), looseModeSupport()];\n}\n"]}
|
|
@@ -101,7 +101,16 @@ class default_1 extends v1_addon_1.default {
|
|
|
101
101
|
// top-level `ember` package tries to import it until 4.10. A
|
|
102
102
|
// spec-compliant ES modules implementation will treat this as a parse
|
|
103
103
|
// error.
|
|
104
|
-
trees.push(new FixStringLoc([packages]));
|
|
104
|
+
trees.push(new ReplaceRequire([new FixStringLoc([packages])]));
|
|
105
|
+
}
|
|
106
|
+
else if ((0, semver_1.satisfies)(this.packageJSON.version, '<5.7.0')) {
|
|
107
|
+
trees.push(new ReplaceRequire([packages]));
|
|
108
|
+
}
|
|
109
|
+
if ((0, semver_1.satisfies)(this.packageJSON.version, '<5.12.0')) {
|
|
110
|
+
trees.push(new FixDeprecateFunction([packages]));
|
|
111
|
+
}
|
|
112
|
+
if ((0, semver_1.satisfies)(this.packageJSON.version, '<5.11.1')) {
|
|
113
|
+
trees.push(new FixCycleImports([packages]));
|
|
105
114
|
}
|
|
106
115
|
return (0, broccoli_merge_trees_1.default)(trees, { overwrite: true });
|
|
107
116
|
}
|
|
@@ -153,6 +162,257 @@ class FixStringLoc extends broccoli_plugin_1.default {
|
|
|
153
162
|
(0, fs_extra_1.outputFileSync)((0, path_1.resolve)(this.outputPath, 'ember', 'index.js'), outSource, 'utf8');
|
|
154
163
|
}
|
|
155
164
|
}
|
|
165
|
+
class ReplaceRequire extends broccoli_plugin_1.default {
|
|
166
|
+
build() {
|
|
167
|
+
updateFileWithTransform(this, 'ember/index.js', function (babel) {
|
|
168
|
+
const { types: t } = babel;
|
|
169
|
+
return {
|
|
170
|
+
visitor: {
|
|
171
|
+
CallExpression(path) {
|
|
172
|
+
if (path.node.callee.type === 'Identifier' &&
|
|
173
|
+
(path.node.callee.name === 'has' || path.node.callee.name === 'require') &&
|
|
174
|
+
path.node.arguments[0].type === 'StringLiteral' &&
|
|
175
|
+
path.node.arguments[0].value === 'ember-testing') {
|
|
176
|
+
path.replaceWith(t.identifier('EmberTestingImpl'));
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
ImportDeclaration(path) {
|
|
180
|
+
if (path.node.source.value === 'require') {
|
|
181
|
+
path.replaceWith(t.importDeclaration([t.importSpecifier(t.identifier('EmberTestingImpl'), t.identifier('_impl'))], t.stringLiteral('@ember/test')));
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
AssignmentExpression(path) {
|
|
185
|
+
if (path.node.left.type === 'MemberExpression' &&
|
|
186
|
+
path.node.left.object.type === 'Identifier' &&
|
|
187
|
+
path.node.left.object.name === 'Ember' &&
|
|
188
|
+
path.node.left.property.type === 'Identifier' &&
|
|
189
|
+
path.node.left.property.name === '__loader') {
|
|
190
|
+
path.node.right = t.objectExpression([
|
|
191
|
+
t.objectMethod('get', t.identifier('require'), [], t.blockStatement([
|
|
192
|
+
t.returnStatement(t.memberExpression(t.identifier('globalThis'), t.identifier('require'))),
|
|
193
|
+
])),
|
|
194
|
+
t.objectMethod('get', t.identifier('define'), [], t.blockStatement([
|
|
195
|
+
t.returnStatement(t.memberExpression(t.identifier('globalThis'), t.identifier('define'))),
|
|
196
|
+
])),
|
|
197
|
+
t.objectMethod('get', t.identifier('registry'), [], t.blockStatement([
|
|
198
|
+
t.returnStatement(t.logicalExpression('??', t.optionalMemberExpression(t.memberExpression(t.identifier('globalThis'), t.identifier('requirejs')), t.identifier('entries'), false, true), t.optionalMemberExpression(t.memberExpression(t.identifier('globalThis'), t.identifier('require')), t.identifier('entries'), false, true))),
|
|
199
|
+
])),
|
|
200
|
+
]);
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
});
|
|
206
|
+
replaceFile(this, '@ember/test/index.js', `export let registerAsyncHelper;
|
|
207
|
+
export let registerHelper;
|
|
208
|
+
export let registerWaiter;
|
|
209
|
+
export let unregisterHelper;
|
|
210
|
+
export let unregisterWaiter;
|
|
211
|
+
export let _impl;
|
|
212
|
+
|
|
213
|
+
let testingNotAvailableMessage = () => {
|
|
214
|
+
throw new Error('Attempted to use test utilities, but \`ember-testing\` was not included');
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
registerAsyncHelper = testingNotAvailableMessage;
|
|
218
|
+
registerHelper = testingNotAvailableMessage;
|
|
219
|
+
registerWaiter = testingNotAvailableMessage;
|
|
220
|
+
unregisterHelper = testingNotAvailableMessage;
|
|
221
|
+
unregisterWaiter = testingNotAvailableMessage;
|
|
222
|
+
|
|
223
|
+
export function registerTestImplementaiton(impl) {
|
|
224
|
+
let { Test } = impl;
|
|
225
|
+
registerAsyncHelper = Test.registerAsyncHelper;
|
|
226
|
+
registerHelper = Test.registerHelper;
|
|
227
|
+
registerWaiter = Test.registerWaiter;
|
|
228
|
+
unregisterHelper = Test.unregisterHelper;
|
|
229
|
+
unregisterWaiter = Test.unregisterWaiter;
|
|
230
|
+
_impl = impl;
|
|
231
|
+
}`);
|
|
232
|
+
replaceFile(this, 'ember-testing/index.js', `export * from './lib/public-api';
|
|
233
|
+
import * as EmberTesting from './lib/public-api';
|
|
234
|
+
import { registerTestImplementaiton } from '@ember/test';
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
registerTestImplementaiton(EmberTesting);`);
|
|
238
|
+
replaceFile(this, 'ember-testing/lib/public-api.js', `
|
|
239
|
+
export { default as Test } from './test';
|
|
240
|
+
export { default as Adapter } from './adapters/adapter';
|
|
241
|
+
export { default as setupForTesting } from './setup_for_testing';
|
|
242
|
+
export { default as QUnitAdapter } from './adapters/qunit';
|
|
243
|
+
|
|
244
|
+
import './ext/application';
|
|
245
|
+
import './ext/rsvp'; // setup RSVP + run loop integration
|
|
246
|
+
import './helpers'; // adds helpers to helpers object in Test
|
|
247
|
+
import './initializers'; // to setup initializer`);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
class FixDeprecateFunction extends broccoli_plugin_1.default {
|
|
251
|
+
build() {
|
|
252
|
+
let inSource = (0, fs_extra_1.readFileSync)((0, path_1.resolve)(this.inputPaths[0], '@ember', 'debug', 'index.js'), 'utf8');
|
|
253
|
+
let outSource = (0, core_1.transform)(inSource, {
|
|
254
|
+
plugins: [fixDeprecate],
|
|
255
|
+
configFile: false,
|
|
256
|
+
}).code;
|
|
257
|
+
(0, fs_extra_1.outputFileSync)((0, path_1.resolve)(this.outputPath, '@ember', 'debug', 'index.js'), outSource, 'utf8');
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
function fixDeprecate(babel) {
|
|
261
|
+
const { types: t } = babel;
|
|
262
|
+
return {
|
|
263
|
+
name: 'ast-transform', // not required
|
|
264
|
+
visitor: {
|
|
265
|
+
Program(path) {
|
|
266
|
+
path.node.body.unshift(t.functionDeclaration(t.identifier('newDeprecate'), [t.restElement(t.identifier('rest'))], t.blockStatement([
|
|
267
|
+
t.returnStatement(t.callExpression(t.logicalExpression('??', t.identifier('currentDeprecate'), t.identifier('_deprecate')), [t.spreadElement(t.identifier('rest'))])),
|
|
268
|
+
])));
|
|
269
|
+
},
|
|
270
|
+
AssignmentExpression(path) {
|
|
271
|
+
if (path.node.left.type === 'Identifier' && path.node.left.name === 'deprecate') {
|
|
272
|
+
path.node.left.name = 'currentDeprecate';
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
ReturnStatement(path) {
|
|
276
|
+
var _a;
|
|
277
|
+
if (((_a = path.node.argument) === null || _a === void 0 ? void 0 : _a.type) === 'Identifier' && path.node.argument.name === 'deprecate') {
|
|
278
|
+
path.node.argument.name = 'newDeprecate';
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
CallExpression(path) {
|
|
282
|
+
if (path.node.callee.type === 'Identifier' && path.node.callee.name === 'deprecate') {
|
|
283
|
+
path.node.callee.name = 'newDeprecate';
|
|
284
|
+
}
|
|
285
|
+
if (path.node.callee.type === 'Identifier' &&
|
|
286
|
+
path.node.callee.name === 'setDebugFunction' &&
|
|
287
|
+
path.node.arguments[0].type === 'StringLiteral' &&
|
|
288
|
+
path.node.arguments[0].value === 'deprecate') {
|
|
289
|
+
path.remove();
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
ExportSpecifier(path) {
|
|
293
|
+
if (path.node.local.name === 'deprecate') {
|
|
294
|
+
path.node.local = t.identifier('newDeprecate');
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
VariableDeclarator(path) {
|
|
298
|
+
if (path.node.id.type === 'Identifier' && path.node.id.name === 'deprecate') {
|
|
299
|
+
path.node.id.name = 'currentDeprecate';
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
},
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
function updateFileWithTransform(context, file, transformFunction) {
|
|
306
|
+
let inSource = (0, fs_extra_1.readFileSync)((0, path_1.resolve)(context.inputPaths[0], file), 'utf8');
|
|
307
|
+
let plugins = Array.isArray(transformFunction) ? transformFunction : [transformFunction];
|
|
308
|
+
let outSource = (0, core_1.transform)(inSource, {
|
|
309
|
+
plugins,
|
|
310
|
+
configFile: false,
|
|
311
|
+
}).code;
|
|
312
|
+
(0, fs_extra_1.outputFileSync)((0, path_1.resolve)(context.outputPath, file), outSource, 'utf8');
|
|
313
|
+
}
|
|
314
|
+
function replaceFile(context, file, content) {
|
|
315
|
+
(0, fs_extra_1.outputFileSync)((0, path_1.resolve)(context.outputPath, file), content, 'utf8');
|
|
316
|
+
}
|
|
317
|
+
class FixCycleImports extends broccoli_plugin_1.default {
|
|
318
|
+
build() {
|
|
319
|
+
for (let file of ['@ember/object/observable.js', '@ember/utils/lib/is_empty.js']) {
|
|
320
|
+
updateFileWithTransform(this, file, moveObjectSpecifiersToMetal);
|
|
321
|
+
}
|
|
322
|
+
updateFileWithTransform(this, '@ember/array/index.js', [
|
|
323
|
+
moveObjectSpecifiersToMetal,
|
|
324
|
+
function (babel) {
|
|
325
|
+
const { types: t } = babel;
|
|
326
|
+
return {
|
|
327
|
+
visitor: {
|
|
328
|
+
ExportNamedDeclaration(path) {
|
|
329
|
+
var _a;
|
|
330
|
+
if (((_a = path.node.source) === null || _a === void 0 ? void 0 : _a.value) === './lib/make-array') {
|
|
331
|
+
path.node.source = t.stringLiteral('./make');
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
},
|
|
335
|
+
};
|
|
336
|
+
},
|
|
337
|
+
]);
|
|
338
|
+
updateFileWithTransform(this, '@ember/runloop/index.js', function (babel) {
|
|
339
|
+
const { types: t } = babel;
|
|
340
|
+
return {
|
|
341
|
+
visitor: {
|
|
342
|
+
CallExpression(path) {
|
|
343
|
+
if (path.node.callee.type === 'Identifier' && path.node.callee.name === 'flushAsyncObservers') {
|
|
344
|
+
path.node.arguments = [t.identifier('schedule')];
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
},
|
|
348
|
+
};
|
|
349
|
+
});
|
|
350
|
+
updateFileWithTransform(this, '@ember/object/core.js', function (babel) {
|
|
351
|
+
const { types: t } = babel;
|
|
352
|
+
return {
|
|
353
|
+
visitor: {
|
|
354
|
+
ImportDeclaration(path) {
|
|
355
|
+
if (path.node.source.value === '@ember/array') {
|
|
356
|
+
path.node.source = t.stringLiteral('@ember/array/make');
|
|
357
|
+
path.node.specifiers = [t.importDefaultSpecifier(t.identifier('makeArray'))];
|
|
358
|
+
}
|
|
359
|
+
},
|
|
360
|
+
},
|
|
361
|
+
};
|
|
362
|
+
});
|
|
363
|
+
(0, fs_extra_1.outputFileSync)((0, path_1.resolve)(this.outputPath, '@ember/array/make.js'), `export { default } from './lib/make-array';`, 'utf8');
|
|
364
|
+
updateFileWithTransform(this, '@ember/-internals/metal/index.js', function (babel) {
|
|
365
|
+
const { types: t } = babel;
|
|
366
|
+
return {
|
|
367
|
+
visitor: {
|
|
368
|
+
FunctionDeclaration(path) {
|
|
369
|
+
var _a;
|
|
370
|
+
if (((_a = path.node.id) === null || _a === void 0 ? void 0 : _a.name) === 'flushAsyncObservers') {
|
|
371
|
+
path.node.params = [t.identifier('_schedule')];
|
|
372
|
+
}
|
|
373
|
+
},
|
|
374
|
+
IfStatement(path) {
|
|
375
|
+
if (path.node.test.type === 'Identifier' && path.node.test.name === 'shouldSchedule') {
|
|
376
|
+
path.node.test.name = '_schedule';
|
|
377
|
+
}
|
|
378
|
+
},
|
|
379
|
+
CallExpression(path) {
|
|
380
|
+
if (path.node.callee.type === 'Identifier' && path.node.callee.name === 'schedule') {
|
|
381
|
+
path.node.callee.name = '_schedule';
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
ImportDeclaration(path) {
|
|
385
|
+
if (path.node.source.value === '@ember/runloop') {
|
|
386
|
+
path.remove();
|
|
387
|
+
}
|
|
388
|
+
},
|
|
389
|
+
},
|
|
390
|
+
};
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
function moveObjectSpecifiersToMetal() {
|
|
395
|
+
let done = false;
|
|
396
|
+
return {
|
|
397
|
+
visitor: {
|
|
398
|
+
ImportDeclaration(path) {
|
|
399
|
+
if (path.node.source.value === '@ember/-internals/metal') {
|
|
400
|
+
if (done) {
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* I need to use getAllPRevSiblings and getAllNextSiblings here because I need the siblings
|
|
405
|
+
* to be paths and path.container only holds nodes (for some strange reason).
|
|
406
|
+
*/
|
|
407
|
+
const objectimport = [...path.getAllPrevSiblings(), ...path.getAllNextSiblings()].find(p => p.node.type === 'ImportDeclaration' && p.node.source.value === '@ember/object');
|
|
408
|
+
path.node.specifiers.push(...objectimport.node.specifiers);
|
|
409
|
+
objectimport.remove();
|
|
410
|
+
done = true;
|
|
411
|
+
}
|
|
412
|
+
},
|
|
413
|
+
},
|
|
414
|
+
};
|
|
415
|
+
}
|
|
156
416
|
function fixStringLoc(babel) {
|
|
157
417
|
let t = babel.types;
|
|
158
418
|
return {
|