@embroider/macros 1.15.2-unstable.fad2387 → 1.16.1-unstable.ccbf41f
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
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@embroider/macros",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.16.1-unstable.ccbf41f",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Standardized build-time macros for ember apps.",
|
|
6
6
|
"keywords": [
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@babel/core": "^7.24.0",
|
|
27
|
-
"@embroider/shared-internals": "2.6.1-unstable.
|
|
27
|
+
"@embroider/shared-internals": "2.6.1-unstable.ccbf41f",
|
|
28
28
|
"assert-never": "^1.2.1",
|
|
29
29
|
"babel-import-util": "^2.0.0",
|
|
30
30
|
"ember-cli-babel": "^8.2.0",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@babel/plugin-transform-modules-amd": "^7.19.6",
|
|
38
38
|
"@babel/traverse": "^7.14.5",
|
|
39
|
-
"@embroider/core": "3.4.
|
|
39
|
+
"@embroider/core": "3.4.9-unstable.ccbf41f",
|
|
40
40
|
"@embroider/test-support": "workspace:*",
|
|
41
41
|
"@glint/template": "^1.0.0",
|
|
42
42
|
"@types/babel__core": "^7.1.14",
|
|
@@ -128,6 +128,9 @@ function makeSecondTransform() {
|
|
|
128
128
|
if (node.path.original === 'if') {
|
|
129
129
|
return (0, macro_condition_1.macroIfBlock)(node);
|
|
130
130
|
}
|
|
131
|
+
if (node.path.original === 'unless') {
|
|
132
|
+
return (0, macro_condition_1.macroUnlessBlock)(node);
|
|
133
|
+
}
|
|
131
134
|
},
|
|
132
135
|
SubExpression(node) {
|
|
133
136
|
if (node.path.type !== 'PathExpression') {
|
|
@@ -139,6 +142,9 @@ function makeSecondTransform() {
|
|
|
139
142
|
if (node.path.original === 'if') {
|
|
140
143
|
return (0, macro_condition_1.macroIfExpression)(node, env.syntax.builders);
|
|
141
144
|
}
|
|
145
|
+
if (node.path.original === 'unless') {
|
|
146
|
+
return (0, macro_condition_1.macroUnlessExpression)(node, env.syntax.builders);
|
|
147
|
+
}
|
|
142
148
|
if (node.path.original === 'macroFailBuild') {
|
|
143
149
|
(0, fail_build_1.failBuild)(node);
|
|
144
150
|
}
|
|
@@ -153,6 +159,14 @@ function makeSecondTransform() {
|
|
|
153
159
|
return false;
|
|
154
160
|
}
|
|
155
161
|
}
|
|
162
|
+
if (modifier.path.type === 'SubExpression' &&
|
|
163
|
+
modifier.path.path.type === 'PathExpression' &&
|
|
164
|
+
modifier.path.path.original === 'unless') {
|
|
165
|
+
modifier.path = (0, macro_condition_1.macroUnlessExpression)(modifier.path, env.syntax.builders);
|
|
166
|
+
if (modifier.path.type === 'UndefinedLiteral') {
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
156
170
|
if (modifier.path.type !== 'PathExpression') {
|
|
157
171
|
return true;
|
|
158
172
|
}
|
|
@@ -177,6 +191,9 @@ function makeSecondTransform() {
|
|
|
177
191
|
if (node.path.original === 'if') {
|
|
178
192
|
return (0, macro_condition_1.macroIfMustache)(node, env.syntax.builders);
|
|
179
193
|
}
|
|
194
|
+
if (node.path.original === 'unless') {
|
|
195
|
+
return (0, macro_condition_1.macroUnlessMustache)(node, env.syntax.builders);
|
|
196
|
+
}
|
|
180
197
|
if (node.path.original === 'macroFailBuild') {
|
|
181
198
|
(0, fail_build_1.failBuild)(node);
|
|
182
199
|
}
|
|
@@ -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 { macroIfBlock, macroIfExpression, macroIfMustache } 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 Program: {\n enter(node: any) {\n if (node.blockParams.length > 0) {\n scopeStack.push(node.blockParams);\n }\n },\n exit(node: any) {\n if (node.blockParams.length > 0) {\n scopeStack.pop();\n }\n },\n },\n SubExpression(node: any, walker: { parent: { node: any } }) {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n if (inScope(scopeStack, node.path.parts[0])) {\n return;\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 if (inScope(scopeStack, node.path.parts[0])) {\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 Program: {\n enter(node: any) {\n if (node.blockParams.length > 0) {\n scopeStack.push(node.blockParams);\n }\n },\n exit(node: any) {\n if (node.blockParams.length > 0) {\n scopeStack.pop();\n }\n },\n },\n BlockStatement(node: any) {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n if (inScope(scopeStack, node.path.parts[0])) {\n return;\n }\n if (node.path.original === 'if') {\n return macroIfBlock(node);\n }\n },\n SubExpression(node: any) {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n if (inScope(scopeStack, node.path.parts[0])) {\n return;\n }\n if (node.path.original === 'if') {\n return macroIfExpression(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 (modifier.path.type !== 'PathExpression') {\n return true;\n }\n if (inScope(scopeStack, modifier.path.parts[0])) {\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 if (inScope(scopeStack, node.path.parts[0])) {\n return;\n }\n if (node.path.original === 'if') {\n return macroIfMustache(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"]}
|
|
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 Program: {\n enter(node: any) {\n if (node.blockParams.length > 0) {\n scopeStack.push(node.blockParams);\n }\n },\n exit(node: any) {\n if (node.blockParams.length > 0) {\n scopeStack.pop();\n }\n },\n },\n SubExpression(node: any, walker: { parent: { node: any } }) {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n if (inScope(scopeStack, node.path.parts[0])) {\n return;\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 if (inScope(scopeStack, node.path.parts[0])) {\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 Program: {\n enter(node: any) {\n if (node.blockParams.length > 0) {\n scopeStack.push(node.blockParams);\n }\n },\n exit(node: any) {\n if (node.blockParams.length > 0) {\n scopeStack.pop();\n }\n },\n },\n BlockStatement(node: any) {\n if (node.path.type !== 'PathExpression') {\n return;\n }\n if (inScope(scopeStack, node.path.parts[0])) {\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 if (inScope(scopeStack, node.path.parts[0])) {\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 true;\n }\n }\n if (modifier.path.type !== 'PathExpression') {\n return true;\n }\n if (inScope(scopeStack, modifier.path.parts[0])) {\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 if (inScope(scopeStack, node.path.parts[0])) {\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"]}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
export declare function macroIfBlock(node: any): any;
|
|
2
2
|
export declare function macroIfExpression(node: any, builders: any): any;
|
|
3
3
|
export declare function macroIfMustache(node: any, builders: any): any;
|
|
4
|
+
export declare function macroUnlessBlock(node: any): any;
|
|
5
|
+
export declare function macroUnlessExpression(node: any, builders: any): any;
|
|
6
|
+
export declare function macroUnlessMustache(node: any, builders: any): any;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.macroIfMustache = exports.macroIfExpression = exports.macroIfBlock = void 0;
|
|
6
|
+
exports.macroUnlessMustache = exports.macroUnlessExpression = exports.macroUnlessBlock = exports.macroIfMustache = exports.macroIfExpression = exports.macroIfBlock = void 0;
|
|
7
7
|
const evaluate_1 = __importDefault(require("./evaluate"));
|
|
8
8
|
function macroIfBlock(node) {
|
|
9
9
|
let condition = node.params[0];
|
|
@@ -61,4 +61,60 @@ function macroIfMustache(node, builders) {
|
|
|
61
61
|
return builders.mustache(result);
|
|
62
62
|
}
|
|
63
63
|
exports.macroIfMustache = macroIfMustache;
|
|
64
|
+
function macroUnlessBlock(node) {
|
|
65
|
+
let condition = node.params[0];
|
|
66
|
+
if (!condition || condition.type !== 'SubExpression' || condition.path.original !== 'macroCondition') {
|
|
67
|
+
return node;
|
|
68
|
+
}
|
|
69
|
+
if (condition.params.length !== 1) {
|
|
70
|
+
throw new Error(`macroCondition requires one arguments, you passed ${node.params.length}`);
|
|
71
|
+
}
|
|
72
|
+
let result = (0, evaluate_1.default)(condition.params[0]);
|
|
73
|
+
if (!result.confident) {
|
|
74
|
+
throw new Error(`argument to macroCondition must be statically analyzable`);
|
|
75
|
+
}
|
|
76
|
+
if (result.value) {
|
|
77
|
+
if (node.inverse) {
|
|
78
|
+
return node.inverse.body;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
return [];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
return node.program.body;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
exports.macroUnlessBlock = macroUnlessBlock;
|
|
89
|
+
function macroUnlessExpression(node, builders) {
|
|
90
|
+
let condition = node.params[0];
|
|
91
|
+
if (!condition || condition.type !== 'SubExpression' || condition.path.original !== 'macroCondition') {
|
|
92
|
+
return node;
|
|
93
|
+
}
|
|
94
|
+
if (condition.params.length !== 1) {
|
|
95
|
+
throw new Error(`macroCondition requires one arguments, you passed ${node.params.length}`);
|
|
96
|
+
}
|
|
97
|
+
let result = (0, evaluate_1.default)(condition.params[0]);
|
|
98
|
+
if (!result.confident) {
|
|
99
|
+
throw new Error(`argument to macroCondition must be statically analyzable`);
|
|
100
|
+
}
|
|
101
|
+
if (result.value) {
|
|
102
|
+
return node.params[2] || builders.undefined();
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
return node.params[1];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.macroUnlessExpression = macroUnlessExpression;
|
|
109
|
+
function macroUnlessMustache(node, builders) {
|
|
110
|
+
let result = macroUnlessExpression(node, builders);
|
|
111
|
+
if (result === node) {
|
|
112
|
+
return node;
|
|
113
|
+
}
|
|
114
|
+
if (result.type === 'SubExpression') {
|
|
115
|
+
return builders.mustache(result.path, result.params, result.hash);
|
|
116
|
+
}
|
|
117
|
+
return builders.mustache(result);
|
|
118
|
+
}
|
|
119
|
+
exports.macroUnlessMustache = macroUnlessMustache;
|
|
64
120
|
//# sourceMappingURL=macro-condition.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"macro-condition.js","sourceRoot":"","sources":["macro-condition.ts"],"names":[],"mappings":";;;;;;AAAA,0DAAkC;AAElC,SAAgB,YAAY,CAAC,IAAS;IACpC,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAE/B,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,eAAe,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,KAAK,gBAAgB,EAAE;QACpG,OAAO,IAAI,CAAC;KACb;IAED,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACjC,MAAM,IAAI,KAAK,CAAC,qDAAqD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;KAC5F;IAED,IAAI,MAAM,GAAG,IAAA,kBAAQ,EAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;KAC7E;IAED,IAAI,MAAM,CAAC,KAAK,EAAE;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;KAC1B;SAAM;QACL,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;SAC1B;aAAM;YACL,OAAO,EAAE,CAAC;SACX;KACF;AACH,CAAC;AAzBD,oCAyBC;AAED,SAAgB,iBAAiB,CAAC,IAAS,EAAE,QAAa;IACxD,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAE/B,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,eAAe,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,KAAK,gBAAgB,EAAE;QACpG,OAAO,IAAI,CAAC;KACb;IAED,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACjC,MAAM,IAAI,KAAK,CAAC,qDAAqD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;KAC5F;IAED,IAAI,MAAM,GAAG,IAAA,kBAAQ,EAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;KAC7E;IAED,IAAI,MAAM,CAAC,KAAK,EAAE;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KACvB;SAAM;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;KAC/C;AACH,CAAC;AArBD,8CAqBC;AAED,SAAgB,eAAe,CAAC,IAAS,EAAE,QAAa;IACtD,IAAI,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAE/C,IAAI,MAAM,KAAK,IAAI,EAAE;QACnB,OAAO,IAAI,CAAC;KACb;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,EAAE;QACnC,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;KACnE;IAED,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAZD,0CAYC","sourcesContent":["import evaluate from './evaluate';\n\nexport function macroIfBlock(node: any) {\n let condition = node.params[0];\n\n if (!condition || condition.type !== 'SubExpression' || condition.path.original !== 'macroCondition') {\n return node;\n }\n\n if (condition.params.length !== 1) {\n throw new Error(`macroCondition requires one arguments, you passed ${node.params.length}`);\n }\n\n let result = evaluate(condition.params[0]);\n if (!result.confident) {\n throw new Error(`argument to macroCondition must be statically analyzable`);\n }\n\n if (result.value) {\n return node.program.body;\n } else {\n if (node.inverse) {\n return node.inverse.body;\n } else {\n return [];\n }\n }\n}\n\nexport function macroIfExpression(node: any, builders: any) {\n let condition = node.params[0];\n\n if (!condition || condition.type !== 'SubExpression' || condition.path.original !== 'macroCondition') {\n return node;\n }\n\n if (condition.params.length !== 1) {\n throw new Error(`macroCondition requires one arguments, you passed ${node.params.length}`);\n }\n\n let result = evaluate(condition.params[0]);\n if (!result.confident) {\n throw new Error(`argument to macroCondition must be statically analyzable`);\n }\n\n if (result.value) {\n return node.params[1];\n } else {\n return node.params[2] || builders.undefined();\n }\n}\n\nexport function macroIfMustache(node: any, builders: any) {\n let result = macroIfExpression(node, builders);\n\n if (result === node) {\n return node;\n }\n\n if (result.type === 'SubExpression') {\n return builders.mustache(result.path, result.params, result.hash);\n }\n\n return builders.mustache(result);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"macro-condition.js","sourceRoot":"","sources":["macro-condition.ts"],"names":[],"mappings":"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","sourcesContent":["import evaluate from './evaluate';\n\nexport function macroIfBlock(node: any) {\n let condition = node.params[0];\n\n if (!condition || condition.type !== 'SubExpression' || condition.path.original !== 'macroCondition') {\n return node;\n }\n\n if (condition.params.length !== 1) {\n throw new Error(`macroCondition requires one arguments, you passed ${node.params.length}`);\n }\n\n let result = evaluate(condition.params[0]);\n if (!result.confident) {\n throw new Error(`argument to macroCondition must be statically analyzable`);\n }\n\n if (result.value) {\n return node.program.body;\n } else {\n if (node.inverse) {\n return node.inverse.body;\n } else {\n return [];\n }\n }\n}\n\nexport function macroIfExpression(node: any, builders: any) {\n let condition = node.params[0];\n\n if (!condition || condition.type !== 'SubExpression' || condition.path.original !== 'macroCondition') {\n return node;\n }\n\n if (condition.params.length !== 1) {\n throw new Error(`macroCondition requires one arguments, you passed ${node.params.length}`);\n }\n\n let result = evaluate(condition.params[0]);\n if (!result.confident) {\n throw new Error(`argument to macroCondition must be statically analyzable`);\n }\n\n if (result.value) {\n return node.params[1];\n } else {\n return node.params[2] || builders.undefined();\n }\n}\n\nexport function macroIfMustache(node: any, builders: any) {\n let result = macroIfExpression(node, builders);\n\n if (result === node) {\n return node;\n }\n\n if (result.type === 'SubExpression') {\n return builders.mustache(result.path, result.params, result.hash);\n }\n\n return builders.mustache(result);\n}\n\nexport function macroUnlessBlock(node: any) {\n let condition = node.params[0];\n\n if (!condition || condition.type !== 'SubExpression' || condition.path.original !== 'macroCondition') {\n return node;\n }\n\n if (condition.params.length !== 1) {\n throw new Error(`macroCondition requires one arguments, you passed ${node.params.length}`);\n }\n\n let result = evaluate(condition.params[0]);\n if (!result.confident) {\n throw new Error(`argument to macroCondition must be statically analyzable`);\n }\n\n if (result.value) {\n if (node.inverse) {\n return node.inverse.body;\n } else {\n return [];\n }\n } else {\n return node.program.body;\n }\n}\n\nexport function macroUnlessExpression(node: any, builders: any) {\n let condition = node.params[0];\n\n if (!condition || condition.type !== 'SubExpression' || condition.path.original !== 'macroCondition') {\n return node;\n }\n\n if (condition.params.length !== 1) {\n throw new Error(`macroCondition requires one arguments, you passed ${node.params.length}`);\n }\n\n let result = evaluate(condition.params[0]);\n if (!result.confident) {\n throw new Error(`argument to macroCondition must be statically analyzable`);\n }\n\n if (result.value) {\n return node.params[2] || builders.undefined();\n } else {\n return node.params[1];\n }\n}\n\nexport function macroUnlessMustache(node: any, builders: any) {\n let result = macroUnlessExpression(node, builders);\n\n if (result === node) {\n return node;\n }\n\n if (result.type === 'SubExpression') {\n return builders.mustache(result.path, result.params, result.hash);\n }\n\n return builders.mustache(result);\n}\n"]}
|