@embroider/core 0.47.0 → 0.47.1
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 +3 -3
- package/src/app-files.js +5 -3
- package/src/app-files.js.map +1 -1
- package/src/babel-import-adder.d.ts +0 -11
- package/src/babel-import-adder.js +0 -75
- package/src/babel-import-adder.js.map +0 -1
- package/src/template-colocation-plugin.d.ts +0 -22
- package/src/template-colocation-plugin.js +0 -113
- package/src/template-colocation-plugin.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@embroider/core",
|
|
3
|
-
"version": "0.47.
|
|
3
|
+
"version": "0.47.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A build system for EmberJS applications.",
|
|
6
6
|
"repository": {
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"@babel/plugin-transform-runtime": "^7.14.5",
|
|
38
38
|
"@babel/runtime": "^7.14.5",
|
|
39
39
|
"@babel/traverse": "^7.14.5",
|
|
40
|
-
"@embroider/macros": "0.47.
|
|
41
|
-
"@embroider/shared-internals": "0.47.
|
|
40
|
+
"@embroider/macros": "0.47.1",
|
|
41
|
+
"@embroider/shared-internals": "0.47.1",
|
|
42
42
|
"assert-never": "^1.2.1",
|
|
43
43
|
"babel-import-util": "^0.2.0",
|
|
44
44
|
"babel-plugin-ember-template-compilation": "^1.0.0",
|
package/src/app-files.js
CHANGED
|
@@ -25,10 +25,12 @@ class AppFiles {
|
|
|
25
25
|
}
|
|
26
26
|
continue;
|
|
27
27
|
}
|
|
28
|
-
// hbs files are resolvable, but not when they're inside the components
|
|
29
|
-
// directory (where they are used for colocation only)
|
|
30
28
|
if (relativePath.startsWith('components/')) {
|
|
31
|
-
|
|
29
|
+
// hbs files are resolvable, but not when they're used via co-location.
|
|
30
|
+
// An hbs file is used via colocation when it's inside the components
|
|
31
|
+
// directory, and also not named "template.hbs" (because that is an
|
|
32
|
+
// older pattern used with pods-like layouts).
|
|
33
|
+
if (!relativePath.endsWith('.hbs') || relativePath.endsWith('/template.hbs')) {
|
|
32
34
|
components.push(relativePath);
|
|
33
35
|
}
|
|
34
36
|
continue;
|
package/src/app-files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-files.js","sourceRoot":"","sources":["app-files.ts"],"names":[],"mappings":";;;AAAA,+BAA2B;AAW3B,MAAa,QAAQ;IASnB,YAAY,SAAoB,EAAE,oBAA4B,EAAE,eAAwB;QACtF,IAAI,KAAK,GAAa,EAAE,CAAC;QACzB,IAAI,UAAU,GAAa,EAAE,CAAC;QAC9B,IAAI,OAAO,GAAa,EAAE,CAAC;QAC3B,IAAI,aAAa,GAAa,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QACxC,KAAK,IAAI,YAAY,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;YAC/C,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,UAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;gBAC5C,SAAS;aACV;YAED,IAAI,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;gBACjC,oEAAoE;gBACpE,4DAA4D;gBAC5D,SAAS;aACV;YAED,IAAI,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBACrC,IAAI,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;oBACpC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;iBAC1B;gBACD,SAAS;aACV;YAED,
|
|
1
|
+
{"version":3,"file":"app-files.js","sourceRoot":"","sources":["app-files.ts"],"names":[],"mappings":"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","sourcesContent":["import { sep } from 'path';\nimport { Package, AddonPackage } from '@embroider/shared-internals';\nimport AppDiffer from './app-differ';\n\nexport interface RouteFiles {\n route?: string;\n template?: string;\n controller?: string;\n children: Map<string, RouteFiles>;\n}\n\nexport class AppFiles {\n readonly tests: ReadonlyArray<string>;\n readonly components: ReadonlyArray<string>;\n readonly helpers: ReadonlyArray<string>;\n private perRoute: RouteFiles;\n readonly otherAppFiles: ReadonlyArray<string>;\n readonly relocatedFiles: Map<string, string>;\n readonly isFastbootOnly: Map<string, boolean>;\n\n constructor(appDiffer: AppDiffer, resolvableExtensions: RegExp, podModulePrefix?: string) {\n let tests: string[] = [];\n let components: string[] = [];\n let helpers: string[] = [];\n let otherAppFiles: string[] = [];\n this.perRoute = { children: new Map() };\n for (let relativePath of appDiffer.files.keys()) {\n relativePath = relativePath.split(sep).join('/');\n if (!resolvableExtensions.test(relativePath)) {\n continue;\n }\n\n if (/\\.d\\.ts$/.test(relativePath)) {\n // .d.ts files are technically \"*.ts\" files but aren't really and we\n // don't want to include them when we crawl through the app.\n continue;\n }\n\n if (relativePath.startsWith('tests/')) {\n if (/-test\\.\\w+$/.test(relativePath)) {\n tests.push(relativePath);\n }\n continue;\n }\n\n if (relativePath.startsWith('components/')) {\n // hbs files are resolvable, but not when they're used via co-location.\n // An hbs file is used via colocation when it's inside the components\n // directory, and also not named \"template.hbs\" (because that is an\n // older pattern used with pods-like layouts).\n if (!relativePath.endsWith('.hbs') || relativePath.endsWith('/template.hbs')) {\n components.push(relativePath);\n }\n continue;\n }\n\n if (relativePath.startsWith('templates/components/')) {\n components.push(relativePath);\n continue;\n }\n\n if (relativePath.startsWith('helpers/')) {\n helpers.push(relativePath);\n continue;\n }\n\n if (\n this.handleClassicRouteFile(relativePath) ||\n (podModulePrefix !== undefined && this.handlePodsRouteFile(relativePath, podModulePrefix))\n ) {\n continue;\n }\n\n otherAppFiles.push(relativePath);\n }\n this.tests = tests;\n this.components = components;\n this.helpers = helpers;\n this.otherAppFiles = otherAppFiles;\n\n let relocatedFiles: Map<string, string> = new Map();\n for (let [relativePath, owningPath] of appDiffer.files) {\n if (owningPath) {\n relocatedFiles.set(relativePath, owningPath);\n }\n }\n this.relocatedFiles = relocatedFiles;\n this.isFastbootOnly = appDiffer.isFastbootOnly;\n }\n\n private handleClassicRouteFile(relativePath: string): boolean {\n let [prefix, ...rest] = relativePath.replace(/\\.\\w{1,3}$/, '').split('/');\n if (!['controllers', 'templates', 'routes'].includes(prefix)) {\n return false;\n }\n let type = prefix.slice(0, -1) as 'controller' | 'template' | 'route';\n let cursor = this.perRoute;\n for (let part of rest) {\n let child = cursor.children.get(part);\n if (child) {\n cursor = child;\n } else {\n let newEntry = { children: new Map() };\n cursor.children.set(part, newEntry);\n cursor = newEntry;\n }\n }\n cursor[type] = relativePath;\n return true;\n }\n\n private handlePodsRouteFile(relativePath: string, podModulePrefix: string): boolean {\n let parts = relativePath.replace(/\\.\\w{1,3}$/, '').split('/');\n let type = parts.pop();\n if (!type || !['controller', 'template', 'route'].includes(type)) {\n return false;\n }\n let podParts = podModulePrefix.split('/');\n // The first part of podModulePrefix is the app's package name\n podParts.shift();\n\n for (let podPart of podParts) {\n if (parts.shift() !== podPart) {\n return false;\n }\n }\n\n let cursor = this.perRoute;\n for (let part of parts) {\n let child = cursor.children.get(part);\n if (child) {\n cursor = child;\n } else {\n let newEntry = { children: new Map() };\n cursor.children.set(part, newEntry);\n cursor = newEntry;\n }\n }\n cursor[type as 'controller' | 'template' | 'route'] = relativePath;\n return true;\n }\n\n get routeFiles(): Readonly<RouteFiles> {\n return this.perRoute;\n }\n}\n\nexport interface EngineSummary {\n // the engine's own package\n package: Package;\n // the set of active addons in the engine\n addons: Set<AddonPackage>;\n // the parent engine, if any\n parent: EngineSummary | undefined;\n // where the engine's own V2 code comes from\n sourcePath: string;\n // where the engine gets built into, combining its own code with all its\n // addons\n destPath: string;\n // runtime name for the engine's own module namespace\n modulePrefix: string;\n // this is destPath but relative to the app itself\n appRelativePath: string;\n}\n\nexport interface Engine extends EngineSummary {\n appFiles: AppFiles;\n}\n"]}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { NodePath } from '@babel/traverse';
|
|
2
|
-
import type * as t from '@babel/types';
|
|
3
|
-
declare type BabelTypes = typeof t;
|
|
4
|
-
export declare class ImportAdder {
|
|
5
|
-
private t;
|
|
6
|
-
private program;
|
|
7
|
-
constructor(t: BabelTypes, program: NodePath<t.Program>);
|
|
8
|
-
import(target: NodePath<t.Node>, moduleSpecifier: string, exportedName: string, nameHint?: string): t.Identifier;
|
|
9
|
-
private addSpecifier;
|
|
10
|
-
}
|
|
11
|
-
export {};
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ImportAdder = void 0;
|
|
4
|
-
class ImportAdder {
|
|
5
|
-
constructor(t, program) {
|
|
6
|
-
this.t = t;
|
|
7
|
-
this.program = program;
|
|
8
|
-
}
|
|
9
|
-
import(target, moduleSpecifier, exportedName, nameHint) {
|
|
10
|
-
var _a;
|
|
11
|
-
let declaration = this.program
|
|
12
|
-
.get('body')
|
|
13
|
-
.find(elt => elt.isImportDeclaration() && elt.node.source.value === moduleSpecifier);
|
|
14
|
-
if (declaration) {
|
|
15
|
-
let specifier = declaration
|
|
16
|
-
.get('specifiers')
|
|
17
|
-
.find(spec => exportedName === 'default'
|
|
18
|
-
? spec.isImportDefaultSpecifier()
|
|
19
|
-
: spec.isImportSpecifier() && name(spec.node.imported) === exportedName);
|
|
20
|
-
if (specifier && ((_a = target.scope.getBinding(specifier.node.local.name)) === null || _a === void 0 ? void 0 : _a.kind) === 'module') {
|
|
21
|
-
return specifier.node.local;
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
return this.addSpecifier(target, declaration, exportedName, nameHint);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
this.program.node.body.unshift(this.t.importDeclaration([], this.t.stringLiteral(moduleSpecifier)));
|
|
29
|
-
return this.addSpecifier(target, this.program.get(`body.0`), exportedName, nameHint);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
addSpecifier(target, declaration, exportedName, nameHint) {
|
|
33
|
-
let local = this.t.identifier(unusedNameLike(target, desiredName(nameHint, exportedName, target)));
|
|
34
|
-
let specifier = exportedName === 'default'
|
|
35
|
-
? this.t.importDefaultSpecifier(local)
|
|
36
|
-
: this.t.importSpecifier(local, this.t.identifier(exportedName));
|
|
37
|
-
declaration.node.specifiers.push(specifier);
|
|
38
|
-
declaration.scope.registerBinding('module', declaration.get(`specifiers.${declaration.node.specifiers.length - 1}`));
|
|
39
|
-
return local;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
exports.ImportAdder = ImportAdder;
|
|
43
|
-
function unusedNameLike(path, name) {
|
|
44
|
-
let candidate = name;
|
|
45
|
-
let counter = 0;
|
|
46
|
-
while (path.scope.hasBinding(candidate)) {
|
|
47
|
-
candidate = `${name}${counter++}`;
|
|
48
|
-
}
|
|
49
|
-
return candidate;
|
|
50
|
-
}
|
|
51
|
-
function name(node) {
|
|
52
|
-
if (node.type === 'StringLiteral') {
|
|
53
|
-
return node.value;
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
return node.name;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
function desiredName(nameHint, exportedName, target) {
|
|
60
|
-
if (nameHint) {
|
|
61
|
-
return nameHint;
|
|
62
|
-
}
|
|
63
|
-
if (exportedName === 'default') {
|
|
64
|
-
if (target.isIdentifier()) {
|
|
65
|
-
return target.node.name;
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
return target.scope.generateUidIdentifierBasedOnNode(target.node).name;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
return exportedName;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
//# sourceMappingURL=babel-import-adder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"babel-import-adder.js","sourceRoot":"","sources":["babel-import-adder.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type * as t from '@babel/types';\n\ntype BabelTypes = typeof t;\n\nexport class ImportAdder {\n constructor(private t: BabelTypes, private program: NodePath<t.Program>) {}\n\n import(target: NodePath<t.Node>, moduleSpecifier: string, exportedName: string, nameHint?: string): t.Identifier {\n let declaration = this.program\n .get('body')\n .find(elt => elt.isImportDeclaration() && elt.node.source.value === moduleSpecifier) as\n | undefined\n | NodePath<t.ImportDeclaration>;\n if (declaration) {\n let specifier = declaration\n .get('specifiers')\n .find(spec =>\n exportedName === 'default'\n ? spec.isImportDefaultSpecifier()\n : spec.isImportSpecifier() && name(spec.node.imported) === exportedName\n ) as undefined | NodePath<t.ImportSpecifier> | NodePath<t.ImportDefaultSpecifier>;\n if (specifier && target.scope.getBinding(specifier.node.local.name)?.kind === 'module') {\n return specifier.node.local;\n } else {\n return this.addSpecifier(target, declaration, exportedName, nameHint);\n }\n } else {\n this.program.node.body.unshift(this.t.importDeclaration([], this.t.stringLiteral(moduleSpecifier)));\n return this.addSpecifier(\n target,\n this.program.get(`body.0`) as NodePath<t.ImportDeclaration>,\n exportedName,\n nameHint\n );\n }\n }\n\n private addSpecifier(\n target: NodePath<t.Node>,\n declaration: NodePath<t.ImportDeclaration>,\n exportedName: string,\n nameHint: string | undefined\n ): t.Identifier {\n let local = this.t.identifier(unusedNameLike(target, desiredName(nameHint, exportedName, target)));\n let specifier =\n exportedName === 'default'\n ? this.t.importDefaultSpecifier(local)\n : this.t.importSpecifier(local, this.t.identifier(exportedName));\n declaration.node.specifiers.push(specifier);\n declaration.scope.registerBinding(\n 'module',\n declaration.get(`specifiers.${declaration.node.specifiers.length - 1}`) as NodePath\n );\n return local;\n }\n}\n\nfunction unusedNameLike(path: NodePath<unknown>, name: string): string {\n let candidate = name;\n let counter = 0;\n while (path.scope.hasBinding(candidate)) {\n candidate = `${name}${counter++}`;\n }\n return candidate;\n}\n\nfunction name(node: t.StringLiteral | t.Identifier): string {\n if (node.type === 'StringLiteral') {\n return node.value;\n } else {\n return node.name;\n }\n}\n\nfunction desiredName(nameHint: string | undefined, exportedName: string, target: NodePath<t.Node>) {\n if (nameHint) {\n return nameHint;\n }\n if (exportedName === 'default') {\n if (target.isIdentifier()) {\n return target.node.name;\n } else {\n return target.scope.generateUidIdentifierBasedOnNode(target.node).name;\n }\n } else {\n return exportedName;\n }\n}\n"]}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { NodePath } from '@babel/traverse';
|
|
2
|
-
import type * as t from '@babel/types';
|
|
3
|
-
import { ImportUtil } from 'babel-import-util';
|
|
4
|
-
interface State {
|
|
5
|
-
colocatedTemplate: string | undefined;
|
|
6
|
-
associate: {
|
|
7
|
-
component: t.Identifier;
|
|
8
|
-
template: t.Identifier;
|
|
9
|
-
} | undefined;
|
|
10
|
-
adder: ImportUtil;
|
|
11
|
-
}
|
|
12
|
-
export default function main(babel: unknown): {
|
|
13
|
-
visitor: {
|
|
14
|
-
Program: {
|
|
15
|
-
enter(path: NodePath<t.Program>, state: State): void;
|
|
16
|
-
exit(path: NodePath<t.Program>, state: State): void;
|
|
17
|
-
};
|
|
18
|
-
ExportDefaultDeclaration(path: NodePath<t.ExportDefaultDeclaration>, state: State): void;
|
|
19
|
-
ExportNamedDeclaration(path: NodePath<t.ExportNamedDeclaration>, state: State): void;
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
|
-
export {};
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const fs_1 = require("fs");
|
|
4
|
-
const path_1 = require("path");
|
|
5
|
-
const shared_internals_1 = require("@embroider/shared-internals");
|
|
6
|
-
const shared_internals_2 = require("@embroider/shared-internals");
|
|
7
|
-
const babel_import_util_1 = require("babel-import-util");
|
|
8
|
-
const packageCache = shared_internals_2.PackageCache.shared('embroider-stage3');
|
|
9
|
-
function setComponentTemplate(target, state) {
|
|
10
|
-
return state.adder.import(target, '@ember/component', 'setComponentTemplate');
|
|
11
|
-
}
|
|
12
|
-
function main(babel) {
|
|
13
|
-
let t = babel.types;
|
|
14
|
-
return {
|
|
15
|
-
visitor: {
|
|
16
|
-
Program: {
|
|
17
|
-
enter(path, state) {
|
|
18
|
-
state.adder = new babel_import_util_1.ImportUtil(t, path);
|
|
19
|
-
let filename = path.hub.file.opts.filename;
|
|
20
|
-
let owningPackage = packageCache.ownerOfFile(filename);
|
|
21
|
-
if (!owningPackage || !owningPackage.isV2Ember() || !owningPackage.meta['auto-upgraded']) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
let hbsFilename = filename.replace(/\.\w{1,3}$/, '') + '.hbs';
|
|
25
|
-
if ((0, fs_1.existsSync)(hbsFilename)) {
|
|
26
|
-
state.colocatedTemplate = hbsFilename;
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
exit(path, state) {
|
|
30
|
-
if (!state.colocatedTemplate) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
if (state.associate) {
|
|
34
|
-
path.node.body.push(t.expressionStatement(t.callExpression(setComponentTemplate(path, state), [
|
|
35
|
-
state.associate.template,
|
|
36
|
-
state.associate.component,
|
|
37
|
-
])));
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
},
|
|
41
|
-
ExportDefaultDeclaration(path, state) {
|
|
42
|
-
var _a;
|
|
43
|
-
if (!state.colocatedTemplate) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
let declaration = path.get('declaration').node;
|
|
47
|
-
if (t.isClassDeclaration(declaration)) {
|
|
48
|
-
let template = importTemplate(path, state.adder, state.colocatedTemplate);
|
|
49
|
-
if (declaration.id != null) {
|
|
50
|
-
state.associate = { template, component: declaration.id };
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
path.node.declaration = t.callExpression(setComponentTemplate(path, state), [
|
|
54
|
-
template,
|
|
55
|
-
t.classExpression(null, declaration.superClass, declaration.body, (_a = declaration.decorators) !== null && _a !== void 0 ? _a : []),
|
|
56
|
-
]);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
else if (t.isFunctionDeclaration(declaration)) {
|
|
60
|
-
let template = importTemplate(path, state.adder, state.colocatedTemplate);
|
|
61
|
-
if (declaration.id != null) {
|
|
62
|
-
state.associate = { template, component: declaration.id };
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
path.node.declaration = t.callExpression(setComponentTemplate(path, state), [
|
|
66
|
-
template,
|
|
67
|
-
t.functionExpression(null, declaration.params, declaration.body, declaration.generator, declaration.async),
|
|
68
|
-
]);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
else if (t.isTSDeclareFunction(declaration)) {
|
|
72
|
-
// we don't rewrite this
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
let local = importTemplate(path, state.adder, state.colocatedTemplate);
|
|
76
|
-
path.node.declaration = t.callExpression(setComponentTemplate(path, state), [local, declaration]);
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
ExportNamedDeclaration(path, state) {
|
|
80
|
-
if (!state.colocatedTemplate) {
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
let { node } = path;
|
|
84
|
-
for (let specifier of path.node.specifiers) {
|
|
85
|
-
if (t.isExportDefaultSpecifier(specifier)) {
|
|
86
|
-
}
|
|
87
|
-
else if (t.isExportSpecifier(specifier)) {
|
|
88
|
-
const name = specifier.exported.type === 'Identifier' ? specifier.exported.name : specifier.exported.value;
|
|
89
|
-
if (name === 'default') {
|
|
90
|
-
let template = importTemplate(path, state.adder, state.colocatedTemplate);
|
|
91
|
-
if (node.source) {
|
|
92
|
-
// our default export is a reexport from elsewhere. We will
|
|
93
|
-
// synthesize a new import for it so we can get a local handle
|
|
94
|
-
// on it
|
|
95
|
-
let component = state.adder.import(path, node.source.value, specifier.local.name, 'COMPONENT');
|
|
96
|
-
state.associate = { template, component };
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
// our default export is one of our local names
|
|
100
|
-
state.associate = { template, component: t.identifier(specifier.local.name) };
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
},
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
exports.default = main;
|
|
110
|
-
function importTemplate(target, adder, colocatedTemplate) {
|
|
111
|
-
return adder.import(target, (0, shared_internals_1.explicitRelative)((0, path_1.dirname)(colocatedTemplate), colocatedTemplate), 'default', 'TEMPLATE');
|
|
112
|
-
}
|
|
113
|
-
//# sourceMappingURL=template-colocation-plugin.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"template-colocation-plugin.js","sourceRoot":"","sources":["template-colocation-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport { existsSync } from 'fs';\nimport type * as t from '@babel/types';\nimport { dirname } from 'path';\nimport { explicitRelative } from '@embroider/shared-internals';\nimport { PackageCache } from '@embroider/shared-internals';\nimport { ImportUtil } from 'babel-import-util';\n\ntype BabelTypes = typeof t;\n\nconst packageCache = PackageCache.shared('embroider-stage3');\n\ninterface State {\n colocatedTemplate: string | undefined;\n associate: { component: t.Identifier; template: t.Identifier } | undefined;\n adder: ImportUtil;\n}\n\nfunction setComponentTemplate(target: NodePath<t.Node>, state: State) {\n return state.adder.import(target, '@ember/component', 'setComponentTemplate');\n}\n\nexport default function main(babel: unknown) {\n let t = (babel as any).types as BabelTypes;\n return {\n visitor: {\n Program: {\n enter(path: NodePath<t.Program>, state: State) {\n state.adder = new ImportUtil(t, path);\n let filename = path.hub.file.opts.filename;\n\n let owningPackage = packageCache.ownerOfFile(filename);\n if (!owningPackage || !owningPackage.isV2Ember() || !owningPackage.meta['auto-upgraded']) {\n return;\n }\n\n let hbsFilename = filename.replace(/\\.\\w{1,3}$/, '') + '.hbs';\n if (existsSync(hbsFilename)) {\n state.colocatedTemplate = hbsFilename;\n }\n },\n exit(path: NodePath<t.Program>, state: State) {\n if (!state.colocatedTemplate) {\n return;\n }\n if (state.associate) {\n path.node.body.push(\n t.expressionStatement(\n t.callExpression(setComponentTemplate(path, state), [\n state.associate.template,\n state.associate.component,\n ])\n )\n );\n }\n },\n },\n\n ExportDefaultDeclaration(path: NodePath<t.ExportDefaultDeclaration>, state: State) {\n if (!state.colocatedTemplate) {\n return;\n }\n\n let declaration = path.get('declaration').node;\n\n if (t.isClassDeclaration(declaration)) {\n let template = importTemplate(path, state.adder, state.colocatedTemplate);\n if (declaration.id != null) {\n state.associate = { template, component: declaration.id };\n } else {\n path.node.declaration = t.callExpression(setComponentTemplate(path, state), [\n template,\n t.classExpression(null, declaration.superClass, declaration.body, declaration.decorators ?? []),\n ]);\n }\n } else if (t.isFunctionDeclaration(declaration)) {\n let template = importTemplate(path, state.adder, state.colocatedTemplate);\n\n if (declaration.id != null) {\n state.associate = { template, component: declaration.id };\n } else {\n path.node.declaration = t.callExpression(setComponentTemplate(path, state), [\n template,\n t.functionExpression(\n null,\n declaration.params,\n declaration.body,\n declaration.generator,\n declaration.async\n ),\n ]);\n }\n } else if (t.isTSDeclareFunction(declaration)) {\n // we don't rewrite this\n } else {\n let local = importTemplate(path, state.adder, state.colocatedTemplate);\n path.node.declaration = t.callExpression(setComponentTemplate(path, state), [local, declaration]);\n }\n },\n ExportNamedDeclaration(path: NodePath<t.ExportNamedDeclaration>, state: State) {\n if (!state.colocatedTemplate) {\n return;\n }\n let { node } = path;\n for (let specifier of path.node.specifiers) {\n if (t.isExportDefaultSpecifier(specifier)) {\n } else if (t.isExportSpecifier(specifier)) {\n const name = specifier.exported.type === 'Identifier' ? specifier.exported.name : specifier.exported.value;\n\n if (name === 'default') {\n let template = importTemplate(path, state.adder, state.colocatedTemplate);\n if (node.source) {\n // our default export is a reexport from elsewhere. We will\n // synthesize a new import for it so we can get a local handle\n // on it\n let component = state.adder.import(path, node.source.value, specifier.local.name, 'COMPONENT');\n state.associate = { template, component };\n } else {\n // our default export is one of our local names\n state.associate = { template, component: t.identifier(specifier.local.name) };\n }\n }\n }\n }\n },\n },\n };\n}\n\nfunction importTemplate(target: NodePath<t.Node>, adder: ImportUtil, colocatedTemplate: string) {\n return adder.import(target, explicitRelative(dirname(colocatedTemplate), colocatedTemplate), 'default', 'TEMPLATE');\n}\n"]}
|