@embroider/compat 4.0.1-unstable.c9ec137 → 4.0.1-unstable.ee4714c
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 +5 -5
- package/src/babel.js +4 -14
- package/src/babel.js.map +1 -1
- package/src/compat-adapters/ember-source.js +58 -0
- 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/options.js +0 -12
- package/src/options.js.map +1 -1
- package/src/resolver-transform.d.ts +4 -2
- package/src/resolver-transform.js +20 -11
- 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.1-unstable.
|
|
3
|
+
"version": "4.0.1-unstable.ee4714c",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Backward compatibility layer for the Embroider build system.",
|
|
6
6
|
"repository": {
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
],
|
|
20
20
|
"release-plan": {
|
|
21
21
|
"semverIncrementAs": {
|
|
22
|
-
"major": "
|
|
22
|
+
"major": "prerelease",
|
|
23
23
|
"minor": "prerelease",
|
|
24
24
|
"patch": "prerelease"
|
|
25
25
|
},
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"tree-sync": "^2.1.0",
|
|
69
69
|
"typescript-memoize": "^1.0.1",
|
|
70
70
|
"walk-sync": "^3.0.0",
|
|
71
|
-
"@embroider/macros": "1.17.1-unstable.
|
|
71
|
+
"@embroider/macros": "1.17.1-unstable.ee4714c"
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
74
|
"@glimmer/syntax": "^0.84.3",
|
|
@@ -91,12 +91,12 @@
|
|
|
91
91
|
"ember-engines": "^0.8.19",
|
|
92
92
|
"scenario-tester": "^4.0.0",
|
|
93
93
|
"typescript": "^5.4.5",
|
|
94
|
-
"@embroider/core": "^4.0.1-unstable.
|
|
94
|
+
"@embroider/core": "^4.0.1-unstable.ee4714c",
|
|
95
95
|
"@embroider/sample-transforms": "0.0.0",
|
|
96
96
|
"@embroider/test-support": "0.36.0"
|
|
97
97
|
},
|
|
98
98
|
"peerDependencies": {
|
|
99
|
-
"@embroider/core": "^4.0.1-unstable.
|
|
99
|
+
"@embroider/core": "^4.0.1-unstable.ee4714c"
|
|
100
100
|
},
|
|
101
101
|
"engines": {
|
|
102
102
|
"node": "12.* || 14.* || >= 16"
|
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"]}
|
|
@@ -103,6 +103,9 @@ class default_1 extends v1_addon_1.default {
|
|
|
103
103
|
// error.
|
|
104
104
|
trees.push(new FixStringLoc([packages]));
|
|
105
105
|
}
|
|
106
|
+
if ((0, semver_1.satisfies)(this.packageJSON.version, '<5.12.0')) {
|
|
107
|
+
trees.push(new FixDeprecateFunction([packages]));
|
|
108
|
+
}
|
|
106
109
|
return (0, broccoli_merge_trees_1.default)(trees, { overwrite: true });
|
|
107
110
|
}
|
|
108
111
|
// We're zeroing out these files in vendor rather than deleting them, because
|
|
@@ -153,6 +156,61 @@ class FixStringLoc extends broccoli_plugin_1.default {
|
|
|
153
156
|
(0, fs_extra_1.outputFileSync)((0, path_1.resolve)(this.outputPath, 'ember', 'index.js'), outSource, 'utf8');
|
|
154
157
|
}
|
|
155
158
|
}
|
|
159
|
+
class FixDeprecateFunction extends broccoli_plugin_1.default {
|
|
160
|
+
build() {
|
|
161
|
+
let inSource = (0, fs_extra_1.readFileSync)((0, path_1.resolve)(this.inputPaths[0], '@ember', 'debug', 'index.js'), 'utf8');
|
|
162
|
+
let outSource = (0, core_1.transform)(inSource, {
|
|
163
|
+
plugins: [fixDeprecate],
|
|
164
|
+
configFile: false,
|
|
165
|
+
}).code;
|
|
166
|
+
(0, fs_extra_1.outputFileSync)((0, path_1.resolve)(this.outputPath, '@ember', 'debug', 'index.js'), outSource, 'utf8');
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
function fixDeprecate(babel) {
|
|
170
|
+
const { types: t } = babel;
|
|
171
|
+
return {
|
|
172
|
+
name: 'ast-transform', // not required
|
|
173
|
+
visitor: {
|
|
174
|
+
Program(path) {
|
|
175
|
+
path.node.body.unshift(t.functionDeclaration(t.identifier('newDeprecate'), [t.restElement(t.identifier('rest'))], t.blockStatement([
|
|
176
|
+
t.returnStatement(t.callExpression(t.logicalExpression('??', t.identifier('currentDeprecate'), t.identifier('_deprecate')), [t.spreadElement(t.identifier('rest'))])),
|
|
177
|
+
])));
|
|
178
|
+
},
|
|
179
|
+
AssignmentExpression(path) {
|
|
180
|
+
if (path.node.left.type === 'Identifier' && path.node.left.name === 'deprecate') {
|
|
181
|
+
path.node.left.name = 'currentDeprecate';
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
ReturnStatement(path) {
|
|
185
|
+
var _a;
|
|
186
|
+
if (((_a = path.node.argument) === null || _a === void 0 ? void 0 : _a.type) === 'Identifier' && path.node.argument.name === 'deprecate') {
|
|
187
|
+
path.node.argument.name = 'newDeprecate';
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
CallExpression(path) {
|
|
191
|
+
if (path.node.callee.type === 'Identifier' && path.node.callee.name === 'deprecate') {
|
|
192
|
+
path.node.callee.name = 'newDeprecate';
|
|
193
|
+
}
|
|
194
|
+
if (path.node.callee.type === 'Identifier' &&
|
|
195
|
+
path.node.callee.name === 'setDebugFunction' &&
|
|
196
|
+
path.node.arguments[0].type === 'StringLiteral' &&
|
|
197
|
+
path.node.arguments[0].value === 'deprecate') {
|
|
198
|
+
path.remove();
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
ExportSpecifier(path) {
|
|
202
|
+
if (path.node.local.name === 'deprecate') {
|
|
203
|
+
path.node.local = t.identifier('newDeprecate');
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
VariableDeclarator(path) {
|
|
207
|
+
if (path.node.id.type === 'Identifier' && path.node.id.name === 'deprecate') {
|
|
208
|
+
path.node.id.name = 'currentDeprecate';
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
};
|
|
213
|
+
}
|
|
156
214
|
function fixStringLoc(babel) {
|
|
157
215
|
let t = babel.types;
|
|
158
216
|
return {
|
|
@@ -1 +1 @@
|
|
|
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 type { Node } from 'broccoli-node-api';\nimport { existsSync } from 'fs';\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 // versions of ember-source prior to\n // https://github.com/emberjs/ember.js/pull/20675 ship dist/packages and\n // dist/dependencies separately and the imports between them are package-name\n // imports. Since many of the dependencies are also true package.json\n // dependencies (in order to get typescript types), and our module-resolver\n // prioritizes true dependencies, it's necessary to detect and remove the\n // package.json dependencies.\n //\n // After the above linked change, ember-source ships only dist/packages and\n // the inter-package imports are all relative. Some of the things in\n // dist/packages are still the rolled-in dependencies, but now that the\n // imports are all relative we need no special handling for them (beyond the\n // normal v2 addon renamed-modules support.\n @Memoize()\n private get includedDependencies() {\n let result: string[] = [];\n let depsDir = resolve(this.root, 'dist', 'dependencies');\n if (!existsSync(depsDir)) {\n return result;\n }\n for (let name of readdirSync(depsDir)) {\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\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 // we are adding custom implementations of these\n return treeName === 'treeForAddon' || treeName === 'treeForVendor' || super.customizes(treeName);\n }\n\n invokeOriginalTreeFor(name: string) {\n if (name === 'addon') {\n return this.customAddonTree();\n }\n if (name === 'vendor') {\n return this.customVendorTree();\n }\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 allowEmpty: true,\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\n if (!meta['implicit-modules']) {\n meta['implicit-modules'] = [];\n }\n meta['implicit-modules'].push('./ember/index.js');\n // before 5.6, Ember uses the AMD loader to decide if it's test-only parts\n // are present, so we must ensure they're registered. After that it's\n // enough to evaluate ember-testing, which @embroider/core is hard-coded\n // to do in the backward-compatible tests bundle.\n if (!satisfies(this.packageJSON.version, '>= 5.6.0-alpha.0', { includePrerelease: true })) {\n if (!meta['implicit-test-modules']) {\n meta['implicit-test-modules'] = [];\n }\n meta['implicit-test-modules'].push('./ember-testing/index.js');\n }\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 configFile: false,\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"]}
|
|
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 type { Node } from 'broccoli-node-api';\nimport { existsSync } from 'fs';\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 // versions of ember-source prior to\n // https://github.com/emberjs/ember.js/pull/20675 ship dist/packages and\n // dist/dependencies separately and the imports between them are package-name\n // imports. Since many of the dependencies are also true package.json\n // dependencies (in order to get typescript types), and our module-resolver\n // prioritizes true dependencies, it's necessary to detect and remove the\n // package.json dependencies.\n //\n // After the above linked change, ember-source ships only dist/packages and\n // the inter-package imports are all relative. Some of the things in\n // dist/packages are still the rolled-in dependencies, but now that the\n // imports are all relative we need no special handling for them (beyond the\n // normal v2 addon renamed-modules support.\n @Memoize()\n private get includedDependencies() {\n let result: string[] = [];\n let depsDir = resolve(this.root, 'dist', 'dependencies');\n if (!existsSync(depsDir)) {\n return result;\n }\n for (let name of readdirSync(depsDir)) {\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\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 // we are adding custom implementations of these\n return treeName === 'treeForAddon' || treeName === 'treeForVendor' || super.customizes(treeName);\n }\n\n invokeOriginalTreeFor(name: string) {\n if (name === 'addon') {\n return this.customAddonTree();\n }\n if (name === 'vendor') {\n return this.customVendorTree();\n }\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 allowEmpty: true,\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 if (satisfies(this.packageJSON.version, '<5.12.0')) {\n trees.push(new FixDeprecateFunction([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\n if (!meta['implicit-modules']) {\n meta['implicit-modules'] = [];\n }\n meta['implicit-modules'].push('./ember/index.js');\n // before 5.6, Ember uses the AMD loader to decide if it's test-only parts\n // are present, so we must ensure they're registered. After that it's\n // enough to evaluate ember-testing, which @embroider/core is hard-coded\n // to do in the backward-compatible tests bundle.\n if (!satisfies(this.packageJSON.version, '>= 5.6.0-alpha.0', { includePrerelease: true })) {\n if (!meta['implicit-test-modules']) {\n meta['implicit-test-modules'] = [];\n }\n meta['implicit-test-modules'].push('./ember-testing/index.js');\n }\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 configFile: false,\n })!.code!;\n outputFileSync(resolve(this.outputPath, 'ember', 'index.js'), outSource, 'utf8');\n }\n}\n\nclass FixDeprecateFunction extends Plugin {\n build() {\n let inSource = readFileSync(resolve(this.inputPaths[0], '@ember', 'debug', 'index.js'), 'utf8');\n let outSource = transform(inSource, {\n plugins: [fixDeprecate],\n configFile: false,\n })!.code!;\n outputFileSync(resolve(this.outputPath, '@ember', 'debug', 'index.js'), outSource, 'utf8');\n }\n}\n\nfunction fixDeprecate(babel: typeof Babel) {\n const { types: t } = babel;\n\n return {\n name: 'ast-transform', // not required\n visitor: {\n Program(path: NodePath<Babel.types.Program>) {\n path.node.body.unshift(\n t.functionDeclaration(\n t.identifier('newDeprecate'),\n [t.restElement(t.identifier('rest'))],\n t.blockStatement([\n t.returnStatement(\n t.callExpression(\n t.logicalExpression('??', t.identifier('currentDeprecate'), t.identifier('_deprecate')),\n [t.spreadElement(t.identifier('rest'))]\n )\n ),\n ])\n )\n );\n },\n AssignmentExpression(path: NodePath<Babel.types.AssignmentExpression>) {\n if (path.node.left.type === 'Identifier' && path.node.left.name === 'deprecate') {\n path.node.left.name = 'currentDeprecate';\n }\n },\n\n ReturnStatement(path: NodePath<Babel.types.ReturnStatement>) {\n if (path.node.argument?.type === 'Identifier' && path.node.argument.name === 'deprecate') {\n path.node.argument.name = 'newDeprecate';\n }\n },\n\n CallExpression(path: NodePath<Babel.types.CallExpression>) {\n if (path.node.callee.type === 'Identifier' && path.node.callee.name === 'deprecate') {\n path.node.callee.name = 'newDeprecate';\n }\n if (\n path.node.callee.type === 'Identifier' &&\n path.node.callee.name === 'setDebugFunction' &&\n path.node.arguments[0].type === 'StringLiteral' &&\n path.node.arguments[0].value === 'deprecate'\n ) {\n path.remove();\n }\n },\n ExportSpecifier(path: NodePath<Babel.types.ExportSpecifier>) {\n if (path.node.local.name === 'deprecate') {\n path.node.local = t.identifier('newDeprecate');\n }\n },\n VariableDeclarator(path: NodePath<Babel.types.VariableDeclarator>) {\n if (path.node.id.type === 'Identifier' && path.node.id.name === 'deprecate') {\n path.node.id.name = 'currentDeprecate';\n }\n },\n },\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"]}
|
|
@@ -72,6 +72,7 @@ class CompatAppBuilder {
|
|
|
72
72
|
this.addEmberEnvConfig(config.EmberENV);
|
|
73
73
|
this.outputAppBootError(config.modulePrefix, config.APP, contentForConfig);
|
|
74
74
|
this.addBabelCompat();
|
|
75
|
+
this.addVersionMarker();
|
|
75
76
|
}
|
|
76
77
|
get portableHints() {
|
|
77
78
|
return this.options.pluginHints.map(hint => {
|
|
@@ -111,6 +112,11 @@ class CompatAppBuilder {
|
|
|
111
112
|
module.exports = new Portable().hydrate(${JSON.stringify(portableConfig.value, null, 2)});
|
|
112
113
|
`, 'utf8');
|
|
113
114
|
}
|
|
115
|
+
addVersionMarker() {
|
|
116
|
+
(0, fs_extra_1.writeJSONSync)((0, path_1.join)((0, core_1.locateEmbroiderWorkingDir)(this.compatApp.root), 'version.json'), {
|
|
117
|
+
'@embroider/core': (0, fs_extra_1.readJSONSync)(require.resolve('@embroider/core/package.json')).version,
|
|
118
|
+
}, { spaces: 2 });
|
|
119
|
+
}
|
|
114
120
|
addResolverConfig(config) {
|
|
115
121
|
(0, fs_extra_1.outputJSONSync)((0, path_1.join)((0, core_1.locateEmbroiderWorkingDir)(this.compatApp.root), 'resolver.json'), config, { spaces: 2 });
|
|
116
122
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compat-app-builder.js","sourceRoot":"","sources":["compat-app-builder.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AddonPackage } from '@embroider/core';\nimport { locateEmbroiderWorkingDir } from '@embroider/core';\nimport type { CompatResolverOptions } from './resolver-transform';\nimport type { PackageRules } from './dependency-rules';\nimport { activePackageRules } from './dependency-rules';\nimport { outputJSONSync, writeFileSync } from 'fs-extra';\nimport type { PortableHint } from '@embroider/core/src/portable';\nimport { maybeNodeModuleVersion, Portable } from '@embroider/core/src/portable';\nimport { Memoize } from 'typescript-memoize';\nimport { join, dirname } from 'path';\nimport resolve from 'resolve';\nimport type ContentForConfig from './content-for-config';\nimport type { V1Config } from './v1-config';\nimport type { Package } from '@embroider/core';\nimport { readdirSync } from 'fs-extra';\n\nimport type CompatApp from './compat-app';\nimport type { CompatBabelState } from './babel';\nimport { MacrosConfig } from '@embroider/macros/src/node';\nimport { buildResolverOptions } from '@embroider/core/src/module-resolver-options';\nimport type { CompatOptionsType } from './options';\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 constructor(\n private origAppPackage: Package,\n private appPackageWithMovedDeps: Package,\n private options: CompatOptionsType,\n private compatApp: CompatApp,\n private configTree: V1Config,\n private contentForTree: ContentForConfig,\n private synthVendor: Package,\n private synthStyles: Package\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 @Memoize()\n private get resolverConfig(): CompatResolverOptions {\n return buildResolverOptions({\n appPackage: this.appPackageWithMovedDeps,\n modulePrefix: this.modulePrefix(),\n podModulePrefix: this.podModulePrefix(),\n splitAtRoutes: this.options.splitAtRoutes,\n staticAppPaths: this.options.staticAppPaths,\n extraDeps: new Map([[this.appPackageWithMovedDeps.root, [this.synthVendor, this.synthStyles] as AddonPackage[]]]),\n extend: (options: CompatResolverOptions, allActiveAddons) => {\n options.activePackageRules = activePackageRules(this.options.packageRules.concat(defaultAddonPackageRules()), [\n { name: this.origAppPackage.name, version: this.origAppPackage.version, root: this.origAppPackage.root },\n ...allActiveAddons.filter(p => p.meta['auto-upgraded']),\n ]);\n options.options = {\n staticInvokables: this.options.staticInvokables,\n allowUnsafeDynamicComponents: this.options.allowUnsafeDynamicComponents,\n };\n return options;\n },\n });\n }\n\n async build() {\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 let resolverConfig = this.resolverConfig;\n let config = this.configTree.readConfig();\n let contentForConfig = this.contentForTree.readContents();\n\n this.addResolverConfig(resolverConfig);\n this.addContentForConfig(contentForConfig);\n this.addEmberEnvConfig(config.EmberENV);\n this.outputAppBootError(config.modulePrefix, config.APP, contentForConfig);\n this.addBabelCompat();\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 addBabelCompat() {\n let plugins = this.compatApp.extraBabelPlugins();\n let templateTransforms = this.compatApp.htmlbarsPlugins;\n let babelMacros = this.compatApp.macrosConfig.babelPluginConfig();\n let { plugins: templateMacros, setConfig } = MacrosConfig.transforms();\n setConfig(this.compatApp.macrosConfig);\n\n let config: CompatBabelState = {\n plugins,\n templateTransforms,\n babelMacros,\n templateMacros: templateMacros as any,\n };\n\n let portableConfig = new Portable({ hints: this.portableHints }).dehydrate(config);\n if (!portableConfig.isParallelSafe) {\n throw new Error(`non-serializble babel plugins or AST transforms found in your app`);\n }\n\n writeFileSync(\n join(locateEmbroiderWorkingDir(this.compatApp.root), '_babel_compat_.js'),\n `\n const { Portable } = require('@embroider/core/src/portable');\n module.exports = new Portable().hydrate(${JSON.stringify(portableConfig.value, null, 2)});\n `,\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 addContentForConfig(contentForConfig: any) {\n outputJSONSync(join(locateEmbroiderWorkingDir(this.compatApp.root), 'content-for.json'), contentForConfig, {\n spaces: 2,\n });\n\n // In addition to outputting content-for.json, we also want to check if content-for 'config-module' has a custom content.\n // If so, it means some classic addons used to provide this custom content, which is no longer supported.\n // Developers can deactivate this check (and the subsequent warning) with useAddonConfigModule\n if (this.compatApp.options.useAddonConfigModule) {\n let modulePrefix = this.configTree.readConfig().modulePrefix;\n\n // This is the default script provided by https://github.com/ember-cli/ember-cli/blob/master/lib/utilities/ember-app-utils.js#L84\n // When storeConfigInMeta is true, this content is always present in the config-module key of content-for.json\n const defaultConfigModule =\n `var prefix = '${modulePrefix}';\\ntry {\\n var metaName = prefix + '/config/environment';\\n var rawConfig = document.querySelector('meta[name=\\\"' + metaName + '\\\"]').getAttribute('content');\\n var config = JSON.parse(decodeURIComponent(rawConfig));\\n\\n var exports = { 'default': config };\\n\\n Object.defineProperty(exports, '__esModule', { value: true });\\n\\n return exports;\\n}\\ncatch(err) {\\n throw new Error('Could not read config from meta tag with name \\\"' + metaName + '\\\".');\\n}\\n`.replace(\n /\\s/g,\n ''\n );\n\n const configModule = contentForConfig['/index.html']['config-module'];\n const diff = configModule.replace(/\\s/g, '').replace(defaultConfigModule, '');\n\n if (diff.length) {\n throw new Error(`\n Your app uses at least one classic addon that provides content-for 'config-module'. This is no longer supported.\n With Embroider, you have full control over the config module, so classic addons no longer need to modify it under the hood.\n The following code is included via content-for 'config-module':\n\n ${configModule}\n\n 1. If you want to keep the same behavior, add it to the app/environment.js.\n 2. Once app/environment.js has the content you need, remove the present error by setting \"useAddonConfigModule\" to false in the build options.\n `);\n }\n }\n }\n\n private addEmberEnvConfig(emberEnvConfig: any) {\n outputJSONSync(join(locateEmbroiderWorkingDir(this.compatApp.root), 'ember-env.json'), emberEnvConfig, {\n spaces: 2,\n });\n }\n\n // Classic addons providing custom content-for \"app-boot\" is no longer supported.\n // The purpose of this error message is to help developers to move the classic addons code.\n // Developers can deactivate it with useAddonAppBoot build option.\n private outputAppBootError(modulePrefix: string, appConfig: any, contentForConfig: any) {\n if (!this.compatApp.options.useAddonAppBoot) {\n return;\n }\n\n // This is the default script provided by\n // https://github.com/ember-cli/ember-cli/blob/master/lib/utilities/ember-app-utils.js#L103\n const defaultAppBoot = `\n if (!runningTests) {\n require(\"${modulePrefix}/app\")[\"default\"].create(${JSON.stringify(appConfig || {})});\n }\n `.replace(/\\s/g, '');\n\n const appBoot = contentForConfig['/index.html']['app-boot'];\n const diff = appBoot.replace(/\\s/g, '').replace(defaultAppBoot, '');\n\n if (diff.length) {\n throw new Error(`\n Your app uses at least one classic addon that provides content-for 'app-boot'. This is no longer supported.\n With Embroider, you have full control over the app-boot script, so classic addons no longer need to modify it under the hood.\n The following code is used for your app boot:\n\n ${appBoot}\n\n 1. If you want to keep the same behavior, copy and paste it to the app-boot script included in app/index.html.\n 2. Once app/index.html has the content you need, remove the present error by setting \"useAddonAppBoot\" to false in the build options.\n `);\n }\n }\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"]}
|
|
1
|
+
{"version":3,"file":"compat-app-builder.js","sourceRoot":"","sources":["compat-app-builder.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AddonPackage } from '@embroider/core';\nimport { locateEmbroiderWorkingDir } from '@embroider/core';\nimport type { CompatResolverOptions } from './resolver-transform';\nimport type { PackageRules } from './dependency-rules';\nimport { activePackageRules } from './dependency-rules';\nimport { outputJSONSync, readJSONSync, writeFileSync, writeJSONSync } from 'fs-extra';\nimport type { PortableHint } from '@embroider/core/src/portable';\nimport { maybeNodeModuleVersion, Portable } from '@embroider/core/src/portable';\nimport { Memoize } from 'typescript-memoize';\nimport { join, dirname } from 'path';\nimport resolve from 'resolve';\nimport type ContentForConfig from './content-for-config';\nimport type { V1Config } from './v1-config';\nimport type { Package } from '@embroider/core';\nimport { readdirSync } from 'fs-extra';\n\nimport type CompatApp from './compat-app';\nimport type { CompatBabelState } from './babel';\nimport { MacrosConfig } from '@embroider/macros/src/node';\nimport { buildResolverOptions } from '@embroider/core/src/module-resolver-options';\nimport type { CompatOptionsType } from './options';\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 constructor(\n private origAppPackage: Package,\n private appPackageWithMovedDeps: Package,\n private options: CompatOptionsType,\n private compatApp: CompatApp,\n private configTree: V1Config,\n private contentForTree: ContentForConfig,\n private synthVendor: Package,\n private synthStyles: Package\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 @Memoize()\n private get resolverConfig(): CompatResolverOptions {\n return buildResolverOptions({\n appPackage: this.appPackageWithMovedDeps,\n modulePrefix: this.modulePrefix(),\n podModulePrefix: this.podModulePrefix(),\n splitAtRoutes: this.options.splitAtRoutes,\n staticAppPaths: this.options.staticAppPaths,\n extraDeps: new Map([[this.appPackageWithMovedDeps.root, [this.synthVendor, this.synthStyles] as AddonPackage[]]]),\n extend: (options: CompatResolverOptions, allActiveAddons) => {\n options.activePackageRules = activePackageRules(this.options.packageRules.concat(defaultAddonPackageRules()), [\n { name: this.origAppPackage.name, version: this.origAppPackage.version, root: this.origAppPackage.root },\n ...allActiveAddons.filter(p => p.meta['auto-upgraded']),\n ]);\n options.options = {\n staticInvokables: this.options.staticInvokables,\n allowUnsafeDynamicComponents: this.options.allowUnsafeDynamicComponents,\n };\n return options;\n },\n });\n }\n\n async build() {\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 let resolverConfig = this.resolverConfig;\n let config = this.configTree.readConfig();\n let contentForConfig = this.contentForTree.readContents();\n\n this.addResolverConfig(resolverConfig);\n this.addContentForConfig(contentForConfig);\n this.addEmberEnvConfig(config.EmberENV);\n this.outputAppBootError(config.modulePrefix, config.APP, contentForConfig);\n this.addBabelCompat();\n this.addVersionMarker();\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 addBabelCompat() {\n let plugins = this.compatApp.extraBabelPlugins();\n let templateTransforms = this.compatApp.htmlbarsPlugins;\n let babelMacros = this.compatApp.macrosConfig.babelPluginConfig();\n let { plugins: templateMacros, setConfig } = MacrosConfig.transforms();\n setConfig(this.compatApp.macrosConfig);\n\n let config: CompatBabelState = {\n plugins,\n templateTransforms,\n babelMacros,\n templateMacros: templateMacros as any,\n };\n\n let portableConfig = new Portable({ hints: this.portableHints }).dehydrate(config);\n if (!portableConfig.isParallelSafe) {\n throw new Error(`non-serializble babel plugins or AST transforms found in your app`);\n }\n\n writeFileSync(\n join(locateEmbroiderWorkingDir(this.compatApp.root), '_babel_compat_.js'),\n `\n const { Portable } = require('@embroider/core/src/portable');\n module.exports = new Portable().hydrate(${JSON.stringify(portableConfig.value, null, 2)});\n `,\n 'utf8'\n );\n }\n\n private addVersionMarker() {\n writeJSONSync(\n join(locateEmbroiderWorkingDir(this.compatApp.root), 'version.json'),\n {\n '@embroider/core': readJSONSync(require.resolve('@embroider/core/package.json')).version,\n },\n { spaces: 2 }\n );\n }\n\n private addResolverConfig(config: CompatResolverOptions) {\n outputJSONSync(join(locateEmbroiderWorkingDir(this.compatApp.root), 'resolver.json'), config, { spaces: 2 });\n }\n\n private addContentForConfig(contentForConfig: any) {\n outputJSONSync(join(locateEmbroiderWorkingDir(this.compatApp.root), 'content-for.json'), contentForConfig, {\n spaces: 2,\n });\n\n // In addition to outputting content-for.json, we also want to check if content-for 'config-module' has a custom content.\n // If so, it means some classic addons used to provide this custom content, which is no longer supported.\n // Developers can deactivate this check (and the subsequent warning) with useAddonConfigModule\n if (this.compatApp.options.useAddonConfigModule) {\n let modulePrefix = this.configTree.readConfig().modulePrefix;\n\n // This is the default script provided by https://github.com/ember-cli/ember-cli/blob/master/lib/utilities/ember-app-utils.js#L84\n // When storeConfigInMeta is true, this content is always present in the config-module key of content-for.json\n const defaultConfigModule =\n `var prefix = '${modulePrefix}';\\ntry {\\n var metaName = prefix + '/config/environment';\\n var rawConfig = document.querySelector('meta[name=\\\"' + metaName + '\\\"]').getAttribute('content');\\n var config = JSON.parse(decodeURIComponent(rawConfig));\\n\\n var exports = { 'default': config };\\n\\n Object.defineProperty(exports, '__esModule', { value: true });\\n\\n return exports;\\n}\\ncatch(err) {\\n throw new Error('Could not read config from meta tag with name \\\"' + metaName + '\\\".');\\n}\\n`.replace(\n /\\s/g,\n ''\n );\n\n const configModule = contentForConfig['/index.html']['config-module'];\n const diff = configModule.replace(/\\s/g, '').replace(defaultConfigModule, '');\n\n if (diff.length) {\n throw new Error(`\n Your app uses at least one classic addon that provides content-for 'config-module'. This is no longer supported.\n With Embroider, you have full control over the config module, so classic addons no longer need to modify it under the hood.\n The following code is included via content-for 'config-module':\n\n ${configModule}\n\n 1. If you want to keep the same behavior, add it to the app/environment.js.\n 2. Once app/environment.js has the content you need, remove the present error by setting \"useAddonConfigModule\" to false in the build options.\n `);\n }\n }\n }\n\n private addEmberEnvConfig(emberEnvConfig: any) {\n outputJSONSync(join(locateEmbroiderWorkingDir(this.compatApp.root), 'ember-env.json'), emberEnvConfig, {\n spaces: 2,\n });\n }\n\n // Classic addons providing custom content-for \"app-boot\" is no longer supported.\n // The purpose of this error message is to help developers to move the classic addons code.\n // Developers can deactivate it with useAddonAppBoot build option.\n private outputAppBootError(modulePrefix: string, appConfig: any, contentForConfig: any) {\n if (!this.compatApp.options.useAddonAppBoot) {\n return;\n }\n\n // This is the default script provided by\n // https://github.com/ember-cli/ember-cli/blob/master/lib/utilities/ember-app-utils.js#L103\n const defaultAppBoot = `\n if (!runningTests) {\n require(\"${modulePrefix}/app\")[\"default\"].create(${JSON.stringify(appConfig || {})});\n }\n `.replace(/\\s/g, '');\n\n const appBoot = contentForConfig['/index.html']['app-boot'];\n const diff = appBoot.replace(/\\s/g, '').replace(defaultAppBoot, '');\n\n if (diff.length) {\n throw new Error(`\n Your app uses at least one classic addon that provides content-for 'app-boot'. This is no longer supported.\n With Embroider, you have full control over the app-boot script, so classic addons no longer need to modify it under the hood.\n The following code is used for your app boot:\n\n ${appBoot}\n\n 1. If you want to keep the same behavior, copy and paste it to the app-boot script included in app/index.html.\n 2. Once app/index.html has the content you need, remove the present error by setting \"useAddonAppBoot\" to false in the build options.\n `);\n }\n }\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"]}
|
package/src/options.js
CHANGED
|
@@ -4,8 +4,6 @@ exports.recommendedOptions = void 0;
|
|
|
4
4
|
exports.optionsWithDefaults = optionsWithDefaults;
|
|
5
5
|
const core_1 = require("@embroider/core");
|
|
6
6
|
const defaults = Object.assign((0, core_1.optionsWithDefaults)(), {
|
|
7
|
-
staticAddonTrees: false,
|
|
8
|
-
staticAddonTestSupportTrees: false,
|
|
9
7
|
compatAdapters: new Map(),
|
|
10
8
|
extraPublicTrees: [],
|
|
11
9
|
workspaceDir: null,
|
|
@@ -16,14 +14,6 @@ const defaults = Object.assign((0, core_1.optionsWithDefaults)(), {
|
|
|
16
14
|
useAddonConfigModule: true,
|
|
17
15
|
});
|
|
18
16
|
function optionsWithDefaults(options) {
|
|
19
|
-
if ((options === null || options === void 0 ? void 0 : options.staticEmberSource) !== undefined) {
|
|
20
|
-
if (options.staticEmberSource === false) {
|
|
21
|
-
throw new Error(`You have set 'staticEmberSource' to 'false' in your Embroider options. This option has been removed is always considered to have the value 'true'. Please remove this setting to continue.`);
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
console.log(`You have set 'staticEmberSource' in your Embroider options. This can safely be removed now and it defaults to true.`);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
17
|
if ((options === null || options === void 0 ? void 0 : options.staticEmberSource) !== undefined) {
|
|
28
18
|
if (options.staticEmberSource === false) {
|
|
29
19
|
throw new Error(`You have set 'staticEmberSource' to 'false' in your Embroider options. This option has been removed is always considered to have the value 'true'. Please remove this setting to continue.`);
|
|
@@ -60,8 +50,6 @@ function optionsWithDefaults(options) {
|
|
|
60
50
|
exports.recommendedOptions = Object.freeze({
|
|
61
51
|
safe: Object.freeze({}),
|
|
62
52
|
optimized: Object.freeze({
|
|
63
|
-
staticAddonTrees: true,
|
|
64
|
-
staticAddonTestSupportTrees: true,
|
|
65
53
|
allowUnsafeDynamicComponents: false,
|
|
66
54
|
staticInvokables: true,
|
|
67
55
|
}),
|
package/src/options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["options.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["options.ts"],"names":[],"mappings":";;;AA+EA,kDA4CC;AAzHD,0CAA0E;AAgE1E,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAA,0BAAgB,GAAE,EAAE;IACjD,cAAc,EAAE,IAAI,GAAG,EAAE;IACzB,gBAAgB,EAAE,EAAE;IACpB,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,EAAE;IAChB,4BAA4B,EAAE,KAAK;IACnC,wBAAwB,EAAE,EAAE;IAC5B,eAAe,EAAE,IAAI;IACrB,oBAAoB,EAAE,IAAI;CAC3B,CAAC,CAAC;AAIH,SAAgB,mBAAmB,CAAC,OAAiB;IACnD,IAAI,CAAC,OAAe,aAAf,OAAO,uBAAP,OAAO,CAAU,iBAAiB,MAAK,SAAS,EAAE,CAAC;QACtD,IAAK,OAAe,CAAC,iBAAiB,KAAK,KAAK,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CACb,4LAA4L,CAC7L,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,qHAAqH,CACtH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,aAAf,OAAO,uBAAP,OAAO,CAAU,gBAAgB,MAAK,SAAS,EAAE,CAAC;QACrD,IAAK,OAAe,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CACb,2LAA2L,CAC5L,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,oHAAoH,CACrH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,aAAf,OAAO,uBAAP,OAAO,CAAU,2BAA2B,MAAK,SAAS,EAAE,CAAC;QAChE,IAAK,OAAe,CAAC,2BAA2B,KAAK,KAAK,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CACb,sMAAsM,CACvM,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,+HAA+H,CAChI,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,aAAf,OAAO,uBAAP,OAAO,CAAU,SAAS,MAAK,SAAS,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,iNAAiN,CAClN,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;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,4BAA4B,EAAE,KAAK;QACnC,gBAAgB,EAAE,IAAI;KACvB,CAAC;CACH,CAAC,CAAC","sourcesContent":["import type { V1AddonConstructor } from './v1-addon';\nimport type { Options as CoreOptions } from '@embroider/core';\nimport { optionsWithDefaults as coreWithDefaults } from '@embroider/core';\nimport type { 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 // 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 // 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 // Allows you to customize the list of content types addons use to provide HTML\n // to {{content-for}}. By default, the following content types are expected:\n // 'head', 'test-head', 'head-footer', 'test-head-footer', 'body', 'test-body',\n // 'body-footer', 'test-body-footer'. You need to use this config only to extend\n // this list.\n availableContentForTypes?: string[];\n\n // Allows you to cancel the warning that at least one classic addon provides\n // content-for 'app-boot'. This warning brings awareness for developers\n // switching to Embroider, but is no longer necessary once content-for\n // 'app-boot' code has been properly moved to the app-side.\n useAddonAppBoot?: boolean;\n\n // content-for 'config-module'. This warning brings awareness for developers\n // switching to Embroider, but is no longer necessary once content-for\n // 'config-module' code has been properly moved to the app-side.\n useAddonConfigModule?: boolean;\n}\n\nconst defaults = Object.assign(coreWithDefaults(), {\n compatAdapters: new Map(),\n extraPublicTrees: [],\n workspaceDir: null,\n packageRules: [],\n allowUnsafeDynamicComponents: false,\n availableContentForTypes: [],\n useAddonAppBoot: true,\n useAddonConfigModule: true,\n});\n\nexport type CompatOptionsType = Required<Options>;\n\nexport function optionsWithDefaults(options?: Options): CompatOptionsType {\n if ((options as any)?.staticEmberSource !== undefined) {\n if ((options as any).staticEmberSource === false) {\n throw new Error(\n `You have set 'staticEmberSource' to 'false' in your Embroider options. This option has been removed is always considered to have the value 'true'. Please remove this setting to continue.`\n );\n } else {\n console.log(\n `You have set 'staticEmberSource' in your Embroider options. This can safely be removed now and it defaults to true.`\n );\n }\n }\n\n if ((options as any)?.staticAddonTrees !== undefined) {\n if ((options as any).staticAddonTrees === false) {\n throw new Error(\n `You have set 'staticAddonTrees' to 'false' in your Embroider options. This option has been removed is always considered to have the value 'true'. Please remove this setting to continue.`\n );\n } else {\n console.log(\n `You have set 'staticAddonTrees' in your Embroider options. This can safely be removed now and it defaults to true.`\n );\n }\n }\n\n if ((options as any)?.staticAddonTestSupportTrees !== undefined) {\n if ((options as any).staticAddonTestSupportTrees === false) {\n throw new Error(\n `You have set 'staticAddonTestSupportTrees' to 'false' in your Embroider options. This option has been removed is always considered to have the value 'true'. Please remove this setting to continue.`\n );\n } else {\n console.log(\n `You have set 'staticAddonTestSupportTrees' in your Embroider options. This can safely be removed now and it defaults to true.`\n );\n }\n }\n\n if ((options as any)?.skipBabel !== undefined) {\n throw new Error(\n `You have set 'skipBabel' on your Embroider options. This setting has been removed and you can now configure your babel ignores directly in the babel config in your repo https://babeljs.io/docs/options#ignore`\n );\n }\n\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 allowUnsafeDynamicComponents: false,\n staticInvokables: true,\n }),\n});\n"]}
|
|
@@ -15,12 +15,14 @@ export interface CompatResolverOptions extends CoreResolverOptions {
|
|
|
15
15
|
options: UserConfig;
|
|
16
16
|
}
|
|
17
17
|
export interface ExternalNameHint {
|
|
18
|
-
(path: string): string | null;
|
|
18
|
+
(path: string, kind: 'component' | 'helper' | 'modifier' | 'ambiguous-component-or-helper'): string | null;
|
|
19
19
|
}
|
|
20
|
+
export type ExternalResolver = (module: string) => string;
|
|
20
21
|
export interface Options {
|
|
21
22
|
appRoot: string;
|
|
22
23
|
emberVersion: string;
|
|
23
24
|
externalNameHint?: ExternalNameHint;
|
|
25
|
+
externalResolve?: (module: string) => string;
|
|
24
26
|
}
|
|
25
|
-
export default function makeResolverTransform({ appRoot, emberVersion, externalNameHint }: Options): ASTPluginBuilder<Env>;
|
|
27
|
+
export default function makeResolverTransform({ appRoot, emberVersion, externalNameHint, externalResolve }: Options): ASTPluginBuilder<Env>;
|
|
26
28
|
export {};
|
|
@@ -85,12 +85,17 @@ function builtInKeywords(emberVersion) {
|
|
|
85
85
|
}
|
|
86
86
|
return builtInKeywords;
|
|
87
87
|
}
|
|
88
|
+
function supportsThisFallback(emberVersion) {
|
|
89
|
+
return (0, semver_1.satisfies)(emberVersion, '<= 4.0.0-alpha.0', { includePrerelease: true });
|
|
90
|
+
}
|
|
88
91
|
class TemplateResolver {
|
|
89
|
-
constructor(env, config, builtInsForEmberVersion, externalNameHint) {
|
|
92
|
+
constructor(env, config, builtInsForEmberVersion, supportsThisFallback, externalNameHint, externalResolve) {
|
|
90
93
|
this.env = env;
|
|
91
94
|
this.config = config;
|
|
92
95
|
this.builtInsForEmberVersion = builtInsForEmberVersion;
|
|
96
|
+
this.supportsThisFallback = supportsThisFallback;
|
|
93
97
|
this.externalNameHint = externalNameHint;
|
|
98
|
+
this.externalResolve = externalResolve;
|
|
94
99
|
this.name = 'embroider-build-time-resolver';
|
|
95
100
|
this.scopeStack = new ScopeStack();
|
|
96
101
|
this.visitor = {
|
|
@@ -314,7 +319,11 @@ class TemplateResolver {
|
|
|
314
319
|
case 'component':
|
|
315
320
|
case 'modifier':
|
|
316
321
|
case 'helper': {
|
|
317
|
-
let
|
|
322
|
+
let specifier = resolution.specifier;
|
|
323
|
+
if (this.externalResolve) {
|
|
324
|
+
specifier = this.externalResolve(specifier);
|
|
325
|
+
}
|
|
326
|
+
let name = this.env.meta.jsutils.bindImport(specifier, resolution.importedName, parentPath, {
|
|
318
327
|
nameHint: resolution.nameHint,
|
|
319
328
|
});
|
|
320
329
|
setter(parentPath.node, this.env.syntax.builders.path(name));
|
|
@@ -533,7 +542,7 @@ class TemplateResolver {
|
|
|
533
542
|
yieldsComponents: componentRules ? componentRules.yieldsSafeComponents : [],
|
|
534
543
|
yieldsArguments: componentRules ? componentRules.yieldsArguments : [],
|
|
535
544
|
argumentsAreComponents: componentRules ? componentRules.argumentsAreComponents : [],
|
|
536
|
-
nameHint: this.nameHint(nameHint),
|
|
545
|
+
nameHint: this.nameHint(nameHint, 'component'),
|
|
537
546
|
};
|
|
538
547
|
}
|
|
539
548
|
targetComponentHelper(component, loc, impliedBecause) {
|
|
@@ -594,7 +603,7 @@ class TemplateResolver {
|
|
|
594
603
|
type: 'helper',
|
|
595
604
|
specifier: `@embroider/virtual/helpers/${path}`,
|
|
596
605
|
importedName: 'default',
|
|
597
|
-
nameHint: this.nameHint(path),
|
|
606
|
+
nameHint: this.nameHint(path, 'helper'),
|
|
598
607
|
};
|
|
599
608
|
}
|
|
600
609
|
targetHelperOrComponent(path, loc, hasArgs) {
|
|
@@ -688,7 +697,7 @@ class TemplateResolver {
|
|
|
688
697
|
return null;
|
|
689
698
|
}
|
|
690
699
|
}
|
|
691
|
-
if (!hasArgs && !path.includes('/') && !path.includes('@')) {
|
|
700
|
+
if (!hasArgs && !path.includes('/') && !path.includes('@') && this.supportsThisFallback) {
|
|
692
701
|
// this is the case that could also be property-this-fallback. We're going
|
|
693
702
|
// to force people to disambiguate, because letting a potential component
|
|
694
703
|
// or helper invocation lurk inside every bit of data you render is not
|
|
@@ -709,7 +718,7 @@ class TemplateResolver {
|
|
|
709
718
|
yieldsComponents: componentRules ? componentRules.yieldsSafeComponents : [],
|
|
710
719
|
yieldsArguments: componentRules ? componentRules.yieldsArguments : [],
|
|
711
720
|
argumentsAreComponents: componentRules ? componentRules.argumentsAreComponents : [],
|
|
712
|
-
nameHint: this.nameHint(path),
|
|
721
|
+
nameHint: this.nameHint(path, 'ambiguous-component-or-helper'),
|
|
713
722
|
};
|
|
714
723
|
}
|
|
715
724
|
targetElementModifier(path) {
|
|
@@ -733,7 +742,7 @@ class TemplateResolver {
|
|
|
733
742
|
type: 'modifier',
|
|
734
743
|
specifier: `@embroider/virtual/modifiers/${path}`,
|
|
735
744
|
importedName: 'default',
|
|
736
|
-
nameHint: this.nameHint(path),
|
|
745
|
+
nameHint: this.nameHint(path, 'modifier'),
|
|
737
746
|
};
|
|
738
747
|
}
|
|
739
748
|
targetDynamicModifier(modifier, loc) {
|
|
@@ -764,12 +773,12 @@ class TemplateResolver {
|
|
|
764
773
|
// `helper` helper.
|
|
765
774
|
return null;
|
|
766
775
|
}
|
|
767
|
-
nameHint(path) {
|
|
776
|
+
nameHint(path, kind) {
|
|
768
777
|
var _a, _b;
|
|
769
778
|
let parts = path.split('@');
|
|
770
779
|
// the extra underscore here guarantees that we will never collide with an
|
|
771
780
|
// HTML element.
|
|
772
|
-
return (_b = (_a = this.externalNameHint) === null || _a === void 0 ? void 0 : _a.call(this, path)) !== null && _b !== void 0 ? _b : parts[parts.length - 1] + '_';
|
|
781
|
+
return (_b = (_a = this.externalNameHint) === null || _a === void 0 ? void 0 : _a.call(this, path, kind)) !== null && _b !== void 0 ? _b : parts[parts.length - 1] + '_';
|
|
773
782
|
}
|
|
774
783
|
handleDynamicModifier(param) {
|
|
775
784
|
if (param.type === 'StringLiteral') {
|
|
@@ -817,7 +826,7 @@ __decorate([
|
|
|
817
826
|
(0, typescript_memoize_1.Memoize)()
|
|
818
827
|
], TemplateResolver.prototype, "rules", null);
|
|
819
828
|
// This is the AST transform that resolves components, helpers and modifiers at build time
|
|
820
|
-
function makeResolverTransform({ appRoot, emberVersion, externalNameHint }) {
|
|
829
|
+
function makeResolverTransform({ appRoot, emberVersion, externalNameHint, externalResolve }) {
|
|
821
830
|
let loader = new core_1.ResolverLoader(appRoot);
|
|
822
831
|
let config = loader.resolver.options;
|
|
823
832
|
const resolverTransform = env => {
|
|
@@ -827,7 +836,7 @@ function makeResolverTransform({ appRoot, emberVersion, externalNameHint }) {
|
|
|
827
836
|
visitor: {},
|
|
828
837
|
};
|
|
829
838
|
}
|
|
830
|
-
return new TemplateResolver(env, config, builtInKeywords(emberVersion), externalNameHint);
|
|
839
|
+
return new TemplateResolver(env, config, builtInKeywords(emberVersion), supportsThisFallback(emberVersion), externalNameHint, externalResolve);
|
|
831
840
|
};
|
|
832
841
|
resolverTransform.parallelBabel = {
|
|
833
842
|
requireFile: __filename,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver-transform.js","sourceRoot":"","sources":["resolver-transform.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ASTv1, ASTPlugin, ASTPluginBuilder, ASTPluginEnvironment, WalkerPath } from '@glimmer/syntax';\nimport type {\n PreprocessedComponentRule,\n ActivePackageRules,\n ComponentRules,\n PackageRules,\n ModuleRules,\n} from './dependency-rules';\nimport { preprocessComponentRule, appTreeRulesDir } from './dependency-rules';\nimport { Memoize } from 'typescript-memoize';\nimport type { WithJSUtils } from 'babel-plugin-ember-template-compilation';\nimport assertNever from 'assert-never';\nimport { join, sep } from 'path';\nimport { dasherize, snippetToDasherizedName } from './dasherize-component-name';\nimport type { ResolverOptions as CoreResolverOptions } from '@embroider/core';\nimport { Resolver, ResolverLoader, cleanUrl } from '@embroider/core';\nimport type CompatOptions from './options';\nimport type { AuditMessage, Loc } from './audit';\nimport { camelCase, mergeWith } from 'lodash';\nimport { satisfies } from 'semver';\n\ntype Env = WithJSUtils<ASTPluginEnvironment> & {\n filename: string;\n contents: string;\n strictMode?: boolean;\n locals?: string[];\n};\n\n// this is a subset of the full Options. We care about serializability, and we\n// only needs parts that are easily serializable, which is why we don't keep the\n// whole thing.\ntype UserConfig = Pick<Required<CompatOptions>, 'staticInvokables' | 'allowUnsafeDynamicComponents'>;\n\nexport interface CompatResolverOptions extends CoreResolverOptions {\n activePackageRules: ActivePackageRules[];\n options: UserConfig;\n}\n\nexport interface ExternalNameHint {\n (path: string): string | null;\n}\n\nexport interface Options {\n appRoot: string;\n emberVersion: string;\n externalNameHint?: ExternalNameHint;\n}\n\ntype BuiltIn = {\n importableHelper?: [string, string];\n importableComponent?: [string, string];\n importableModifier?: [string, string];\n};\n\nfunction builtInKeywords(emberVersion: string): Record<string, BuiltIn | undefined> {\n const builtInKeywords: Record<string, BuiltIn | undefined> = {\n '-get-dynamic-var': {},\n '-in-element': {},\n '-with-dynamic-vars': {},\n action: {},\n array: {\n importableHelper: ['array', '@ember/helper'],\n },\n component: {},\n concat: {\n importableHelper: ['concat', '@ember/helper'],\n },\n debugger: {},\n 'each-in': {},\n each: {},\n fn: {\n importableHelper: ['fn', '@ember/helper'],\n },\n get: {\n importableHelper: ['get', '@ember/helper'],\n },\n 'has-block-params': {},\n 'has-block': {},\n hasBlock: {},\n hasBlockParams: {},\n hash: {\n importableHelper: ['hash', '@ember/helper'],\n },\n helper: {},\n if: {},\n 'in-element': {},\n input: {\n importableComponent: ['Input', '@ember/component'],\n },\n let: {},\n 'link-to': {\n importableComponent: ['LinkTo', '@ember/routing'],\n },\n loc: {},\n log: {},\n modifier: {},\n mount: {},\n mut: {},\n on: {\n importableModifier: ['on', '@ember/modifier'],\n },\n outlet: {},\n partial: {},\n 'query-params': {},\n readonly: {},\n textarea: {\n importableComponent: ['Textarea', '@ember/component'],\n },\n unbound: {},\n 'unique-id': {},\n unless: {},\n with: {},\n yield: {},\n };\n if (satisfies(emberVersion, '>=5.2')) {\n builtInKeywords['unique-id'] = {\n importableHelper: ['uniqueId', '@ember/helper'],\n };\n }\n return builtInKeywords;\n}\n\ninterface ComponentResolution {\n type: 'component';\n specifier: string;\n importedName: string;\n yieldsComponents: Required<ComponentRules>['yieldsSafeComponents'];\n yieldsArguments: Required<ComponentRules>['yieldsArguments'];\n argumentsAreComponents: string[];\n nameHint: string;\n}\n\ntype HelperResolution = {\n type: 'helper';\n nameHint: string;\n specifier: string;\n importedName: string;\n};\n\ntype ModifierResolution = {\n type: 'modifier';\n specifier: string;\n importedName: string;\n nameHint: string;\n};\n\ntype ResolutionResult = ComponentResolution | HelperResolution | ModifierResolution;\n\ninterface ResolutionFail {\n type: 'error';\n message: string;\n detail: string;\n loc: Loc;\n}\n\ntype Resolution = ResolutionResult | ResolutionFail;\n\ntype ComponentLocator =\n | {\n type: 'literal';\n path: string;\n }\n | {\n type: 'path';\n path: string;\n }\n | {\n type: 'other';\n };\n\nclass TemplateResolver implements ASTPlugin {\n readonly name = 'embroider-build-time-resolver';\n\n private auditHandler: undefined | ((msg: AuditMessage) => void);\n private scopeStack = new ScopeStack();\n\n private moduleResolver: Resolver;\n\n constructor(\n private env: Env,\n private config: CompatResolverOptions,\n private builtInsForEmberVersion: ReturnType<typeof builtInKeywords>,\n private externalNameHint?: ExternalNameHint\n ) {\n this.moduleResolver = new Resolver(config);\n if ((globalThis as any).embroider_audit) {\n this.auditHandler = (globalThis as any).embroider_audit;\n }\n }\n\n private emit<Target extends WalkerPath<ASTv1.Node>>(\n parentPath: Target,\n resolution: Resolution | null,\n setter: (target: Target['node'], newIdentifier: ASTv1.PathExpression) => void\n ) {\n switch (resolution?.type) {\n case 'error':\n this.reportError(resolution);\n return;\n case 'component':\n case 'modifier':\n case 'helper': {\n let name = this.env.meta.jsutils.bindImport(resolution.specifier, resolution.importedName, parentPath, {\n nameHint: resolution.nameHint,\n });\n setter(parentPath.node, this.env.syntax.builders.path(name));\n return;\n }\n case undefined:\n return;\n default:\n assertNever(resolution);\n }\n }\n\n private reportError(dep: ResolutionFail) {\n if (!this.auditHandler && !this.config.options.allowUnsafeDynamicComponents) {\n let e: any = new Error(`${dep.message}: ${dep.detail} in ${this.humanReadableFile(this.env.filename)}`);\n e.isTemplateResolverError = true;\n e.loc = dep.loc;\n e.moduleName = this.env.filename;\n throw e;\n }\n if (this.auditHandler) {\n this.auditHandler({\n message: dep.message,\n filename: this.env.filename,\n detail: dep.detail,\n loc: dep.loc,\n source: this.env.contents,\n });\n }\n }\n\n private humanReadableFile(file: string) {\n let { appRoot } = this.config;\n if (!appRoot.endsWith(sep)) {\n appRoot += sep;\n }\n if (file.startsWith(appRoot)) {\n return file.slice(appRoot.length);\n }\n return file;\n }\n\n private handleComponentHelper(\n param: ASTv1.Node,\n impliedBecause?: { componentName: string; argumentName: string }\n ): ComponentResolution | ResolutionFail | null {\n let locator: ComponentLocator;\n switch (param.type) {\n case 'StringLiteral':\n locator = { type: 'literal', path: param.value };\n break;\n case 'PathExpression':\n locator = { type: 'path', path: param.original };\n break;\n case 'MustacheStatement':\n if (param.hash.pairs.length === 0 && param.params.length === 0) {\n return this.handleComponentHelper(param.path, impliedBecause);\n } else if (param.path.type === 'PathExpression' && param.path.original === 'component') {\n // safe because we will handle this inner `{{component ...}}` mustache on its own\n return null;\n } else {\n locator = { type: 'other' };\n }\n break;\n case 'TextNode':\n locator = { type: 'literal', path: param.chars };\n break;\n case 'SubExpression':\n if (param.path.type === 'PathExpression' && param.path.original === 'component') {\n // safe because we will handle this inner `(component ...)` subexpression on its own\n return null;\n }\n if (param.path.type === 'PathExpression' && param.path.original === 'ensure-safe-component') {\n // safe because we trust ensure-safe-component\n return null;\n }\n locator = { type: 'other' };\n break;\n default:\n locator = { type: 'other' };\n }\n\n if (locator.type === 'path' && this.scopeStack.safeComponentInScope(locator.path)) {\n return null;\n }\n\n return this.targetComponentHelper(locator, param.loc, impliedBecause);\n }\n\n private handleDynamicComponentArguments(\n componentName: string,\n argumentsAreComponents: string[],\n attributes: WalkerPath<ASTv1.AttrNode | ASTv1.HashPair>[]\n ) {\n for (let name of argumentsAreComponents) {\n let attr = attributes.find(attr => {\n if (attr.node.type === 'AttrNode') {\n return attr.node.name === '@' + name;\n } else {\n return attr.node.key === name;\n }\n });\n if (attr) {\n let resolution = this.handleComponentHelper(attr.node.value, {\n componentName,\n argumentName: name,\n });\n this.emit(attr, resolution, (node, newId) => {\n if (node.type === 'AttrNode') {\n node.value = this.env.syntax.builders.mustache(newId);\n } else {\n node.value = newId;\n }\n });\n }\n }\n }\n\n private get staticInvokablesEnabled(): boolean {\n if (!this.config?.options) {\n return true;\n }\n return this.config.options.staticInvokables || Boolean(this.auditHandler);\n }\n\n private isIgnoredComponent(dasherizedName: string) {\n return this.rules.components.get(dasherizedName)?.safeToIgnore;\n }\n\n @Memoize()\n private get rules() {\n // rules that are keyed by the filename they're talking about\n let files: Map<string, PreprocessedComponentRule> = new Map();\n\n // rules that are keyed by our dasherized interpretation of the component's name\n let components: Map<string, PreprocessedComponentRule> = new Map();\n\n // we're not responsible for filtering out rules for inactive packages here,\n // that is done before getting to us. So we should assume these are all in\n // force.\n for (let rule of this.config?.activePackageRules ?? []) {\n if (rule.components) {\n for (let [snippet, rules] of Object.entries(rule.components)) {\n let processedRules = preprocessComponentRule(rules);\n let dasherizedName = this.standardDasherize(snippet, rule);\n components.set(dasherizedName, processedRules);\n if (rules.layout) {\n for (let root of rule.roots) {\n if (rules.layout.addonPath) {\n files.set(join(root, rules.layout.addonPath), processedRules);\n }\n if (rules.layout.appPath) {\n files.set(join(root, rules.layout.appPath), processedRules);\n }\n }\n }\n }\n }\n if (rule.appTemplates) {\n for (let [path, templateRules] of Object.entries(rule.appTemplates)) {\n let processedRules = preprocessComponentRule(templateRules);\n for (let root of rule.roots) {\n files.set(join(appTreeRulesDir(root, this.moduleResolver), path), processedRules);\n }\n }\n }\n if (rule.addonTemplates) {\n for (let [path, templateRules] of Object.entries(rule.addonTemplates)) {\n let processedRules = preprocessComponentRule(templateRules);\n for (let root of rule.roots) {\n files.set(join(root, path), processedRules);\n }\n }\n }\n }\n return { files, components };\n }\n\n private findRules(absPath: string): PreprocessedComponentRule | undefined {\n // when babel is invoked by vite our filenames can have query params still\n // hanging off them. That would break rule matching.\n absPath = cleanUrl(absPath);\n\n let fileRules = this.rules.files.get(absPath);\n let componentRules: PreprocessedComponentRule | undefined;\n\n let componentName = this.moduleResolver.reverseComponentLookup(absPath);\n if (componentName) {\n componentRules = this.rules.components.get(componentName);\n }\n\n if (fileRules && componentRules) {\n return mergeWith(fileRules, componentRules, appendArrays);\n }\n\n return fileRules ?? componentRules;\n }\n\n private standardDasherize(snippet: string, rule: PackageRules | ModuleRules): string {\n let name = snippetToDasherizedName(snippet);\n if (name == null) {\n throw new Error(`unable to parse component snippet \"${snippet}\" from rule ${JSON.stringify(rule, null, 2)}`);\n }\n return name;\n }\n\n private targetComponent(name: string, nameHint: string): ComponentResolution | null {\n if (!this.staticInvokablesEnabled) {\n return null;\n }\n\n const builtIn = this.builtInsForEmberVersion[name];\n\n if (builtIn?.importableComponent) {\n let [importedName, specifier] = builtIn.importableComponent;\n return {\n type: 'component',\n specifier,\n importedName,\n yieldsComponents: [],\n yieldsArguments: [],\n argumentsAreComponents: [],\n nameHint: importedName,\n };\n }\n\n if (builtIn) {\n return null;\n }\n if (this.isIgnoredComponent(name)) {\n return null;\n }\n\n let componentRules = this.rules.components.get(name);\n return {\n type: 'component',\n specifier: `@embroider/virtual/components/${name}`,\n importedName: 'default',\n yieldsComponents: componentRules ? componentRules.yieldsSafeComponents : [],\n yieldsArguments: componentRules ? componentRules.yieldsArguments : [],\n argumentsAreComponents: componentRules ? componentRules.argumentsAreComponents : [],\n nameHint: this.nameHint(nameHint),\n };\n }\n\n private targetComponentHelper(\n component: ComponentLocator,\n loc: Loc,\n impliedBecause?: { componentName: string; argumentName: string }\n ): ComponentResolution | ResolutionFail | null {\n if (!this.staticInvokablesEnabled) {\n return null;\n }\n\n let message;\n if (impliedBecause) {\n message = `argument \"${impliedBecause.argumentName}\" to component \"${impliedBecause.componentName}\" is treated as a component, but the value you're passing is dynamic`;\n } else {\n message = `Unsafe dynamic component`;\n }\n\n if (component.type === 'other') {\n return {\n type: 'error',\n message,\n detail: `cannot statically analyze this expression`,\n loc,\n };\n }\n if (component.type === 'path') {\n if (this.ownRules?.safeInteriorPaths.includes(component.path)) {\n return null;\n }\n return {\n type: 'error',\n message,\n detail: component.path,\n loc,\n };\n }\n\n return this.targetComponent(component.path, component.path);\n }\n\n private targetHelper(path: string): HelperResolution | null {\n if (!this.staticInvokablesEnabled) {\n return null;\n }\n\n // people are not allowed to override the built-in helpers with their own\n // globally-named helpers. It throws an error. So it's fine for us to\n // prioritize the builtIns here without bothering to resolve a user helper\n // of the same name.\n const builtIn = this.builtInsForEmberVersion[path];\n\n if (builtIn?.importableHelper) {\n let [importedName, specifier] = builtIn.importableHelper;\n return {\n type: 'helper',\n specifier,\n importedName,\n nameHint: importedName,\n };\n }\n\n if (builtIn) {\n return null;\n }\n\n return {\n type: 'helper',\n specifier: `@embroider/virtual/helpers/${path}`,\n importedName: 'default',\n nameHint: this.nameHint(path),\n };\n }\n\n private targetHelperOrComponent(\n path: string,\n loc: Loc,\n hasArgs: boolean\n ): ComponentResolution | HelperResolution | null {\n /*\n\n In earlier embroider versions we would do a bunch of module resolution right\n here inside the ast transform to try to resolve the ambiguity of this case\n and if we didn't find anything, leave the template unchanged. But that leads\n to both a lot of extra build-time expense (since we are attempting\n resolution for lots of things that may in fact be just some data and not a\n component invocation at all, and also since we are pre-resolving modules\n that will get resolved a second time by the final stage packager).\n\n Now, we're going to be less forgiving, because it streamlines the build for\n everyone who's not still using these *extremely* old patterns.\n\n The problematic case is:\n\n 1. In a non-strict template (because this whole resolver-transform.ts is a\n no-op on strict handlebars).\n\n 2. Have a mustache statement like: `{{something}}`, where `something` is:\n\n a. Not a variable in scope (for example, there's no preceeding line\n like `<Parent as |something|>`)\n b. Does not start with `@` because that must be an argument from outside this template.\n c. Does not contain a dot, like `some.thing` (because that case is classically\n never a global component resolution that we would need to handle)\n d. Does not start with `this` (this rule is mostly redundant with the previous rule,\n but even a standalone `this` is never a component invocation).\n e. Does not have any arguments. If there are argument like `{{something a=b}}`,\n there is still ambiguity between helper vs component, but there is no longer\n the possibility that this was just rendering some data.\n f. Does not take a block, like `{{#something}}{{/something}}` (because that is\n always a component, no ambiguity.)\n\n We can't tell if this problematic case is really:\n\n 1. A helper invocation with no arguments that is being directly rendered.\n Out-of-the-box, ember already generates [a lint\n error](https://github.com/ember-template-lint/ember-template-lint/blob/master/docs/rule/no-curly-component-invocation.md)\n for this, although it tells you to whitelist your helper when IMO it\n should tell you to use an unambiguous syntax like `{{ (something) }}`\n instead.\n\n 2. A component invocation, which you could have written `<Something />`\n instead. Angle-bracket invocation has been available and easy-to-adopt\n for a very long time.\n\n 3. Property-this-fallback for `{{this.something}}`. Property-this-fallback\n is eliminated at Ember 4.0, so people have been heavily pushed to get\n it out of their addons.\n */\n\n // first, bail out on all the stuff we can obviously ignore\n if (!this.staticInvokablesEnabled || this.isIgnoredComponent(path)) {\n return null;\n }\n\n let builtIn = this.builtInsForEmberVersion[path];\n\n if (builtIn?.importableComponent) {\n let [importedName, specifier] = builtIn.importableComponent;\n return {\n type: 'component',\n specifier,\n importedName,\n yieldsComponents: [],\n yieldsArguments: [],\n argumentsAreComponents: [],\n nameHint: importedName,\n };\n }\n\n if (builtIn?.importableHelper) {\n let [importedName, specifier] = builtIn.importableHelper;\n return {\n type: 'helper',\n specifier,\n importedName,\n nameHint: importedName,\n };\n }\n\n if (builtIn) {\n return null;\n }\n\n let ownComponentRules = this.findRules(this.env.filename);\n if (ownComponentRules?.disambiguate[path]) {\n switch (ownComponentRules.disambiguate[path]) {\n case 'component':\n return this.targetComponent(path, path);\n case 'helper':\n return this.targetHelper(path);\n case 'data':\n return null;\n }\n }\n\n if (!hasArgs && !path.includes('/') && !path.includes('@')) {\n // this is the case that could also be property-this-fallback. We're going\n // to force people to disambiguate, because letting a potential component\n // or helper invocation lurk inside every bit of data you render is not\n // ok.\n this.reportError({\n type: 'error',\n message: 'unsupported ambiguous syntax',\n detail: `\"{{${path}}}\" is ambiguous and could mean \"{{this.${path}}}\" or component \"<${capitalize(\n camelCase(path)\n )} />\" or helper \"{{ (${path}) }}\". Change it to one of those unambigous forms, or use a \"disambiguate\" packageRule to work around the problem if its in third-party code you cannot easily fix.`,\n loc,\n });\n return null;\n }\n\n let componentRules = this.rules.components.get(path);\n return {\n type: 'component',\n specifier: `@embroider/virtual/ambiguous/${path}`,\n importedName: 'default',\n yieldsComponents: componentRules ? componentRules.yieldsSafeComponents : [],\n yieldsArguments: componentRules ? componentRules.yieldsArguments : [],\n argumentsAreComponents: componentRules ? componentRules.argumentsAreComponents : [],\n nameHint: this.nameHint(path),\n };\n }\n\n private targetElementModifier(path: string): ModifierResolution | null {\n if (!this.staticInvokablesEnabled) {\n return null;\n }\n\n const builtIn = this.builtInsForEmberVersion[path];\n if (builtIn?.importableModifier) {\n let [importedName, specifier] = builtIn.importableModifier;\n return {\n type: 'modifier',\n specifier,\n importedName,\n nameHint: importedName,\n };\n }\n\n if (builtIn) {\n return null;\n }\n\n return {\n type: 'modifier',\n specifier: `@embroider/virtual/modifiers/${path}`,\n importedName: 'default',\n nameHint: this.nameHint(path),\n };\n }\n\n targetDynamicModifier(modifier: ComponentLocator, loc: Loc): ModifierResolution | ResolutionFail | null {\n if (!this.staticInvokablesEnabled) {\n return null;\n }\n\n if (modifier.type === 'literal') {\n return this.targetElementModifier(modifier.path);\n } else {\n return {\n type: 'error',\n message: 'Unsafe dynamic modifier',\n detail: `cannot statically analyze this expression`,\n loc,\n };\n }\n }\n\n private targetDynamicHelper(helper: ComponentLocator): HelperResolution | null {\n if (!this.staticInvokablesEnabled) {\n return null;\n }\n\n if (helper.type === 'literal') {\n return this.targetHelper(helper.path);\n }\n\n // we don't have to manage any errors in this case because ember itself\n // considers it an error to pass anything but a string literal to the\n // `helper` helper.\n return null;\n }\n\n private nameHint(path: string) {\n let parts = path.split('@');\n\n // the extra underscore here guarantees that we will never collide with an\n // HTML element.\n return this.externalNameHint?.(path) ?? parts[parts.length - 1] + '_';\n }\n\n private handleDynamicModifier(param: ASTv1.Expression): ModifierResolution | ResolutionFail | null {\n if (param.type === 'StringLiteral') {\n return this.targetDynamicModifier({ type: 'literal', path: param.value }, param.loc);\n }\n // we don't have to manage any errors in this case because ember itself\n // considers it an error to pass anything but a string literal to the\n // modifier helper.\n return null;\n }\n\n private handleDynamicHelper(param: ASTv1.Expression): HelperResolution | ResolutionFail | null {\n // We only need to handle StringLiterals since Ember already throws an error if unsupported values\n // are passed to the helper keyword.\n // If a helper reference is passed in we don't need to do anything since it's either the result of a previous\n // helper keyword invocation, or a helper reference that was imported somewhere.\n if (param.type === 'StringLiteral') {\n return this.targetDynamicHelper({ type: 'literal', path: param.value });\n }\n return null;\n }\n\n private ownRules: PreprocessedComponentRule | undefined;\n\n private implementInvokesRule(node: ASTv1.Template, path: WalkerPath<ASTv1.Template>) {\n if (!this.ownRules?.invokes) {\n return;\n }\n let registrations: ASTv1.HashPair[] = [];\n for (let snippets of Object.values(this.ownRules.invokes)) {\n for (let snippet of snippets) {\n let dasherizedName = snippetToDasherizedName(snippet);\n if (!dasherizedName) {\n throw new Error(`Package rule contains unparseable component snippet: ${snippet}`);\n }\n let resolution = this.targetComponentHelper({ type: 'literal', path: dasherizedName }, node.loc);\n this.emit(path, resolution, (_target, id) => {\n registrations.push(this.env.syntax.builders.pair(dasherizedName, id));\n });\n }\n }\n if (registrations.length > 0) {\n node.body.unshift(\n this.env.syntax.builders.mustache(\n this.env.meta.jsutils.bindExpression(registrationHelper, path, { nameHint: 'registerComponents' }),\n [],\n this.env.syntax.builders.hash(registrations)\n )\n );\n }\n }\n\n visitor: ASTPlugin['visitor'] = {\n Template: {\n enter: (node, path) => {\n this.ownRules = this.findRules(this.env.filename);\n this.implementInvokesRule(node, path);\n if (this.env.locals) {\n this.scopeStack.pushMustacheBlock(this.env.locals);\n }\n },\n exit: () => {\n if (this.env.locals) {\n this.scopeStack.pop();\n }\n },\n },\n Block: {\n enter: node => {\n this.scopeStack.pushMustacheBlock(node.blockParams);\n },\n exit: () => {\n this.scopeStack.pop();\n },\n },\n BlockStatement: (node, path) => {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n let rootName = headOf(node.path);\n if (this.scopeStack.inScope(rootName, path)) {\n return;\n }\n if (isThisHead(node.path)) {\n return;\n }\n if (parts(node.path).length > 1) {\n // paths with a dot in them (which therefore split into more than\n // one \"part\") are classically understood by ember to be contextual\n // components, which means there's nothing to resolve at this\n // location.\n return;\n }\n if (node.path.original === 'component' && node.params.length > 0) {\n let resolution = this.handleComponentHelper(node.params[0]);\n this.emit(path, resolution, (node, newIdentifier) => {\n node.params[0] = newIdentifier;\n });\n return;\n }\n let resolution = this.targetComponent(node.path.original, node.path.original);\n this.emit(path, resolution, (node, newId) => {\n node.path = newId;\n });\n if (resolution?.type === 'component') {\n this.scopeStack.enteringComponentBlock(resolution, ({ argumentsAreComponents }) => {\n this.handleDynamicComponentArguments(\n rootName,\n argumentsAreComponents,\n extendPath(extendPath(path, 'hash'), 'pairs')\n );\n });\n }\n },\n SubExpression: (node, path) => {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n if (isThisHead(node.path)) {\n return;\n }\n if (this.scopeStack.inScope(headOf(node.path), path)) {\n return;\n }\n if (node.path.original === 'component' && node.params.length > 0) {\n let resolution = this.handleComponentHelper(node.params[0]);\n this.emit(path, resolution, (node, newId) => {\n node.params[0] = newId;\n });\n return;\n }\n if (node.path.original === 'helper' && node.params.length > 0) {\n let resolution = this.handleDynamicHelper(node.params[0]);\n this.emit(path, resolution, (node, newId) => {\n node.params[0] = newId;\n });\n return;\n }\n if (node.path.original === 'modifier' && node.params.length > 0) {\n let resolution = this.handleDynamicModifier(node.params[0]);\n this.emit(path, resolution, (node, newId) => {\n node.params[0] = newId;\n });\n return;\n }\n if (node.path.tail.length === 0 && node.path.head.type === 'VarHead') {\n let resolution = this.targetHelper(node.path.original);\n this.emit(path, resolution, (node, newId) => {\n node.path = newId;\n });\n }\n },\n MustacheStatement: {\n enter: (node, path) => {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n let rootName = headOf(node.path);\n if (this.scopeStack.inScope(rootName, path)) {\n return;\n }\n if (isThisHead(node.path)) {\n return;\n }\n if (parts(node.path).length > 1) {\n // paths with a dot in them (which therefore split into more than\n // one \"part\") are classically understood by ember to be contextual\n // components, which means there's nothing to resolve at this\n // location.\n return;\n }\n if (node.path.original.startsWith('@')) {\n // similarly, global resolution of helpers and components never\n // happens with argument paths (it could still be an invocation, but\n // it would be a lexically-scoped invocation, not one we need to\n // adjust)\n return;\n }\n if (node.path.original === 'component' && node.params.length > 0) {\n let resolution = this.handleComponentHelper(node.params[0]);\n this.emit(path, resolution, (node, newId) => {\n node.params[0] = newId;\n });\n return;\n }\n if (node.path.original === 'helper' && node.params.length > 0) {\n let resolution = this.handleDynamicHelper(node.params[0]);\n this.emit(path, resolution, (node, newIdentifier) => {\n node.params[0] = newIdentifier;\n });\n return;\n }\n if (path.parent?.node.type === 'AttrNode') {\n // this mustache is the value of an attribute. Components aren't\n // allowed here, so we're not ambiguous, so resolve a helper.\n let resolution = this.targetHelper(node.path.original);\n this.emit(path, resolution, (node, newIdentifier) => {\n node.path = newIdentifier;\n });\n return;\n }\n let hasArgs = node.params.length > 0 || node.hash.pairs.length > 0;\n let resolution = this.targetHelperOrComponent(node.path.original, node.path.loc, hasArgs);\n this.emit(path, resolution, (node, newIdentifier) => {\n node.path = newIdentifier;\n });\n if (resolution?.type === 'component') {\n this.handleDynamicComponentArguments(\n node.path.original,\n resolution.argumentsAreComponents,\n extendPath(extendPath(path, 'hash'), 'pairs')\n );\n }\n },\n },\n ElementModifierStatement: (node, path) => {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n if (this.scopeStack.inScope(headOf(node.path), path)) {\n return;\n }\n if (isThisHead(node.path)) {\n return;\n }\n if (isAtHead(node.path)) {\n return;\n }\n if (parts(node.path).length > 1) {\n // paths with a dot in them (which therefore split into more than\n // one \"part\") are classically understood by ember to be contextual\n // components. With the introduction of `Template strict mode` in Ember 3.25\n // it is also possible to pass modifiers this way which means there's nothing\n // to resolve at this location.\n return;\n }\n\n let resolution = this.targetElementModifier(node.path.original);\n this.emit(path, resolution, (node, newId) => {\n node.path = newId;\n });\n },\n ElementNode: {\n enter: (node, path) => {\n let rootName = node.tag.split('.')[0];\n if (!this.scopeStack.inScope(rootName, path)) {\n let resolution: ComponentResolution | null = null;\n\n // if it starts with lower case, it can't be a component we need to\n // globally resolve\n if (node.tag[0] !== node.tag[0].toLowerCase()) {\n resolution = this.targetComponent(dasherize(node.tag), node.tag);\n }\n\n this.emit(path, resolution, (node, newId) => {\n node.tag = newId.original;\n });\n if (resolution?.type === 'component') {\n this.scopeStack.enteringComponentBlock(resolution, ({ argumentsAreComponents }) => {\n this.handleDynamicComponentArguments(node.tag, argumentsAreComponents, extendPath(path, 'attributes'));\n });\n }\n }\n this.scopeStack.pushElementBlock(node.blockParams, node);\n },\n exit: () => {\n this.scopeStack.pop();\n },\n },\n };\n}\n\n// This is the AST transform that resolves components, helpers and modifiers at build time\nexport default function makeResolverTransform({ appRoot, emberVersion, externalNameHint }: Options) {\n let loader = new ResolverLoader(appRoot);\n let config = loader.resolver.options as CompatResolverOptions;\n const resolverTransform: ASTPluginBuilder<Env> = env => {\n if (env.strictMode) {\n return {\n name: 'embroider-build-time-resolver-strict-noop',\n visitor: {},\n };\n }\n return new TemplateResolver(env, config, builtInKeywords(emberVersion), externalNameHint);\n };\n (resolverTransform as any).parallelBabel = {\n requireFile: __filename,\n buildUsing: 'makeResolverTransform',\n params: { appRoot: appRoot },\n };\n return resolverTransform;\n}\n\ninterface ComponentBlockMarker {\n type: 'componentBlockMarker';\n resolution: ComponentResolution;\n argumentsAreComponents: string[];\n exit: (marker: ComponentBlockMarker) => void;\n}\n\ntype ScopeEntry =\n | { type: 'mustache'; blockParams: string[] }\n | { type: 'element'; blockParams: string[]; childrenOf: ASTv1.ElementNode }\n | ComponentBlockMarker;\n\nclass ScopeStack {\n private stack: ScopeEntry[] = [];\n\n // mustache blocks like:\n //\n // {{#stuff as |some block vars|}}\n //\n // are relatively simple for us because there's a dedicated `Block` AST node\n // that exactly covers the range in which the variables are in scope.\n pushMustacheBlock(blockParams: string[]) {\n this.stack.unshift({ type: 'mustache', blockParams });\n }\n\n // element blocks like:\n //\n // <Stuff as |some block vars|>\n //\n // are *not* so simple for us because there's no single AST node that exactly\n // covers the range in which the variables are in scope. For example, the\n // *attributes* of the element do not see the variables, but the children of\n // the element do.\n pushElementBlock(blockParams: string[], childrenOf: ASTv1.ElementNode) {\n this.stack.unshift({ type: 'element', blockParams, childrenOf });\n }\n\n // and when we leave the block they go out of scope. If this block was tagged\n // by a safe component marker, we also clear that.\n pop() {\n this.stack.shift();\n let next = this.stack[0];\n if (next && next.type === 'componentBlockMarker') {\n next.exit(next);\n this.stack.shift();\n }\n }\n\n // right before we enter a block, we might determine that some of the values\n // that will be yielded as marked (by a rule) as safe to be used with the\n // {{component}} helper.\n enteringComponentBlock(resolution: ComponentResolution, exit: ComponentBlockMarker['exit']) {\n this.stack.unshift({\n type: 'componentBlockMarker',\n resolution,\n argumentsAreComponents: resolution.argumentsAreComponents.slice(),\n exit,\n });\n }\n\n inScope(name: string, fromPath: WalkerPath<ASTv1.Node>) {\n for (let scope of this.stack) {\n if (scope.type === 'mustache' && scope.blockParams.includes(name)) {\n return true;\n }\n if (\n scope.type === 'element' &&\n scope.blockParams.includes(name) &&\n withinElementBlock(fromPath, scope.childrenOf)\n ) {\n return true;\n }\n }\n return false;\n }\n\n safeComponentInScope(name: string): boolean {\n let parts = name.split('.');\n if (parts.length > 2) {\n // we let component rules specify that they yield components or objects\n // containing components. But not deeper than that. So the max path length\n // that can refer to a marked-safe component is two segments.\n return false;\n }\n for (let i = 0; i < this.stack.length - 1; i++) {\n let here = this.stack[i];\n let next = this.stack[i + 1];\n if ((here.type === 'mustache' || here.type === 'element') && next.type === 'componentBlockMarker') {\n let positionalIndex = here.blockParams.indexOf(parts[0]);\n if (positionalIndex === -1) {\n continue;\n }\n\n if (parts.length === 1) {\n if (next.resolution.yieldsComponents[positionalIndex] === true) {\n return true;\n }\n let sourceArg = next.resolution.yieldsArguments[positionalIndex];\n if (typeof sourceArg === 'string') {\n next.argumentsAreComponents.push(sourceArg);\n return true;\n }\n } else {\n let entry = next.resolution.yieldsComponents[positionalIndex];\n if (entry && typeof entry === 'object') {\n return entry[parts[1]] === true;\n }\n\n let argsEntry = next.resolution.yieldsArguments[positionalIndex];\n if (argsEntry && typeof argsEntry === 'object') {\n let sourceArg = argsEntry[parts[1]];\n if (typeof sourceArg === 'string') {\n next.argumentsAreComponents.push(sourceArg);\n return true;\n }\n }\n }\n // we found the source of the name, but there were no rules to cover it.\n // Don't keep searching higher, those are different names.\n return false;\n }\n }\n return false;\n }\n}\n\nfunction extendPath<N extends ASTv1.Node, K extends keyof N>(\n path: WalkerPath<N>,\n key: K\n): N[K] extends ASTv1.Node ? WalkerPath<N[K]> : N[K] extends ASTv1.Node[] ? WalkerPath<N[K][0]>[] : never {\n const _WalkerPath = path.constructor as {\n new <Child extends ASTv1.Node>(\n node: Child,\n parent?: WalkerPath<ASTv1.Node> | null,\n parentKey?: string | null\n ): WalkerPath<Child>;\n };\n let child = path.node[key];\n if (Array.isArray(child)) {\n return child.map(c => new _WalkerPath(c, path, key as string)) as any;\n } else {\n return new _WalkerPath(child as any, path, key as string) as any;\n }\n}\n\nfunction capitalize(word: string): string {\n return word[0].toUpperCase() + word.slice(1);\n}\n\n// ElementNodes have both children and attributes and both of those are\n// \"children\" in the abstract syntax tree sense, but here we want to distinguish\n// between them.\nfunction withinElementBlock(childPath: WalkerPath<ASTv1.Node>, ancestorNode: ASTv1.ElementNode): Boolean {\n let cursor: WalkerPath<ASTv1.Node> | null = childPath;\n while (cursor && cursor.node !== ancestorNode) {\n if (ancestorNode.children.includes(cursor.node as ASTv1.Statement)) {\n return true;\n }\n cursor = cursor.parent;\n }\n return false;\n}\nfunction appendArrays(objValue: any, srcValue: any) {\n if (Array.isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n}\n\nfunction headOf(path: any) {\n if (!path) return;\n\n return 'head' in path ? path.head.name : path.parts[0];\n}\n\nfunction isThisHead(path: any) {\n if (!path) return;\n\n if ('head' in path) {\n return path.head.type === 'ThisHead';\n }\n\n return path.this === true;\n}\n\nfunction isAtHead(path: any) {\n if (!path) return;\n\n if ('head' in path) {\n return path.head.type === 'AtHead';\n }\n\n return path.data === true;\n}\n\nfunction parts(path: any) {\n if (!path) return;\n\n return 'original' in path ? path.original.split('.') : path.parts;\n}\n\nfunction registrationHelper(context: { import: (module: string, name: string, hint?: string) => string }) {\n let Helper = context.import('@ember/component/helper', 'default', 'Helper');\n let getOwner = context.import('@ember/owner', 'getOwner');\n return `\n (class extends ${Helper} {\n compute(_positional, registrations) {\n let owner = ${getOwner}(this);\n for (let [name, definition] of Object.entries(registrations)) {\n owner.register(\\`component:\\${name}\\`, definition);\n }\n }\n })\n `;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"resolver-transform.js","sourceRoot":"","sources":["resolver-transform.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ASTv1, ASTPlugin, ASTPluginBuilder, ASTPluginEnvironment, WalkerPath } from '@glimmer/syntax';\nimport type {\n PreprocessedComponentRule,\n ActivePackageRules,\n ComponentRules,\n PackageRules,\n ModuleRules,\n} from './dependency-rules';\nimport { preprocessComponentRule, appTreeRulesDir } from './dependency-rules';\nimport { Memoize } from 'typescript-memoize';\nimport type { WithJSUtils } from 'babel-plugin-ember-template-compilation';\nimport assertNever from 'assert-never';\nimport { join, sep } from 'path';\nimport { dasherize, snippetToDasherizedName } from './dasherize-component-name';\nimport type { ResolverOptions as CoreResolverOptions } from '@embroider/core';\nimport { Resolver, ResolverLoader, cleanUrl } from '@embroider/core';\nimport type CompatOptions from './options';\nimport type { AuditMessage, Loc } from './audit';\nimport { camelCase, mergeWith } from 'lodash';\nimport { satisfies } from 'semver';\n\ntype Env = WithJSUtils<ASTPluginEnvironment> & {\n filename: string;\n contents: string;\n strictMode?: boolean;\n locals?: string[];\n};\n\n// this is a subset of the full Options. We care about serializability, and we\n// only needs parts that are easily serializable, which is why we don't keep the\n// whole thing.\ntype UserConfig = Pick<Required<CompatOptions>, 'staticInvokables' | 'allowUnsafeDynamicComponents'>;\n\nexport interface CompatResolverOptions extends CoreResolverOptions {\n activePackageRules: ActivePackageRules[];\n options: UserConfig;\n}\n\nexport interface ExternalNameHint {\n (path: string, kind: 'component' | 'helper' | 'modifier' | 'ambiguous-component-or-helper'): string | null;\n}\n\nexport type ExternalResolver = (module: string) => string;\n\nexport interface Options {\n appRoot: string;\n emberVersion: string;\n externalNameHint?: ExternalNameHint;\n externalResolve?: (module: string) => string;\n}\n\ntype BuiltIn = {\n importableHelper?: [string, string];\n importableComponent?: [string, string];\n importableModifier?: [string, string];\n};\n\nfunction builtInKeywords(emberVersion: string): Record<string, BuiltIn | undefined> {\n const builtInKeywords: Record<string, BuiltIn | undefined> = {\n '-get-dynamic-var': {},\n '-in-element': {},\n '-with-dynamic-vars': {},\n action: {},\n array: {\n importableHelper: ['array', '@ember/helper'],\n },\n component: {},\n concat: {\n importableHelper: ['concat', '@ember/helper'],\n },\n debugger: {},\n 'each-in': {},\n each: {},\n fn: {\n importableHelper: ['fn', '@ember/helper'],\n },\n get: {\n importableHelper: ['get', '@ember/helper'],\n },\n 'has-block-params': {},\n 'has-block': {},\n hasBlock: {},\n hasBlockParams: {},\n hash: {\n importableHelper: ['hash', '@ember/helper'],\n },\n helper: {},\n if: {},\n 'in-element': {},\n input: {\n importableComponent: ['Input', '@ember/component'],\n },\n let: {},\n 'link-to': {\n importableComponent: ['LinkTo', '@ember/routing'],\n },\n loc: {},\n log: {},\n modifier: {},\n mount: {},\n mut: {},\n on: {\n importableModifier: ['on', '@ember/modifier'],\n },\n outlet: {},\n partial: {},\n 'query-params': {},\n readonly: {},\n textarea: {\n importableComponent: ['Textarea', '@ember/component'],\n },\n unbound: {},\n 'unique-id': {},\n unless: {},\n with: {},\n yield: {},\n };\n if (satisfies(emberVersion, '>=5.2')) {\n builtInKeywords['unique-id'] = {\n importableHelper: ['uniqueId', '@ember/helper'],\n };\n }\n return builtInKeywords;\n}\n\nfunction supportsThisFallback(emberVersion: string): boolean {\n return satisfies(emberVersion, '<= 4.0.0-alpha.0', { includePrerelease: true });\n}\n\ninterface ComponentResolution {\n type: 'component';\n specifier: string;\n importedName: string;\n yieldsComponents: Required<ComponentRules>['yieldsSafeComponents'];\n yieldsArguments: Required<ComponentRules>['yieldsArguments'];\n argumentsAreComponents: string[];\n nameHint: string;\n}\n\ntype HelperResolution = {\n type: 'helper';\n nameHint: string;\n specifier: string;\n importedName: string;\n};\n\ntype ModifierResolution = {\n type: 'modifier';\n specifier: string;\n importedName: string;\n nameHint: string;\n};\n\ntype ResolutionResult = ComponentResolution | HelperResolution | ModifierResolution;\n\ninterface ResolutionFail {\n type: 'error';\n message: string;\n detail: string;\n loc: Loc;\n}\n\ntype Resolution = ResolutionResult | ResolutionFail;\n\ntype ComponentLocator =\n | {\n type: 'literal';\n path: string;\n }\n | {\n type: 'path';\n path: string;\n }\n | {\n type: 'other';\n };\n\nclass TemplateResolver implements ASTPlugin {\n readonly name = 'embroider-build-time-resolver';\n\n private auditHandler: undefined | ((msg: AuditMessage) => void);\n private scopeStack = new ScopeStack();\n\n private moduleResolver: Resolver;\n\n constructor(\n private env: Env,\n private config: CompatResolverOptions,\n private builtInsForEmberVersion: ReturnType<typeof builtInKeywords>,\n private supportsThisFallback: boolean,\n private externalNameHint?: ExternalNameHint,\n private externalResolve?: ExternalResolver\n ) {\n this.moduleResolver = new Resolver(config);\n if ((globalThis as any).embroider_audit) {\n this.auditHandler = (globalThis as any).embroider_audit;\n }\n }\n\n private emit<Target extends WalkerPath<ASTv1.Node>>(\n parentPath: Target,\n resolution: Resolution | null,\n setter: (target: Target['node'], newIdentifier: ASTv1.PathExpression) => void\n ) {\n switch (resolution?.type) {\n case 'error':\n this.reportError(resolution);\n return;\n case 'component':\n case 'modifier':\n case 'helper': {\n let specifier = resolution.specifier;\n if (this.externalResolve) {\n specifier = this.externalResolve(specifier);\n }\n let name = this.env.meta.jsutils.bindImport(specifier, resolution.importedName, parentPath, {\n nameHint: resolution.nameHint,\n });\n setter(parentPath.node, this.env.syntax.builders.path(name));\n return;\n }\n case undefined:\n return;\n default:\n assertNever(resolution);\n }\n }\n\n private reportError(dep: ResolutionFail) {\n if (!this.auditHandler && !this.config.options.allowUnsafeDynamicComponents) {\n let e: any = new Error(`${dep.message}: ${dep.detail} in ${this.humanReadableFile(this.env.filename)}`);\n e.isTemplateResolverError = true;\n e.loc = dep.loc;\n e.moduleName = this.env.filename;\n throw e;\n }\n if (this.auditHandler) {\n this.auditHandler({\n message: dep.message,\n filename: this.env.filename,\n detail: dep.detail,\n loc: dep.loc,\n source: this.env.contents,\n });\n }\n }\n\n private humanReadableFile(file: string) {\n let { appRoot } = this.config;\n if (!appRoot.endsWith(sep)) {\n appRoot += sep;\n }\n if (file.startsWith(appRoot)) {\n return file.slice(appRoot.length);\n }\n return file;\n }\n\n private handleComponentHelper(\n param: ASTv1.Node,\n impliedBecause?: { componentName: string; argumentName: string }\n ): ComponentResolution | ResolutionFail | null {\n let locator: ComponentLocator;\n switch (param.type) {\n case 'StringLiteral':\n locator = { type: 'literal', path: param.value };\n break;\n case 'PathExpression':\n locator = { type: 'path', path: param.original };\n break;\n case 'MustacheStatement':\n if (param.hash.pairs.length === 0 && param.params.length === 0) {\n return this.handleComponentHelper(param.path, impliedBecause);\n } else if (param.path.type === 'PathExpression' && param.path.original === 'component') {\n // safe because we will handle this inner `{{component ...}}` mustache on its own\n return null;\n } else {\n locator = { type: 'other' };\n }\n break;\n case 'TextNode':\n locator = { type: 'literal', path: param.chars };\n break;\n case 'SubExpression':\n if (param.path.type === 'PathExpression' && param.path.original === 'component') {\n // safe because we will handle this inner `(component ...)` subexpression on its own\n return null;\n }\n if (param.path.type === 'PathExpression' && param.path.original === 'ensure-safe-component') {\n // safe because we trust ensure-safe-component\n return null;\n }\n locator = { type: 'other' };\n break;\n default:\n locator = { type: 'other' };\n }\n\n if (locator.type === 'path' && this.scopeStack.safeComponentInScope(locator.path)) {\n return null;\n }\n\n return this.targetComponentHelper(locator, param.loc, impliedBecause);\n }\n\n private handleDynamicComponentArguments(\n componentName: string,\n argumentsAreComponents: string[],\n attributes: WalkerPath<ASTv1.AttrNode | ASTv1.HashPair>[]\n ) {\n for (let name of argumentsAreComponents) {\n let attr = attributes.find(attr => {\n if (attr.node.type === 'AttrNode') {\n return attr.node.name === '@' + name;\n } else {\n return attr.node.key === name;\n }\n });\n if (attr) {\n let resolution = this.handleComponentHelper(attr.node.value, {\n componentName,\n argumentName: name,\n });\n this.emit(attr, resolution, (node, newId) => {\n if (node.type === 'AttrNode') {\n node.value = this.env.syntax.builders.mustache(newId);\n } else {\n node.value = newId;\n }\n });\n }\n }\n }\n\n private get staticInvokablesEnabled(): boolean {\n if (!this.config?.options) {\n return true;\n }\n return this.config.options.staticInvokables || Boolean(this.auditHandler);\n }\n\n private isIgnoredComponent(dasherizedName: string) {\n return this.rules.components.get(dasherizedName)?.safeToIgnore;\n }\n\n @Memoize()\n private get rules() {\n // rules that are keyed by the filename they're talking about\n let files: Map<string, PreprocessedComponentRule> = new Map();\n\n // rules that are keyed by our dasherized interpretation of the component's name\n let components: Map<string, PreprocessedComponentRule> = new Map();\n\n // we're not responsible for filtering out rules for inactive packages here,\n // that is done before getting to us. So we should assume these are all in\n // force.\n for (let rule of this.config?.activePackageRules ?? []) {\n if (rule.components) {\n for (let [snippet, rules] of Object.entries(rule.components)) {\n let processedRules = preprocessComponentRule(rules);\n let dasherizedName = this.standardDasherize(snippet, rule);\n components.set(dasherizedName, processedRules);\n if (rules.layout) {\n for (let root of rule.roots) {\n if (rules.layout.addonPath) {\n files.set(join(root, rules.layout.addonPath), processedRules);\n }\n if (rules.layout.appPath) {\n files.set(join(root, rules.layout.appPath), processedRules);\n }\n }\n }\n }\n }\n if (rule.appTemplates) {\n for (let [path, templateRules] of Object.entries(rule.appTemplates)) {\n let processedRules = preprocessComponentRule(templateRules);\n for (let root of rule.roots) {\n files.set(join(appTreeRulesDir(root, this.moduleResolver), path), processedRules);\n }\n }\n }\n if (rule.addonTemplates) {\n for (let [path, templateRules] of Object.entries(rule.addonTemplates)) {\n let processedRules = preprocessComponentRule(templateRules);\n for (let root of rule.roots) {\n files.set(join(root, path), processedRules);\n }\n }\n }\n }\n return { files, components };\n }\n\n private findRules(absPath: string): PreprocessedComponentRule | undefined {\n // when babel is invoked by vite our filenames can have query params still\n // hanging off them. That would break rule matching.\n absPath = cleanUrl(absPath);\n\n let fileRules = this.rules.files.get(absPath);\n let componentRules: PreprocessedComponentRule | undefined;\n\n let componentName = this.moduleResolver.reverseComponentLookup(absPath);\n if (componentName) {\n componentRules = this.rules.components.get(componentName);\n }\n\n if (fileRules && componentRules) {\n return mergeWith(fileRules, componentRules, appendArrays);\n }\n\n return fileRules ?? componentRules;\n }\n\n private standardDasherize(snippet: string, rule: PackageRules | ModuleRules): string {\n let name = snippetToDasherizedName(snippet);\n if (name == null) {\n throw new Error(`unable to parse component snippet \"${snippet}\" from rule ${JSON.stringify(rule, null, 2)}`);\n }\n return name;\n }\n\n private targetComponent(name: string, nameHint: string): ComponentResolution | null {\n if (!this.staticInvokablesEnabled) {\n return null;\n }\n\n const builtIn = this.builtInsForEmberVersion[name];\n\n if (builtIn?.importableComponent) {\n let [importedName, specifier] = builtIn.importableComponent;\n return {\n type: 'component',\n specifier,\n importedName,\n yieldsComponents: [],\n yieldsArguments: [],\n argumentsAreComponents: [],\n nameHint: importedName,\n };\n }\n\n if (builtIn) {\n return null;\n }\n if (this.isIgnoredComponent(name)) {\n return null;\n }\n\n let componentRules = this.rules.components.get(name);\n return {\n type: 'component',\n specifier: `@embroider/virtual/components/${name}`,\n importedName: 'default',\n yieldsComponents: componentRules ? componentRules.yieldsSafeComponents : [],\n yieldsArguments: componentRules ? componentRules.yieldsArguments : [],\n argumentsAreComponents: componentRules ? componentRules.argumentsAreComponents : [],\n nameHint: this.nameHint(nameHint, 'component'),\n };\n }\n\n private targetComponentHelper(\n component: ComponentLocator,\n loc: Loc,\n impliedBecause?: { componentName: string; argumentName: string }\n ): ComponentResolution | ResolutionFail | null {\n if (!this.staticInvokablesEnabled) {\n return null;\n }\n\n let message;\n if (impliedBecause) {\n message = `argument \"${impliedBecause.argumentName}\" to component \"${impliedBecause.componentName}\" is treated as a component, but the value you're passing is dynamic`;\n } else {\n message = `Unsafe dynamic component`;\n }\n\n if (component.type === 'other') {\n return {\n type: 'error',\n message,\n detail: `cannot statically analyze this expression`,\n loc,\n };\n }\n if (component.type === 'path') {\n if (this.ownRules?.safeInteriorPaths.includes(component.path)) {\n return null;\n }\n return {\n type: 'error',\n message,\n detail: component.path,\n loc,\n };\n }\n\n return this.targetComponent(component.path, component.path);\n }\n\n private targetHelper(path: string): HelperResolution | null {\n if (!this.staticInvokablesEnabled) {\n return null;\n }\n\n // people are not allowed to override the built-in helpers with their own\n // globally-named helpers. It throws an error. So it's fine for us to\n // prioritize the builtIns here without bothering to resolve a user helper\n // of the same name.\n const builtIn = this.builtInsForEmberVersion[path];\n\n if (builtIn?.importableHelper) {\n let [importedName, specifier] = builtIn.importableHelper;\n return {\n type: 'helper',\n specifier,\n importedName,\n nameHint: importedName,\n };\n }\n\n if (builtIn) {\n return null;\n }\n\n return {\n type: 'helper',\n specifier: `@embroider/virtual/helpers/${path}`,\n importedName: 'default',\n nameHint: this.nameHint(path, 'helper'),\n };\n }\n\n private targetHelperOrComponent(\n path: string,\n loc: Loc,\n hasArgs: boolean\n ): ComponentResolution | HelperResolution | null {\n /*\n\n In earlier embroider versions we would do a bunch of module resolution right\n here inside the ast transform to try to resolve the ambiguity of this case\n and if we didn't find anything, leave the template unchanged. But that leads\n to both a lot of extra build-time expense (since we are attempting\n resolution for lots of things that may in fact be just some data and not a\n component invocation at all, and also since we are pre-resolving modules\n that will get resolved a second time by the final stage packager).\n\n Now, we're going to be less forgiving, because it streamlines the build for\n everyone who's not still using these *extremely* old patterns.\n\n The problematic case is:\n\n 1. In a non-strict template (because this whole resolver-transform.ts is a\n no-op on strict handlebars).\n\n 2. Have a mustache statement like: `{{something}}`, where `something` is:\n\n a. Not a variable in scope (for example, there's no preceeding line\n like `<Parent as |something|>`)\n b. Does not start with `@` because that must be an argument from outside this template.\n c. Does not contain a dot, like `some.thing` (because that case is classically\n never a global component resolution that we would need to handle)\n d. Does not start with `this` (this rule is mostly redundant with the previous rule,\n but even a standalone `this` is never a component invocation).\n e. Does not have any arguments. If there are argument like `{{something a=b}}`,\n there is still ambiguity between helper vs component, but there is no longer\n the possibility that this was just rendering some data.\n f. Does not take a block, like `{{#something}}{{/something}}` (because that is\n always a component, no ambiguity.)\n\n We can't tell if this problematic case is really:\n\n 1. A helper invocation with no arguments that is being directly rendered.\n Out-of-the-box, ember already generates [a lint\n error](https://github.com/ember-template-lint/ember-template-lint/blob/master/docs/rule/no-curly-component-invocation.md)\n for this, although it tells you to whitelist your helper when IMO it\n should tell you to use an unambiguous syntax like `{{ (something) }}`\n instead.\n\n 2. A component invocation, which you could have written `<Something />`\n instead. Angle-bracket invocation has been available and easy-to-adopt\n for a very long time.\n\n 3. Property-this-fallback for `{{this.something}}`. Property-this-fallback\n is eliminated at Ember 4.0, so people have been heavily pushed to get\n it out of their addons.\n */\n\n // first, bail out on all the stuff we can obviously ignore\n if (!this.staticInvokablesEnabled || this.isIgnoredComponent(path)) {\n return null;\n }\n\n let builtIn = this.builtInsForEmberVersion[path];\n\n if (builtIn?.importableComponent) {\n let [importedName, specifier] = builtIn.importableComponent;\n return {\n type: 'component',\n specifier,\n importedName,\n yieldsComponents: [],\n yieldsArguments: [],\n argumentsAreComponents: [],\n nameHint: importedName,\n };\n }\n\n if (builtIn?.importableHelper) {\n let [importedName, specifier] = builtIn.importableHelper;\n return {\n type: 'helper',\n specifier,\n importedName,\n nameHint: importedName,\n };\n }\n\n if (builtIn) {\n return null;\n }\n\n let ownComponentRules = this.findRules(this.env.filename);\n if (ownComponentRules?.disambiguate[path]) {\n switch (ownComponentRules.disambiguate[path]) {\n case 'component':\n return this.targetComponent(path, path);\n case 'helper':\n return this.targetHelper(path);\n case 'data':\n return null;\n }\n }\n\n if (!hasArgs && !path.includes('/') && !path.includes('@') && this.supportsThisFallback) {\n // this is the case that could also be property-this-fallback. We're going\n // to force people to disambiguate, because letting a potential component\n // or helper invocation lurk inside every bit of data you render is not\n // ok.\n this.reportError({\n type: 'error',\n message: 'unsupported ambiguous syntax',\n detail: `\"{{${path}}}\" is ambiguous and could mean \"{{this.${path}}}\" or component \"<${capitalize(\n camelCase(path)\n )} />\" or helper \"{{ (${path}) }}\". Change it to one of those unambigous forms, or use a \"disambiguate\" packageRule to work around the problem if its in third-party code you cannot easily fix.`,\n loc,\n });\n return null;\n }\n\n let componentRules = this.rules.components.get(path);\n return {\n type: 'component',\n specifier: `@embroider/virtual/ambiguous/${path}`,\n importedName: 'default',\n yieldsComponents: componentRules ? componentRules.yieldsSafeComponents : [],\n yieldsArguments: componentRules ? componentRules.yieldsArguments : [],\n argumentsAreComponents: componentRules ? componentRules.argumentsAreComponents : [],\n nameHint: this.nameHint(path, 'ambiguous-component-or-helper'),\n };\n }\n\n private targetElementModifier(path: string): ModifierResolution | null {\n if (!this.staticInvokablesEnabled) {\n return null;\n }\n\n const builtIn = this.builtInsForEmberVersion[path];\n if (builtIn?.importableModifier) {\n let [importedName, specifier] = builtIn.importableModifier;\n return {\n type: 'modifier',\n specifier,\n importedName,\n nameHint: importedName,\n };\n }\n\n if (builtIn) {\n return null;\n }\n\n return {\n type: 'modifier',\n specifier: `@embroider/virtual/modifiers/${path}`,\n importedName: 'default',\n nameHint: this.nameHint(path, 'modifier'),\n };\n }\n\n targetDynamicModifier(modifier: ComponentLocator, loc: Loc): ModifierResolution | ResolutionFail | null {\n if (!this.staticInvokablesEnabled) {\n return null;\n }\n\n if (modifier.type === 'literal') {\n return this.targetElementModifier(modifier.path);\n } else {\n return {\n type: 'error',\n message: 'Unsafe dynamic modifier',\n detail: `cannot statically analyze this expression`,\n loc,\n };\n }\n }\n\n private targetDynamicHelper(helper: ComponentLocator): HelperResolution | null {\n if (!this.staticInvokablesEnabled) {\n return null;\n }\n\n if (helper.type === 'literal') {\n return this.targetHelper(helper.path);\n }\n\n // we don't have to manage any errors in this case because ember itself\n // considers it an error to pass anything but a string literal to the\n // `helper` helper.\n return null;\n }\n\n private nameHint(path: string, kind: 'component' | 'helper' | 'modifier' | 'ambiguous-component-or-helper') {\n let parts = path.split('@');\n\n // the extra underscore here guarantees that we will never collide with an\n // HTML element.\n return this.externalNameHint?.(path, kind) ?? parts[parts.length - 1] + '_';\n }\n\n private handleDynamicModifier(param: ASTv1.Expression): ModifierResolution | ResolutionFail | null {\n if (param.type === 'StringLiteral') {\n return this.targetDynamicModifier({ type: 'literal', path: param.value }, param.loc);\n }\n // we don't have to manage any errors in this case because ember itself\n // considers it an error to pass anything but a string literal to the\n // modifier helper.\n return null;\n }\n\n private handleDynamicHelper(param: ASTv1.Expression): HelperResolution | ResolutionFail | null {\n // We only need to handle StringLiterals since Ember already throws an error if unsupported values\n // are passed to the helper keyword.\n // If a helper reference is passed in we don't need to do anything since it's either the result of a previous\n // helper keyword invocation, or a helper reference that was imported somewhere.\n if (param.type === 'StringLiteral') {\n return this.targetDynamicHelper({ type: 'literal', path: param.value });\n }\n return null;\n }\n\n private ownRules: PreprocessedComponentRule | undefined;\n\n private implementInvokesRule(node: ASTv1.Template, path: WalkerPath<ASTv1.Template>) {\n if (!this.ownRules?.invokes) {\n return;\n }\n let registrations: ASTv1.HashPair[] = [];\n for (let snippets of Object.values(this.ownRules.invokes)) {\n for (let snippet of snippets) {\n let dasherizedName = snippetToDasherizedName(snippet);\n if (!dasherizedName) {\n throw new Error(`Package rule contains unparseable component snippet: ${snippet}`);\n }\n let resolution = this.targetComponentHelper({ type: 'literal', path: dasherizedName }, node.loc);\n this.emit(path, resolution, (_target, id) => {\n registrations.push(this.env.syntax.builders.pair(dasherizedName, id));\n });\n }\n }\n if (registrations.length > 0) {\n node.body.unshift(\n this.env.syntax.builders.mustache(\n this.env.meta.jsutils.bindExpression(registrationHelper, path, { nameHint: 'registerComponents' }),\n [],\n this.env.syntax.builders.hash(registrations)\n )\n );\n }\n }\n\n visitor: ASTPlugin['visitor'] = {\n Template: {\n enter: (node, path) => {\n this.ownRules = this.findRules(this.env.filename);\n this.implementInvokesRule(node, path);\n if (this.env.locals) {\n this.scopeStack.pushMustacheBlock(this.env.locals);\n }\n },\n exit: () => {\n if (this.env.locals) {\n this.scopeStack.pop();\n }\n },\n },\n Block: {\n enter: node => {\n this.scopeStack.pushMustacheBlock(node.blockParams);\n },\n exit: () => {\n this.scopeStack.pop();\n },\n },\n BlockStatement: (node, path) => {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n let rootName = headOf(node.path);\n if (this.scopeStack.inScope(rootName, path)) {\n return;\n }\n if (isThisHead(node.path)) {\n return;\n }\n if (parts(node.path).length > 1) {\n // paths with a dot in them (which therefore split into more than\n // one \"part\") are classically understood by ember to be contextual\n // components, which means there's nothing to resolve at this\n // location.\n return;\n }\n if (node.path.original === 'component' && node.params.length > 0) {\n let resolution = this.handleComponentHelper(node.params[0]);\n this.emit(path, resolution, (node, newIdentifier) => {\n node.params[0] = newIdentifier;\n });\n return;\n }\n let resolution = this.targetComponent(node.path.original, node.path.original);\n this.emit(path, resolution, (node, newId) => {\n node.path = newId;\n });\n if (resolution?.type === 'component') {\n this.scopeStack.enteringComponentBlock(resolution, ({ argumentsAreComponents }) => {\n this.handleDynamicComponentArguments(\n rootName,\n argumentsAreComponents,\n extendPath(extendPath(path, 'hash'), 'pairs')\n );\n });\n }\n },\n SubExpression: (node, path) => {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n if (isThisHead(node.path)) {\n return;\n }\n if (this.scopeStack.inScope(headOf(node.path), path)) {\n return;\n }\n if (node.path.original === 'component' && node.params.length > 0) {\n let resolution = this.handleComponentHelper(node.params[0]);\n this.emit(path, resolution, (node, newId) => {\n node.params[0] = newId;\n });\n return;\n }\n if (node.path.original === 'helper' && node.params.length > 0) {\n let resolution = this.handleDynamicHelper(node.params[0]);\n this.emit(path, resolution, (node, newId) => {\n node.params[0] = newId;\n });\n return;\n }\n if (node.path.original === 'modifier' && node.params.length > 0) {\n let resolution = this.handleDynamicModifier(node.params[0]);\n this.emit(path, resolution, (node, newId) => {\n node.params[0] = newId;\n });\n return;\n }\n if (node.path.tail.length === 0 && node.path.head.type === 'VarHead') {\n let resolution = this.targetHelper(node.path.original);\n this.emit(path, resolution, (node, newId) => {\n node.path = newId;\n });\n }\n },\n MustacheStatement: {\n enter: (node, path) => {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n let rootName = headOf(node.path);\n if (this.scopeStack.inScope(rootName, path)) {\n return;\n }\n if (isThisHead(node.path)) {\n return;\n }\n if (parts(node.path).length > 1) {\n // paths with a dot in them (which therefore split into more than\n // one \"part\") are classically understood by ember to be contextual\n // components, which means there's nothing to resolve at this\n // location.\n return;\n }\n if (node.path.original.startsWith('@')) {\n // similarly, global resolution of helpers and components never\n // happens with argument paths (it could still be an invocation, but\n // it would be a lexically-scoped invocation, not one we need to\n // adjust)\n return;\n }\n if (node.path.original === 'component' && node.params.length > 0) {\n let resolution = this.handleComponentHelper(node.params[0]);\n this.emit(path, resolution, (node, newId) => {\n node.params[0] = newId;\n });\n return;\n }\n if (node.path.original === 'helper' && node.params.length > 0) {\n let resolution = this.handleDynamicHelper(node.params[0]);\n this.emit(path, resolution, (node, newIdentifier) => {\n node.params[0] = newIdentifier;\n });\n return;\n }\n if (path.parent?.node.type === 'AttrNode') {\n // this mustache is the value of an attribute. Components aren't\n // allowed here, so we're not ambiguous, so resolve a helper.\n let resolution = this.targetHelper(node.path.original);\n this.emit(path, resolution, (node, newIdentifier) => {\n node.path = newIdentifier;\n });\n return;\n }\n let hasArgs = node.params.length > 0 || node.hash.pairs.length > 0;\n let resolution = this.targetHelperOrComponent(node.path.original, node.path.loc, hasArgs);\n this.emit(path, resolution, (node, newIdentifier) => {\n node.path = newIdentifier;\n });\n if (resolution?.type === 'component') {\n this.handleDynamicComponentArguments(\n node.path.original,\n resolution.argumentsAreComponents,\n extendPath(extendPath(path, 'hash'), 'pairs')\n );\n }\n },\n },\n ElementModifierStatement: (node, path) => {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n if (this.scopeStack.inScope(headOf(node.path), path)) {\n return;\n }\n if (isThisHead(node.path)) {\n return;\n }\n if (isAtHead(node.path)) {\n return;\n }\n if (parts(node.path).length > 1) {\n // paths with a dot in them (which therefore split into more than\n // one \"part\") are classically understood by ember to be contextual\n // components. With the introduction of `Template strict mode` in Ember 3.25\n // it is also possible to pass modifiers this way which means there's nothing\n // to resolve at this location.\n return;\n }\n\n let resolution = this.targetElementModifier(node.path.original);\n this.emit(path, resolution, (node, newId) => {\n node.path = newId;\n });\n },\n ElementNode: {\n enter: (node, path) => {\n let rootName = node.tag.split('.')[0];\n if (!this.scopeStack.inScope(rootName, path)) {\n let resolution: ComponentResolution | null = null;\n\n // if it starts with lower case, it can't be a component we need to\n // globally resolve\n if (node.tag[0] !== node.tag[0].toLowerCase()) {\n resolution = this.targetComponent(dasherize(node.tag), node.tag);\n }\n\n this.emit(path, resolution, (node, newId) => {\n node.tag = newId.original;\n });\n if (resolution?.type === 'component') {\n this.scopeStack.enteringComponentBlock(resolution, ({ argumentsAreComponents }) => {\n this.handleDynamicComponentArguments(node.tag, argumentsAreComponents, extendPath(path, 'attributes'));\n });\n }\n }\n this.scopeStack.pushElementBlock(node.blockParams, node);\n },\n exit: () => {\n this.scopeStack.pop();\n },\n },\n };\n}\n\n// This is the AST transform that resolves components, helpers and modifiers at build time\nexport default function makeResolverTransform({ appRoot, emberVersion, externalNameHint, externalResolve }: Options) {\n let loader = new ResolverLoader(appRoot);\n let config = loader.resolver.options as CompatResolverOptions;\n const resolverTransform: ASTPluginBuilder<Env> = env => {\n if (env.strictMode) {\n return {\n name: 'embroider-build-time-resolver-strict-noop',\n visitor: {},\n };\n }\n return new TemplateResolver(\n env,\n config,\n builtInKeywords(emberVersion),\n supportsThisFallback(emberVersion),\n externalNameHint,\n externalResolve\n );\n };\n (resolverTransform as any).parallelBabel = {\n requireFile: __filename,\n buildUsing: 'makeResolverTransform',\n params: { appRoot: appRoot },\n };\n return resolverTransform;\n}\n\ninterface ComponentBlockMarker {\n type: 'componentBlockMarker';\n resolution: ComponentResolution;\n argumentsAreComponents: string[];\n exit: (marker: ComponentBlockMarker) => void;\n}\n\ntype ScopeEntry =\n | { type: 'mustache'; blockParams: string[] }\n | { type: 'element'; blockParams: string[]; childrenOf: ASTv1.ElementNode }\n | ComponentBlockMarker;\n\nclass ScopeStack {\n private stack: ScopeEntry[] = [];\n\n // mustache blocks like:\n //\n // {{#stuff as |some block vars|}}\n //\n // are relatively simple for us because there's a dedicated `Block` AST node\n // that exactly covers the range in which the variables are in scope.\n pushMustacheBlock(blockParams: string[]) {\n this.stack.unshift({ type: 'mustache', blockParams });\n }\n\n // element blocks like:\n //\n // <Stuff as |some block vars|>\n //\n // are *not* so simple for us because there's no single AST node that exactly\n // covers the range in which the variables are in scope. For example, the\n // *attributes* of the element do not see the variables, but the children of\n // the element do.\n pushElementBlock(blockParams: string[], childrenOf: ASTv1.ElementNode) {\n this.stack.unshift({ type: 'element', blockParams, childrenOf });\n }\n\n // and when we leave the block they go out of scope. If this block was tagged\n // by a safe component marker, we also clear that.\n pop() {\n this.stack.shift();\n let next = this.stack[0];\n if (next && next.type === 'componentBlockMarker') {\n next.exit(next);\n this.stack.shift();\n }\n }\n\n // right before we enter a block, we might determine that some of the values\n // that will be yielded as marked (by a rule) as safe to be used with the\n // {{component}} helper.\n enteringComponentBlock(resolution: ComponentResolution, exit: ComponentBlockMarker['exit']) {\n this.stack.unshift({\n type: 'componentBlockMarker',\n resolution,\n argumentsAreComponents: resolution.argumentsAreComponents.slice(),\n exit,\n });\n }\n\n inScope(name: string, fromPath: WalkerPath<ASTv1.Node>) {\n for (let scope of this.stack) {\n if (scope.type === 'mustache' && scope.blockParams.includes(name)) {\n return true;\n }\n if (\n scope.type === 'element' &&\n scope.blockParams.includes(name) &&\n withinElementBlock(fromPath, scope.childrenOf)\n ) {\n return true;\n }\n }\n return false;\n }\n\n safeComponentInScope(name: string): boolean {\n let parts = name.split('.');\n if (parts.length > 2) {\n // we let component rules specify that they yield components or objects\n // containing components. But not deeper than that. So the max path length\n // that can refer to a marked-safe component is two segments.\n return false;\n }\n for (let i = 0; i < this.stack.length - 1; i++) {\n let here = this.stack[i];\n let next = this.stack[i + 1];\n if ((here.type === 'mustache' || here.type === 'element') && next.type === 'componentBlockMarker') {\n let positionalIndex = here.blockParams.indexOf(parts[0]);\n if (positionalIndex === -1) {\n continue;\n }\n\n if (parts.length === 1) {\n if (next.resolution.yieldsComponents[positionalIndex] === true) {\n return true;\n }\n let sourceArg = next.resolution.yieldsArguments[positionalIndex];\n if (typeof sourceArg === 'string') {\n next.argumentsAreComponents.push(sourceArg);\n return true;\n }\n } else {\n let entry = next.resolution.yieldsComponents[positionalIndex];\n if (entry && typeof entry === 'object') {\n return entry[parts[1]] === true;\n }\n\n let argsEntry = next.resolution.yieldsArguments[positionalIndex];\n if (argsEntry && typeof argsEntry === 'object') {\n let sourceArg = argsEntry[parts[1]];\n if (typeof sourceArg === 'string') {\n next.argumentsAreComponents.push(sourceArg);\n return true;\n }\n }\n }\n // we found the source of the name, but there were no rules to cover it.\n // Don't keep searching higher, those are different names.\n return false;\n }\n }\n return false;\n }\n}\n\nfunction extendPath<N extends ASTv1.Node, K extends keyof N>(\n path: WalkerPath<N>,\n key: K\n): N[K] extends ASTv1.Node ? WalkerPath<N[K]> : N[K] extends ASTv1.Node[] ? WalkerPath<N[K][0]>[] : never {\n const _WalkerPath = path.constructor as {\n new <Child extends ASTv1.Node>(\n node: Child,\n parent?: WalkerPath<ASTv1.Node> | null,\n parentKey?: string | null\n ): WalkerPath<Child>;\n };\n let child = path.node[key];\n if (Array.isArray(child)) {\n return child.map(c => new _WalkerPath(c, path, key as string)) as any;\n } else {\n return new _WalkerPath(child as any, path, key as string) as any;\n }\n}\n\nfunction capitalize(word: string): string {\n return word[0].toUpperCase() + word.slice(1);\n}\n\n// ElementNodes have both children and attributes and both of those are\n// \"children\" in the abstract syntax tree sense, but here we want to distinguish\n// between them.\nfunction withinElementBlock(childPath: WalkerPath<ASTv1.Node>, ancestorNode: ASTv1.ElementNode): Boolean {\n let cursor: WalkerPath<ASTv1.Node> | null = childPath;\n while (cursor && cursor.node !== ancestorNode) {\n if (ancestorNode.children.includes(cursor.node as ASTv1.Statement)) {\n return true;\n }\n cursor = cursor.parent;\n }\n return false;\n}\nfunction appendArrays(objValue: any, srcValue: any) {\n if (Array.isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n}\n\nfunction headOf(path: any) {\n if (!path) return;\n\n return 'head' in path ? path.head.name : path.parts[0];\n}\n\nfunction isThisHead(path: any) {\n if (!path) return;\n\n if ('head' in path) {\n return path.head.type === 'ThisHead';\n }\n\n return path.this === true;\n}\n\nfunction isAtHead(path: any) {\n if (!path) return;\n\n if ('head' in path) {\n return path.head.type === 'AtHead';\n }\n\n return path.data === true;\n}\n\nfunction parts(path: any) {\n if (!path) return;\n\n return 'original' in path ? path.original.split('.') : path.parts;\n}\n\nfunction registrationHelper(context: { import: (module: string, name: string, hint?: string) => string }) {\n let Helper = context.import('@ember/component/helper', 'default', 'Helper');\n let getOwner = context.import('@ember/owner', 'getOwner');\n return `\n (class extends ${Helper} {\n compute(_positional, registrations) {\n let owner = ${getOwner}(this);\n for (let [name, definition] of Object.entries(registrations)) {\n owner.register(\\`component:\\${name}\\`, definition);\n }\n }\n })\n `;\n}\n"]}
|