@embroider/core 1.9.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +6 -20
- package/src/app.d.ts +4 -5
- package/src/app.js +43 -52
- package/src/app.js.map +1 -1
- package/src/babel-plugin-adjust-imports.d.ts +0 -1
- package/src/babel-plugin-adjust-imports.js +10 -17
- package/src/babel-plugin-adjust-imports.js.map +1 -1
- package/src/index.d.ts +0 -4
- package/src/index.js +2 -6
- package/src/index.js.map +1 -1
- package/src/messages.d.ts +3 -1
- package/src/messages.js +15 -4
- package/src/messages.js.map +1 -1
- package/src/packager.d.ts +4 -1
- package/src/packager.js +2 -1
- package/src/packager.js.map +1 -1
- package/src/portable-babel-config.js +1 -1
- package/src/portable-babel-config.js.map +1 -1
- package/src/babel-plugin-inline-hbs-deps-node.d.ts +0 -14
- package/src/babel-plugin-inline-hbs-deps-node.js +0 -27
- package/src/babel-plugin-inline-hbs-deps-node.js.map +0 -1
- package/src/babel-plugin-inline-hbs-deps.d.ts +0 -10
- package/src/babel-plugin-inline-hbs-deps.js +0 -134
- package/src/babel-plugin-inline-hbs-deps.js.map +0 -1
- package/src/babel-plugin-inline-hbs-node.d.ts +0 -7
- package/src/babel-plugin-inline-hbs-node.js +0 -15
- package/src/babel-plugin-inline-hbs-node.js.map +0 -1
- package/src/babel-plugin-inline-hbs.d.ts +0 -24
- package/src/babel-plugin-inline-hbs.js +0 -142
- package/src/babel-plugin-inline-hbs.js.map +0 -1
- package/src/babel-plugin-stage1-inline-hbs-node.d.ts +0 -12
- package/src/babel-plugin-stage1-inline-hbs-node.js +0 -9
- package/src/babel-plugin-stage1-inline-hbs-node.js.map +0 -1
- package/src/babel-plugin-stage1-inline-hbs.d.ts +0 -9
- package/src/babel-plugin-stage1-inline-hbs.js +0 -96
- package/src/babel-plugin-stage1-inline-hbs.js.map +0 -1
- package/src/browser-index.d.ts +0 -1
- package/src/browser-index.js +0 -6
- package/src/browser-index.js.map +0 -1
- package/src/ember-template-compiler-types.d.ts +0 -41
- package/src/ember-template-compiler-types.js +0 -3
- package/src/ember-template-compiler-types.js.map +0 -1
- package/src/load-ember-template-compiler.d.ts +0 -6
- package/src/load-ember-template-compiler.js +0 -57
- package/src/load-ember-template-compiler.js.map +0 -1
- package/src/mini-modules-polyfill.d.ts +0 -12
- package/src/mini-modules-polyfill.js +0 -80
- package/src/mini-modules-polyfill.js.map +0 -1
- package/src/patch-template-compiler.d.ts +0 -1
- package/src/patch-template-compiler.js +0 -176
- package/src/patch-template-compiler.js.map +0 -1
- package/src/resolver.d.ts +0 -14
- package/src/resolver.js +0 -3
- package/src/resolver.js.map +0 -1
- package/src/template-compiler-common.d.ts +0 -70
- package/src/template-compiler-common.js +0 -176
- package/src/template-compiler-common.js.map +0 -1
- package/src/template-compiler-node.d.ts +0 -17
- package/src/template-compiler-node.js +0 -32
- package/src/template-compiler-node.js.map +0 -1
@@ -1,80 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.handleImportDeclaration = void 0;
|
4
|
-
// this is intentionally not the whole babel-plugin-ember-modules-api-polyfill.
|
5
|
-
// That runs very early, so any usage of polyfilled imports that gets emitted by
|
6
|
-
// our other babel plugins can't take advantage of it.
|
7
|
-
//
|
8
|
-
// If I was going to try to do this properly, I would change
|
9
|
-
// babel-plugin-ember-modules-api-polyfill to run very late in the game, like
|
10
|
-
// this code does, so that other plugins could always not worry about it. But
|
11
|
-
// seeing as modules-api-polyfill is already on the way out, it's simpler to
|
12
|
-
// just handle the small piece of its functionality that matter to us:
|
13
|
-
//
|
14
|
-
// - all our usage (emitted by our babel plugins) is static imports, not dynamic
|
15
|
-
// ones, so it's OK to just walk the top level, saving us the cost of a full
|
16
|
-
// traverse
|
17
|
-
// - we only emit a handful of specific imports that are easy to just list here
|
18
|
-
//
|
19
|
-
//
|
20
|
-
let replacements = {
|
21
|
-
'@ember/component/template-only': {
|
22
|
-
default(t) {
|
23
|
-
return t.memberExpression(t.identifier('Ember'), t.identifier('_templateOnlyComponent'));
|
24
|
-
},
|
25
|
-
},
|
26
|
-
'@ember/template-factory': {
|
27
|
-
createTemplateFactory(t) {
|
28
|
-
return t.memberExpression(t.memberExpression(t.identifier('Ember'), t.identifier('HTMLBars')), t.identifier('template'));
|
29
|
-
},
|
30
|
-
},
|
31
|
-
'@ember/component': {
|
32
|
-
default(t) {
|
33
|
-
return t.memberExpression(t.identifier('Ember'), t.identifier('Component'));
|
34
|
-
},
|
35
|
-
setComponentTemplate(t) {
|
36
|
-
return t.memberExpression(t.identifier('Ember'), t.identifier('_setComponentTemplate'));
|
37
|
-
},
|
38
|
-
},
|
39
|
-
};
|
40
|
-
function miniModulesPolyfill(babel) {
|
41
|
-
let t = babel.types;
|
42
|
-
return {
|
43
|
-
visitor: {
|
44
|
-
Program: {
|
45
|
-
exit(path) {
|
46
|
-
for (let child of path.get('body')) {
|
47
|
-
if (child.isImportDeclaration()) {
|
48
|
-
let replacement = handleImportDeclaration(t, child);
|
49
|
-
if (replacement) {
|
50
|
-
path.replaceWith(replacement);
|
51
|
-
}
|
52
|
-
}
|
53
|
-
}
|
54
|
-
},
|
55
|
-
},
|
56
|
-
},
|
57
|
-
};
|
58
|
-
}
|
59
|
-
exports.default = miniModulesPolyfill;
|
60
|
-
function handleImportDeclaration(t, path) {
|
61
|
-
let match = replacements[path.node.source.value];
|
62
|
-
if (match) {
|
63
|
-
let specifiers = path.get('specifiers');
|
64
|
-
let replacers = specifiers.map(specifier => ({ replacer: match[specifier.node.local.name], specifier }));
|
65
|
-
if (replacers.every(r => Boolean(r.replacer))) {
|
66
|
-
path.replaceWith(t.variableDeclaration('const', replacers.map(r => t.variableDeclarator(r.specifier.node.local, r.replacer(t)))));
|
67
|
-
}
|
68
|
-
else {
|
69
|
-
for (let { specifier, replacer } of replacers) {
|
70
|
-
if (replacer) {
|
71
|
-
path.insertAfter(t.variableDeclaration('const', [t.variableDeclarator(specifier.node.local, replacer(t))]));
|
72
|
-
specifier.remove();
|
73
|
-
}
|
74
|
-
}
|
75
|
-
}
|
76
|
-
}
|
77
|
-
return undefined;
|
78
|
-
}
|
79
|
-
exports.handleImportDeclaration = handleImportDeclaration;
|
80
|
-
//# sourceMappingURL=mini-modules-polyfill.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"mini-modules-polyfill.js","sourceRoot":"","sources":["mini-modules-polyfill.ts"],"names":[],"mappings":"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","sourcesContent":["import type { types as t } from '@babel/core';\nimport type { NodePath } from '@babel/traverse';\n\ntype BabelTypes = typeof t;\n\n// this is intentionally not the whole babel-plugin-ember-modules-api-polyfill.\n// That runs very early, so any usage of polyfilled imports that gets emitted by\n// our other babel plugins can't take advantage of it.\n//\n// If I was going to try to do this properly, I would change\n// babel-plugin-ember-modules-api-polyfill to run very late in the game, like\n// this code does, so that other plugins could always not worry about it. But\n// seeing as modules-api-polyfill is already on the way out, it's simpler to\n// just handle the small piece of its functionality that matter to us:\n//\n// - all our usage (emitted by our babel plugins) is static imports, not dynamic\n// ones, so it's OK to just walk the top level, saving us the cost of a full\n// traverse\n// - we only emit a handful of specific imports that are easy to just list here\n//\n//\nlet replacements: { [moduleSpecifier: string]: { [name: string]: ((t: BabelTypes) => t.Expression) | undefined } } = {\n '@ember/component/template-only': {\n default(t: BabelTypes) {\n return t.memberExpression(t.identifier('Ember'), t.identifier('_templateOnlyComponent'));\n },\n },\n '@ember/template-factory': {\n createTemplateFactory(t) {\n return t.memberExpression(\n t.memberExpression(t.identifier('Ember'), t.identifier('HTMLBars')),\n t.identifier('template')\n );\n },\n },\n '@ember/component': {\n default(t: BabelTypes) {\n return t.memberExpression(t.identifier('Ember'), t.identifier('Component'));\n },\n setComponentTemplate(t: BabelTypes) {\n return t.memberExpression(t.identifier('Ember'), t.identifier('_setComponentTemplate'));\n },\n },\n};\n\nexport default function miniModulesPolyfill(babel: unknown) {\n let t = (babel as any).types as BabelTypes;\n return {\n visitor: {\n Program: {\n exit(path: NodePath<t.Program>) {\n for (let child of path.get('body')) {\n if (child.isImportDeclaration()) {\n let replacement = handleImportDeclaration(t, child);\n if (replacement) {\n path.replaceWith(replacement);\n }\n }\n }\n },\n },\n },\n };\n}\n\nexport function handleImportDeclaration(t: BabelTypes, path: NodePath<t.ImportDeclaration>) {\n let match = replacements[path.node.source.value];\n if (match) {\n let specifiers = path.get('specifiers');\n let replacers = specifiers.map(specifier => ({ replacer: match[specifier.node.local.name], specifier }));\n if (replacers.every(r => Boolean(r.replacer))) {\n path.replaceWith(\n t.variableDeclaration(\n 'const',\n replacers.map(r => t.variableDeclarator(r.specifier.node.local, r.replacer!(t)))\n )\n );\n } else {\n for (let { specifier, replacer } of replacers) {\n if (replacer) {\n path.insertAfter(t.variableDeclaration('const', [t.variableDeclarator(specifier.node.local, replacer(t))]));\n specifier.remove();\n }\n }\n }\n }\n return undefined;\n}\n"]}
|
@@ -1 +0,0 @@
|
|
1
|
-
export declare function patch(source: string, templateCompilerPath: string): string;
|
@@ -1,176 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.patch = void 0;
|
4
|
-
const core_1 = require("@babel/core");
|
5
|
-
function parseVersion(templateCompilerPath, source) {
|
6
|
-
// ember-template-compiler.js contains a comment that indicates what version it is for
|
7
|
-
// that looks like:
|
8
|
-
/*!
|
9
|
-
* @overview Ember - JavaScript Application Framework
|
10
|
-
* @copyright Copyright 2011-2020 Tilde Inc. and contributors
|
11
|
-
* Portions Copyright 2006-2011 Strobe Inc.
|
12
|
-
* Portions Copyright 2008-2011 Apple Inc. All rights reserved.
|
13
|
-
* @license Licensed under MIT license
|
14
|
-
* See https://raw.github.com/emberjs/ember.js/master/LICENSE
|
15
|
-
* @version 3.25.1
|
16
|
-
*/
|
17
|
-
let version = source.match(/@version\s+([\d\.]+)/);
|
18
|
-
if (!version || !version[1]) {
|
19
|
-
throw new Error(`Could not find version string in \`${templateCompilerPath}\`. Maybe we don't support your ember-source version?`);
|
20
|
-
}
|
21
|
-
let numbers = version[1].split('.');
|
22
|
-
let major = parseInt(numbers[0], 10);
|
23
|
-
let minor = parseInt(numbers[1], 10);
|
24
|
-
let patch = parseInt(numbers[2], 10);
|
25
|
-
return { major, minor, patch };
|
26
|
-
}
|
27
|
-
function emberVersionGte(templateCompilerPath, source, major, minor) {
|
28
|
-
let actual = parseVersion(templateCompilerPath, source);
|
29
|
-
return actual.major > major || (actual.major === major && actual.minor >= minor);
|
30
|
-
}
|
31
|
-
function patch(source, templateCompilerPath) {
|
32
|
-
let version = parseVersion(templateCompilerPath, source);
|
33
|
-
if (emberVersionGte(templateCompilerPath, source, 3, 26) ||
|
34
|
-
(version.major === 3 && version.minor === 25 && version.patch >= 2) ||
|
35
|
-
(version.major === 3 && version.minor === 24 && version.patch >= 3)) {
|
36
|
-
// no modifications are needed after
|
37
|
-
// https://github.com/emberjs/ember.js/pull/19426 and backported to
|
38
|
-
// 3.26.0-beta.3, 3.25.2, 3.24.3
|
39
|
-
return source;
|
40
|
-
}
|
41
|
-
let replacedVar = false;
|
42
|
-
let patchedSource;
|
43
|
-
let needsAngleBracketPrinterFix = emberVersionGte(templateCompilerPath, source, 3, 12) && !emberVersionGte(templateCompilerPath, source, 3, 17);
|
44
|
-
if (needsAngleBracketPrinterFix) {
|
45
|
-
// here we are stripping off the first `var Ember;`. That one small change
|
46
|
-
// lets us crack open the file and get access to its internal loader, because
|
47
|
-
// we can give it our own predefined `Ember` variable instead, which it will
|
48
|
-
// use and put `Ember.__loader` onto.
|
49
|
-
//
|
50
|
-
// on ember 3.12 through 3.16 (which use variants of glimmer-vm 0.38.5) we
|
51
|
-
// also apply a patch to the printer in @glimmer/syntax to fix
|
52
|
-
// https://github.com/glimmerjs/glimmer-vm/pull/941/files because it can
|
53
|
-
// really bork apps under embroider, and we'd like to support at least all
|
54
|
-
// active LTS versions of ember.
|
55
|
-
patchedSource = (0, core_1.transform)(source, {
|
56
|
-
plugins: [
|
57
|
-
function () {
|
58
|
-
return {
|
59
|
-
visitor: {
|
60
|
-
VariableDeclarator(path) {
|
61
|
-
let id = path.node.id;
|
62
|
-
if (id.type === 'Identifier' && id.name === 'Ember' && !replacedVar) {
|
63
|
-
replacedVar = true;
|
64
|
-
path.remove();
|
65
|
-
}
|
66
|
-
},
|
67
|
-
CallExpression: {
|
68
|
-
enter(path, state) {
|
69
|
-
let callee = path.get('callee');
|
70
|
-
if (!callee.isIdentifier() || callee.node.name !== 'define') {
|
71
|
-
return;
|
72
|
-
}
|
73
|
-
let firstArg = path.get('arguments')[0];
|
74
|
-
if (!firstArg.isStringLiteral() || firstArg.node.value !== '@glimmer/syntax') {
|
75
|
-
return;
|
76
|
-
}
|
77
|
-
state.definingGlimmerSyntax = path;
|
78
|
-
},
|
79
|
-
exit(path, state) {
|
80
|
-
if (state.definingGlimmerSyntax === path) {
|
81
|
-
state.definingGlimmerSyntax = false;
|
82
|
-
}
|
83
|
-
},
|
84
|
-
},
|
85
|
-
FunctionDeclaration: {
|
86
|
-
enter(path, state) {
|
87
|
-
if (!state.definingGlimmerSyntax) {
|
88
|
-
return;
|
89
|
-
}
|
90
|
-
let id = path.get('id');
|
91
|
-
if (id.isIdentifier() && id.node.name === 'build') {
|
92
|
-
state.declaringBuildFunction = path;
|
93
|
-
}
|
94
|
-
},
|
95
|
-
exit(path, state) {
|
96
|
-
if (state.declaringBuildFunction === path) {
|
97
|
-
state.declaringBuildFunction = false;
|
98
|
-
}
|
99
|
-
},
|
100
|
-
},
|
101
|
-
SwitchCase: {
|
102
|
-
enter(path, state) {
|
103
|
-
if (!state.definingGlimmerSyntax) {
|
104
|
-
return;
|
105
|
-
}
|
106
|
-
let test = path.get('test');
|
107
|
-
if (test.isStringLiteral() && test.node.value === 'ElementNode') {
|
108
|
-
state.caseElementNode = path;
|
109
|
-
}
|
110
|
-
},
|
111
|
-
exit(path, state) {
|
112
|
-
if (state.caseElementNode === path) {
|
113
|
-
state.caseElementNode = false;
|
114
|
-
}
|
115
|
-
},
|
116
|
-
},
|
117
|
-
IfStatement(path, state) {
|
118
|
-
if (!state.caseElementNode) {
|
119
|
-
return;
|
120
|
-
}
|
121
|
-
let test = path.get('test');
|
122
|
-
// the place we want is the only if with a computed member
|
123
|
-
// expression predicate.
|
124
|
-
if (test.isMemberExpression() && test.node.computed) {
|
125
|
-
path.node.alternate = core_1.types.ifStatement(core_1.types.memberExpression(core_1.types.identifier('ast'), core_1.types.identifier('selfClosing')), core_1.types.blockStatement([
|
126
|
-
core_1.types.expressionStatement(core_1.types.callExpression(core_1.types.memberExpression(core_1.types.identifier('output'), core_1.types.identifier('push')), [
|
127
|
-
core_1.types.stringLiteral(' />'),
|
128
|
-
])),
|
129
|
-
]), path.node.alternate);
|
130
|
-
}
|
131
|
-
},
|
132
|
-
},
|
133
|
-
};
|
134
|
-
},
|
135
|
-
],
|
136
|
-
}).code;
|
137
|
-
}
|
138
|
-
else {
|
139
|
-
// applies to < 3.12 and >= 3.17
|
140
|
-
//
|
141
|
-
// here we are stripping off the first `var Ember;`. That one small change
|
142
|
-
// lets us crack open the file and get access to its internal loader, because
|
143
|
-
// we can give it our own predefined `Ember` variable instead, which it will
|
144
|
-
// use and put `Ember.__loader` onto.
|
145
|
-
patchedSource = (0, core_1.transform)(source, {
|
146
|
-
generatorOpts: {
|
147
|
-
compact: true,
|
148
|
-
},
|
149
|
-
plugins: [
|
150
|
-
function () {
|
151
|
-
return {
|
152
|
-
visitor: {
|
153
|
-
VariableDeclarator(path) {
|
154
|
-
let id = path.node.id;
|
155
|
-
if (id.type === 'Identifier' && id.name === 'Ember' && !replacedVar) {
|
156
|
-
replacedVar = true;
|
157
|
-
path.remove();
|
158
|
-
}
|
159
|
-
},
|
160
|
-
},
|
161
|
-
};
|
162
|
-
},
|
163
|
-
],
|
164
|
-
}).code;
|
165
|
-
}
|
166
|
-
if (!replacedVar) {
|
167
|
-
throw new Error(`didn't find expected source in ${templateCompilerPath}. Maybe we don't support your ember-source version?`);
|
168
|
-
}
|
169
|
-
return `
|
170
|
-
let Ember = {};
|
171
|
-
${patchedSource};
|
172
|
-
module.exports.Ember = Ember;
|
173
|
-
`;
|
174
|
-
}
|
175
|
-
exports.patch = patch;
|
176
|
-
//# sourceMappingURL=patch-template-compiler.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"patch-template-compiler.js","sourceRoot":"","sources":["patch-template-compiler.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodePath } from '@babel/traverse';\nimport { transform, types as t } from '@babel/core';\n\nfunction parseVersion(templateCompilerPath: string, source: string): { major: number; minor: number; patch: number } {\n // ember-template-compiler.js contains a comment that indicates what version it is for\n // that looks like:\n\n /*!\n * @overview Ember - JavaScript Application Framework\n * @copyright Copyright 2011-2020 Tilde Inc. and contributors\n * Portions Copyright 2006-2011 Strobe Inc.\n * Portions Copyright 2008-2011 Apple Inc. All rights reserved.\n * @license Licensed under MIT license\n * See https://raw.github.com/emberjs/ember.js/master/LICENSE\n * @version 3.25.1\n */\n\n let version = source.match(/@version\\s+([\\d\\.]+)/);\n if (!version || !version[1]) {\n throw new Error(\n `Could not find version string in \\`${templateCompilerPath}\\`. Maybe we don't support your ember-source version?`\n );\n }\n\n let numbers = version[1].split('.');\n let major = parseInt(numbers[0], 10);\n let minor = parseInt(numbers[1], 10);\n let patch = parseInt(numbers[2], 10);\n\n return { major, minor, patch };\n}\n\nfunction emberVersionGte(templateCompilerPath: string, source: string, major: number, minor: number): boolean {\n let actual = parseVersion(templateCompilerPath, source);\n\n return actual.major > major || (actual.major === major && actual.minor >= minor);\n}\n\nexport function patch(source: string, templateCompilerPath: string): string {\n let version = parseVersion(templateCompilerPath, source);\n\n if (\n emberVersionGte(templateCompilerPath, source, 3, 26) ||\n (version.major === 3 && version.minor === 25 && version.patch >= 2) ||\n (version.major === 3 && version.minor === 24 && version.patch >= 3)\n ) {\n // no modifications are needed after\n // https://github.com/emberjs/ember.js/pull/19426 and backported to\n // 3.26.0-beta.3, 3.25.2, 3.24.3\n return source;\n }\n\n let replacedVar = false;\n let patchedSource;\n\n let needsAngleBracketPrinterFix =\n emberVersionGte(templateCompilerPath, source, 3, 12) && !emberVersionGte(templateCompilerPath, source, 3, 17);\n\n if (needsAngleBracketPrinterFix) {\n // here we are stripping off the first `var Ember;`. That one small change\n // lets us crack open the file and get access to its internal loader, because\n // we can give it our own predefined `Ember` variable instead, which it will\n // use and put `Ember.__loader` onto.\n //\n // on ember 3.12 through 3.16 (which use variants of glimmer-vm 0.38.5) we\n // also apply a patch to the printer in @glimmer/syntax to fix\n // https://github.com/glimmerjs/glimmer-vm/pull/941/files because it can\n // really bork apps under embroider, and we'd like to support at least all\n // active LTS versions of ember.\n patchedSource = transform(source, {\n plugins: [\n function () {\n return {\n visitor: {\n VariableDeclarator(path: NodePath<t.VariableDeclarator>) {\n let id = path.node.id;\n if (id.type === 'Identifier' && id.name === 'Ember' && !replacedVar) {\n replacedVar = true;\n path.remove();\n }\n },\n CallExpression: {\n enter(path: NodePath<t.CallExpression>, state: BabelState) {\n let callee = path.get('callee');\n if (!callee.isIdentifier() || callee.node.name !== 'define') {\n return;\n }\n let firstArg = path.get('arguments')[0];\n if (!firstArg.isStringLiteral() || firstArg.node.value !== '@glimmer/syntax') {\n return;\n }\n state.definingGlimmerSyntax = path;\n },\n exit(path: NodePath<t.CallExpression>, state: BabelState) {\n if (state.definingGlimmerSyntax === path) {\n state.definingGlimmerSyntax = false;\n }\n },\n },\n FunctionDeclaration: {\n enter(path: NodePath<t.FunctionDeclaration>, state: BabelState) {\n if (!state.definingGlimmerSyntax) {\n return;\n }\n let id = path.get('id');\n if (id.isIdentifier() && id.node.name === 'build') {\n state.declaringBuildFunction = path;\n }\n },\n exit(path: NodePath<t.FunctionDeclaration>, state: BabelState) {\n if (state.declaringBuildFunction === path) {\n state.declaringBuildFunction = false;\n }\n },\n },\n SwitchCase: {\n enter(path: NodePath<t.SwitchCase>, state: BabelState) {\n if (!state.definingGlimmerSyntax) {\n return;\n }\n let test = path.get('test');\n if (test.isStringLiteral() && test.node.value === 'ElementNode') {\n state.caseElementNode = path;\n }\n },\n exit(path: NodePath<t.SwitchCase>, state: BabelState) {\n if (state.caseElementNode === path) {\n state.caseElementNode = false;\n }\n },\n },\n IfStatement(path: NodePath<t.IfStatement>, state: BabelState) {\n if (!state.caseElementNode) {\n return;\n }\n let test = path.get('test');\n // the place we want is the only if with a computed member\n // expression predicate.\n if (test.isMemberExpression() && test.node.computed) {\n path.node.alternate = t.ifStatement(\n t.memberExpression(t.identifier('ast'), t.identifier('selfClosing')),\n t.blockStatement([\n t.expressionStatement(\n t.callExpression(t.memberExpression(t.identifier('output'), t.identifier('push')), [\n t.stringLiteral(' />'),\n ])\n ),\n ]),\n path.node.alternate\n );\n }\n },\n },\n };\n },\n ],\n })!.code!;\n } else {\n // applies to < 3.12 and >= 3.17\n //\n // here we are stripping off the first `var Ember;`. That one small change\n // lets us crack open the file and get access to its internal loader, because\n // we can give it our own predefined `Ember` variable instead, which it will\n // use and put `Ember.__loader` onto.\n patchedSource = transform(source, {\n generatorOpts: {\n compact: true,\n },\n plugins: [\n function () {\n return {\n visitor: {\n VariableDeclarator(path: NodePath<t.VariableDeclarator>) {\n let id = path.node.id;\n if (id.type === 'Identifier' && id.name === 'Ember' && !replacedVar) {\n replacedVar = true;\n path.remove();\n }\n },\n },\n };\n },\n ],\n })!.code!;\n }\n\n if (!replacedVar) {\n throw new Error(\n `didn't find expected source in ${templateCompilerPath}. Maybe we don't support your ember-source version?`\n );\n }\n\n return `\n let Ember = {};\n ${patchedSource};\n module.exports.Ember = Ember;\n `;\n}\n\ninterface BabelState {\n definingGlimmerSyntax: NodePath | false;\n declaringBuildFunction: NodePath | false;\n caseElementNode: NodePath | false;\n}\n"]}
|
package/src/resolver.d.ts
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
import type { TemplateCompiler } from './template-compiler-common';
|
2
|
-
import { Options } from './babel-plugin-adjust-imports';
|
3
|
-
export interface ResolvedDep {
|
4
|
-
runtimeName: string;
|
5
|
-
path: string;
|
6
|
-
absPath: string;
|
7
|
-
}
|
8
|
-
export interface Resolver {
|
9
|
-
astTransformer(templateCompiler: TemplateCompiler): unknown;
|
10
|
-
dependenciesOf(moduleName: string): ResolvedDep[];
|
11
|
-
absPathToRuntimePath(absPath: string): string;
|
12
|
-
absPathToRuntimeName(absPath: string): string;
|
13
|
-
adjustImportsOptions: Options;
|
14
|
-
}
|
package/src/resolver.js
DELETED
package/src/resolver.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["resolver.ts"],"names":[],"mappings":"","sourcesContent":["import type { TemplateCompiler } from './template-compiler-common';\nimport { Options } from './babel-plugin-adjust-imports';\n\nexport interface ResolvedDep {\n runtimeName: string;\n path: string;\n absPath: string;\n}\n\nexport interface Resolver {\n astTransformer(templateCompiler: TemplateCompiler): unknown;\n dependenciesOf(moduleName: string): ResolvedDep[];\n\n // this takes an absolute path to a file and gives back a path like\n // \"the-package-name/path/to/the-file.js\", while taking into account any\n // backward-compatible runtime name of the package. It's used by the template\n // compiler, because this is the kind of path AST plugins expect to see.\n absPathToRuntimePath(absPath: string): string;\n\n // this takes an absolute path to a file and gives back the runtime name of\n // that module, as it would tradtionally be named within loader.js.\n absPathToRuntimeName(absPath: string): string;\n\n adjustImportsOptions: Options;\n}\n"]}
|
@@ -1,70 +0,0 @@
|
|
1
|
-
import { Resolver, ResolvedDep } from './resolver';
|
2
|
-
export interface Plugins {
|
3
|
-
ast?: unknown[];
|
4
|
-
}
|
5
|
-
export interface AST {
|
6
|
-
_deliberatelyOpaque: 'AST';
|
7
|
-
}
|
8
|
-
export interface PreprocessOptions {
|
9
|
-
contents: string;
|
10
|
-
moduleName: string;
|
11
|
-
plugins?: Plugins;
|
12
|
-
filename?: string;
|
13
|
-
parseOptions?: {
|
14
|
-
srcName?: string;
|
15
|
-
ignoreStandalone?: boolean;
|
16
|
-
};
|
17
|
-
mode?: 'codemod' | 'precompile';
|
18
|
-
strictMode?: boolean;
|
19
|
-
locals?: string[];
|
20
|
-
}
|
21
|
-
export interface PrinterOptions {
|
22
|
-
entityEncoding?: 'transformed' | 'raw';
|
23
|
-
}
|
24
|
-
export interface GlimmerSyntax {
|
25
|
-
preprocess(html: string, options?: PreprocessOptions): AST;
|
26
|
-
print(ast: AST, options?: PrinterOptions): string;
|
27
|
-
defaultOptions(options: PreprocessOptions): PreprocessOptions;
|
28
|
-
precompile(templateContents: string, options: {
|
29
|
-
contents: string;
|
30
|
-
moduleName: string;
|
31
|
-
filename: string;
|
32
|
-
plugins?: any;
|
33
|
-
parseOptions?: {
|
34
|
-
srcName?: string;
|
35
|
-
};
|
36
|
-
}): string;
|
37
|
-
_Ember: {
|
38
|
-
FEATURES: any;
|
39
|
-
ENV: any;
|
40
|
-
};
|
41
|
-
}
|
42
|
-
export interface TemplateCompilerParams {
|
43
|
-
loadEmberTemplateCompiler: () => {
|
44
|
-
theExports: unknown;
|
45
|
-
cacheKey: string;
|
46
|
-
};
|
47
|
-
resolver?: Resolver;
|
48
|
-
EmberENV: unknown;
|
49
|
-
plugins: Plugins;
|
50
|
-
}
|
51
|
-
export declare class TemplateCompiler {
|
52
|
-
private loadEmberTemplateCompiler;
|
53
|
-
private resolver?;
|
54
|
-
private EmberENV;
|
55
|
-
private plugins;
|
56
|
-
constructor(params: TemplateCompilerParams);
|
57
|
-
private get syntax();
|
58
|
-
get cacheKey(): string;
|
59
|
-
private setup;
|
60
|
-
private getReversedASTPlugins;
|
61
|
-
precompile(templateSource: string, options: Record<string, unknown> & {
|
62
|
-
filename: string;
|
63
|
-
}): {
|
64
|
-
compiled: string;
|
65
|
-
dependencies: ResolvedDep[];
|
66
|
-
};
|
67
|
-
applyTransforms(moduleName: string, contents: string): string;
|
68
|
-
parse(moduleName: string, contents: string): AST;
|
69
|
-
baseDir(): string;
|
70
|
-
}
|
@@ -1,176 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
7
|
-
};
|
8
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
9
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
10
|
-
};
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
-
exports.TemplateCompiler = void 0;
|
13
|
-
const strip_bom_1 = __importDefault(require("strip-bom"));
|
14
|
-
const path_1 = require("path");
|
15
|
-
const typescript_memoize_1 = require("typescript-memoize");
|
16
|
-
const wrap_legacy_hbs_plugin_if_needed_1 = __importDefault(require("wrap-legacy-hbs-plugin-if-needed"));
|
17
|
-
class TemplateCompiler {
|
18
|
-
constructor(params) {
|
19
|
-
this.loadEmberTemplateCompiler = params.loadEmberTemplateCompiler;
|
20
|
-
this.resolver = params.resolver;
|
21
|
-
this.EmberENV = params.EmberENV;
|
22
|
-
this.plugins = params.plugins;
|
23
|
-
}
|
24
|
-
get syntax() {
|
25
|
-
return this.setup().syntax;
|
26
|
-
}
|
27
|
-
get cacheKey() {
|
28
|
-
return this.setup().cacheKey;
|
29
|
-
}
|
30
|
-
setup() {
|
31
|
-
let { theExports, cacheKey } = this.loadEmberTemplateCompiler();
|
32
|
-
let syntax = loadGlimmerSyntax(theExports);
|
33
|
-
initializeEmberENV(syntax, this.EmberENV);
|
34
|
-
// todo: get resolver reflected in cacheKey
|
35
|
-
return { syntax, cacheKey };
|
36
|
-
}
|
37
|
-
getReversedASTPlugins(ast) {
|
38
|
-
return ast.slice().reverse();
|
39
|
-
}
|
40
|
-
// Compiles to the wire format plus dependency list.
|
41
|
-
precompile(templateSource, options) {
|
42
|
-
var _a, _b;
|
43
|
-
let dependencies;
|
44
|
-
let runtimeName;
|
45
|
-
let filename = options.filename;
|
46
|
-
if (this.resolver) {
|
47
|
-
runtimeName = this.resolver.absPathToRuntimePath(filename);
|
48
|
-
}
|
49
|
-
else {
|
50
|
-
runtimeName = filename;
|
51
|
-
}
|
52
|
-
let opts = this.syntax.defaultOptions({ contents: templateSource, moduleName: filename });
|
53
|
-
let plugins = {
|
54
|
-
...opts === null || opts === void 0 ? void 0 : opts.plugins,
|
55
|
-
ast: [
|
56
|
-
...this.getReversedASTPlugins(this.plugins.ast),
|
57
|
-
this.resolver && this.resolver.astTransformer(this),
|
58
|
-
// Ember 3.27+ uses _buildCompileOptions will not add AST plugins to its result
|
59
|
-
...((_b = (_a = opts === null || opts === void 0 ? void 0 : opts.plugins) === null || _a === void 0 ? void 0 : _a.ast) !== null && _b !== void 0 ? _b : []),
|
60
|
-
].filter(Boolean),
|
61
|
-
};
|
62
|
-
let compiled = this.syntax.precompile((0, strip_bom_1.default)(templateSource), {
|
63
|
-
contents: templateSource,
|
64
|
-
moduleName: runtimeName,
|
65
|
-
plugins,
|
66
|
-
...options,
|
67
|
-
});
|
68
|
-
if (this.resolver) {
|
69
|
-
dependencies = this.resolver.dependenciesOf(filename);
|
70
|
-
}
|
71
|
-
else {
|
72
|
-
dependencies = [];
|
73
|
-
}
|
74
|
-
return { compiled, dependencies };
|
75
|
-
}
|
76
|
-
// Applies all custom AST transforms and emits the results still as
|
77
|
-
// handlebars.
|
78
|
-
applyTransforms(moduleName, contents) {
|
79
|
-
let opts = this.syntax.defaultOptions({ contents, moduleName });
|
80
|
-
// the user-provided plugins come first in the list, and those are the
|
81
|
-
// only ones we want to run. The built-in plugins don't need to run here
|
82
|
-
// in stage1, it's better that they run in stage3 when the appropriate
|
83
|
-
// ember version is in charge.
|
84
|
-
//
|
85
|
-
// rather than slicing them off, we could choose instead to not call
|
86
|
-
// syntax.defaultOptions, but then we lose some of the compatibility
|
87
|
-
// normalization that it does on the user-provided plugins.
|
88
|
-
opts.plugins = opts.plugins || {}; // Ember 3.27+ won't add opts.plugins
|
89
|
-
opts.plugins.ast = this.getReversedASTPlugins(this.plugins.ast).map(plugin => {
|
90
|
-
// Although the precompile API does, this direct glimmer syntax api
|
91
|
-
// does not support these legacy plugins, so we must wrap them.
|
92
|
-
return (0, wrap_legacy_hbs_plugin_if_needed_1.default)(plugin);
|
93
|
-
});
|
94
|
-
// instructs glimmer-vm to preserve entity encodings (e.g. don't parse -> ' ')
|
95
|
-
opts.mode = 'codemod';
|
96
|
-
opts.filename = moduleName;
|
97
|
-
opts.moduleName = this.resolver ? this.resolver.absPathToRuntimePath(moduleName) || moduleName : moduleName;
|
98
|
-
let ast = this.syntax.preprocess(contents, opts);
|
99
|
-
return this.syntax.print(ast, { entityEncoding: 'raw' });
|
100
|
-
}
|
101
|
-
parse(moduleName, contents) {
|
102
|
-
// this is just a parse, so we deliberately don't run any plugins.
|
103
|
-
let opts = { contents, moduleName, plugins: {} };
|
104
|
-
return this.syntax.preprocess(contents, opts);
|
105
|
-
}
|
106
|
-
baseDir() {
|
107
|
-
return (0, path_1.join)(__dirname, '..');
|
108
|
-
}
|
109
|
-
}
|
110
|
-
__decorate([
|
111
|
-
(0, typescript_memoize_1.Memoize)()
|
112
|
-
], TemplateCompiler.prototype, "setup", null);
|
113
|
-
__decorate([
|
114
|
-
(0, typescript_memoize_1.Memoize)()
|
115
|
-
], TemplateCompiler.prototype, "getReversedASTPlugins", null);
|
116
|
-
exports.TemplateCompiler = TemplateCompiler;
|
117
|
-
// this matches the setup done by ember-cli-htmlbars: https://git.io/JtbN6
|
118
|
-
function initializeEmberENV(syntax, EmberENV) {
|
119
|
-
if (!EmberENV) {
|
120
|
-
return;
|
121
|
-
}
|
122
|
-
let props;
|
123
|
-
if (EmberENV.FEATURES) {
|
124
|
-
props = Object.keys(EmberENV.FEATURES);
|
125
|
-
props.forEach(prop => {
|
126
|
-
syntax._Ember.FEATURES[prop] = EmberENV.FEATURES[prop];
|
127
|
-
});
|
128
|
-
}
|
129
|
-
if (EmberENV) {
|
130
|
-
props = Object.keys(EmberENV);
|
131
|
-
props.forEach(prop => {
|
132
|
-
if (prop === 'FEATURES') {
|
133
|
-
return;
|
134
|
-
}
|
135
|
-
syntax._Ember.ENV[prop] = EmberENV[prop];
|
136
|
-
});
|
137
|
-
}
|
138
|
-
}
|
139
|
-
// we could directly depend on @glimmer/syntax and have nice types and
|
140
|
-
// everything. But the problem is, we really want to use the exact version that
|
141
|
-
// the app itself is using, and its copy is bundled away inside
|
142
|
-
// ember-template-compiler.js.
|
143
|
-
function loadGlimmerSyntax(emberTemplateCompilerExports) {
|
144
|
-
var _a, _b;
|
145
|
-
// detect if we are using an Ember version with the exports we need
|
146
|
-
// (from https://github.com/emberjs/ember.js/pull/19426)
|
147
|
-
if (emberTemplateCompilerExports._preprocess !== undefined) {
|
148
|
-
return {
|
149
|
-
print: emberTemplateCompilerExports._print,
|
150
|
-
preprocess: emberTemplateCompilerExports._preprocess,
|
151
|
-
defaultOptions: emberTemplateCompilerExports._buildCompileOptions,
|
152
|
-
precompile: emberTemplateCompilerExports.precompile,
|
153
|
-
_Ember: emberTemplateCompilerExports._Ember,
|
154
|
-
};
|
155
|
-
}
|
156
|
-
else {
|
157
|
-
// Older Ember versions (prior to 3.27) do not expose a public way to to source 2 source compilation of templates.
|
158
|
-
// because of this, we must resort to some hackery.
|
159
|
-
//
|
160
|
-
// We use the following API's (that we grab from Ember.__loader):
|
161
|
-
//
|
162
|
-
// * glimmer/syntax's preprocess
|
163
|
-
// * glimmer/syntax's print
|
164
|
-
// * ember-template-compiler/lib/system/compile-options's defaultOptions
|
165
|
-
let syntax = ((_a = emberTemplateCompilerExports.Ember) !== null && _a !== void 0 ? _a : emberTemplateCompilerExports._Ember).__loader.require('@glimmer/syntax');
|
166
|
-
let compilerOptions = ((_b = emberTemplateCompilerExports.Ember) !== null && _b !== void 0 ? _b : emberTemplateCompilerExports._Ember).__loader.require('ember-template-compiler/lib/system/compile-options');
|
167
|
-
return {
|
168
|
-
print: syntax.print,
|
169
|
-
preprocess: syntax.preprocess,
|
170
|
-
defaultOptions: compilerOptions.default,
|
171
|
-
precompile: emberTemplateCompilerExports.precompile,
|
172
|
-
_Ember: emberTemplateCompilerExports._Ember,
|
173
|
-
};
|
174
|
-
}
|
175
|
-
}
|
176
|
-
//# sourceMappingURL=template-compiler-common.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"template-compiler-common.js","sourceRoot":"","sources":["template-compiler-common.ts"],"names":[],"mappings":"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","sourcesContent":["import stripBom from 'strip-bom';\nimport { Resolver, ResolvedDep } from './resolver';\nimport { join } from 'path';\nimport { Memoize } from 'typescript-memoize';\nimport wrapLegacyHbsPluginIfNeeded from 'wrap-legacy-hbs-plugin-if-needed';\n\nexport interface Plugins {\n ast?: unknown[];\n}\n\nexport interface AST {\n _deliberatelyOpaque: 'AST';\n}\n\nexport interface PreprocessOptions {\n contents: string;\n moduleName: string;\n plugins?: Plugins;\n filename?: string;\n\n parseOptions?: {\n srcName?: string;\n ignoreStandalone?: boolean;\n };\n\n // added in Ember 3.17 (@glimmer/syntax@0.40.2)\n mode?: 'codemod' | 'precompile';\n\n // added in Ember 3.25\n strictMode?: boolean;\n locals?: string[];\n}\n\nexport interface PrinterOptions {\n entityEncoding?: 'transformed' | 'raw';\n}\n\n// This just reflects the API we're extracting from ember-template-compiler.js,\n// plus a cache key that lets us know when the underlying source has remained\n// stable.\nexport interface GlimmerSyntax {\n preprocess(html: string, options?: PreprocessOptions): AST;\n print(ast: AST, options?: PrinterOptions): string;\n defaultOptions(options: PreprocessOptions): PreprocessOptions;\n precompile(\n templateContents: string,\n options: {\n contents: string;\n moduleName: string;\n filename: string;\n plugins?: any;\n parseOptions?: {\n srcName?: string;\n };\n }\n ): string;\n _Ember: { FEATURES: any; ENV: any };\n}\n\nexport interface TemplateCompilerParams {\n // this should be the exports object from ember-template-compiler.js. It's\n // \"unknown\" here because it changes shape in different ember versions, we\n // will do our best to consume it.\n loadEmberTemplateCompiler: () => { theExports: unknown; cacheKey: string };\n resolver?: Resolver;\n EmberENV: unknown;\n plugins: Plugins;\n}\n\nexport class TemplateCompiler {\n private loadEmberTemplateCompiler: () => { theExports: unknown; cacheKey: string };\n private resolver?: Resolver;\n private EmberENV: unknown;\n private plugins: Plugins;\n\n constructor(params: TemplateCompilerParams) {\n this.loadEmberTemplateCompiler = params.loadEmberTemplateCompiler;\n this.resolver = params.resolver;\n this.EmberENV = params.EmberENV;\n this.plugins = params.plugins;\n }\n\n private get syntax(): GlimmerSyntax {\n return this.setup().syntax;\n }\n\n get cacheKey(): string {\n return this.setup().cacheKey;\n }\n\n @Memoize()\n private setup() {\n let { theExports, cacheKey } = this.loadEmberTemplateCompiler();\n let syntax = loadGlimmerSyntax(theExports);\n initializeEmberENV(syntax, this.EmberENV);\n // todo: get resolver reflected in cacheKey\n return { syntax, cacheKey };\n }\n\n @Memoize()\n private getReversedASTPlugins(ast: unknown[]): unknown[] {\n return ast.slice().reverse();\n }\n\n // Compiles to the wire format plus dependency list.\n precompile(\n templateSource: string,\n options: Record<string, unknown> & { filename: string }\n ): { compiled: string; dependencies: ResolvedDep[] } {\n let dependencies: ResolvedDep[];\n let runtimeName: string;\n let filename: string = options.filename;\n\n if (this.resolver) {\n runtimeName = this.resolver.absPathToRuntimePath(filename);\n } else {\n runtimeName = filename;\n }\n\n let opts = this.syntax.defaultOptions({ contents: templateSource, moduleName: filename });\n let plugins: Plugins = {\n ...opts?.plugins,\n\n ast: [\n ...this.getReversedASTPlugins(this.plugins.ast!),\n this.resolver && this.resolver.astTransformer(this),\n\n // Ember 3.27+ uses _buildCompileOptions will not add AST plugins to its result\n ...(opts?.plugins?.ast ?? []),\n ].filter(Boolean),\n };\n\n let compiled = this.syntax.precompile(stripBom(templateSource), {\n contents: templateSource,\n moduleName: runtimeName,\n plugins,\n ...options,\n });\n\n if (this.resolver) {\n dependencies = this.resolver.dependenciesOf(filename);\n } else {\n dependencies = [];\n }\n\n return { compiled, dependencies };\n }\n\n // Applies all custom AST transforms and emits the results still as\n // handlebars.\n applyTransforms(moduleName: string, contents: string): string {\n let opts = this.syntax.defaultOptions({ contents, moduleName });\n\n // the user-provided plugins come first in the list, and those are the\n // only ones we want to run. The built-in plugins don't need to run here\n // in stage1, it's better that they run in stage3 when the appropriate\n // ember version is in charge.\n //\n // rather than slicing them off, we could choose instead to not call\n // syntax.defaultOptions, but then we lose some of the compatibility\n // normalization that it does on the user-provided plugins.\n opts.plugins = opts.plugins || {}; // Ember 3.27+ won't add opts.plugins\n opts.plugins.ast = this.getReversedASTPlugins(this.plugins.ast!).map(plugin => {\n // Although the precompile API does, this direct glimmer syntax api\n // does not support these legacy plugins, so we must wrap them.\n return wrapLegacyHbsPluginIfNeeded(plugin as any);\n });\n\n // instructs glimmer-vm to preserve entity encodings (e.g. don't parse -> ' ')\n opts.mode = 'codemod';\n\n opts.filename = moduleName;\n opts.moduleName = this.resolver ? this.resolver.absPathToRuntimePath(moduleName) || moduleName : moduleName;\n let ast = this.syntax.preprocess(contents, opts);\n\n return this.syntax.print(ast, { entityEncoding: 'raw' });\n }\n\n parse(moduleName: string, contents: string): AST {\n // this is just a parse, so we deliberately don't run any plugins.\n let opts = { contents, moduleName, plugins: {} };\n return this.syntax.preprocess(contents, opts);\n }\n\n baseDir() {\n return join(__dirname, '..');\n }\n}\n\n// this matches the setup done by ember-cli-htmlbars: https://git.io/JtbN6\nfunction initializeEmberENV(syntax: GlimmerSyntax, EmberENV: any) {\n if (!EmberENV) {\n return;\n }\n\n let props;\n\n if (EmberENV.FEATURES) {\n props = Object.keys(EmberENV.FEATURES);\n props.forEach(prop => {\n syntax._Ember.FEATURES[prop] = EmberENV.FEATURES[prop];\n });\n }\n\n if (EmberENV) {\n props = Object.keys(EmberENV);\n props.forEach(prop => {\n if (prop === 'FEATURES') {\n return;\n }\n syntax._Ember.ENV[prop] = EmberENV[prop];\n });\n }\n}\n\n// we could directly depend on @glimmer/syntax and have nice types and\n// everything. But the problem is, we really want to use the exact version that\n// the app itself is using, and its copy is bundled away inside\n// ember-template-compiler.js.\nfunction loadGlimmerSyntax(emberTemplateCompilerExports: any): GlimmerSyntax {\n // detect if we are using an Ember version with the exports we need\n // (from https://github.com/emberjs/ember.js/pull/19426)\n if (emberTemplateCompilerExports._preprocess !== undefined) {\n return {\n print: emberTemplateCompilerExports._print,\n preprocess: emberTemplateCompilerExports._preprocess,\n defaultOptions: emberTemplateCompilerExports._buildCompileOptions,\n precompile: emberTemplateCompilerExports.precompile,\n _Ember: emberTemplateCompilerExports._Ember,\n };\n } else {\n // Older Ember versions (prior to 3.27) do not expose a public way to to source 2 source compilation of templates.\n // because of this, we must resort to some hackery.\n //\n // We use the following API's (that we grab from Ember.__loader):\n //\n // * glimmer/syntax's preprocess\n // * glimmer/syntax's print\n // * ember-template-compiler/lib/system/compile-options's defaultOptions\n let syntax = (emberTemplateCompilerExports.Ember ?? emberTemplateCompilerExports._Ember).__loader.require(\n '@glimmer/syntax'\n );\n let compilerOptions = (emberTemplateCompilerExports.Ember ?? emberTemplateCompilerExports._Ember).__loader.require(\n 'ember-template-compiler/lib/system/compile-options'\n );\n\n return {\n print: syntax.print,\n preprocess: syntax.preprocess,\n defaultOptions: compilerOptions.default,\n precompile: emberTemplateCompilerExports.precompile,\n _Ember: emberTemplateCompilerExports._Ember,\n };\n }\n}\n"]}
|
@@ -1,17 +0,0 @@
|
|
1
|
-
import { Resolver } from './resolver';
|
2
|
-
import { PluginItem } from '@babel/core';
|
3
|
-
import { Plugins } from './ember-template-compiler-types';
|
4
|
-
import { TemplateCompiler } from './template-compiler-common';
|
5
|
-
export interface NodeTemplateCompilerParams {
|
6
|
-
compilerPath: string;
|
7
|
-
compilerChecksum: string;
|
8
|
-
resolver?: Resolver;
|
9
|
-
EmberENV: unknown;
|
10
|
-
plugins: Plugins;
|
11
|
-
}
|
12
|
-
export declare class NodeTemplateCompiler extends TemplateCompiler {
|
13
|
-
params: NodeTemplateCompilerParams;
|
14
|
-
constructor(params: NodeTemplateCompilerParams);
|
15
|
-
inlineTransformsBabelPlugin(): PluginItem;
|
16
|
-
baseDir(): string;
|
17
|
-
}
|