UNPKG

@glimmer/compiler

Version:
252 lines (210 loc) 17.7 kB
import { assertPresent, isPresent, mapPresent } from '@glimmer/util'; export 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 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 (isPresent(list)) { let names = []; let values = []; for (let pair of list) { let [name, value] = EXPR.NamedArgument(pair); names.push(name); values.push(value); } assertPresent(names); 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)]; } } export const EXPR = new ExpressionEncoder(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9wYXNzZXMvMi1lbmNvZGluZy9leHByZXNzaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxTQUFTLGFBQVQsRUFBd0IsU0FBeEIsRUFBbUMsVUFBbkMsUUFBcUQsZUFBckQ7QUFNQSxPQUFNLE1BQU8saUJBQVAsQ0FBd0I7QUFDNUIsRUFBQSxJQUFJLENBQUMsSUFBRCxFQUF5QjtBQUMzQixZQUFRLElBQUksQ0FBQyxJQUFiO0FBQ0UsV0FBSyxTQUFMO0FBQ0UsZUFBTyxTQUFQOztBQUNGLFdBQUssU0FBTDtBQUNFLGVBQU8sS0FBSyxPQUFMLENBQWEsSUFBYixDQUFQOztBQUNGLFdBQUssZ0JBQUw7QUFDRSxlQUFPLEtBQUssY0FBTCxDQUFvQixJQUFwQixDQUFQOztBQUNGLFdBQUssMEJBQUw7QUFDRSxlQUFPLEtBQUssd0JBQUwsQ0FBOEIsSUFBOUIsQ0FBUDs7QUFDRixXQUFLLGdCQUFMO0FBQ0UsZUFBTyxLQUFLLGNBQUwsQ0FBb0IsSUFBcEIsQ0FBUDs7QUFDRixXQUFLLEtBQUw7QUFDRSxlQUFPLENBQUE7QUFBQTtBQUFBLFVBQXdCLElBQUksQ0FBQyxNQUE3QixDQUFQOztBQUNGLFdBQUssT0FBTDtBQUNFLGVBQU8sS0FBSyxLQUFMLENBQVcsSUFBWCxDQUFQOztBQUNGLFdBQUssTUFBTDtBQUNFLGVBQU8sQ0FBQTtBQUFBO0FBQUEsVUFBd0IsQ0FBeEIsQ0FBUDs7QUFDRixXQUFLLE1BQUw7QUFDRSxlQUFPLENBQUMsSUFBSSxDQUFDLFVBQUwsQ0FBZ0IsVUFBaEIsRUFBRCxFQUErQixJQUFJLENBQUMsTUFBcEMsQ0FBUDs7QUFDRixXQUFLLFVBQUw7QUFDRSxlQUFPLEtBQUssUUFBTCxDQUFjLElBQWQsQ0FBUDs7QUFDRixXQUFLLGdCQUFMO0FBQ0UsZUFBTyxLQUFLLGNBQUwsQ0FBb0IsSUFBcEIsQ0FBUDs7QUFDRixXQUFLLE9BQUw7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aEIsQ0FBbEIsQ0FBUDtBQUNEOztBQXBLMkI7QUF1SzlCLE9BQU8sTUFBTSxJQUFJLEdBQUcsSUFBSSxpQkFBSixFQUFiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJlc2VudEFycmF5LCBTZXhwT3Bjb2RlcywgV2lyZUZvcm1hdCB9IGZyb20gJ0BnbGltbWVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQVNUdjIgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuaW1wb3J0IHsgYXNzZXJ0UHJlc2VudCwgaXNQcmVzZW50LCBtYXBQcmVzZW50IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5cbmltcG9ydCAqIGFzIG1pciBmcm9tICcuL21pcic7XG5cbmV4cG9ydCB0eXBlIEhhc2hQYWlyID0gW3N0cmluZywgV2lyZUZvcm1hdC5FeHByZXNzaW9uXTtcblxuZXhwb3J0IGNsYXNzIEV4cHJlc3Npb25FbmNvZGVyIHtcbiAgZXhwcihleHByOiBtaXIuRXhwcmVzc2lvbk5vZGUpOiBXaXJlRm9ybWF0LkV4cHJlc3Npb24ge1xuICAgIHN3aXRjaCAoZXhwci50eXBlKSB7XG4gICAgICBjYXNlICdNaXNzaW5nJzpcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGNhc2UgJ0xpdGVyYWwnOlxuICAgICAgICByZXR1cm4gdGhpcy5MaXRlcmFsKGV4cHIpO1xuICAgICAgY2FzZSAnQ2FsbEV4cHJlc3Npb24nOlxuICAgICAgICByZXR1cm4gdGhpcy5DYWxsRXhwcmVzc2lvbihleHByKTtcbiAgICAgIGNhc2UgJ0RlcHJlY2F0ZWRDYWxsRXhwcmVzc2lvbic6XG4gICAgICAgIHJldHVybiB0aGlzLkRlcHJlY2F0ZWRDYWxsRXhwcmVzc2lvbihleHByKTtcbiAgICAgIGNhc2UgJ1BhdGhFeHByZXNzaW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuUGF0aEV4cHJlc3Npb24oZXhwcik7XG4gICAgICBjYXNlICdBcmcnOlxuICAgICAgICByZXR1cm4gW1NleHBPcGNvZGVzLkdldFN5bWJvbCwgZXhwci5zeW1ib2xdO1xuICAgICAgY2FzZSAnTG9jYWwnOlxuICAgICAgICByZXR1cm4gdGhpcy5Mb2NhbChleHByKTtcbiAgICAgIGNhc2UgJ1RoaXMnOlxuICAgICAgICByZXR1cm4gW1NleHBPcGNvZGVzLkdldFN5bWJvbCwgMF07XG4gICAgICBjYXNlICdGcmVlJzpcbiAgICAgICAgcmV0dXJuIFtleHByLnJlc29sdXRpb24ucmVzb2x1dGlvbigpLCBleHByLnN5bWJvbF07XG4gICAgICBjYXNlICdIYXNCbG9jayc6XG4gICAgICAgIHJldHVybiB0aGlzLkhhc0Jsb2NrKGV4cHIpO1xuICAgICAgY2FzZSAnSGFzQmxvY2tQYXJhbXMnOlxuICAgICAgICByZXR1cm4gdGhpcy5IYXNCbG9ja1BhcmFtcyhleHByKTtcbiAgICAgIGNhc2UgJ0N1cnJ5JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3VycnkoZXhwcik7XG4gICAgICBjYXNlICdOb3QnOlxuICAgICAgICByZXR1cm4gdGhpcy5Ob3QoZXhwcik7XG4gICAgICBjYXNlICdJZklubGluZSc6XG4gICAgICAgIHJldHVybiB0aGlzLklmSW5saW5lKGV4cHIpO1xuICAgICAgY2FzZSAnSW50ZXJwb2xhdGVFeHByZXNzaW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuSW50ZXJwb2xhdGVFeHByZXNzaW9uKGV4cHIpO1xuICAgICAgY2FzZSAnR2V0RHluYW1pY1Zhcic6XG4gICAgICAgIHJldHVybiB0aGlzLkdldER5bmFtaWNWYXIoZXhwcik7XG4gICAgICBjYXNlICdMb2cnOlxuICAgICAgICByZXR1cm4gdGhpcy5Mb2coZXhwcik7XG4gICAgfVxuICB9XG5cbiAgTGl0ZXJhbCh7XG4gICAgdmFsdWUsXG4gIH06IEFTVHYyLkxpdGVyYWxFeHByZXNzaW9uKTogV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5WYWx1ZSB8IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuVW5kZWZpbmVkIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFtTZXhwT3Bjb2Rlcy5VbmRlZmluZWRdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgTWlzc2luZygpOiB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBIYXNCbG9jayh7IHN5bWJvbCB9OiBtaXIuSGFzQmxvY2spOiBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLkhhc0Jsb2NrIHtcbiAgICByZXR1cm4gW1NleHBPcGNvZGVzLkhhc0Jsb2NrLCBbU2V4cE9wY29kZXMuR2V0U3ltYm9sLCBzeW1ib2xdXTtcbiAgfVxuXG4gIEhhc0Jsb2NrUGFyYW1zKHsgc3ltYm9sIH06IG1pci5IYXNCbG9ja1BhcmFtcyk6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuSGFzQmxvY2tQYXJhbXMge1xuICAgIHJldHVybiBbU2V4cE9wY29kZXMuSGFzQmxvY2tQYXJhbXMsIFtTZXhwT3Bjb2Rlcy5HZXRTeW1ib2wsIHN5bWJvbF1dO1xuICB9XG5cbiAgQ3VycnkoeyBkZWZpbml0aW9uLCBjdXJyaWVkVHlwZSwgYXJncyB9OiBtaXIuQ3VycnkpOiBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLkN1cnJ5IHtcbiAgICByZXR1cm4gW1xuICAgICAgU2V4cE9wY29kZXMuQ3VycnksXG4gICAgICBFWFBSLmV4cHIoZGVmaW5pdGlvbiksXG4gICAgICBjdXJyaWVkVHlwZSxcbiAgICAgIEVYUFIuUG9zaXRpb25hbChhcmdzLnBvc2l0aW9uYWwpLFxuICAgICAgRVhQUi5OYW1lZEFyZ3VtZW50cyhhcmdzLm5hbWVkKSxcbiAgICBdO1xuICB9XG5cbiAgTG9jYWwoe1xuICAgIGlzVGVtcGxhdGVMb2NhbCxcbiAgICBzeW1ib2wsXG4gIH06IEFTVHYyLkxvY2FsVmFyUmVmZXJlbmNlKTpcbiAgICB8IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuR2V0U3ltYm9sXG4gICAgfCBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLkdldFRlbXBsYXRlU3ltYm9sIHtcbiAgICByZXR1cm4gW2lzVGVtcGxhdGVMb2NhbCA/IFNleHBPcGNvZGVzLkdldFRlbXBsYXRlU3ltYm9sIDogU2V4cE9wY29kZXMuR2V0U3ltYm9sLCBzeW1ib2xdO1xuICB9XG5cbiAgR2V0V2l0aFJlc29sdmVyKHsgc3ltYm9sIH06IG1pci5HZXRXaXRoUmVzb2x2ZXIpOiBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLkdldENvbnRleHR1YWxGcmVlIHtcbiAgICByZXR1cm4gW1NleHBPcGNvZGVzLkdldEZyZWVBc0NvbXBvbmVudE9ySGVscGVySGVhZE9yVGhpc0ZhbGxiYWNrLCBzeW1ib2xdO1xuICB9XG5cbiAgUGF0aEV4cHJlc3Npb24oeyBoZWFkLCB0YWlsIH06IG1pci5QYXRoRXhwcmVzc2lvbik6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuR2V0UGF0aCB7XG4gICAgbGV0IGdldE9wID0gRVhQUi5leHByKGhlYWQpIGFzIFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuR2V0VmFyO1xuXG4gICAgcmV0dXJuIFsuLi5nZXRPcCwgRVhQUi5UYWlsKHRhaWwpXTtcbiAgfVxuXG4gIEludGVycG9sYXRlRXhwcmVzc2lvbih7IHBhcnRzIH06IG1pci5JbnRlcnBvbGF0ZUV4cHJlc3Npb24pOiBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLkNvbmNhdCB7XG4gICAgcmV0dXJuIFtTZXhwT3Bjb2Rlcy5Db25jYXQsIHBhcnRzLm1hcCgoZSkgPT4gRVhQUi5leHByKGUpKS50b0FycmF5KCldO1xuICB9XG5cbiAgQ2FsbEV4cHJlc3Npb24oeyBjYWxsZWUsIGFyZ3MgfTogbWlyLkNhbGxFeHByZXNzaW9uKTogV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5IZWxwZXIge1xuICAgIHJldHVybiBbU2V4cE9wY29kZXMuQ2FsbCwgRVhQUi5leHByKGNhbGxlZSksIC4uLkVYUFIuQXJncyhhcmdzKV07XG4gIH1cblxuICBEZXByZWNhdGVkQ2FsbEV4cHJlc3Npb24oe1xuICAgIGFyZyxcbiAgICBjYWxsZWUsXG4gIH06IG1pci5EZXByZWNhdGVkQ2FsbEV4cHJlc3Npb24pOiBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLkdldFBhdGhGcmVlQXNEZXByZWNhdGVkSGVscGVySGVhZE9yVGhpc0ZhbGxiYWNrIHtcbiAgICByZXR1cm4gW1NleHBPcGNvZGVzLkdldEZyZWVBc0RlcHJlY2F0ZWRIZWxwZXJIZWFkT3JUaGlzRmFsbGJhY2ssIGNhbGxlZS5zeW1ib2wsIFthcmcuY2hhcnNdXTtcbiAgfVxuXG4gIFRhaWwoeyBtZW1iZXJzIH06IG1pci5UYWlsKTogUHJlc2VudEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBtYXBQcmVzZW50KG1lbWJlcnMsIChtZW1iZXIpID0+IG1lbWJlci5jaGFycyk7XG4gIH1cblxuICBBcmdzKHsgcG9zaXRpb25hbCwgbmFtZWQgfTogbWlyLkFyZ3MpOiBXaXJlRm9ybWF0LkNvcmUuQXJncyB7XG4gICAgcmV0dXJuIFt0aGlzLlBvc2l0aW9uYWwocG9zaXRpb25hbCksIHRoaXMuTmFtZWRBcmd1bWVudHMobmFtZWQpXTtcbiAgfVxuXG4gIFBvc2l0aW9uYWwoeyBsaXN0IH06IG1pci5Qb3NpdGlvbmFsKTogV2lyZUZvcm1hdC5Db3JlLlBhcmFtcyB7XG4gICAgcmV0dXJuIGxpc3QubWFwKChsKSA9PiBFWFBSLmV4cHIobCkpLnRvUHJlc2VudEFycmF5KCk7XG4gIH1cblxuICBOYW1lZEFyZ3VtZW50KHsga2V5LCB2YWx1ZSB9OiBtaXIuTmFtZWRBcmd1bWVudCk6IEhhc2hQYWlyIHtcbiAgICByZXR1cm4gW2tleS5jaGFycywgRVhQUi5leHByKHZhbHVlKV07XG4gIH1cblxuICBOYW1lZEFyZ3VtZW50cyh7IGVudHJpZXM6IHBhaXJzIH06IG1pci5OYW1lZEFyZ3VtZW50cyk6IFdpcmVGb3JtYXQuQ29yZS5IYXNoIHtcbiAgICBsZXQgbGlzdCA9IHBhaXJzLnRvQXJyYXkoKTtcblxuICAgIGlmIChpc1ByZXNlbnQobGlzdCkpIHtcbiAgICAgIGxldCBuYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGxldCB2YWx1ZXM6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbltdID0gW107XG5cbiAgICAgIGZvciAobGV0IHBhaXIgb2YgbGlzdCkge1xuICAgICAgICBsZXQgW25hbWUsIHZhbHVlXSA9IEVYUFIuTmFtZWRBcmd1bWVudChwYWlyKTtcbiAgICAgICAgbmFtZXMucHVzaChuYW1lKTtcbiAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnRQcmVzZW50KG5hbWVzKTtcbiAgICAgIGFzc2VydFByZXNlbnQodmFsdWVzKTtcblxuICAgICAgcmV0dXJuIFtuYW1lcywgdmFsdWVzXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgTm90KHsgdmFsdWUgfTogbWlyLk5vdCk6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuTm90IHtcbiAgICByZXR1cm4gW1NleHBPcGNvZGVzLk5vdCwgRVhQUi5leHByKHZhbHVlKV07XG4gIH1cblxuICBJZklubGluZSh7IGNvbmRpdGlvbiwgdHJ1dGh5LCBmYWxzeSB9OiBtaXIuSWZJbmxpbmUpOiBXaXJlRm9ybWF0LkV4cHJlc3Npb25zLklmSW5saW5lIHtcbiAgICBsZXQgZXhwciA9IFtTZXhwT3Bjb2Rlcy5JZklubGluZSwgRVhQUi5leHByKGNvbmRpdGlvbiksIEVYUFIuZXhwcih0cnV0aHkpXTtcblxuICAgIGlmIChmYWxzeSkge1xuICAgICAgZXhwci5wdXNoKEVYUFIuZXhwcihmYWxzeSkpO1xuICAgIH1cblxuICAgIHJldHVybiBleHByIGFzIFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuSWZJbmxpbmU7XG4gIH1cblxuICBHZXREeW5hbWljVmFyKHsgbmFtZSB9OiBtaXIuR2V0RHluYW1pY1Zhcik6IFdpcmVGb3JtYXQuRXhwcmVzc2lvbnMuR2V0RHluYW1pY1ZhciB7XG4gICAgcmV0dXJuIFtTZXhwT3Bjb2Rlcy5HZXREeW5hbWljVmFyLCBFWFBSLmV4cHIobmFtZSldO1xuICB9XG5cbiAgTG9nKHsgcG9zaXRpb25hbCB9OiBtaXIuTG9nKTogV2lyZUZvcm1hdC5FeHByZXNzaW9ucy5Mb2cge1xuICAgIHJldHVybiBbU2V4cE9wY29kZXMuTG9nLCB0aGlzLlBvc2l0aW9uYWwocG9zaXRpb25hbCldO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBFWFBSID0gbmV3IEV4cHJlc3Npb25FbmNvZGVyKCk7XG4iXSwic291cmNlUm9vdCI6IiJ9