@embroider/macros 1.17.0-alpha.3 → 1.17.0-alpha.5

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/README.md CHANGED
@@ -10,6 +10,45 @@ The [Embroider package spec](../../docs/spec.md) proposes fixing this by making
10
10
 
11
11
  This package works in both Embroider and Classical builds, so that addon authors can switch to this newer pattern without disruption.
12
12
 
13
+ ## Setting Configuration: from a babel config
14
+
15
+ 1. Add `@embroider/macros` as `devDependency`.
16
+ 2. In your babel config, do:
17
+
18
+ ```js
19
+ const { buildMacros } = require('@embroider/macros/babel');
20
+
21
+ const macros = buildMacros({
22
+ // this is how you configure your own package
23
+ setOwnConfig: {
24
+ // your config goes here
25
+ },
26
+ // this is how you can optionally send configuration into your
27
+ // dependencies, if those dependencies choose to use
28
+ // @embroider/macros configs.
29
+ setConfig: {
30
+ 'some-dependency': {
31
+ // config for some-dependency
32
+ },
33
+ },
34
+ });
35
+
36
+ module.exports = {
37
+ plugins: [
38
+ // ...
39
+ [
40
+ "babel-plugin-ember-template-compilation",
41
+ {
42
+ compilerPath: "ember-source/dist/ember-template-compiler.js",
43
+ transforms: [...macros.templateMacros],
44
+ },
45
+ ],
46
+ ...macros.babelMacros,
47
+ ],
48
+ // ...
49
+ };
50
+ ```
51
+
13
52
  ## Setting Configuration: from an Ember app
14
53
 
15
54
  1. Add `@embroider/macros` as `devDependency`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embroider/macros",
3
- "version": "1.17.0-alpha.3",
3
+ "version": "1.17.0-alpha.5",
4
4
  "private": false,
5
5
  "description": "Standardized build-time macros for ember apps.",
6
6
  "keywords": [
@@ -14,6 +14,11 @@
14
14
  "license": "MIT",
15
15
  "author": "Edward Faulkner",
16
16
  "main": "src/index.js",
17
+ "exports": {
18
+ ".": "./src/index.js",
19
+ "./babel": "./src/babel.js",
20
+ "./src/*": "./src/*.js"
21
+ },
17
22
  "files": [
18
23
  "src/**/*.js",
19
24
  "src/**/*.d.ts",
@@ -54,8 +59,8 @@
54
59
  "code-equality-assertions": "^1.0.1",
55
60
  "scenario-tester": "^3.0.1",
56
61
  "typescript": "^5.4.5",
57
- "@embroider/core": "4.0.0-alpha.4",
58
- "@embroider/test-support": "0.36.0"
62
+ "@embroider/test-support": "0.36.0",
63
+ "@embroider/core": "4.0.0-alpha.6"
59
64
  },
60
65
  "peerDependencies": {
61
66
  "@glint/template": "^1.0.0"
@@ -101,11 +101,6 @@ const unops = {
101
101
  return undefined;
102
102
  },
103
103
  };
104
- // this is needed to make our strict types work when inter-operating with
105
- // babel's own built-in evaluator
106
- function isConfidentResult(result) {
107
- return result.confident;
108
- }
109
104
  class Evaluator {
110
105
  constructor(env = {}) {
111
106
  this.knownPaths = env.knownPaths || new Map();
@@ -164,10 +159,6 @@ class Evaluator {
164
159
  return result;
165
160
  }
166
161
  realEvaluate(path) {
167
- let builtIn = path.evaluate();
168
- if (isConfidentResult(builtIn)) {
169
- return { ...builtIn, hasRuntimeImplementation: false };
170
- }
171
162
  if (path.isMemberExpression()) {
172
163
  return this.evaluateMember(path, false);
173
164
  }
@@ -188,6 +179,9 @@ class Evaluator {
188
179
  if (path.isNullLiteral()) {
189
180
  return { confident: true, value: null, hasRuntimeImplementation: false };
190
181
  }
182
+ if (path.isIdentifier() && path.node.name === 'undefined') {
183
+ return { confident: true, value: undefined, hasRuntimeImplementation: false };
184
+ }
191
185
  if (path.isObjectExpression()) {
192
186
  let props = assertArray(path.get('properties')).map(p => {
193
187
  if (p.isSpreadElement()) {
@@ -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\n// this is needed to make our strict types work when inter-operating with\n// babel's own built-in evaluator\nfunction isConfidentResult(result: { confident: boolean; value: any }): result is ConfidentResult {\n return result.confident;\n}\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 let builtIn = path.evaluate();\n if (isConfidentResult(builtIn)) {\n return { ...builtIn, hasRuntimeImplementation: false };\n }\n\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.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 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 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 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"]}
package/src/babel.d.ts ADDED
@@ -0,0 +1,46 @@
1
+ import MacrosConfig from './macros-config';
2
+ export interface Options {
3
+ /**
4
+ * How you configure your own package / app
5
+ */
6
+ setOwnConfig?: object;
7
+ /**
8
+ * This is how you can optionally send configuration into
9
+ * your dependencies, if those dependencies choose to use
10
+ * @embroider/macros configs.
11
+ *
12
+ * @example
13
+ * ```js
14
+ * setConfig: {
15
+ * 'some-dependency': {
16
+ * // config for some-dependency
17
+ * }
18
+ * }
19
+ * ```
20
+ */
21
+ setConfig?: Record<string, object>;
22
+ /**
23
+ * Callback for further manipulation of the macros' configuration instance.
24
+ *
25
+ * Useful for libraries to provide their own config with defaults shared between sub-dependencies of those libraries.
26
+ */
27
+ configure?: (macrosInstance: MacrosConfig) => void;
28
+ /**
29
+ * Override the default directory used for the MacrosConfig
30
+ *
31
+ * defaults to the CWD, via process.cwd()
32
+ */
33
+ dir?: string;
34
+ }
35
+ interface ConfiguredMacros {
36
+ /**
37
+ * Array of plugins to add to the babel config plugins array
38
+ */
39
+ babelMacros: ReturnType<MacrosConfig['babelPluginConfig']>;
40
+ /**
41
+ * Array of template transforms to pass to the transforms array of the babel-plugin-ember-template-compilation babel plugin
42
+ */
43
+ templateMacros: ReturnType<(typeof MacrosConfig)['transforms']>['plugins'];
44
+ }
45
+ export declare function buildMacros(options?: Options): ConfiguredMacros;
46
+ export {};
package/src/babel.js ADDED
@@ -0,0 +1,33 @@
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.buildMacros = buildMacros;
7
+ const macros_config_1 = __importDefault(require("./macros-config"));
8
+ function buildMacros(options = {}) {
9
+ let root = options.dir || process.cwd();
10
+ let macros = macros_config_1.default.for({}, root);
11
+ let transforms = macros_config_1.default.transforms();
12
+ transforms.setConfig(macros);
13
+ let { setOwnConfig, setConfig, configure } = options;
14
+ if (setOwnConfig) {
15
+ macros.setOwnConfig(root, setOwnConfig);
16
+ }
17
+ if (setConfig) {
18
+ for (let [packageName, config] of Object.entries(setConfig)) {
19
+ macros.setConfig(root, packageName, config);
20
+ }
21
+ }
22
+ configure === null || configure === void 0 ? void 0 : configure(macros);
23
+ if (process.env.NODE_ENV === 'development') {
24
+ macros.enablePackageDevelopment(process.cwd());
25
+ macros.enableRuntimeMode();
26
+ }
27
+ macros.finalize();
28
+ return {
29
+ babelMacros: macros.babelPluginConfig(),
30
+ templateMacros: transforms.plugins,
31
+ };
32
+ }
33
+ //# sourceMappingURL=babel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"babel.js","sourceRoot":"","sources":["babel.ts"],"names":[],"mappings":";;;;;AAiDA,kCAiCC;AAlFD,oEAA2C;AAiD3C,SAAgB,WAAW,CAAC,UAAmB,EAAE;IAC/C,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACxC,IAAI,MAAM,GAAG,uBAAY,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAExC,IAAI,UAAU,GAAG,uBAAY,CAAC,UAAU,EAAE,CAAC;IAE3C,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAE7B,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAErD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,MAAgB,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAG,MAAM,CAAC,CAAC;IAEpB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC3C,MAAM,CAAC,wBAAwB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,QAAQ,EAAE,CAAC;IAElB,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,iBAAiB,EAAE;QACvC,cAAc,EAAE,UAAU,CAAC,OAAO;KACnC,CAAC;AACJ,CAAC","sourcesContent":["import MacrosConfig from './macros-config';\n\nexport interface Options {\n /**\n * How you configure your own package / app\n */\n setOwnConfig?: object;\n /**\n * This is how you can optionally send configuration into\n * your dependencies, if those dependencies choose to use\n * @embroider/macros configs.\n *\n * @example\n * ```js\n * setConfig: {\n * 'some-dependency': {\n * // config for some-dependency\n * }\n * }\n * ```\n */\n setConfig?: Record<string, object>;\n\n /**\n * Callback for further manipulation of the macros' configuration instance.\n *\n * Useful for libraries to provide their own config with defaults shared between sub-dependencies of those libraries.\n */\n configure?: (macrosInstance: MacrosConfig) => void;\n\n /**\n * Override the default directory used for the MacrosConfig\n *\n * defaults to the CWD, via process.cwd()\n */\n dir?: string;\n}\n\ninterface ConfiguredMacros {\n /**\n * Array of plugins to add to the babel config plugins array\n */\n babelMacros: ReturnType<MacrosConfig['babelPluginConfig']>;\n /**\n * Array of template transforms to pass to the transforms array of the babel-plugin-ember-template-compilation babel plugin\n */\n templateMacros: ReturnType<(typeof MacrosConfig)['transforms']>['plugins'];\n}\n\nexport function buildMacros(options: Options = {}): ConfiguredMacros {\n let root = options.dir || process.cwd();\n let macros = MacrosConfig.for({}, root);\n\n let transforms = MacrosConfig.transforms();\n\n transforms.setConfig(macros);\n\n let { setOwnConfig, setConfig, configure } = options;\n\n if (setOwnConfig) {\n macros.setOwnConfig(root, setOwnConfig);\n }\n\n if (setConfig) {\n for (let [packageName, config] of Object.entries(setConfig)) {\n macros.setConfig(root, packageName, config as object);\n }\n }\n\n configure?.(macros);\n\n if (process.env.NODE_ENV === 'development') {\n macros.enablePackageDevelopment(process.cwd());\n macros.enableRuntimeMode();\n }\n\n macros.finalize();\n\n return {\n babelMacros: macros.babelPluginConfig(),\n templateMacros: transforms.plugins,\n };\n}\n"]}