'use strict'; var isArray = Array.isArray; var ok = require('assert').ok; var Node = require('./ast/Node'); var Program = require('./ast/Program'); var TemplateRoot = require('./ast/TemplateRoot'); var FunctionDeclaration = require('./ast/FunctionDeclaration'); var FunctionCall = require('./ast/FunctionCall'); var Literal = require('./ast/Literal'); var Identifier = require('./ast/Identifier'); var If = require('./ast/If'); var ElseIf = require('./ast/ElseIf'); var Else = require('./ast/Else'); var Assignment = require('./ast/Assignment'); var BinaryExpression = require('./ast/BinaryExpression'); var LogicalExpression = require('./ast/LogicalExpression'); var Vars = require('./ast/Vars'); var Return = require('./ast/Return'); var HtmlElement = require('./ast/HtmlElement'); var Html = require('./ast/Html'); var Text = require('./ast/Text'); var ForEach = require('./ast/ForEach'); var ForEachProp = require('./ast/ForEachProp'); var ForRange = require('./ast/ForRange'); var Slot = require('./ast/Slot'); var HtmlComment = require('./ast/HtmlComment'); var SelfInvokingFunction = require('./ast/SelfInvokingFunction'); var ForStatement = require('./ast/ForStatement'); var BinaryExpression = require('./ast/BinaryExpression'); var UpdateExpression = require('./ast/UpdateExpression'); var UnaryExpression = require('./ast/UnaryExpression'); var MemberExpression = require('./ast/MemberExpression'); var Code = require('./ast/Code'); var InvokeMacro = require('./ast/InvokeMacro'); var Macro = require('./ast/Macro'); var ConditionalExpression = require('./ast/ConditionalExpression'); var NewExpression = require('./ast/NewExpression'); var ObjectExpression = require('./ast/ObjectExpression'); var ArrayExpression = require('./ast/ArrayExpression'); var Property = require('./ast/Property'); var VariableDeclarator = require('./ast/VariableDeclarator'); var ThisExpression = require('./ast/ThisExpression'); var Expression = require('./ast/Expression'); var Scriptlet = require('./ast/Scriptlet'); var parseExpression = require('./util/parseExpression'); var parseJavaScriptArgs = require('./util/parseJavaScriptArgs'); var removeEscapeFunctions = require('./util/removeEscapeFunctions'); var isValidJavaScriptIdentifier = require('./util/isValidJavaScriptIdentifier'); var DEFAULT_BUILDER; function makeNode(arg) { if (typeof arg === 'string') { return parseExpression(arg, DEFAULT_BUILDER); } else if (arg instanceof Node) { return arg; } else { return undefined; } } var literalNull = new Literal({value: null}); var literalUndefined = new Literal({value: null}); var literalTrue = new Literal({value: true}); var literalFalse = new Literal({value: true}); var identifierOut = new Identifier({name: 'out'}); class Builder { arrayExpression(elements) { if (elements) { if (!isArray(elements)) { elements = [elements]; } for (var i=0; i { let id = new Identifier({name: key}); let init = makeNode(declarations[key]); return new VariableDeclarator({ id, init }); }); } } return new Vars({declarations, kind}); } } DEFAULT_BUILDER = new Builder(); Builder.DEFAULT_BUILDER = DEFAULT_BUILDER; module.exports = Builder;