UNPKG

@glimmer/compiler

Version:
263 lines (217 loc) 17.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EXPR = exports.ExpressionEncoder = void 0; var _util = require("@glimmer/util"); class ExpressionEncoder { expr(expr) { switch (expr.type) { case 'Missing': return undefined; case 'Literal': return this.Literal(expr); case 'CallExpression': return this.CallExpression(expr); case 'DeprecatedCallExpression': return this.DeprecatedCallExpression(expr); case 'PathExpression': return this.PathExpression(expr); case 'Arg': return [30 /* GetSymbol */ , expr.symbol]; case 'Local': return this.Local(expr); case 'This': return [30 /* GetSymbol */ , 0]; case 'Free': return [expr.resolution.resolution(), expr.symbol]; case 'HasBlock': return this.HasBlock(expr); case 'HasBlockParams': return this.HasBlockParams(expr); case 'Curry': return this.Curry(expr); case 'Not': return this.Not(expr); case 'IfInline': return this.IfInline(expr); case 'InterpolateExpression': return this.InterpolateExpression(expr); case 'GetDynamicVar': return this.GetDynamicVar(expr); case 'Log': return this.Log(expr); } } Literal({ value }) { if (value === undefined) { return [27 /* Undefined */ ]; } else { return value; } } Missing() { return undefined; } HasBlock({ symbol }) { return [48 /* HasBlock */ , [30 /* GetSymbol */ , symbol]]; } HasBlockParams({ symbol }) { return [49 /* HasBlockParams */ , [30 /* GetSymbol */ , symbol]]; } Curry({ definition, curriedType, args }) { return [50 /* Curry */ , EXPR.expr(definition), curriedType, EXPR.Positional(args.positional), EXPR.NamedArguments(args.named)]; } Local({ isTemplateLocal, symbol }) { return [isTemplateLocal ? 32 /* GetTemplateSymbol */ : 30 /* GetSymbol */ , symbol]; } GetWithResolver({ symbol }) { return [34 /* GetFreeAsComponentOrHelperHeadOrThisFallback */ , symbol]; } PathExpression({ head, tail }) { let getOp = EXPR.expr(head); return [...getOp, EXPR.Tail(tail)]; } InterpolateExpression({ parts }) { return [29 /* Concat */ , parts.map(e => EXPR.expr(e)).toArray()]; } CallExpression({ callee, args }) { return [28 /* Call */ , EXPR.expr(callee), ...EXPR.Args(args)]; } DeprecatedCallExpression({ arg, callee }) { return [99 /* GetFreeAsDeprecatedHelperHeadOrThisFallback */ , callee.symbol, [arg.chars]]; } Tail({ members }) { return (0, _util.mapPresent)(members, member => member.chars); } Args({ positional, named }) { return [this.Positional(positional), this.NamedArguments(named)]; } Positional({ list }) { return list.map(l => EXPR.expr(l)).toPresentArray(); } NamedArgument({ key, value }) { return [key.chars, EXPR.expr(value)]; } NamedArguments({ entries: pairs }) { let list = pairs.toArray(); if ((0, _util.isPresent)(list)) { let names = []; let values = []; for (let pair of list) { let [name, value] = EXPR.NamedArgument(pair); names.push(name); values.push(value); } (0, _util.assertPresent)(names); (0, _util.assertPresent)(values); return [names, values]; } else { return null; } } Not({ value }) { return [51 /* Not */ , EXPR.expr(value)]; } IfInline({ condition, truthy, falsy }) { let expr = [52 /* IfInline */ , EXPR.expr(condition), EXPR.expr(truthy)]; if (falsy) { expr.push(EXPR.expr(falsy)); } return expr; } GetDynamicVar({ name }) { return [53 /* GetDynamicVar */ , EXPR.expr(name)]; } Log({ positional }) { return [54 /* Log */ , this.Positional(positional)]; } } exports.ExpressionEncoder = ExpressionEncoder; const EXPR = new ExpressionEncoder(); exports.EXPR = EXPR; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9wYXNzZXMvMi1lbmNvZGluZy9leHByZXNzaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBRUE7O0FBTU0sTUFBQSxpQkFBQSxDQUF3QjtBQUM1QixFQUFBLElBQUksQ0FBQSxJQUFBLEVBQXlCO0FBQzNCLFlBQVEsSUFBSSxDQUFaLElBQUE7QUFDRSxXQUFBLFNBQUE7QUFDRSxlQUFBLFNBQUE7O0FBQ0YsV0FBQSxTQUFBO0FBQ0UsZUFBTyxLQUFBLE9BQUEsQ0FBUCxJQUFPLENBQVA7O0FBQ0YsV0FBQSxnQkFBQTtBQUNFLGVBQU8sS0FBQSxjQUFBLENBQVAsSUFBTyxDQUFQOztBQUNGLFdBQUEsMEJBQUE7QUFDRSxlQUFPLEtBQUEsd0JBQUEsQ0FBUCxJQUFPLENBQVA7O0FBQ0YsV0FBQSxnQkFBQTtBQUNFLGVBQU8sS0FBQSxjQUFBLENBQVAsSUFBTyxDQUFQOztBQUNGLFdBQUEsS0FBQTtBQUNFLGVBQU8sQ0FBQTtBQUFBO0FBQUEsVUFBd0IsSUFBSSxDQUFuQyxNQUFPLENBQVA7O0FBQ0YsV0FBQSxPQUFBO0FBQ0UsZUFBTyxLQUFBLEtBQUEsQ0FBUCxJQUFPLENBQVA7O0FBQ0YsV0FBQSxNQUFBO0FBQ0UsZUFBTyxDQUFBO0FBQUE7QUFBQSxVQUFQLENBQU8sQ0FBUDs7QUFDRixXQUFBLE1BQUE7QUFDRSxlQUFPLENBQUMsSUFBSSxDQUFKLFVBQUEsQ0FBRCxVQUFDLEVBQUQsRUFBK0IsSUFBSSxDQUExQyxNQUFPLENBQVA7O0FBQ0YsV0FBQSxVQUFBO0FBQ0UsZUFBTyxLQUFBLFFBQUEsQ0FBUCxJQUFPLENBQVA7O0FBQ0YsV0FBQSxnQkFBQTtBQUNFLGVBQU8sS0FBQSxjQUFBLENBQVAsSUFBTyxDQUFQOztBQUNGLFdBQUEsT0FBQTtBQUNFLGVBQU8sS0FBQSxLQUFBLENBQVAsSUFBTyxDQUFQOztBQUNGLFdBQUEsS0FBQTtBQUNF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bXBvcnQgeyBQcmVzZW50QXJyYXksIFNleHBPcGNvZGVzLCBXaXJlRm9ybWF0IH0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBU1R2MiB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBhc3NlcnRQcmVzZW50LCBpc1ByZXNlbnQsIG1hcFByZXNlbnQgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuaW1wb3J0ICogYXMgbWlyIGZyb20gJy4vbWlyJztcblxuZXhwb3J0IHR5cGUgSGFzaFBhaXIgPSBbc3RyaW5nLCBXaXJlRm9ybWF0LkV4cHJlc3Npb25dO1xuXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvbkVuY29kZXIge1xuICBleHByKGV4cHI6IG1pci5FeHByZXNzaW9uTm9kZSk6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbiB7XG4gICAgc3dpdGNoIChleHByLnR5cGUpIHtcbiAgICAgIGNhc2UgJ01pc3NpbmcnOlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgY2FzZSAnTGl0ZXJhbCc6XG4gICAgICAgIHJldHVybiB0aGlzLkxpdGVyYWwoZXhwcik7XG4gICAgICBjYXNlICdDYWxsRXhwcmVzc2lvbic6XG4gICAgICAgIHJldHVybiB0aGlzLkNhbGxFeHByZXNzaW9uKGV4cHIpO1xuICAgICAgY2FzZSAnRGVwcmVjYXRlZENhbGxFeHByZXNzaW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuRGVwcmVjYXRlZENhbGxFeHByZXNzaW9uKGV4cHIpO1xuICAgICAgY2FzZSAnUGF0aEV4cHJlc3Npb24nOlxuICAgICAgICByZXR1cm4gdGhpcy5QYXRoRXhwcmVzc2lvbihleHByKTtcbiAgICAgIGNhc2UgJ0FyZyc6XG4gICAgICAgIHJldHVybiBbU2V4cE9wY29kZXMuR2V0U3ltYm9sLCBleHByLnN5bWJvbF07XG4gICAgICBjYXNlICdMb2NhbCc6XG4gICAgICAgIHJldHVybiB0aGlzLkxvY2FsKGV4cHIpO1xuICAgICAgY2FzZSAnVGhpcyc6XG4gICAgICAgIHJldHVybiBbU2V4cE9wY29kZXMuR2V0U3ltYm9sLCAwXTtcbiAgICAgIGNhc2UgJ0ZyZWUnOlxuICAgICAgICByZXR1cm4gW2V4cHIucmVzb2x1dGlvbi5yZXNvbHV0aW9uKCksIGV4cHIuc3ltYm9sXTtcbiAgICAgIGNhc2UgJ0hhc0Jsb2NrJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuSGFzQmxvY2soZXhwcik7XG4gICAgICBjYXNlICdIYXNCbG9ja1BhcmFtcyc6XG4gICAgICAgIHJldHVybiB0aGlzLkhhc0Jsb2NrUGFyYW1zKGV4cHIpO1xuICAgICAgY2FzZSAnQ3VycnknOlxuICAgICAgICByZXR1cm4gdGhpcy5DdXJyeShleHByKTtcbiAgICAgIGNhc2UgJ05vdCc6XG4gICAgICAgIHJldHVybiB0aGlzLk5vdChleHByKTtcbiAgICAgIGNhc2UgJ0lmSW5saW5lJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuSWZJbmxpbmUoZXhwcik7XG4gICAgICBjYXNlICdJbnRlcnBvbGF0ZUV4cHJlc3Npb24nOlxuICAgICAgICByZXR1cm4gdGhpcy5JbnRlcnBvbGF0ZUV4cHJlc3Npb24oZXhwcik7XG4gICAgICBjYXNlICdHZXREeW5hbWljVmFyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuR2V0RHluYW1pY1ZhcihleHByKTtcbiAgICAgIGNhc2UgJ0xvZyc6XG4gICAgICAgIHJldHVybiB0aGlzLkxvZyhleHByKTtcbiAgICB9XG4gIH1cblxuICBMaXRlcmFsKHtcbiAgICB2YWx1ZSxcbiAgfTogQVNUdjIuTGl0ZXJhbEV4cHJlc3Npb24pOiBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLlZhbHVlIHwgV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5VbmRlZmluZWQge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gW1NleHBPcGNvZGVzLlVuZGVmaW5lZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBNaXNzaW5nKCk6IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIEhhc0Jsb2NrKHsgc3ltYm9sIH06IG1pci5IYXNCbG9jayk6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuSGFzQmxvY2sge1xuICAgIHJldHVybiBbU2V4cE9wY29kZXMuSGFzQmxvY2ssIFtTZXhwT3Bjb2Rlcy5HZXRTeW1ib2wsIHN5bWJvbF1dO1xuICB9XG5cbiAgSGFzQmxvY2tQYXJhbXMoeyBzeW1ib2wgfTogbWlyLkhhc0Jsb2NrUGFyYW1zKTogV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5IYXNCbG9ja1BhcmFtcyB7XG4gICAgcmV0dXJuIFtTZXhwT3Bjb2Rlcy5IYXNCbG9ja1BhcmFtcywgW1NleHBPcGNvZGVzLkdldFN5bWJvbCwgc3ltYm9sXV07XG4gIH1cblxuICBDdXJyeSh7IGRlZmluaXRpb24sIGN1cnJpZWRUeXBlLCBhcmdzIH06IG1pci5DdXJyeSk6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuQ3Vycnkge1xuICAgIHJldHVybiBbXG4gICAgICBTZXhwT3Bjb2Rlcy5DdXJyeSxcbiAgICAgIEVYUFIuZXhwcihkZWZpbml0aW9uKSxcbiAgICAgIGN1cnJpZWRUeXBlLFxuICAgICAgRVhQUi5Qb3NpdGlvbmFsKGFyZ3MucG9zaXRpb25hbCksXG4gICAgICBFWFBSLk5hbWVkQXJndW1lbnRzKGFyZ3MubmFtZWQpLFxuICAgIF07XG4gIH1cblxuICBMb2NhbCh7XG4gICAgaXNUZW1wbGF0ZUxvY2FsLFxuICAgIHN5bWJvbCxcbiAgfTogQVNUdjIuTG9jYWxWYXJSZWZlcmVuY2UpOlxuICAgIHwgV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5HZXRTeW1ib2xcbiAgICB8IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuR2V0VGVtcGxhdGVTeW1ib2wge1xuICAgIHJldHVybiBbaXNUZW1wbGF0ZUxvY2FsID8gU2V4cE9wY29kZXMuR2V0VGVtcGxhdGVTeW1ib2wgOiBTZXhwT3Bjb2Rlcy5HZXRTeW1ib2wsIHN5bWJvbF07XG4gIH1cblxuICBHZXRXaXRoUmVzb2x2ZXIoeyBzeW1ib2wgfTogbWlyLkdldFdpdGhSZXNvbHZlcik6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuR2V0Q29udGV4dHVhbEZyZWUge1xuICAgIHJldHVybiBbU2V4cE9wY29kZXMuR2V0RnJlZUFzQ29tcG9uZW50T3JIZWxwZXJIZWFkT3JUaGlzRmFsbGJhY2ssIHN5bWJvbF07XG4gIH1cblxuICBQYXRoRXhwcmVzc2lvbih7IGhlYWQsIHRhaWwgfTogbWlyLlBhdGhFeHByZXNzaW9uKTogV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5HZXRQYXRoIHtcbiAgICBsZXQgZ2V0T3AgPSBFWFBSLmV4cHIoaGVhZCkgYXMgV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5HZXRWYXI7XG5cbiAgICByZXR1cm4gWy4uLmdldE9wLCBFWFBSLlRhaWwodGFpbCldO1xuICB9XG5cbiAgSW50ZXJwb2xhdGVFeHByZXNzaW9uKHsgcGFydHMgfTogbWlyLkludGVycG9sYXRlRXhwcmVzc2lvbik6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuQ29uY2F0IHtcbiAgICByZXR1cm4gW1NleHBPcGNvZGVzLkNvbmNhdCwgcGFydHMubWFwKChlKSA9PiBFWFBSLmV4cHIoZSkpLnRvQXJyYXkoKV07XG4gIH1cblxuICBDYWxsRXhwcmVzc2lvbih7IGNhbGxlZSwgYXJncyB9OiBtaXIuQ2FsbEV4cHJlc3Npb24pOiBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLkhlbHBlciB7XG4gICAgcmV0dXJuIFtTZXhwT3Bjb2Rlcy5DYWxsLCBFWFBSLmV4cHIoY2FsbGVlKSwgLi4uRVhQUi5BcmdzKGFyZ3MpXTtcbiAgfVxuXG4gIERlcHJlY2F0ZWRDYWxsRXhwcmVzc2lvbih7XG4gICAgYXJnLFxuICAgIGNhbGxlZSxcbiAgfTogbWlyLkRlcHJlY2F0ZWRDYWxsRXhwcmVzc2lvbik6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuR2V0UGF0aEZyZWVBc0RlcHJlY2F0ZWRIZWxwZXJIZWFkT3JUaGlzRmFsbGJhY2sge1xuICAgIHJldHVybiBbU2V4cE9wY29kZXMuR2V0RnJlZUFzRGVwcmVjYXRlZEhlbHBlckhlYWRPclRoaXNGYWxsYmFjaywgY2FsbGVlLnN5bWJvbCwgW2FyZy5jaGFyc11dO1xuICB9XG5cbiAgVGFpbCh7IG1lbWJlcnMgfTogbWlyLlRhaWwpOiBQcmVzZW50QXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG1hcFByZXNlbnQobWVtYmVycywgKG1lbWJlcikgPT4gbWVtYmVyLmNoYXJzKTtcbiAgfVxuXG4gIEFyZ3MoeyBwb3NpdGlvbmFsLCBuYW1lZCB9OiBtaXIuQXJncyk6IFdpcmVGb3JtYXQuQ29yZS5BcmdzIHtcbiAgICByZXR1cm4gW3RoaXMuUG9zaXRpb25hbChwb3NpdGlvbmFsKSwgdGhpcy5OYW1lZEFyZ3VtZW50cyhuYW1lZCldO1xuICB9XG5cbiAgUG9zaXRpb25hbCh7IGxpc3QgfTogbWlyLlBvc2l0aW9uYWwpOiBXaXJlRm9ybWF0LkNvcmUuUGFyYW1zIHtcbiAgICByZXR1cm4gbGlzdC5tYXAoKGwpID0+IEVYUFIuZXhwcihsKSkudG9QcmVzZW50QXJyYXkoKTtcbiAgfVxuXG4gIE5hbWVkQXJndW1lbnQoeyBrZXksIHZhbHVlIH06IG1pci5OYW1lZEFyZ3VtZW50KTogSGFzaFBhaXIge1xuICAgIHJldHVybiBba2V5LmNoYXJzLCBFWFBSLmV4cHIodmFsdWUpXTtcbiAgfVxuXG4gIE5hbWVkQXJndW1lbnRzKHsgZW50cmllczogcGFpcnMgfTogbWlyLk5hbWVkQXJndW1lbnRzKTogV2lyZUZvcm1hdC5Db3JlLkhhc2gge1xuICAgIGxldCBsaXN0ID0gcGFpcnMudG9BcnJheSgpO1xuXG4gICAgaWYgKGlzUHJlc2VudChsaXN0KSkge1xuICAgICAgbGV0IG5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgbGV0IHZhbHVlczogV2lyZUZvcm1hdC5FeHByZXNzaW9uW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgcGFpciBvZiBsaXN0KSB7XG4gICAgICAgIGxldCBbbmFtZSwgdmFsdWVdID0gRVhQUi5OYW1lZEFyZ3VtZW50KHBhaXIpO1xuICAgICAgICBuYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGFzc2VydFByZXNlbnQobmFtZXMpO1xuICAgICAgYXNzZXJ0UHJlc2VudCh2YWx1ZXMpO1xuXG4gICAgICByZXR1cm4gW25hbWVzLCB2YWx1ZXNdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBOb3QoeyB2YWx1ZSB9OiBtaXIuTm90KTogV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5Ob3Qge1xuICAgIHJldHVybiBbU2V4cE9wY29kZXMuTm90LCBFWFBSLmV4cHIodmFsdWUpXTtcbiAgfVxuXG4gIElmSW5saW5lKHsgY29uZGl0aW9uLCB0cnV0aHksIGZhbHN5IH06IG1pci5JZklubGluZSk6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuSWZJbmxpbmUge1xuICAgIGxldCBleHByID0gW1NleHBPcGNvZGVzLklmSW5saW5lLCBFWFBSLmV4cHIoY29uZGl0aW9uKSwgRVhQUi5leHByKHRydXRoeSldO1xuXG4gICAgaWYgKGZhbHN5KSB7XG4gICAgICBleHByLnB1c2goRVhQUi5leHByKGZhbHN5KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cHIgYXMgV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5JZklubGluZTtcbiAgfVxuXG4gIEdldER5bmFtaWNWYXIoeyBuYW1lIH06IG1pci5HZXREeW5hbWljVmFyKTogV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5HZXREeW5hbWljVmFyIHtcbiAgICByZXR1cm4gW1NleHBPcGNvZGVzLkdldER5bmFtaWNWYXIsIEVYUFIuZXhwcihuYW1lKV07XG4gIH1cblxuICBMb2coeyBwb3NpdGlvbmFsIH06IG1pci5Mb2cpOiBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLkxvZyB7XG4gICAgcmV0dXJuIFtTZXhwT3Bjb2Rlcy5Mb2csIHRoaXMuUG9zaXRpb25hbChwb3NpdGlvbmFsKV07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEVYUFIgPSBuZXcgRXhwcmVzc2lvbkVuY29kZXIoKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=