@embroider/core 0.46.1 → 0.47.2

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.
Files changed (42) hide show
  1. package/package.json +4 -4
  2. package/src/app-files.js +5 -3
  3. package/src/app-files.js.map +1 -1
  4. package/src/app.js +27 -8
  5. package/src/app.js.map +1 -1
  6. package/src/babel-plugin-adjust-imports.d.ts +6 -5
  7. package/src/babel-plugin-adjust-imports.js.map +1 -1
  8. package/src/babel-plugin-inline-hbs-deps-node.d.ts +14 -0
  9. package/src/babel-plugin-inline-hbs-deps-node.js +27 -0
  10. package/src/babel-plugin-inline-hbs-deps-node.js.map +1 -0
  11. package/src/babel-plugin-inline-hbs-deps.d.ts +10 -0
  12. package/src/babel-plugin-inline-hbs-deps.js +119 -0
  13. package/src/babel-plugin-inline-hbs-deps.js.map +1 -0
  14. package/src/babel-plugin-inline-hbs-node.d.ts +3 -9
  15. package/src/babel-plugin-inline-hbs-node.js.map +1 -1
  16. package/src/babel-plugin-inline-hbs.d.ts +5 -7
  17. package/src/babel-plugin-inline-hbs.js +35 -73
  18. package/src/babel-plugin-inline-hbs.js.map +1 -1
  19. package/src/babel-plugin-stage1-inline-hbs-node.d.ts +12 -0
  20. package/src/babel-plugin-stage1-inline-hbs-node.js +9 -0
  21. package/src/babel-plugin-stage1-inline-hbs-node.js.map +1 -0
  22. package/src/babel-plugin-stage1-inline-hbs.d.ts +9 -0
  23. package/src/babel-plugin-stage1-inline-hbs.js +96 -0
  24. package/src/babel-plugin-stage1-inline-hbs.js.map +1 -0
  25. package/src/describe-exports.js +3 -3
  26. package/src/describe-exports.js.map +1 -1
  27. package/src/mini-modules-polyfill.d.ts +1 -1
  28. package/src/mini-modules-polyfill.js.map +1 -1
  29. package/src/patch-template-compiler.js +3 -4
  30. package/src/patch-template-compiler.js.map +1 -1
  31. package/src/rename-require-plugin.js.map +1 -1
  32. package/src/template-compiler-common.d.ts +3 -1
  33. package/src/template-compiler-common.js +8 -12
  34. package/src/template-compiler-common.js.map +1 -1
  35. package/src/template-compiler-node.js +3 -3
  36. package/src/template-compiler-node.js.map +1 -1
  37. package/src/babel-import-adder.d.ts +0 -11
  38. package/src/babel-import-adder.js +0 -75
  39. package/src/babel-import-adder.js.map +0 -1
  40. package/src/template-colocation-plugin.d.ts +0 -22
  41. package/src/template-colocation-plugin.js +0 -113
  42. package/src/template-colocation-plugin.js.map +0 -1
@@ -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"]}