@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.15.2-unstable.fad2387",
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.fad2387",
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.8-unstable.fad2387",
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"]}