@embroider/macros 1.18.3 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -2
- package/src/babel/app-ember-satisfies.d.ts +4 -0
- package/src/babel/app-ember-satisfies.js +86 -0
- package/src/babel/app-ember-satisfies.js.map +1 -0
- package/src/babel/evaluate-json.js +4 -0
- package/src/babel/evaluate-json.js.map +1 -1
- package/src/babel/macros-babel-plugin.js +1 -0
- package/src/babel/macros-babel-plugin.js.map +1 -1
- package/src/glimmer/app-ember-satisfies.d.ts +2 -0
- package/src/glimmer/app-ember-satisfies.js +32 -0
- package/src/glimmer/app-ember-satisfies.js.map +1 -0
- package/src/glimmer/ast-transform.js +13 -0
- package/src/glimmer/ast-transform.js.map +1 -1
- package/src/index.d.ts +7 -0
- package/src/index.js +4 -0
- package/src/index.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@embroider/macros",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.19.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Standardized build-time macros for ember apps.",
|
|
6
6
|
"keywords": [
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@babel/core": "^7.14.5",
|
|
40
|
+
"@babel/plugin-transform-class-properties": "^7.27.1",
|
|
40
41
|
"@babel/plugin-transform-modules-amd": "^7.19.6",
|
|
41
42
|
"@babel/traverse": "^7.14.5",
|
|
42
43
|
"@glint/template": "^1.0.0",
|
|
@@ -54,7 +55,7 @@
|
|
|
54
55
|
"typescript": "^5.4.5",
|
|
55
56
|
"vitest": "^3.2.4",
|
|
56
57
|
"@embroider/test-support": "0.36.0",
|
|
57
|
-
"@embroider/core": "4.2.
|
|
58
|
+
"@embroider/core": "4.2.3"
|
|
58
59
|
},
|
|
59
60
|
"peerDependencies": {
|
|
60
61
|
"@glint/template": "^1.0.0"
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = appEmberSatisfies;
|
|
7
|
+
const semver_1 = require("semver");
|
|
8
|
+
const error_1 = __importDefault(require("./error"));
|
|
9
|
+
const evaluate_json_1 = require("./evaluate-json");
|
|
10
|
+
const node_url_1 = require("node:url");
|
|
11
|
+
const node_module_1 = require("node:module");
|
|
12
|
+
const node_path_1 = require("node:path");
|
|
13
|
+
const find_up_1 = __importDefault(require("find-up"));
|
|
14
|
+
const packageName = 'ember-source';
|
|
15
|
+
const CACHE = new Map();
|
|
16
|
+
/**
|
|
17
|
+
* NOTE: Since there will only ever be one app ember version, we can cache the result of looking it up.
|
|
18
|
+
* (partly to save disk i/o)
|
|
19
|
+
*/
|
|
20
|
+
function getAppEmberVersion(state) {
|
|
21
|
+
let appRoot = state.packageCache.appRoot;
|
|
22
|
+
if (CACHE.has(appRoot)) {
|
|
23
|
+
return CACHE.get(appRoot);
|
|
24
|
+
}
|
|
25
|
+
let root = state.packageCache.get(appRoot);
|
|
26
|
+
if (!(root === null || root === void 0 ? void 0 : root.hasDependency(packageName))) {
|
|
27
|
+
CACHE.set(appRoot, false);
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* This version can, and often is a range (^6.4.0),
|
|
32
|
+
* and using a range for the first parameter of satisfies will cause a failure to always occur.
|
|
33
|
+
* So we must resolve the actual version on disk.
|
|
34
|
+
*/
|
|
35
|
+
let resolvedInfo = state.packageCache.resolve(packageName, root);
|
|
36
|
+
let version = resolvedInfo.version;
|
|
37
|
+
/**
|
|
38
|
+
* But, if the version is "clean", we can avoid a disk hit
|
|
39
|
+
* (which is helpful for corporate machines which intercept every disk i/o behavior)
|
|
40
|
+
*/
|
|
41
|
+
let cleanedVersion = String((0, semver_1.coerce)(version, { includePrerelease: true }));
|
|
42
|
+
/**
|
|
43
|
+
* these are the same, so we don't need to ask the disk what was installed
|
|
44
|
+
*/
|
|
45
|
+
if (cleanedVersion === version) {
|
|
46
|
+
CACHE.set(appRoot, version);
|
|
47
|
+
return version;
|
|
48
|
+
}
|
|
49
|
+
const appURL = (0, node_url_1.pathToFileURL)(appRoot);
|
|
50
|
+
const require = (0, node_module_1.createRequire)(appURL);
|
|
51
|
+
const emberSourceEntry = require.resolve(packageName, {
|
|
52
|
+
paths: [appRoot],
|
|
53
|
+
});
|
|
54
|
+
const emberSourceManifestPath = find_up_1.default.sync('package.json', { cwd: (0, node_path_1.dirname)(emberSourceEntry) });
|
|
55
|
+
if (!emberSourceManifestPath) {
|
|
56
|
+
throw new Error(`We resolved an ember-source package, but could not find its package.json`);
|
|
57
|
+
}
|
|
58
|
+
const emberSourceManifest = require(emberSourceManifestPath);
|
|
59
|
+
CACHE.set(appRoot, emberSourceManifest.version);
|
|
60
|
+
return emberSourceManifest.version;
|
|
61
|
+
}
|
|
62
|
+
function appEmberSatisfies(path, state) {
|
|
63
|
+
if (path.node.arguments.length !== 1) {
|
|
64
|
+
throw (0, error_1.default)(path, `appEmberSatisfies takes exactly one argument, you passed ${path.node.arguments.length}`);
|
|
65
|
+
}
|
|
66
|
+
const [range] = path.node.arguments;
|
|
67
|
+
if (range.type !== 'StringLiteral') {
|
|
68
|
+
throw (0, error_1.default)((0, evaluate_json_1.assertArray)(path.get('arguments'))[0], `the only argument to appEmberSatisfies must be a string literal`);
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
let appEmberVersion = getAppEmberVersion(state);
|
|
72
|
+
if (!appEmberVersion) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
return (0, semver_1.satisfies)(appEmberVersion, range.value, {
|
|
76
|
+
includePrerelease: true,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
if (err.code !== 'MODULE_NOT_FOUND') {
|
|
81
|
+
throw err;
|
|
82
|
+
}
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=app-ember-satisfies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-ember-satisfies.js","sourceRoot":"","sources":["app-ember-satisfies.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type { types as t } from '@babel/core';\nimport type State from './state';\nimport { satisfies, coerce } from 'semver';\nimport error from './error';\nimport { assertArray } from './evaluate-json';\nimport { pathToFileURL } from 'node:url';\nimport { createRequire } from 'node:module';\nimport { dirname } from 'node:path';\nimport findUp from 'find-up';\n\nconst packageName = 'ember-source';\nconst CACHE = new Map<string, string | false>();\n/**\n * NOTE: Since there will only ever be one app ember version, we can cache the result of looking it up.\n * (partly to save disk i/o)\n */\nfunction getAppEmberVersion(state: State): string | false {\n let appRoot = state.packageCache.appRoot;\n\n if (CACHE.has(appRoot)) {\n return CACHE.get(appRoot)!;\n }\n\n let root = state.packageCache.get(appRoot);\n\n if (!root?.hasDependency(packageName)) {\n CACHE.set(appRoot, false);\n return false;\n }\n\n /**\n * This version can, and often is a range (^6.4.0),\n * and using a range for the first parameter of satisfies will cause a failure to always occur.\n * So we must resolve the actual version on disk.\n */\n let resolvedInfo = state.packageCache.resolve(packageName, root);\n let version = resolvedInfo.version;\n /**\n * But, if the version is \"clean\", we can avoid a disk hit\n * (which is helpful for corporate machines which intercept every disk i/o behavior)\n */\n let cleanedVersion = String(coerce(version, { includePrerelease: true }));\n\n /**\n * these are the same, so we don't need to ask the disk what was installed\n */\n if (cleanedVersion === version) {\n CACHE.set(appRoot, version);\n return version;\n }\n\n const appURL = pathToFileURL(appRoot);\n const require = createRequire(appURL);\n const emberSourceEntry = require.resolve(packageName, {\n paths: [appRoot],\n });\n const emberSourceManifestPath = findUp.sync('package.json', { cwd: dirname(emberSourceEntry) });\n\n if (!emberSourceManifestPath) {\n throw new Error(`We resolved an ember-source package, but could not find its package.json`);\n }\n const emberSourceManifest = require(emberSourceManifestPath);\n\n CACHE.set(appRoot, emberSourceManifest.version);\n return emberSourceManifest.version;\n}\n\nexport default function appEmberSatisfies(path: NodePath<t.CallExpression>, state: State): boolean {\n if (path.node.arguments.length !== 1) {\n throw error(path, `appEmberSatisfies takes exactly one argument, you passed ${path.node.arguments.length}`);\n }\n const [range] = path.node.arguments;\n if (range.type !== 'StringLiteral') {\n throw error(\n assertArray(path.get('arguments'))[0],\n `the only argument to appEmberSatisfies must be a string literal`\n );\n }\n try {\n let appEmberVersion = getAppEmberVersion(state);\n\n if (!appEmberVersion) {\n return false;\n }\n\n return satisfies(appEmberVersion, range.value, {\n includePrerelease: true,\n });\n } catch (err) {\n if (err.code !== 'MODULE_NOT_FOUND') {\n throw err;\n }\n return false;\n }\n}\n"]}
|
|
@@ -8,6 +8,7 @@ exports.assertNotArray = assertNotArray;
|
|
|
8
8
|
exports.assertArray = assertArray;
|
|
9
9
|
exports.buildLiterals = buildLiterals;
|
|
10
10
|
const dependency_satisfies_1 = __importDefault(require("./dependency-satisfies"));
|
|
11
|
+
const app_ember_satisfies_1 = __importDefault(require("./app-ember-satisfies"));
|
|
11
12
|
const module_exists_1 = __importDefault(require("./module-exists"));
|
|
12
13
|
const get_config_1 = __importDefault(require("./get-config"));
|
|
13
14
|
const assert_never_1 = __importDefault(require("assert-never"));
|
|
@@ -337,6 +338,9 @@ class Evaluator {
|
|
|
337
338
|
return { confident: false };
|
|
338
339
|
}
|
|
339
340
|
let callee = path.get('callee');
|
|
341
|
+
if (callee.referencesImport('@embroider/macros', 'appEmberSatisfies')) {
|
|
342
|
+
return { confident: true, value: (0, app_ember_satisfies_1.default)(path, this.state), hasRuntimeImplementation: false };
|
|
343
|
+
}
|
|
340
344
|
if (callee.referencesImport('@embroider/macros', 'dependencySatisfies')) {
|
|
341
345
|
return { confident: true, value: (0, dependency_satisfies_1.default)(path, this.state), hasRuntimeImplementation: false };
|
|
342
346
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate-json.js","sourceRoot":"","sources":["evaluate-json.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type * as Babel from '@babel/core';\nimport type { types as t } from '@babel/core';\nimport type State from './state';\nimport dependencySatisfies from './dependency-satisfies';\nimport moduleExists from './module-exists';\nimport getConfig from './get-config';\nimport assertNever from 'assert-never';\n\ntype OpValue = string | boolean | number;\n\nconst binops: { [operator: string]: any } = {\n '||': function (a: OpValue, b: OpValue) {\n return a || b;\n },\n '&&': function (a: OpValue, b: OpValue) {\n return a && b;\n },\n '|': function (a: any, b: any) {\n return a | b;\n },\n '^': function (a: any, b: any) {\n return a ^ b;\n },\n '&': function (a: any, b: any) {\n return a & b;\n },\n '==': function (a: OpValue, b: OpValue) {\n // eslint-disable-next-line eqeqeq\n return a == b;\n },\n '!=': function (a: OpValue, b: OpValue) {\n // eslint-disable-next-line eqeqeq\n return a != b;\n },\n '===': function (a: OpValue, b: OpValue) {\n return a === b;\n },\n '!==': function (a: OpValue, b: OpValue) {\n return a !== b;\n },\n '<': function (a: OpValue, b: OpValue) {\n return a < b;\n },\n '>': function (a: OpValue, b: OpValue) {\n return a > b;\n },\n '<=': function (a: OpValue, b: OpValue) {\n return a <= b;\n },\n '>=': function (a: OpValue, b: OpValue) {\n return a >= b;\n },\n '<<': function (a: any, b: any) {\n return a << b;\n },\n '>>': function (a: any, b: any) {\n return a >> b;\n },\n '>>>': function (a: any, b: any) {\n return a >>> b;\n },\n '+': function (a: any, b: any) {\n return a + b;\n },\n '-': function (a: any, b: any) {\n return a - b;\n },\n '*': function (a: any, b: any) {\n return a * b;\n },\n '/': function (a: any, b: any) {\n return a / b;\n },\n '%': function (a: any, b: any) {\n return a % b;\n },\n '??': function (a: any, b: any) {\n if (a === null || a === undefined) {\n return b;\n }\n return a;\n },\n};\n\nconst unops: { [operator: string]: any } = {\n '-': function (a: OpValue) {\n return -a;\n },\n '+': function (a: OpValue) {\n return +a;\n },\n '~': function (a: OpValue) {\n return ~a;\n },\n '!': function (a: OpValue) {\n return !a;\n },\n void: function () {\n return undefined;\n },\n};\n\nexport interface ConfidentResult {\n confident: true;\n value: any;\n hasRuntimeImplementation: boolean;\n}\n\nexport interface UnknownResult {\n confident: false;\n}\n\nexport type EvaluateResult = ConfidentResult | UnknownResult;\n\nexport interface EvaluationEnv {\n knownPaths?: Map<NodePath, EvaluateResult>;\n locals?: { [localVar: string]: any };\n state?: State;\n}\n\nexport class Evaluator {\n private knownPaths: Map<NodePath, EvaluateResult>;\n private locals: { [localVar: string]: any };\n private state: State | undefined;\n\n constructor(env: EvaluationEnv = {}) {\n this.knownPaths = env.knownPaths || new Map();\n this.locals = env.locals || {};\n this.state = env.state;\n }\n\n evaluateMember(\n path: NodePath<t.MemberExpression | t.OptionalMemberExpression>,\n optionalChain: boolean\n ): EvaluateResult {\n let propertyPath = assertNotArray(path.get('property'));\n let property: EvaluateResult;\n if (path.node.computed) {\n property = this.evaluate(propertyPath);\n } else {\n property = this.evaluateKey(propertyPath);\n }\n if (property.confident) {\n let objectPath = path.get('object');\n let object = this.evaluate(objectPath);\n if (object.confident) {\n let confidentObject = object;\n let confidentProperty = property;\n return {\n confident: true,\n get value() {\n if (optionalChain) {\n return confidentObject.value != null\n ? confidentObject.value[confidentProperty.value]\n : confidentObject.value;\n } else {\n return confidentObject.value[confidentProperty.value];\n }\n },\n hasRuntimeImplementation:\n confidentObject.hasRuntimeImplementation || confidentProperty.hasRuntimeImplementation,\n };\n }\n }\n return { confident: false };\n }\n\n evaluateKey(path: NodePath): EvaluateResult {\n let first = this.evaluate(path);\n if (first.confident) {\n return first;\n }\n if (path.isIdentifier()) {\n return { confident: true, value: path.node.name, hasRuntimeImplementation: false };\n }\n return { confident: false };\n }\n\n evaluate(path: NodePath): EvaluateResult {\n let known = this.knownPaths.get(path);\n if (known) {\n return known;\n }\n let result = this.realEvaluate(path);\n return result;\n }\n\n private realEvaluate(path: NodePath): EvaluateResult {\n if (path.isMemberExpression()) {\n return this.evaluateMember(path, false);\n }\n\n // Here we are glossing over the lack of a real OptionalMemberExpression type\n // in our @babel/traverse typings.\n if (path.node.type === 'OptionalMemberExpression') {\n return this.evaluateMember(path as NodePath<t.OptionalMemberExpression>, true);\n }\n\n if (path.isStringLiteral()) {\n return { confident: true, value: path.node.value, hasRuntimeImplementation: false };\n }\n\n if (path.isNumericLiteral()) {\n return { confident: true, value: path.node.value, hasRuntimeImplementation: false };\n }\n\n if (path.isBooleanLiteral()) {\n return { confident: true, value: path.node.value, hasRuntimeImplementation: false };\n }\n\n if (path.isNullLiteral()) {\n return { confident: true, value: null, hasRuntimeImplementation: false };\n }\n\n if (path.isIdentifier() && path.node.name === 'undefined') {\n return { confident: true, value: undefined, hasRuntimeImplementation: false };\n }\n\n if (path.isObjectExpression()) {\n let props = assertArray(path.get('properties')).map(p => {\n if (p.isSpreadElement()) {\n return [{ confident: false }, { confident: false }];\n }\n let key = assertNotArray(p.get('key'));\n let keyEvalValue = this.evaluateKey(key);\n let value = assertNotArray(p.get('value'));\n let valueEvalValue = this.evaluate(value);\n return [keyEvalValue, valueEvalValue];\n });\n for (let [k, v] of props) {\n if (!k.confident || !v.confident) {\n return { confident: false };\n }\n }\n let confidentProps = props as ConfidentResult[][];\n return {\n confident: true,\n get value() {\n let result: any = {};\n for (let [k, v] of confidentProps) {\n result[k.value] = v.value;\n }\n return result;\n },\n hasRuntimeImplementation: confidentProps.some(\n ([key, value]) => key.hasRuntimeImplementation || value.hasRuntimeImplementation\n ),\n };\n }\n\n if (path.isArrayExpression()) {\n let elements = path.get('elements').map(element => {\n return this.evaluate(element as NodePath);\n });\n if (elements.every(element => element.confident)) {\n let confidentElements = elements as ConfidentResult[];\n return {\n confident: true,\n get value() {\n return confidentElements.map(element => element.value);\n },\n hasRuntimeImplementation: confidentElements.some(el => el.hasRuntimeImplementation),\n };\n }\n }\n\n if (path.isAssignmentExpression()) {\n let leftPath = path.get('left');\n if (leftPath.isIdentifier()) {\n let rightPath = path.get('right');\n let right = this.evaluate(rightPath);\n if (right.confident) {\n this.locals[leftPath.node.name] = right.value;\n return right;\n }\n }\n }\n\n if (path.isCallExpression()) {\n let result = this.maybeEvaluateRuntimeConfig(path);\n if (result.confident) {\n return result;\n }\n result = this.evaluateMacroCall(path);\n if (result.confident) {\n return result;\n }\n }\n\n if (path.isLogicalExpression() || path.isBinaryExpression()) {\n let operator = path.node.operator as string;\n if (binops[operator]) {\n let leftOperand = this.evaluate(path.get('left') as NodePath<t.Expression>);\n if (leftOperand.confident) {\n let rightOperand = this.evaluate(path.get('right') as NodePath<t.Expression>);\n if (leftOperand.confident && rightOperand.confident) {\n let value = binops[operator](leftOperand.value, rightOperand.value);\n return {\n confident: true,\n value,\n hasRuntimeImplementation: leftOperand.hasRuntimeImplementation || rightOperand.hasRuntimeImplementation,\n };\n }\n }\n }\n return { confident: false };\n }\n\n if (path.isConditionalExpression()) {\n let test = this.evaluate(path.get('test'));\n if (test.confident) {\n let result = test.value ? this.evaluate(path.get('consequent')) : this.evaluate(path.get('alternate'));\n if (result.confident) {\n return {\n confident: true,\n value: result.value,\n hasRuntimeImplementation: test.hasRuntimeImplementation || result.hasRuntimeImplementation,\n };\n }\n }\n }\n\n if (path.isUnaryExpression()) {\n let operator = path.node.operator as string;\n if (unops[operator]) {\n let operand = this.evaluate(path.get('argument') as NodePath<t.Expression>);\n if (operand.confident) {\n let value = unops[operator](operand.value);\n return { confident: true, value, hasRuntimeImplementation: operand.hasRuntimeImplementation };\n }\n }\n return { confident: false };\n }\n\n if (path.isIdentifier()) {\n if (!this.locals.hasOwnProperty(path.node.name)) {\n return { confident: false };\n }\n return { confident: true, value: this.locals[path.node.name], hasRuntimeImplementation: false };\n }\n\n if (path.isSequenceExpression()) {\n let expressions = path.get('expressions');\n let lastExpression = expressions[expressions.length - 1];\n if (lastExpression) {\n // The value of a sequence expression is only the value of the last\n // expression it contains, all the rest are ignored.\n return this.evaluate(lastExpression);\n }\n }\n\n return { confident: false };\n }\n\n // This handles the presence of our runtime-mode getConfig functions. We want\n // to designate them as { confident: true }, because it's important that we\n // give feedback even in runtime-mode if the developer is trying to pass\n // non-static arguments somewhere they're not supposed to. But we don't\n // actually want to calculate their value here because that has been deferred\n // to runtime. That's why we've made `value` lazy. It lets us check the\n // confidence without actually forcing the value.\n private maybeEvaluateRuntimeConfig(path: NodePath<t.CallExpression>): EvaluateResult {\n if (!this.state) {\n return { confident: false };\n }\n let callee = path.get('callee');\n if (callee.isIdentifier()) {\n // Does the identifier refer to our runtime config?\n if (callee.referencesImport(this.state.pathToOurAddon('runtime'), 'config')) {\n return {\n confident: true,\n get value() {\n throw new Error(`bug in @embroider/macros: didn't expect to need to evaluate this value`);\n },\n hasRuntimeImplementation: true,\n };\n }\n }\n return { confident: false };\n }\n\n evaluateMacroCall(path: NodePath<t.CallExpression>): EvaluateResult {\n if (!this.state) {\n return { confident: false };\n }\n let callee = path.get('callee');\n if (callee.referencesImport('@embroider/macros', 'dependencySatisfies')) {\n return { confident: true, value: dependencySatisfies(path, this.state), hasRuntimeImplementation: false };\n }\n if (callee.referencesImport('@embroider/macros', 'moduleExists')) {\n return { confident: true, value: moduleExists(path, this.state), hasRuntimeImplementation: false };\n }\n if (callee.referencesImport('@embroider/macros', 'getConfig')) {\n return { confident: true, value: getConfig(path, this.state, 'package'), hasRuntimeImplementation: false };\n }\n if (callee.referencesImport('@embroider/macros', 'getOwnConfig')) {\n return { confident: true, value: getConfig(path, this.state, 'own'), hasRuntimeImplementation: false };\n }\n if (callee.referencesImport('@embroider/macros', 'getGlobalConfig')) {\n // Check for getGlobalConfig().fastboot.isRunning, which is the only pattern in use where config actually needs to have a runtime implementation.\n // For compatibility reasons we will continue to support that. All other cases of macro configs are static now.\n let maybeFastbootMemberExpression = path.parentPath;\n if (\n maybeFastbootMemberExpression.isMemberExpression() ||\n maybeFastbootMemberExpression.isOptionalMemberExpression()\n ) {\n let maybeFastbootProperty = maybeFastbootMemberExpression.isMemberExpression()\n ? maybeFastbootMemberExpression.get('property')\n : maybeFastbootMemberExpression.isOptionalMemberExpression()\n ? maybeFastbootMemberExpression.get('property')\n : assertNever(maybeFastbootMemberExpression);\n\n if (maybeFastbootProperty.isIdentifier() && maybeFastbootProperty.node.name === 'fastboot') {\n return {\n confident: true,\n value: getConfig(path, this.state, 'getGlobalConfig'),\n hasRuntimeImplementation: true,\n };\n }\n }\n\n return {\n confident: true,\n value: getConfig(path, this.state, 'getGlobalConfig'),\n hasRuntimeImplementation: false,\n };\n }\n if (callee.referencesImport('@embroider/macros', 'isDevelopingApp')) {\n return {\n confident: true,\n value: Boolean(\n this.state.opts.appPackageRoot &&\n this.state.opts.isDevelopingPackageRoots.includes(this.state.opts.appPackageRoot)\n ),\n hasRuntimeImplementation: false,\n };\n }\n if (callee.referencesImport('@embroider/macros', 'isDevelopingThisPackage')) {\n return {\n confident: true,\n value: this.state.opts.isDevelopingPackageRoots.includes(this.state.originalOwningPackage().root),\n hasRuntimeImplementation: false,\n };\n }\n if (callee.referencesImport('@embroider/macros', 'isTesting')) {\n let g = getConfig(path, this.state, 'getGlobalConfig') as any;\n let e = g && g['@embroider/macros'];\n let value = Boolean(e && e.isTesting);\n return { confident: true, value, hasRuntimeImplementation: true };\n }\n return { confident: false };\n }\n}\n\n// these next two functions are here because the type definitions we're using\n// don't seem to know exactly which NodePath properties are arrays and which\n// aren't.\nexport function assertNotArray<T>(input: T | T[]): T {\n if (Array.isArray(input)) {\n throw new Error(`bug: not supposed to be an array`);\n }\n return input;\n}\nexport function assertArray<T>(input: T | T[]): T[] {\n if (!Array.isArray(input)) {\n throw new Error(`bug: supposed to be an array`);\n }\n return input;\n}\n\nexport function buildLiterals(\n value: unknown | undefined,\n babelContext: typeof Babel\n): t.Identifier | t.ObjectExpression {\n if (typeof value === 'undefined') {\n return babelContext.types.identifier('undefined');\n }\n let statement = babelContext.parse(`a(${JSON.stringify(value)})`, { configFile: false }) as t.File;\n let expression = (statement.program.body[0] as t.ExpressionStatement).expression as t.CallExpression;\n return expression.arguments[0] as t.ObjectExpression;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"evaluate-json.js","sourceRoot":"","sources":["evaluate-json.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type * as Babel from '@babel/core';\nimport type { types as t } from '@babel/core';\nimport type State from './state';\nimport dependencySatisfies from './dependency-satisfies';\nimport appEmberSatisfies from './app-ember-satisfies';\nimport moduleExists from './module-exists';\nimport getConfig from './get-config';\nimport assertNever from 'assert-never';\n\ntype OpValue = string | boolean | number;\n\nconst binops: { [operator: string]: any } = {\n '||': function (a: OpValue, b: OpValue) {\n return a || b;\n },\n '&&': function (a: OpValue, b: OpValue) {\n return a && b;\n },\n '|': function (a: any, b: any) {\n return a | b;\n },\n '^': function (a: any, b: any) {\n return a ^ b;\n },\n '&': function (a: any, b: any) {\n return a & b;\n },\n '==': function (a: OpValue, b: OpValue) {\n // eslint-disable-next-line eqeqeq\n return a == b;\n },\n '!=': function (a: OpValue, b: OpValue) {\n // eslint-disable-next-line eqeqeq\n return a != b;\n },\n '===': function (a: OpValue, b: OpValue) {\n return a === b;\n },\n '!==': function (a: OpValue, b: OpValue) {\n return a !== b;\n },\n '<': function (a: OpValue, b: OpValue) {\n return a < b;\n },\n '>': function (a: OpValue, b: OpValue) {\n return a > b;\n },\n '<=': function (a: OpValue, b: OpValue) {\n return a <= b;\n },\n '>=': function (a: OpValue, b: OpValue) {\n return a >= b;\n },\n '<<': function (a: any, b: any) {\n return a << b;\n },\n '>>': function (a: any, b: any) {\n return a >> b;\n },\n '>>>': function (a: any, b: any) {\n return a >>> b;\n },\n '+': function (a: any, b: any) {\n return a + b;\n },\n '-': function (a: any, b: any) {\n return a - b;\n },\n '*': function (a: any, b: any) {\n return a * b;\n },\n '/': function (a: any, b: any) {\n return a / b;\n },\n '%': function (a: any, b: any) {\n return a % b;\n },\n '??': function (a: any, b: any) {\n if (a === null || a === undefined) {\n return b;\n }\n return a;\n },\n};\n\nconst unops: { [operator: string]: any } = {\n '-': function (a: OpValue) {\n return -a;\n },\n '+': function (a: OpValue) {\n return +a;\n },\n '~': function (a: OpValue) {\n return ~a;\n },\n '!': function (a: OpValue) {\n return !a;\n },\n void: function () {\n return undefined;\n },\n};\n\nexport interface ConfidentResult {\n confident: true;\n value: any;\n hasRuntimeImplementation: boolean;\n}\n\nexport interface UnknownResult {\n confident: false;\n}\n\nexport type EvaluateResult = ConfidentResult | UnknownResult;\n\nexport interface EvaluationEnv {\n knownPaths?: Map<NodePath, EvaluateResult>;\n locals?: { [localVar: string]: any };\n state?: State;\n}\n\nexport class Evaluator {\n private knownPaths: Map<NodePath, EvaluateResult>;\n private locals: { [localVar: string]: any };\n private state: State | undefined;\n\n constructor(env: EvaluationEnv = {}) {\n this.knownPaths = env.knownPaths || new Map();\n this.locals = env.locals || {};\n this.state = env.state;\n }\n\n evaluateMember(\n path: NodePath<t.MemberExpression | t.OptionalMemberExpression>,\n optionalChain: boolean\n ): EvaluateResult {\n let propertyPath = assertNotArray(path.get('property'));\n let property: EvaluateResult;\n if (path.node.computed) {\n property = this.evaluate(propertyPath);\n } else {\n property = this.evaluateKey(propertyPath);\n }\n if (property.confident) {\n let objectPath = path.get('object');\n let object = this.evaluate(objectPath);\n if (object.confident) {\n let confidentObject = object;\n let confidentProperty = property;\n return {\n confident: true,\n get value() {\n if (optionalChain) {\n return confidentObject.value != null\n ? confidentObject.value[confidentProperty.value]\n : confidentObject.value;\n } else {\n return confidentObject.value[confidentProperty.value];\n }\n },\n hasRuntimeImplementation:\n confidentObject.hasRuntimeImplementation || confidentProperty.hasRuntimeImplementation,\n };\n }\n }\n return { confident: false };\n }\n\n evaluateKey(path: NodePath): EvaluateResult {\n let first = this.evaluate(path);\n if (first.confident) {\n return first;\n }\n if (path.isIdentifier()) {\n return { confident: true, value: path.node.name, hasRuntimeImplementation: false };\n }\n return { confident: false };\n }\n\n evaluate(path: NodePath): EvaluateResult {\n let known = this.knownPaths.get(path);\n if (known) {\n return known;\n }\n let result = this.realEvaluate(path);\n return result;\n }\n\n private realEvaluate(path: NodePath): EvaluateResult {\n if (path.isMemberExpression()) {\n return this.evaluateMember(path, false);\n }\n\n // Here we are glossing over the lack of a real OptionalMemberExpression type\n // in our @babel/traverse typings.\n if (path.node.type === 'OptionalMemberExpression') {\n return this.evaluateMember(path as NodePath<t.OptionalMemberExpression>, true);\n }\n\n if (path.isStringLiteral()) {\n return { confident: true, value: path.node.value, hasRuntimeImplementation: false };\n }\n\n if (path.isNumericLiteral()) {\n return { confident: true, value: path.node.value, hasRuntimeImplementation: false };\n }\n\n if (path.isBooleanLiteral()) {\n return { confident: true, value: path.node.value, hasRuntimeImplementation: false };\n }\n\n if (path.isNullLiteral()) {\n return { confident: true, value: null, hasRuntimeImplementation: false };\n }\n\n if (path.isIdentifier() && path.node.name === 'undefined') {\n return { confident: true, value: undefined, hasRuntimeImplementation: false };\n }\n\n if (path.isObjectExpression()) {\n let props = assertArray(path.get('properties')).map(p => {\n if (p.isSpreadElement()) {\n return [{ confident: false }, { confident: false }];\n }\n let key = assertNotArray(p.get('key'));\n let keyEvalValue = this.evaluateKey(key);\n let value = assertNotArray(p.get('value'));\n let valueEvalValue = this.evaluate(value);\n return [keyEvalValue, valueEvalValue];\n });\n for (let [k, v] of props) {\n if (!k.confident || !v.confident) {\n return { confident: false };\n }\n }\n let confidentProps = props as ConfidentResult[][];\n return {\n confident: true,\n get value() {\n let result: any = {};\n for (let [k, v] of confidentProps) {\n result[k.value] = v.value;\n }\n return result;\n },\n hasRuntimeImplementation: confidentProps.some(\n ([key, value]) => key.hasRuntimeImplementation || value.hasRuntimeImplementation\n ),\n };\n }\n\n if (path.isArrayExpression()) {\n let elements = path.get('elements').map(element => {\n return this.evaluate(element as NodePath);\n });\n if (elements.every(element => element.confident)) {\n let confidentElements = elements as ConfidentResult[];\n return {\n confident: true,\n get value() {\n return confidentElements.map(element => element.value);\n },\n hasRuntimeImplementation: confidentElements.some(el => el.hasRuntimeImplementation),\n };\n }\n }\n\n if (path.isAssignmentExpression()) {\n let leftPath = path.get('left');\n if (leftPath.isIdentifier()) {\n let rightPath = path.get('right');\n let right = this.evaluate(rightPath);\n if (right.confident) {\n this.locals[leftPath.node.name] = right.value;\n return right;\n }\n }\n }\n\n if (path.isCallExpression()) {\n let result = this.maybeEvaluateRuntimeConfig(path);\n if (result.confident) {\n return result;\n }\n result = this.evaluateMacroCall(path);\n if (result.confident) {\n return result;\n }\n }\n\n if (path.isLogicalExpression() || path.isBinaryExpression()) {\n let operator = path.node.operator as string;\n if (binops[operator]) {\n let leftOperand = this.evaluate(path.get('left') as NodePath<t.Expression>);\n if (leftOperand.confident) {\n let rightOperand = this.evaluate(path.get('right') as NodePath<t.Expression>);\n if (leftOperand.confident && rightOperand.confident) {\n let value = binops[operator](leftOperand.value, rightOperand.value);\n return {\n confident: true,\n value,\n hasRuntimeImplementation: leftOperand.hasRuntimeImplementation || rightOperand.hasRuntimeImplementation,\n };\n }\n }\n }\n return { confident: false };\n }\n\n if (path.isConditionalExpression()) {\n let test = this.evaluate(path.get('test'));\n if (test.confident) {\n let result = test.value ? this.evaluate(path.get('consequent')) : this.evaluate(path.get('alternate'));\n if (result.confident) {\n return {\n confident: true,\n value: result.value,\n hasRuntimeImplementation: test.hasRuntimeImplementation || result.hasRuntimeImplementation,\n };\n }\n }\n }\n\n if (path.isUnaryExpression()) {\n let operator = path.node.operator as string;\n if (unops[operator]) {\n let operand = this.evaluate(path.get('argument') as NodePath<t.Expression>);\n if (operand.confident) {\n let value = unops[operator](operand.value);\n return { confident: true, value, hasRuntimeImplementation: operand.hasRuntimeImplementation };\n }\n }\n return { confident: false };\n }\n\n if (path.isIdentifier()) {\n if (!this.locals.hasOwnProperty(path.node.name)) {\n return { confident: false };\n }\n return { confident: true, value: this.locals[path.node.name], hasRuntimeImplementation: false };\n }\n\n if (path.isSequenceExpression()) {\n let expressions = path.get('expressions');\n let lastExpression = expressions[expressions.length - 1];\n if (lastExpression) {\n // The value of a sequence expression is only the value of the last\n // expression it contains, all the rest are ignored.\n return this.evaluate(lastExpression);\n }\n }\n\n return { confident: false };\n }\n\n // This handles the presence of our runtime-mode getConfig functions. We want\n // to designate them as { confident: true }, because it's important that we\n // give feedback even in runtime-mode if the developer is trying to pass\n // non-static arguments somewhere they're not supposed to. But we don't\n // actually want to calculate their value here because that has been deferred\n // to runtime. That's why we've made `value` lazy. It lets us check the\n // confidence without actually forcing the value.\n private maybeEvaluateRuntimeConfig(path: NodePath<t.CallExpression>): EvaluateResult {\n if (!this.state) {\n return { confident: false };\n }\n let callee = path.get('callee');\n if (callee.isIdentifier()) {\n // Does the identifier refer to our runtime config?\n if (callee.referencesImport(this.state.pathToOurAddon('runtime'), 'config')) {\n return {\n confident: true,\n get value() {\n throw new Error(`bug in @embroider/macros: didn't expect to need to evaluate this value`);\n },\n hasRuntimeImplementation: true,\n };\n }\n }\n return { confident: false };\n }\n\n evaluateMacroCall(path: NodePath<t.CallExpression>): EvaluateResult {\n if (!this.state) {\n return { confident: false };\n }\n let callee = path.get('callee');\n if (callee.referencesImport('@embroider/macros', 'appEmberSatisfies')) {\n return { confident: true, value: appEmberSatisfies(path, this.state), hasRuntimeImplementation: false };\n }\n if (callee.referencesImport('@embroider/macros', 'dependencySatisfies')) {\n return { confident: true, value: dependencySatisfies(path, this.state), hasRuntimeImplementation: false };\n }\n if (callee.referencesImport('@embroider/macros', 'moduleExists')) {\n return { confident: true, value: moduleExists(path, this.state), hasRuntimeImplementation: false };\n }\n if (callee.referencesImport('@embroider/macros', 'getConfig')) {\n return { confident: true, value: getConfig(path, this.state, 'package'), hasRuntimeImplementation: false };\n }\n if (callee.referencesImport('@embroider/macros', 'getOwnConfig')) {\n return { confident: true, value: getConfig(path, this.state, 'own'), hasRuntimeImplementation: false };\n }\n if (callee.referencesImport('@embroider/macros', 'getGlobalConfig')) {\n // Check for getGlobalConfig().fastboot.isRunning, which is the only pattern in use where config actually needs to have a runtime implementation.\n // For compatibility reasons we will continue to support that. All other cases of macro configs are static now.\n let maybeFastbootMemberExpression = path.parentPath;\n if (\n maybeFastbootMemberExpression.isMemberExpression() ||\n maybeFastbootMemberExpression.isOptionalMemberExpression()\n ) {\n let maybeFastbootProperty = maybeFastbootMemberExpression.isMemberExpression()\n ? maybeFastbootMemberExpression.get('property')\n : maybeFastbootMemberExpression.isOptionalMemberExpression()\n ? maybeFastbootMemberExpression.get('property')\n : assertNever(maybeFastbootMemberExpression);\n\n if (maybeFastbootProperty.isIdentifier() && maybeFastbootProperty.node.name === 'fastboot') {\n return {\n confident: true,\n value: getConfig(path, this.state, 'getGlobalConfig'),\n hasRuntimeImplementation: true,\n };\n }\n }\n\n return {\n confident: true,\n value: getConfig(path, this.state, 'getGlobalConfig'),\n hasRuntimeImplementation: false,\n };\n }\n if (callee.referencesImport('@embroider/macros', 'isDevelopingApp')) {\n return {\n confident: true,\n value: Boolean(\n this.state.opts.appPackageRoot &&\n this.state.opts.isDevelopingPackageRoots.includes(this.state.opts.appPackageRoot)\n ),\n hasRuntimeImplementation: false,\n };\n }\n if (callee.referencesImport('@embroider/macros', 'isDevelopingThisPackage')) {\n return {\n confident: true,\n value: this.state.opts.isDevelopingPackageRoots.includes(this.state.originalOwningPackage().root),\n hasRuntimeImplementation: false,\n };\n }\n if (callee.referencesImport('@embroider/macros', 'isTesting')) {\n let g = getConfig(path, this.state, 'getGlobalConfig') as any;\n let e = g && g['@embroider/macros'];\n let value = Boolean(e && e.isTesting);\n return { confident: true, value, hasRuntimeImplementation: true };\n }\n return { confident: false };\n }\n}\n\n// these next two functions are here because the type definitions we're using\n// don't seem to know exactly which NodePath properties are arrays and which\n// aren't.\nexport function assertNotArray<T>(input: T | T[]): T {\n if (Array.isArray(input)) {\n throw new Error(`bug: not supposed to be an array`);\n }\n return input;\n}\nexport function assertArray<T>(input: T | T[]): T[] {\n if (!Array.isArray(input)) {\n throw new Error(`bug: supposed to be an array`);\n }\n return input;\n}\n\nexport function buildLiterals(\n value: unknown | undefined,\n babelContext: typeof Babel\n): t.Identifier | t.ObjectExpression {\n if (typeof value === 'undefined') {\n return babelContext.types.identifier('undefined');\n }\n let statement = babelContext.parse(`a(${JSON.stringify(value)})`, { configFile: false }) as t.File;\n let expression = (statement.program.body[0] as t.ExpressionStatement).expression as t.CallExpression;\n return expression.arguments[0] as t.ObjectExpression;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"macros-babel-plugin.js","sourceRoot":"","sources":["macros-babel-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type { types as t } from '@babel/core';\nimport type State from './state';\nimport { initState } from './state';\nimport type { Mode as GetConfigMode } from './get-config';\nimport { inlineRuntimeConfig, insertConfig } from './get-config';\nimport macroCondition, { isMacroConditionPath } from './macro-condition';\nimport { isEachPath, insertEach } from './each';\n\nimport error from './error';\nimport failBuild from './fail-build';\nimport { Evaluator, buildLiterals } from './evaluate-json';\nimport type * as Babel from '@babel/core';\nimport { existsSync, readdirSync } from 'fs';\nimport { resolve, dirname, join } from 'path';\n\nexport default function main(context: typeof Babel): unknown {\n let t = context.types;\n let visitor = {\n Program: {\n enter(path: NodePath<t.Program>, state: State) {\n initState(context, path, state);\n },\n exit(_: NodePath<t.Program>, state: State) {\n // @embroider/macros itself has no runtime behaviors and should always be removed\n state.importUtil.removeAllImports('@embroider/macros');\n for (let handler of state.jobs) {\n handler();\n }\n },\n },\n 'IfStatement|ConditionalExpression': {\n enter(path: NodePath<t.IfStatement | t.ConditionalExpression>, state: State) {\n if (isMacroConditionPath(path)) {\n state.calledIdentifiers.add(path.get('test').get('callee').node);\n macroCondition(path, state);\n }\n },\n },\n ForOfStatement: {\n enter(path: NodePath<t.ForOfStatement>, state: State) {\n if (isEachPath(path)) {\n state.calledIdentifiers.add(path.get('right').get('callee').node);\n insertEach(path, state, context);\n }\n },\n },\n FunctionDeclaration: {\n enter(path: NodePath<t.FunctionDeclaration>, state: State) {\n let id = path.get('id');\n if (id.isIdentifier() && id.node.name === 'initializeRuntimeMacrosConfig' && state.opts.mode === 'run-time') {\n let pkg = state.owningPackage();\n if (pkg && pkg.name === '@embroider/macros') {\n inlineRuntimeConfig(path, state, context);\n }\n }\n },\n },\n CallExpression: {\n enter(path: NodePath<t.CallExpression>, state: State) {\n let callee = path.get('callee');\n if (!callee.isIdentifier()) {\n return;\n }\n\n // failBuild is implemented for side-effect, not value, so it's not\n // handled by evaluateMacroCall.\n if (callee.referencesImport('@embroider/macros', 'failBuild')) {\n state.calledIdentifiers.add(callee.node);\n failBuild(path, state);\n return;\n }\n\n if (callee.referencesImport('@embroider/macros', 'importSync')) {\n // we handle importSync in the exit hook\n return;\n }\n\n // getOwnConfig/getGlobalConfig/getConfig needs special handling, so\n // even though it also emits values via evaluateMacroCall when they're\n // needed recursively by other macros, it has its own insertion-handling\n // code that we invoke here.\n //\n // The things that are special include:\n // - automatic collapsing of chained properties, etc\n // - these macros have runtime implementations sometimes, which changes\n // how we rewrite them\n let mode: GetConfigMode | false = callee.referencesImport('@embroider/macros', 'getOwnConfig')\n ? 'own'\n : callee.referencesImport('@embroider/macros', 'getGlobalConfig')\n ? 'getGlobalConfig'\n : callee.referencesImport('@embroider/macros', 'getConfig')\n ? 'package'\n : false;\n if (mode) {\n state.calledIdentifiers.add(callee.node);\n insertConfig(path, state, mode, context);\n return;\n }\n\n // isTesting can have a runtime implementation. At compile time it\n // instead falls through to evaluateMacroCall.\n if (callee.referencesImport('@embroider/macros', 'isTesting') && state.opts.mode === 'run-time') {\n state.calledIdentifiers.add(callee.node);\n callee.replaceWith(state.importUtil.import(callee, state.pathToOurAddon('runtime'), 'isTesting'));\n return;\n }\n\n let result = new Evaluator({ state }).evaluateMacroCall(path);\n if (result.confident) {\n state.calledIdentifiers.add(callee.node);\n path.replaceWith(buildLiterals(result.value, context));\n }\n },\n exit(path: NodePath<t.CallExpression>, state: State) {\n let callee = path.get('callee');\n if (!callee.isIdentifier()) {\n return;\n }\n // importSync doesn't evaluate to a static value, so it's implemented\n // directly here, not in evaluateMacroCall.\n // We intentionally do this on exit here, to allow other transforms to handle importSync before we do\n // For example ember-auto-import needs to do some custom transforms to enable use of dynamic template strings,\n // so its babel plugin needs to see and handle the importSync call first!\n if (callee.referencesImport('@embroider/macros', 'importSync')) {\n if (state.opts.importSyncImplementation === 'eager') {\n let specifier = path.node.arguments[0];\n if (specifier?.type !== 'StringLiteral') {\n let relativePath = '';\n let property;\n if (specifier.type === 'TemplateLiteral') {\n relativePath = specifier.quasis[0].value.cooked!;\n property = specifier.expressions[0] as t.Expression;\n }\n // babel might transform template form `../my-path/${id}` to '../my-path/'.concat(id)\n if (\n specifier.type === 'CallExpression' &&\n specifier.callee.type === 'MemberExpression' &&\n specifier.callee.property.type === 'Identifier' &&\n specifier.callee.property.name === 'concat' &&\n specifier.callee.object.type === 'StringLiteral'\n ) {\n relativePath = specifier.callee.object.value;\n property = specifier.arguments[0] as t.Expression;\n }\n if (property && relativePath && relativePath.startsWith('.')) {\n const resolvedPath = resolve(dirname((state as any).filename), relativePath);\n let entries: string[] = [];\n if (existsSync(resolvedPath)) {\n entries = readdirSync(resolvedPath).filter(e => !e.startsWith('.'));\n }\n const obj = t.objectExpression(\n entries.map(e => {\n let key = e.split('.')[0];\n const rest = e.split('.').slice(1, -1);\n if (rest.length) {\n key += `.${rest}`;\n }\n const id = t.callExpression(\n state.importUtil.import(path, state.pathToOurAddon('es-compat2'), 'default', 'esc'),\n [state.importUtil.import(path, join(relativePath, key).replace(/\\\\/g, '/'), '*')]\n );\n return t.objectProperty(t.stringLiteral(key), id);\n })\n );\n const memberExpr = t.memberExpression(obj, property, true);\n path.replaceWith(memberExpr);\n state.calledIdentifiers.add(callee.node);\n return;\n } else {\n throw new Error(\n `importSync eager mode only supports dynamic paths which are relative, must start with a '.', had ${specifier.type}`\n );\n }\n }\n path.replaceWith(\n t.callExpression(state.importUtil.import(path, state.pathToOurAddon('es-compat2'), 'default', 'esc'), [\n state.importUtil.import(path, specifier.value, '*'),\n ])\n );\n state.calledIdentifiers.add(callee.node);\n return;\n } else {\n if (path.scope.hasBinding('require')) {\n path.scope.rename('require');\n }\n let r = t.identifier('require');\n state.generatedRequires.add(r);\n path.replaceWith(\n t.callExpression(state.importUtil.import(path, state.pathToOurAddon('es-compat2'), 'default', 'esc'), [\n t.callExpression(r, path.node.arguments),\n ])\n );\n }\n }\n },\n },\n ReferencedIdentifier(path: NodePath<t.Identifier>, state: State) {\n for (let candidate of [\n 'dependencySatisfies',\n 'moduleExists',\n 'getConfig',\n 'getOwnConfig',\n 'failBuild',\n // we cannot check importSync, as the babel transform runs on exit, so *after* this check\n // 'importSync',\n 'isDevelopingApp',\n 'isDevelopingThisPackage',\n 'isTesting',\n ]) {\n if (path.referencesImport('@embroider/macros', candidate) && !state.calledIdentifiers.has(path.node)) {\n throw error(path, `You can only use ${candidate} as a function call`);\n }\n }\n\n if (path.referencesImport('@embroider/macros', 'macroCondition') && !state.calledIdentifiers.has(path.node)) {\n throw error(path, `macroCondition can only be used as the predicate of an if statement or ternary expression`);\n }\n\n if (path.referencesImport('@embroider/macros', 'each') && !state.calledIdentifiers.has(path.node)) {\n throw error(\n path,\n `the each() macro can only be used within a for ... of statement, like: for (let x of each(thing)){}`\n );\n }\n\n if (state.opts.owningPackageRoot) {\n // there is only an owningPackageRoot when we are running inside a\n // classic ember-cli build. In the embroider stage3 build, there is no\n // owning package root because we're compiling *all* packages\n // simultaneously.\n //\n // given that we're inside classic ember-cli, stop here without trying\n // to rewrite bare `require`. It's not needed, because both our\n // `importSync` and any user-written bare `require` can both mean the\n // same thing: runtime AMD `require`.\n return;\n }\n\n if (\n path.node.name === 'require' &&\n !state.generatedRequires.has(path.node) &&\n !path.scope.hasBinding('require') &&\n state.owningPackage().isEmberAddon()\n ) {\n // Our importSync macro has been compiled to `require`. But we want to\n // distinguish that from any pre-existing, user-written `require` in an\n // Ember addon, which should retain its *runtime* meaning.\n path.replaceWith(t.memberExpression(t.identifier('window'), path.node));\n }\n },\n };\n\n if ((context as any).types.OptionalMemberExpression) {\n // our getConfig and getOwnConfig macros are supposed to be able to absorb\n // optional chaining. To make that work we need to see the optional chaining\n // before preset-env compiles them away.\n (visitor as any).OptionalMemberExpression = {\n enter(path: NodePath<t.OptionalMemberExpression>, state: State) {\n if (state.opts.mode === 'compile-time') {\n let result = new Evaluator({ state }).evaluate(path);\n if (result.confident) {\n path.replaceWith(buildLiterals(result.value, context));\n }\n }\n },\n };\n }\n\n return { visitor };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"macros-babel-plugin.js","sourceRoot":"","sources":["macros-babel-plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodePath } from '@babel/traverse';\nimport type { types as t } from '@babel/core';\nimport type State from './state';\nimport { initState } from './state';\nimport type { Mode as GetConfigMode } from './get-config';\nimport { inlineRuntimeConfig, insertConfig } from './get-config';\nimport macroCondition, { isMacroConditionPath } from './macro-condition';\nimport { isEachPath, insertEach } from './each';\n\nimport error from './error';\nimport failBuild from './fail-build';\nimport { Evaluator, buildLiterals } from './evaluate-json';\nimport type * as Babel from '@babel/core';\nimport { existsSync, readdirSync } from 'fs';\nimport { resolve, dirname, join } from 'path';\n\nexport default function main(context: typeof Babel): unknown {\n let t = context.types;\n let visitor = {\n Program: {\n enter(path: NodePath<t.Program>, state: State) {\n initState(context, path, state);\n },\n exit(_: NodePath<t.Program>, state: State) {\n // @embroider/macros itself has no runtime behaviors and should always be removed\n state.importUtil.removeAllImports('@embroider/macros');\n for (let handler of state.jobs) {\n handler();\n }\n },\n },\n 'IfStatement|ConditionalExpression': {\n enter(path: NodePath<t.IfStatement | t.ConditionalExpression>, state: State) {\n if (isMacroConditionPath(path)) {\n state.calledIdentifiers.add(path.get('test').get('callee').node);\n macroCondition(path, state);\n }\n },\n },\n ForOfStatement: {\n enter(path: NodePath<t.ForOfStatement>, state: State) {\n if (isEachPath(path)) {\n state.calledIdentifiers.add(path.get('right').get('callee').node);\n insertEach(path, state, context);\n }\n },\n },\n FunctionDeclaration: {\n enter(path: NodePath<t.FunctionDeclaration>, state: State) {\n let id = path.get('id');\n if (id.isIdentifier() && id.node.name === 'initializeRuntimeMacrosConfig' && state.opts.mode === 'run-time') {\n let pkg = state.owningPackage();\n if (pkg && pkg.name === '@embroider/macros') {\n inlineRuntimeConfig(path, state, context);\n }\n }\n },\n },\n CallExpression: {\n enter(path: NodePath<t.CallExpression>, state: State) {\n let callee = path.get('callee');\n if (!callee.isIdentifier()) {\n return;\n }\n\n // failBuild is implemented for side-effect, not value, so it's not\n // handled by evaluateMacroCall.\n if (callee.referencesImport('@embroider/macros', 'failBuild')) {\n state.calledIdentifiers.add(callee.node);\n failBuild(path, state);\n return;\n }\n\n if (callee.referencesImport('@embroider/macros', 'importSync')) {\n // we handle importSync in the exit hook\n return;\n }\n\n // getOwnConfig/getGlobalConfig/getConfig needs special handling, so\n // even though it also emits values via evaluateMacroCall when they're\n // needed recursively by other macros, it has its own insertion-handling\n // code that we invoke here.\n //\n // The things that are special include:\n // - automatic collapsing of chained properties, etc\n // - these macros have runtime implementations sometimes, which changes\n // how we rewrite them\n let mode: GetConfigMode | false = callee.referencesImport('@embroider/macros', 'getOwnConfig')\n ? 'own'\n : callee.referencesImport('@embroider/macros', 'getGlobalConfig')\n ? 'getGlobalConfig'\n : callee.referencesImport('@embroider/macros', 'getConfig')\n ? 'package'\n : false;\n if (mode) {\n state.calledIdentifiers.add(callee.node);\n insertConfig(path, state, mode, context);\n return;\n }\n\n // isTesting can have a runtime implementation. At compile time it\n // instead falls through to evaluateMacroCall.\n if (callee.referencesImport('@embroider/macros', 'isTesting') && state.opts.mode === 'run-time') {\n state.calledIdentifiers.add(callee.node);\n callee.replaceWith(state.importUtil.import(callee, state.pathToOurAddon('runtime'), 'isTesting'));\n return;\n }\n\n let result = new Evaluator({ state }).evaluateMacroCall(path);\n if (result.confident) {\n state.calledIdentifiers.add(callee.node);\n path.replaceWith(buildLiterals(result.value, context));\n }\n },\n exit(path: NodePath<t.CallExpression>, state: State) {\n let callee = path.get('callee');\n if (!callee.isIdentifier()) {\n return;\n }\n // importSync doesn't evaluate to a static value, so it's implemented\n // directly here, not in evaluateMacroCall.\n // We intentionally do this on exit here, to allow other transforms to handle importSync before we do\n // For example ember-auto-import needs to do some custom transforms to enable use of dynamic template strings,\n // so its babel plugin needs to see and handle the importSync call first!\n if (callee.referencesImport('@embroider/macros', 'importSync')) {\n if (state.opts.importSyncImplementation === 'eager') {\n let specifier = path.node.arguments[0];\n if (specifier?.type !== 'StringLiteral') {\n let relativePath = '';\n let property;\n if (specifier.type === 'TemplateLiteral') {\n relativePath = specifier.quasis[0].value.cooked!;\n property = specifier.expressions[0] as t.Expression;\n }\n // babel might transform template form `../my-path/${id}` to '../my-path/'.concat(id)\n if (\n specifier.type === 'CallExpression' &&\n specifier.callee.type === 'MemberExpression' &&\n specifier.callee.property.type === 'Identifier' &&\n specifier.callee.property.name === 'concat' &&\n specifier.callee.object.type === 'StringLiteral'\n ) {\n relativePath = specifier.callee.object.value;\n property = specifier.arguments[0] as t.Expression;\n }\n if (property && relativePath && relativePath.startsWith('.')) {\n const resolvedPath = resolve(dirname((state as any).filename), relativePath);\n let entries: string[] = [];\n if (existsSync(resolvedPath)) {\n entries = readdirSync(resolvedPath).filter(e => !e.startsWith('.'));\n }\n const obj = t.objectExpression(\n entries.map(e => {\n let key = e.split('.')[0];\n const rest = e.split('.').slice(1, -1);\n if (rest.length) {\n key += `.${rest}`;\n }\n const id = t.callExpression(\n state.importUtil.import(path, state.pathToOurAddon('es-compat2'), 'default', 'esc'),\n [state.importUtil.import(path, join(relativePath, key).replace(/\\\\/g, '/'), '*')]\n );\n return t.objectProperty(t.stringLiteral(key), id);\n })\n );\n const memberExpr = t.memberExpression(obj, property, true);\n path.replaceWith(memberExpr);\n state.calledIdentifiers.add(callee.node);\n return;\n } else {\n throw new Error(\n `importSync eager mode only supports dynamic paths which are relative, must start with a '.', had ${specifier.type}`\n );\n }\n }\n path.replaceWith(\n t.callExpression(state.importUtil.import(path, state.pathToOurAddon('es-compat2'), 'default', 'esc'), [\n state.importUtil.import(path, specifier.value, '*'),\n ])\n );\n state.calledIdentifiers.add(callee.node);\n return;\n } else {\n if (path.scope.hasBinding('require')) {\n path.scope.rename('require');\n }\n let r = t.identifier('require');\n state.generatedRequires.add(r);\n path.replaceWith(\n t.callExpression(state.importUtil.import(path, state.pathToOurAddon('es-compat2'), 'default', 'esc'), [\n t.callExpression(r, path.node.arguments),\n ])\n );\n }\n }\n },\n },\n ReferencedIdentifier(path: NodePath<t.Identifier>, state: State) {\n for (let candidate of [\n 'dependencySatisfies',\n 'appEmberSatisfies',\n 'moduleExists',\n 'getConfig',\n 'getOwnConfig',\n 'failBuild',\n // we cannot check importSync, as the babel transform runs on exit, so *after* this check\n // 'importSync',\n 'isDevelopingApp',\n 'isDevelopingThisPackage',\n 'isTesting',\n ]) {\n if (path.referencesImport('@embroider/macros', candidate) && !state.calledIdentifiers.has(path.node)) {\n throw error(path, `You can only use ${candidate} as a function call`);\n }\n }\n\n if (path.referencesImport('@embroider/macros', 'macroCondition') && !state.calledIdentifiers.has(path.node)) {\n throw error(path, `macroCondition can only be used as the predicate of an if statement or ternary expression`);\n }\n\n if (path.referencesImport('@embroider/macros', 'each') && !state.calledIdentifiers.has(path.node)) {\n throw error(\n path,\n `the each() macro can only be used within a for ... of statement, like: for (let x of each(thing)){}`\n );\n }\n\n if (state.opts.owningPackageRoot) {\n // there is only an owningPackageRoot when we are running inside a\n // classic ember-cli build. In the embroider stage3 build, there is no\n // owning package root because we're compiling *all* packages\n // simultaneously.\n //\n // given that we're inside classic ember-cli, stop here without trying\n // to rewrite bare `require`. It's not needed, because both our\n // `importSync` and any user-written bare `require` can both mean the\n // same thing: runtime AMD `require`.\n return;\n }\n\n if (\n path.node.name === 'require' &&\n !state.generatedRequires.has(path.node) &&\n !path.scope.hasBinding('require') &&\n state.owningPackage().isEmberAddon()\n ) {\n // Our importSync macro has been compiled to `require`. But we want to\n // distinguish that from any pre-existing, user-written `require` in an\n // Ember addon, which should retain its *runtime* meaning.\n path.replaceWith(t.memberExpression(t.identifier('window'), path.node));\n }\n },\n };\n\n if ((context as any).types.OptionalMemberExpression) {\n // our getConfig and getOwnConfig macros are supposed to be able to absorb\n // optional chaining. To make that work we need to see the optional chaining\n // before preset-env compiles them away.\n (visitor as any).OptionalMemberExpression = {\n enter(path: NodePath<t.OptionalMemberExpression>, state: State) {\n if (state.opts.mode === 'compile-time') {\n let result = new Evaluator({ state }).evaluate(path);\n if (result.confident) {\n path.replaceWith(buildLiterals(result.value, context));\n }\n }\n },\n };\n }\n\n return { visitor };\n}\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = appEmberSatisfies;
|
|
4
|
+
const semver_1 = require("semver");
|
|
5
|
+
const packageName = 'ember-source';
|
|
6
|
+
function appEmberSatisfies(node, packageCache) {
|
|
7
|
+
if (node.params.length !== 1) {
|
|
8
|
+
throw new Error(`macroAppEmberSatisfies requires only one argument, you passed ${node.params.length}`);
|
|
9
|
+
}
|
|
10
|
+
if (!node.params.every((p) => p.type === 'StringLiteral')) {
|
|
11
|
+
throw new Error(`all arguments to macroAppEmberSatisfies must be string literals`);
|
|
12
|
+
}
|
|
13
|
+
let root = packageCache.get(packageCache.appRoot);
|
|
14
|
+
let range = node.params[0].value;
|
|
15
|
+
if (!(root === null || root === void 0 ? void 0 : root.hasDependency(packageName))) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
let pkg;
|
|
19
|
+
try {
|
|
20
|
+
pkg = packageCache.resolve(packageName, root);
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
// it's not an error if we can't resolve it, we just don't satisfy it.
|
|
24
|
+
}
|
|
25
|
+
if (pkg) {
|
|
26
|
+
return (0, semver_1.satisfies)(pkg.version, range, {
|
|
27
|
+
includePrerelease: true,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=app-ember-satisfies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-ember-satisfies.js","sourceRoot":"","sources":["app-ember-satisfies.ts"],"names":[],"mappings":";;AAKA,oCA6BC;AAlCD,mCAAmC;AAGnC,MAAM,WAAW,GAAG,cAAc,CAAC;AAEnC,SAAwB,iBAAiB,CAAC,IAAS,EAAE,YAAmC;IACtF,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,iEAAiE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACzG,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IAED,IAAI,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAEjC,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,CAAC,WAAW,CAAC,CAAA,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,GAAG,CAAC;IACR,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sEAAsE;IACxE,CAAC;IAED,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,IAAA,kBAAS,EAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE;YACnC,iBAAiB,EAAE,IAAI;SACxB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import { satisfies } from 'semver';\nimport type { RewrittenPackageCache } from '@embroider/shared-internals';\n\nconst packageName = 'ember-source';\n\nexport default function appEmberSatisfies(node: any, packageCache: RewrittenPackageCache) {\n if (node.params.length !== 1) {\n throw new Error(`macroAppEmberSatisfies requires only one argument, you passed ${node.params.length}`);\n }\n\n if (!node.params.every((p: any) => p.type === 'StringLiteral')) {\n throw new Error(`all arguments to macroAppEmberSatisfies must be string literals`);\n }\n\n let root = packageCache.get(packageCache.appRoot);\n let range = node.params[0].value;\n\n if (!root?.hasDependency(packageName)) {\n return false;\n }\n\n let pkg;\n try {\n pkg = packageCache.resolve(packageName, root);\n } catch (err) {\n // it's not an error if we can't resolve it, we just don't satisfy it.\n }\n\n if (pkg) {\n return satisfies(pkg.version, range, {\n includePrerelease: true,\n });\n }\n return false;\n}\n"]}
|
|
@@ -8,6 +8,7 @@ exports.makeFirstTransform = makeFirstTransform;
|
|
|
8
8
|
exports.makeSecondTransform = makeSecondTransform;
|
|
9
9
|
const literal_1 = __importDefault(require("./literal"));
|
|
10
10
|
const get_config_1 = __importDefault(require("./get-config"));
|
|
11
|
+
const app_ember_satisfies_1 = __importDefault(require("./app-ember-satisfies"));
|
|
11
12
|
const dependency_satisfies_1 = __importDefault(require("./dependency-satisfies"));
|
|
12
13
|
const macro_maybe_attrs_1 = require("./macro-maybe-attrs");
|
|
13
14
|
const macro_condition_1 = require("./macro-condition");
|
|
@@ -58,6 +59,15 @@ function makeFirstTransform(opts) {
|
|
|
58
59
|
}
|
|
59
60
|
return staticValue;
|
|
60
61
|
}
|
|
62
|
+
if (node.path.original === 'macroAppEmberSatisfies') {
|
|
63
|
+
const staticValue = (0, literal_1.default)((0, app_ember_satisfies_1.default)(node, packageCache), env.syntax.builders);
|
|
64
|
+
// If this is a macro expression by itself, then turn it into a macroCondition for the second pass to prune.
|
|
65
|
+
// Otherwise assume it's being composed with another macro and evaluate it as a literal
|
|
66
|
+
if (walker.parent.node.path.original === 'if') {
|
|
67
|
+
return env.syntax.builders.sexpr('macroCondition', [staticValue]);
|
|
68
|
+
}
|
|
69
|
+
return staticValue;
|
|
70
|
+
}
|
|
61
71
|
},
|
|
62
72
|
MustacheStatement(node) {
|
|
63
73
|
if (node.path.type !== 'PathExpression') {
|
|
@@ -75,6 +85,9 @@ function makeFirstTransform(opts) {
|
|
|
75
85
|
if (node.path.original === 'macroDependencySatisfies') {
|
|
76
86
|
return env.syntax.builders.mustache((0, literal_1.default)((0, dependency_satisfies_1.default)(node, opts.packageRoot, moduleName, packageCache), env.syntax.builders));
|
|
77
87
|
}
|
|
88
|
+
if (node.path.original === 'macroAppEmberSatisfies') {
|
|
89
|
+
return env.syntax.builders.mustache((0, literal_1.default)((0, app_ember_satisfies_1.default)(node, packageCache), env.syntax.builders));
|
|
90
|
+
}
|
|
78
91
|
},
|
|
79
92
|
},
|
|
80
93
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-transform.js","sourceRoot":"","sources":["ast-transform.ts"],"names":[],"mappings":"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","sourcesContent":["import literal from './literal';\nimport getConfig from './get-config';\nimport dependencySatisfies from './dependency-satisfies';\nimport { maybeAttrs } from './macro-maybe-attrs';\nimport {\n macroIfBlock,\n macroIfExpression,\n macroIfMustache,\n macroUnlessBlock,\n macroUnlessExpression,\n macroUnlessMustache,\n} from './macro-condition';\nimport { failBuild } from './fail-build';\nimport { RewrittenPackageCache } from '@embroider/shared-internals';\n\nexport interface BuildPluginParams {\n // Glimmer requires this on ast transforms.\n name: string;\n\n // this is the location of @embroider/macros itself. Glimmer requires this on\n // ast transforms.\n baseDir: string;\n\n methodName: string;\n\n firstTransformParams: FirstTransformParams;\n}\n\nexport interface FirstTransformParams {\n // this is the location of the particular package (app or addon) that is\n // depending on @embroider/macros *if* we're in a classic build. Under\n // embroider the build is global and there's no single packageRoot.\n packageRoot: string | undefined;\n\n // this is the path to the topmost package\n appRoot: string;\n\n // this holds all the actual user configs that were sent into the macros\n configs: { [packageRoot: string]: object };\n}\n\nexport function buildPlugin(params: BuildPluginParams) {\n return {\n name: params.name,\n plugin:\n params.methodName === 'makeFirstTransform'\n ? makeFirstTransform(params.firstTransformParams)\n : makeSecondTransform(),\n baseDir: () => params.baseDir,\n };\n}\n\nexport function makeFirstTransform(opts: FirstTransformParams) {\n function embroiderFirstMacrosTransform(env: {\n syntax: { builders: any };\n meta: { moduleName: string };\n filename: string;\n }) {\n if (!opts.packageRoot && !env.filename) {\n throw new Error(`bug in @embroider/macros. Running without packageRoot but don't have filename.`);\n }\n\n let packageCache = RewrittenPackageCache.shared('embroider', opts.appRoot);\n\n let scopeStack: string[][] = [];\n\n // packageRoot is set when we run inside classic ember-cli. Otherwise we're in\n // Embroider, where we can use absolute filenames.\n const moduleName = opts.packageRoot ? env.meta.moduleName : env.filename;\n\n return {\n name: '@embroider/macros/first',\n\n visitor: {\n ...scopeVisitors(env, scopeStack),\n SubExpression(node: any, walker: { parent: { node: any } }) {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n\n if (inScope(scopeStack, headOf(node.path))) {\n return;\n }\n\n if (node.path.original === 'macroGetOwnConfig') {\n return literal(\n getConfig(node, opts.configs, opts.packageRoot, moduleName, true, packageCache),\n env.syntax.builders\n );\n }\n if (node.path.original === 'macroGetConfig') {\n return literal(\n getConfig(node, opts.configs, opts.packageRoot, moduleName, false, packageCache),\n env.syntax.builders\n );\n }\n if (node.path.original === 'macroDependencySatisfies') {\n const staticValue = literal(\n dependencySatisfies(node, opts.packageRoot, moduleName, packageCache),\n env.syntax.builders\n );\n // If this is a macro expression by itself, then turn it into a macroCondition for the second pass to prune.\n // Otherwise assume it's being composed with another macro and evaluate it as a literal\n if (walker.parent.node.path.original === 'if') {\n return env.syntax.builders.sexpr('macroCondition', [staticValue]);\n }\n return staticValue;\n }\n },\n MustacheStatement(node: any) {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n\n if (inScope(scopeStack, headOf(node.path))) {\n return;\n }\n if (node.path.original === 'macroGetOwnConfig') {\n return env.syntax.builders.mustache(\n literal(\n getConfig(node, opts.configs, opts.packageRoot, moduleName, true, packageCache),\n env.syntax.builders\n )\n );\n }\n if (node.path.original === 'macroGetConfig') {\n return env.syntax.builders.mustache(\n literal(\n getConfig(node, opts.configs, opts.packageRoot, moduleName, false, packageCache),\n env.syntax.builders\n )\n );\n }\n if (node.path.original === 'macroDependencySatisfies') {\n return env.syntax.builders.mustache(\n literal(dependencySatisfies(node, opts.packageRoot, moduleName, packageCache), env.syntax.builders)\n );\n }\n },\n },\n };\n }\n (embroiderFirstMacrosTransform as any).embroiderMacrosASTMarker = true;\n (embroiderFirstMacrosTransform as any).parallelBabel = {\n requireFile: __filename,\n buildUsing: 'makeFirstTransform',\n get params(): FirstTransformParams {\n return opts;\n },\n };\n return embroiderFirstMacrosTransform;\n}\n\nexport function makeSecondTransform() {\n function embroiderSecondMacrosTransform(env: { syntax: { builders: any } }) {\n let scopeStack: string[][] = [];\n return {\n name: '@embroider/macros/second',\n\n visitor: {\n ...scopeVisitors(env, scopeStack),\n BlockStatement(node: any) {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n\n if (inScope(scopeStack, headOf(node.path))) {\n return;\n }\n if (node.path.original === 'if') {\n return macroIfBlock(node);\n }\n if (node.path.original === 'unless') {\n return macroUnlessBlock(node);\n }\n },\n SubExpression(node: any) {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n\n if (inScope(scopeStack, headOf(node.path))) {\n return;\n }\n if (node.path.original === 'if') {\n return macroIfExpression(node, env.syntax.builders);\n }\n if (node.path.original === 'unless') {\n return macroUnlessExpression(node, env.syntax.builders);\n }\n if (node.path.original === 'macroFailBuild') {\n failBuild(node);\n }\n },\n ElementNode(node: any) {\n node.modifiers = node.modifiers.filter((modifier: any) => {\n if (\n modifier.path.type === 'SubExpression' &&\n modifier.path.path.type === 'PathExpression' &&\n modifier.path.path.original === 'if'\n ) {\n modifier.path = macroIfExpression(modifier.path, env.syntax.builders);\n if (modifier.path.type === 'UndefinedLiteral') {\n return false;\n }\n }\n if (\n modifier.path.type === 'SubExpression' &&\n modifier.path.path.type === 'PathExpression' &&\n modifier.path.path.original === 'unless'\n ) {\n modifier.path = macroUnlessExpression(modifier.path, env.syntax.builders);\n if (modifier.path.type === 'UndefinedLiteral') {\n return false;\n }\n }\n if (modifier.path.type !== 'PathExpression') {\n return true;\n }\n\n if (inScope(scopeStack, headOf(node.path))) {\n return true;\n }\n if (modifier.path.original === 'macroMaybeAttrs') {\n maybeAttrs(node, modifier, env.syntax.builders);\n } else {\n return true;\n }\n });\n },\n MustacheStatement(node: any) {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n\n if (inScope(scopeStack, headOf(node.path))) {\n return;\n }\n if (node.path.original === 'if') {\n return macroIfMustache(node, env.syntax.builders);\n }\n if (node.path.original === 'unless') {\n return macroUnlessMustache(node, env.syntax.builders);\n }\n if (node.path.original === 'macroFailBuild') {\n failBuild(node);\n }\n },\n },\n };\n }\n (embroiderSecondMacrosTransform as any).embroiderMacrosASTMarker = true;\n (embroiderSecondMacrosTransform as any).parallelBabel = {\n requireFile: __filename,\n buildUsing: 'makeSecondTransform',\n params: undefined,\n };\n return embroiderSecondMacrosTransform;\n}\n\nfunction inScope(scopeStack: string[][], name: string) {\n for (let scope of scopeStack) {\n if (scope.includes(name)) {\n return true;\n }\n }\n return false;\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 scopeVisitors(env: any, scopeStack: string[][]) {\n function enter(node: any) {\n if (node.blockParams.length > 0) {\n scopeStack.push(node.blockParams);\n }\n }\n function exit(node: any) {\n if (node.blockParams.length > 0) {\n scopeStack.pop();\n }\n }\n\n let hasTemplate = 'template' in env.syntax.builders;\n if (hasTemplate) {\n return {\n Template: { enter, exit },\n Block: { enter, exit },\n };\n } else {\n return {\n Program: { enter, exit },\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ast-transform.js","sourceRoot":"","sources":["ast-transform.ts"],"names":[],"mappings":"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","sourcesContent":["import literal from './literal';\nimport getConfig from './get-config';\nimport appEmberSatisfies from './app-ember-satisfies';\nimport dependencySatisfies from './dependency-satisfies';\nimport { maybeAttrs } from './macro-maybe-attrs';\nimport {\n macroIfBlock,\n macroIfExpression,\n macroIfMustache,\n macroUnlessBlock,\n macroUnlessExpression,\n macroUnlessMustache,\n} from './macro-condition';\nimport { failBuild } from './fail-build';\nimport { RewrittenPackageCache } from '@embroider/shared-internals';\n\nexport interface BuildPluginParams {\n // Glimmer requires this on ast transforms.\n name: string;\n\n // this is the location of @embroider/macros itself. Glimmer requires this on\n // ast transforms.\n baseDir: string;\n\n methodName: string;\n\n firstTransformParams: FirstTransformParams;\n}\n\nexport interface FirstTransformParams {\n // this is the location of the particular package (app or addon) that is\n // depending on @embroider/macros *if* we're in a classic build. Under\n // embroider the build is global and there's no single packageRoot.\n packageRoot: string | undefined;\n\n // this is the path to the topmost package\n appRoot: string;\n\n // this holds all the actual user configs that were sent into the macros\n configs: { [packageRoot: string]: object };\n}\n\nexport function buildPlugin(params: BuildPluginParams) {\n return {\n name: params.name,\n plugin:\n params.methodName === 'makeFirstTransform'\n ? makeFirstTransform(params.firstTransformParams)\n : makeSecondTransform(),\n baseDir: () => params.baseDir,\n };\n}\n\nexport function makeFirstTransform(opts: FirstTransformParams) {\n function embroiderFirstMacrosTransform(env: {\n syntax: { builders: any };\n meta: { moduleName: string };\n filename: string;\n }) {\n if (!opts.packageRoot && !env.filename) {\n throw new Error(`bug in @embroider/macros. Running without packageRoot but don't have filename.`);\n }\n\n let packageCache = RewrittenPackageCache.shared('embroider', opts.appRoot);\n\n let scopeStack: string[][] = [];\n\n // packageRoot is set when we run inside classic ember-cli. Otherwise we're in\n // Embroider, where we can use absolute filenames.\n const moduleName = opts.packageRoot ? env.meta.moduleName : env.filename;\n\n return {\n name: '@embroider/macros/first',\n\n visitor: {\n ...scopeVisitors(env, scopeStack),\n SubExpression(node: any, walker: { parent: { node: any } }) {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n\n if (inScope(scopeStack, headOf(node.path))) {\n return;\n }\n\n if (node.path.original === 'macroGetOwnConfig') {\n return literal(\n getConfig(node, opts.configs, opts.packageRoot, moduleName, true, packageCache),\n env.syntax.builders\n );\n }\n if (node.path.original === 'macroGetConfig') {\n return literal(\n getConfig(node, opts.configs, opts.packageRoot, moduleName, false, packageCache),\n env.syntax.builders\n );\n }\n if (node.path.original === 'macroDependencySatisfies') {\n const staticValue = literal(\n dependencySatisfies(node, opts.packageRoot, moduleName, packageCache),\n env.syntax.builders\n );\n // If this is a macro expression by itself, then turn it into a macroCondition for the second pass to prune.\n // Otherwise assume it's being composed with another macro and evaluate it as a literal\n if (walker.parent.node.path.original === 'if') {\n return env.syntax.builders.sexpr('macroCondition', [staticValue]);\n }\n return staticValue;\n }\n if (node.path.original === 'macroAppEmberSatisfies') {\n const staticValue = literal(appEmberSatisfies(node, packageCache), env.syntax.builders);\n // If this is a macro expression by itself, then turn it into a macroCondition for the second pass to prune.\n // Otherwise assume it's being composed with another macro and evaluate it as a literal\n if (walker.parent.node.path.original === 'if') {\n return env.syntax.builders.sexpr('macroCondition', [staticValue]);\n }\n return staticValue;\n }\n },\n MustacheStatement(node: any) {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n\n if (inScope(scopeStack, headOf(node.path))) {\n return;\n }\n if (node.path.original === 'macroGetOwnConfig') {\n return env.syntax.builders.mustache(\n literal(\n getConfig(node, opts.configs, opts.packageRoot, moduleName, true, packageCache),\n env.syntax.builders\n )\n );\n }\n if (node.path.original === 'macroGetConfig') {\n return env.syntax.builders.mustache(\n literal(\n getConfig(node, opts.configs, opts.packageRoot, moduleName, false, packageCache),\n env.syntax.builders\n )\n );\n }\n if (node.path.original === 'macroDependencySatisfies') {\n return env.syntax.builders.mustache(\n literal(dependencySatisfies(node, opts.packageRoot, moduleName, packageCache), env.syntax.builders)\n );\n }\n if (node.path.original === 'macroAppEmberSatisfies') {\n return env.syntax.builders.mustache(literal(appEmberSatisfies(node, packageCache), env.syntax.builders));\n }\n },\n },\n };\n }\n (embroiderFirstMacrosTransform as any).embroiderMacrosASTMarker = true;\n (embroiderFirstMacrosTransform as any).parallelBabel = {\n requireFile: __filename,\n buildUsing: 'makeFirstTransform',\n get params(): FirstTransformParams {\n return opts;\n },\n };\n return embroiderFirstMacrosTransform;\n}\n\nexport function makeSecondTransform() {\n function embroiderSecondMacrosTransform(env: { syntax: { builders: any } }) {\n let scopeStack: string[][] = [];\n return {\n name: '@embroider/macros/second',\n\n visitor: {\n ...scopeVisitors(env, scopeStack),\n BlockStatement(node: any) {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n\n if (inScope(scopeStack, headOf(node.path))) {\n return;\n }\n if (node.path.original === 'if') {\n return macroIfBlock(node);\n }\n if (node.path.original === 'unless') {\n return macroUnlessBlock(node);\n }\n },\n SubExpression(node: any) {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n\n if (inScope(scopeStack, headOf(node.path))) {\n return;\n }\n if (node.path.original === 'if') {\n return macroIfExpression(node, env.syntax.builders);\n }\n if (node.path.original === 'unless') {\n return macroUnlessExpression(node, env.syntax.builders);\n }\n if (node.path.original === 'macroFailBuild') {\n failBuild(node);\n }\n },\n ElementNode(node: any) {\n node.modifiers = node.modifiers.filter((modifier: any) => {\n if (\n modifier.path.type === 'SubExpression' &&\n modifier.path.path.type === 'PathExpression' &&\n modifier.path.path.original === 'if'\n ) {\n modifier.path = macroIfExpression(modifier.path, env.syntax.builders);\n if (modifier.path.type === 'UndefinedLiteral') {\n return false;\n }\n }\n if (\n modifier.path.type === 'SubExpression' &&\n modifier.path.path.type === 'PathExpression' &&\n modifier.path.path.original === 'unless'\n ) {\n modifier.path = macroUnlessExpression(modifier.path, env.syntax.builders);\n if (modifier.path.type === 'UndefinedLiteral') {\n return false;\n }\n }\n if (modifier.path.type !== 'PathExpression') {\n return true;\n }\n\n if (inScope(scopeStack, headOf(node.path))) {\n return true;\n }\n if (modifier.path.original === 'macroMaybeAttrs') {\n maybeAttrs(node, modifier, env.syntax.builders);\n } else {\n return true;\n }\n });\n },\n MustacheStatement(node: any) {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n\n if (inScope(scopeStack, headOf(node.path))) {\n return;\n }\n if (node.path.original === 'if') {\n return macroIfMustache(node, env.syntax.builders);\n }\n if (node.path.original === 'unless') {\n return macroUnlessMustache(node, env.syntax.builders);\n }\n if (node.path.original === 'macroFailBuild') {\n failBuild(node);\n }\n },\n },\n };\n }\n (embroiderSecondMacrosTransform as any).embroiderMacrosASTMarker = true;\n (embroiderSecondMacrosTransform as any).parallelBabel = {\n requireFile: __filename,\n buildUsing: 'makeSecondTransform',\n params: undefined,\n };\n return embroiderSecondMacrosTransform;\n}\n\nfunction inScope(scopeStack: string[][], name: string) {\n for (let scope of scopeStack) {\n if (scope.includes(name)) {\n return true;\n }\n }\n return false;\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 scopeVisitors(env: any, scopeStack: string[][]) {\n function enter(node: any) {\n if (node.blockParams.length > 0) {\n scopeStack.push(node.blockParams);\n }\n }\n function exit(node: any) {\n if (node.blockParams.length > 0) {\n scopeStack.pop();\n }\n }\n\n let hasTemplate = 'template' in env.syntax.builders;\n if (hasTemplate) {\n return {\n Template: { enter, exit },\n Block: { enter, exit },\n };\n } else {\n return {\n Program: { enter, exit },\n };\n }\n}\n"]}
|
package/src/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare function dependencySatisfies(packageName: string, semverRange: string): boolean;
|
|
2
|
+
export declare function appEmberSatisfies(semverRange: string): boolean;
|
|
2
3
|
export declare function macroCondition(predicate: boolean): boolean;
|
|
3
4
|
export declare function each<T>(array: T[]): T[];
|
|
4
5
|
export declare function importSync(specifier: string): unknown;
|
|
@@ -35,6 +36,12 @@ export interface EmbroiderMacrosRegistry {
|
|
|
35
36
|
};
|
|
36
37
|
Return: ReturnType<typeof dependencySatisfies>;
|
|
37
38
|
}>;
|
|
39
|
+
macroAppEmberSatisfies: HelperLike<{
|
|
40
|
+
Args: {
|
|
41
|
+
Positional: Parameters<typeof appEmberSatisfies>;
|
|
42
|
+
};
|
|
43
|
+
Return: ReturnType<typeof appEmberSatisfies>;
|
|
44
|
+
}>;
|
|
38
45
|
macroMaybeAttrs: HelperLike<{
|
|
39
46
|
Args: {
|
|
40
47
|
Positional: [predicate: boolean, ...bareAttrs: unknown[]];
|
package/src/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
/* Macro Type Signatures */
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.dependencySatisfies = dependencySatisfies;
|
|
5
|
+
exports.appEmberSatisfies = appEmberSatisfies;
|
|
5
6
|
exports.macroCondition = macroCondition;
|
|
6
7
|
exports.each = each;
|
|
7
8
|
exports.importSync = importSync;
|
|
@@ -30,6 +31,9 @@ exports.moduleExists = moduleExists;
|
|
|
30
31
|
function dependencySatisfies(packageName, semverRange) {
|
|
31
32
|
throw new Oops(packageName, semverRange);
|
|
32
33
|
}
|
|
34
|
+
function appEmberSatisfies(semverRange) {
|
|
35
|
+
throw new Oops(semverRange);
|
|
36
|
+
}
|
|
33
37
|
function macroCondition(predicate) {
|
|
34
38
|
throw new Oops(predicate);
|
|
35
39
|
}
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";AAAA,2BAA2B;;AAkB3B,kDAEC;AAED,wCAEC;AAED,oBAEC;AAKD,gCAEC;AAED,8BAEC;AAED,oCAEC;AAED,0CAEC;AAED,0CAEC;AAED,8BAEC;AAED,8BAEC;AAED,oCAEC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";AAAA,2BAA2B;;AAkB3B,kDAEC;AAED,8CAEC;AAED,wCAEC;AAED,oBAEC;AAKD,gCAEC;AAED,8BAEC;AAED,oCAEC;AAED,0CAEC;AAED,0CAEC;AAED,8BAEC;AAED,8BAEC;AAED,oCAEC;AAjED;;;;;;;;;;;;;;EAcE;AAEF,SAAgB,mBAAmB,CAAC,WAAmB,EAAE,WAAmB;IAC1E,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,iBAAiB,CAAC,WAAmB;IACnD,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;AAC9B,CAAC;AAED,SAAgB,cAAc,CAAC,SAAkB;IAC/C,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;AAC5B,CAAC;AAED,SAAgB,IAAI,CAAI,KAAU;IAChC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,4BAA4B;AAC5B,mFAAmF;AACnF,kDAAkD;AAClD,SAAgB,UAAU,CAAC,SAAiB;IAC1C,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;AAC5B,CAAC;AAED,SAAgB,SAAS,CAAI,WAAmB;IAC9C,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;AAC9B,CAAC;AAED,SAAgB,YAAY;IAC1B,MAAM,IAAI,IAAI,EAAE,CAAC;AACnB,CAAC;AAED,SAAgB,eAAe;IAC7B,MAAM,IAAI,IAAI,EAAE,CAAC;AACnB,CAAC;AAED,SAAgB,eAAe;IAC7B,MAAM,IAAI,IAAI,EAAE,CAAC;AACnB,CAAC;AAED,SAAgB,SAAS;IACvB,MAAM,IAAI,IAAI,EAAE,CAAC;AACnB,CAAC;AAED,SAAgB,SAAS,CAAC,OAAe;IACvC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,YAAY,CAAC,WAAmB;IAC9C,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,IAAK,SAAQ,KAAK;IAEtB,YAAY,GAAG,MAAa;QAC1B,KAAK,CACH,6HAA6H,CAC9H,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF","sourcesContent":["/* Macro Type Signatures */\n\n/*\n CAUTION: this code is not necessarily what you are actually running. In\n general, the macros are implemented at build time using babel, and so calls to\n these functions get compiled away before they ever run. However, this code is\n here because it provides types to typescript users of the macros.\n\n Some macros also have runtime implementations that are useful in development\n mode, in addition to their build-time implementations in babel. You can find\n the runtime implementations in runtime.ts.\n\n Having a runtime mode lets us do things like produce a single build in\n development that works for both fastboot and browser, using the macros to\n switch between modes. For production, you would switch to the build-time macro\n implementation to get two optimized builds instead.\n*/\n\nexport function dependencySatisfies(packageName: string, semverRange: string): boolean {\n throw new Oops(packageName, semverRange);\n}\n\nexport function appEmberSatisfies(semverRange: string): boolean {\n throw new Oops(semverRange);\n}\n\nexport function macroCondition(predicate: boolean): boolean {\n throw new Oops(predicate);\n}\n\nexport function each<T>(array: T[]): T[] {\n throw new Oops(array);\n}\n\n// We would prefer to write:\n// export function importSync<T extends string>(specifier: T): typeof import(T) {\n// but TS doesn't seem to support that at present.\nexport function importSync(specifier: string): unknown {\n throw new Oops(specifier);\n}\n\nexport function getConfig<T>(packageName: string): T {\n throw new Oops(packageName);\n}\n\nexport function getOwnConfig<T>(): T {\n throw new Oops();\n}\n\nexport function getGlobalConfig<T>(): T {\n throw new Oops();\n}\n\nexport function isDevelopingApp(): boolean {\n throw new Oops();\n}\n\nexport function isTesting(): boolean {\n throw new Oops();\n}\n\nexport function failBuild(message: string): void {\n throw new Oops(message);\n}\n\nexport function moduleExists(packageName: string): boolean {\n throw new Oops(packageName);\n}\n\nclass Oops extends Error {\n params: any[];\n constructor(...params: any[]) {\n super(\n `this method is really implemented at compile time via a babel plugin. If you're seeing this exception, something went wrong`\n );\n this.params = params;\n }\n}\n\nimport type { HelperLike } from '@glint/template';\n\nexport interface EmbroiderMacrosRegistry {\n macroGetOwnConfig: HelperLike<{\n Args: { Positional: [...keys: string[]] };\n Return: ReturnType<typeof getOwnConfig>;\n }>;\n macroGetConfig: HelperLike<{\n Args: { Positional: [packageName: string, ...keys: string[]] };\n Return: ReturnType<typeof getConfig>;\n }>;\n macroCondition: HelperLike<{\n Args: { Positional: [predicate: boolean] };\n Return: boolean;\n }>;\n macroDependencySatisfies: HelperLike<{\n Args: { Positional: Parameters<typeof dependencySatisfies> };\n Return: ReturnType<typeof dependencySatisfies>;\n }>;\n macroAppEmberSatisfies: HelperLike<{\n Args: { Positional: Parameters<typeof appEmberSatisfies> };\n Return: ReturnType<typeof appEmberSatisfies>;\n }>;\n macroMaybeAttrs: HelperLike<{\n Args: { Positional: [predicate: boolean, ...bareAttrs: unknown[]] };\n Return: void;\n }>;\n macroFailBuild: HelperLike<{\n Args: { Positional: Parameters<typeof failBuild> };\n Return: ReturnType<typeof failBuild>;\n }>;\n}\n"]}
|