1
|
{"version":3,"file":"node_emitter.js","sourceRoot":"","sources":["../../../../../packages/compiler-cli/src/transformers/node_emitter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {AssertNotNull, BinaryOperator, BinaryOperatorExpr, BuiltinMethod, BuiltinVar, CastExpr, ClassStmt, CommaExpr, CommentStmt, CompileIdentifierMetadata, ConditionalExpr, DeclareFunctionStmt, DeclareVarStmt, ExpressionStatement, ExpressionVisitor, ExternalExpr, ExternalReference, FunctionExpr, IfStmt, InstantiateExpr, InvokeFunctionExpr, InvokeMethodExpr, LiteralArrayExpr, LiteralExpr, LiteralMapExpr, NotExpr, ParseSourceSpan, ReadKeyExpr, ReadPropExpr, ReadVarExpr, ReturnStatement, Statement, StatementVisitor, StaticSymbol, StmtModifier, ThrowStmt, TryCatchStmt, WriteKeyExpr, WritePropExpr, WriteVarExpr} from '@angular/compiler';\nimport * as ts from 'typescript';\n\nexport interface Node { sourceSpan: ParseSourceSpan|null; }\n\nconst METHOD_THIS_NAME = 'this';\nconst CATCH_ERROR_NAME = 'error';\nconst CATCH_STACK_NAME = 'stack';\n\nexport class TypeScriptNodeEmitter {\n updateSourceFile(sourceFile: ts.SourceFile, stmts: Statement[], preamble?: string):\n [ts.SourceFile, Map<ts.Node, Node>] {\n const converter = new _NodeEmitterVisitor();\n const statements =\n stmts.map(stmt => stmt.visitStatement(converter, null)).filter(stmt => stmt != null);\n const newSourceFile = ts.updateSourceFileNode(\n sourceFile, [...converter.getReexports(), ...converter.getImports(), ...statements]);\n if (preamble) {\n if (preamble.startsWith('/*') && preamble.endsWith('*/')) {\n preamble = preamble.substr(2, preamble.length - 4);\n }\n if (!statements.length) {\n statements.push(ts.createEmptyStatement());\n }\n statements[0] = ts.setSyntheticLeadingComments(\n statements[0],\n [{kind: ts.SyntaxKind.MultiLineCommentTrivia, text: preamble, pos: -1, end: -1}]);\n }\n return [newSourceFile, converter.getNodeMap()];\n }\n}\n\n// A recorded node is a subtype of the node that is marked as being recoreded. This is used\n// to ensure that NodeEmitterVisitor.record has been called on all nodes returned by the\n// NodeEmitterVisitor\ntype RecordedNode<T extends ts.Node = ts.Node> = (T & { __recorded: any; }) | null;\n\nfunction createLiteral(value: any) {\n if (value === null) {\n return ts.createNull();\n } else if (value === undefined) {\n return ts.createIdentifier('undefined');\n } else {\n return ts.createLiteral(value);\n }\n}\n\n/**\n * Visits an output ast and produces the corresponding TypeScript synthetic nodes.\n */\nclass _NodeEmitterVisitor implements StatementVisitor, ExpressionVisitor {\n private _nodeMap = new Map<ts.Node, Node>();\n private _importsWithPrefixes = new Map<string, string>();\n private _reexports = new Map<string, {name: string, as: string}[]>();\n\n getReexports(): ts.Statement[] {\n return Array.from(this._reexports.entries())\n .map(\n ([exportedFilePath, reexports]) => ts.createExportDeclaration(\n /* decorators */ undefined,\n /* modifiers */ undefined, ts.createNamedExports(reexports.map(\n ({name, as}) => ts.createExportSpecifier(name, as))),\n /* moduleSpecifier */ createLiteral(exportedFilePath)));\n }\n\n getImports(): ts.Statement[] {\n return Array.from(this._importsWithPrefixes.entries())\n .map(\n ([namespace, prefix]) => ts.createImportDeclaration(\n /* decorators */ undefined,\n /* modifiers */ undefined,\n /* importClause */ ts.createImportClause(\n /* name */<ts.Identifier>(undefined as any),\n ts.createNamespaceImport(ts.createIdentifier(prefix))),\n /* moduleSpecifier */ createLiteral(namespace)));\n }\n\n getNodeMap() { return this._nodeMap; }\n\n private record<T extends ts.Node>(ngNode: Node, tsNode: T|null): RecordedNode<T> {\n if (tsNode && !this._nodeMap.has(tsNode)) {\n this._nodeMap.set(tsNode, ngNode);\n ts.forEachChild(tsNode, child => this.record(ngNode, tsNode));\n }\n return tsNode as RecordedNode<T>;\n }\n\n private getModifiers(stmt: Statement) {\n let modifiers: ts.Modifier[] = [];\n if (stmt.hasModifier(StmtModifier.Exported)) {\n modifiers.push(ts.createToken(ts.SyntaxKind.ExportKeyword));\n }\n return modifiers;\n }\n\n // StatementVisitor\n visitDeclareVarStmt(stmt: DeclareVarStmt) {\n if (stmt.hasModifier(StmtModifier.Exported) && stmt.value instanceof ExternalExpr &&\n !stmt.type) {\n // check for a reexport\n const {name, moduleName} = stmt.value.value;\n if (moduleName) {\n let reexports = this._reexports.get(moduleName);\n if (!reexports) {\n reexports = [];\n this._reexports.set(moduleName, reexports);\n }\n reexports.push({name: name !, as: stmt.name});\n return null;\n }\n }\n\n return this.record(\n stmt, ts.createVariableStatement(\n this.getModifiers(stmt),\n ts.createVariableDeclarationList([ts.createVariableDeclaration(\n ts.createIdentifier(stmt.name),\n /* type */ undefined,\n (stmt.value && stmt.value.visitExpression(this, null)) || undefined)])));\n }\n\n visitDeclareFunctionStmt(stmt: DeclareFunctionStmt, context: any) {\n return this.record(\n stmt, ts.createFunctionDeclaration(\n /* decorators */ undefined, this.getModifiers(stmt),\n /* astrictToken */ undefined, stmt.name, /* typeParameters */ undefined,\n stmt.params.map(\n p => ts.createParameter(\n /* decorators */ undefined, /* modifiers */ undefined,\n /* dotDotDotToken */ undefined, p.name)),\n /* type */ undefined, this._visitStatements(stmt.statements)));\n }\n\n visitExpressionStmt(stmt: ExpressionStatement) {\n return this.record(stmt, ts.createStatement(stmt.expr.visitExpression(this, null)));\n }\n\n visitReturnStmt(stmt: ReturnStatement) {\n return this.record(\n stmt, ts.createReturn(stmt.value ? stmt.value.visitExpression(this, null) : undefined));\n }\n\n visitDeclareClassStmt(stmt: ClassStmt) {\n const modifiers = this.getModifiers(stmt);\n const fields = stmt.fields.map(\n field => ts.createProperty(\n /* decorators */ undefined, /* modifiers */ undefined, field.name,\n /* questionToken */ undefined,\n /* type */ undefined, ts.createNull()));\n const getters = stmt.getters.map(\n getter => ts.createGetAccessor(\n /* decorators */ undefined, /* modifiers */ undefined, getter.name, /* parameters */[],\n /* type */ undefined, this._visitStatements(getter.body)));\n\n const constructor =\n (stmt.constructorMethod && [ts.createConstructor(\n /* decorators */ undefined,\n /* modifiers */ undefined,\n /* parameters */ stmt.constructorMethod.params.map(\n p => ts.createParameter(\n /* decorators */ undefined,\n /* modifiers */ undefined,\n /* dotDotDotToken */ undefined, p.name)),\n this._visitStatements(stmt.constructorMethod.body))]) ||\n [];\n\n // TODO {chuckj}: Determine what should be done for a method with a null name.\n const methods = stmt.methods.filter(method => method.name)\n .map(\n method => ts.createMethodDeclaration(\n /* decorators */ undefined, /* modifiers */ undefined,\n /* astriskToken */ undefined, method.name !/* guarded by filter */,\n /* questionToken */ undefined, /* typeParameters */ undefined,\n method.params.map(\n p => ts.createParameter(\n /* decorators */ undefined, /* modifiers */ undefined,\n /* dotDotDotToken */ undefined, p.name)),\n /* type */ undefined, this._visitStatements(method.body)));\n return this.record(\n stmt, ts.createClassDeclaration(\n /* decorators */ undefined, modifiers, stmt.name, /* typeParameters*/ undefined,\n stmt.parent && [ts.createHeritageClause(\n ts.SyntaxKind.ExtendsKeyword,\n [stmt.parent.visitExpression(this, null)])] ||\n [],\n [...fields, ...getters, ...constructor, ...methods]));\n }\n\n visitIfStmt(stmt: IfStmt) {\n return this.record(\n stmt,\n ts.createIf(\n stmt.condition.visitExpression(this, null), this._visitStatements(stmt.trueCase),\n stmt.falseCase && stmt.falseCase.length && this._visitStatements(stmt.falseCase) ||\n undefined));\n }\n\n visitTryCatchStmt(stmt: TryCatchStmt): RecordedNode<ts.TryStatement> {\n return this.record(\n stmt, ts.createTry(\n this._visitStatements(stmt.bodyStmts),\n ts.createCatchClause(\n CATCH_ERROR_NAME, this._visitStatementsPrefix(\n [ts.createVariableStatement(\n /* modifiers */ undefined,\n [ts.createVariableDeclaration(\n CATCH_STACK_NAME, /* type */ undefined,\n ts.createPropertyAccess(\n ts.createIdentifier(CATCH_ERROR_NAME),\n ts.createIdentifier(CATCH_STACK_NAME)))])],\n stmt.catchStmts)),\n /* finallyBlock */ undefined));\n }\n\n visitThrowStmt(stmt: ThrowStmt) {\n return this.record(stmt, ts.createThrow(stmt.error.visitExpression(this, null)));\n }\n\n visitCommentStmt(stmt: CommentStmt) { return null; }\n\n // ExpressionVisitor\n visitReadVarExpr(expr: ReadVarExpr) {\n switch (expr.builtin) {\n case BuiltinVar.This:\n return this.record(expr, ts.createIdentifier(METHOD_THIS_NAME));\n case BuiltinVar.CatchError:\n return this.record(expr, ts.createIdentifier(CATCH_ERROR_NAME));\n case BuiltinVar.CatchStack:\n return this.record(expr, ts.createIdentifier(CATCH_STACK_NAME));\n case BuiltinVar.Super:\n return this.record(expr, ts.createSuper());\n }\n if (expr.name) {\n return this.record(expr, ts.createIdentifier(expr.name));\n }\n throw Error(`Unexpected ReadVarExpr form`);\n }\n\n visitWriteVarExpr(expr: WriteVarExpr): RecordedNode<ts.BinaryExpression> {\n return this.record(\n expr, ts.createAssignment(\n ts.createIdentifier(expr.name), expr.value.visitExpression(this, null)));\n }\n\n visitWriteKeyExpr(expr: WriteKeyExpr): RecordedNode<ts.BinaryExpression> {\n return this.record(\n expr,\n ts.createAssignment(\n ts.createElementAccess(\n expr.receiver.visitExpression(this, null), expr.index.visitExpression(this, null)),\n expr.value.visitExpression(this, null)));\n }\n\n visitWritePropExpr(expr: WritePropExpr): RecordedNode<ts.BinaryExpression> {\n return this.record(\n expr, ts.createAssignment(\n ts.createPropertyAccess(expr.receiver.visitExpression(this, null), expr.name),\n expr.value.visitExpression(this, null)));\n }\n\n visitInvokeMethodExpr(expr: InvokeMethodExpr): RecordedNode<ts.CallExpression> {\n const methodName = getMethodName(expr);\n return this.record(\n expr,\n ts.createCall(\n ts.createPropertyAccess(expr.receiver.visitExpression(this, null), methodName),\n /* typeArguments */ undefined, expr.args.map(arg => arg.visitExpression(this, null))));\n }\n\n visitInvokeFunctionExpr(expr: InvokeFunctionExpr): RecordedNode<ts.CallExpression> {\n return this.record(\n expr, ts.createCall(\n expr.fn.visitExpression(this, null), /* typeArguments */ undefined,\n expr.args.map(arg => arg.visitExpression(this, null))));\n }\n\n visitInstantiateExpr(expr: InstantiateExpr): RecordedNode<ts.NewExpression> {\n return this.record(\n expr, ts.createNew(\n expr.classExpr.visitExpression(this, null), /* typeArguments */ undefined,\n expr.args.map(arg => arg.visitExpression(this, null))));\n }\n\n visitLiteralExpr(expr: LiteralExpr) { return this.record(expr, createLiteral(expr.value)); }\n\n visitExternalExpr(expr: ExternalExpr) {\n return this.record(expr, this._visitIdentifier(expr.value));\n }\n\n visitConditionalExpr(expr: ConditionalExpr): RecordedNode<ts.ConditionalExpression> {\n // TODO {chuckj}: Review use of ! on flaseCase. Should it be non-nullable?\n return this.record(\n expr,\n ts.createConditional(\n expr.condition.visitExpression(this, null), expr.trueCase.visitExpression(this, null),\n expr.falseCase !.visitExpression(this, null)));\n }\n\n visitNotExpr(expr: NotExpr): RecordedNode<ts.PrefixUnaryExpression> {\n return this.record(\n expr, ts.createPrefix(\n ts.SyntaxKind.ExclamationToken, expr.condition.visitExpression(this, null)));\n }\n\n visitAssertNotNullExpr(expr: AssertNotNull): RecordedNode<ts.Expression> {\n return expr.condition.visitExpression(this, null);\n }\n\n visitCastExpr(expr: CastExpr): RecordedNode<ts.Expression> {\n return expr.value.visitExpression(this, null);\n }\n\n visitFunctionExpr(expr: FunctionExpr) {\n return this.record(\n expr, ts.createFunctionExpression(\n /* modifiers */ undefined, /* astriskToken */ undefined, /* name */ undefined,\n /* typeParameters */ undefined,\n expr.params.map(\n p => ts.createParameter(\n /* decorators */ undefined, /* modifiers */ undefined,\n /* dotDotDotToken */ undefined, p.name)),\n /* type */ undefined, this._visitStatements(expr.statements)));\n }\n\n visitBinaryOperatorExpr(expr: BinaryOperatorExpr): RecordedNode<ts.BinaryExpression> {\n let binaryOperator: ts.BinaryOperator;\n switch (expr.operator) {\n case BinaryOperator.And:\n binaryOperator = ts.SyntaxKind.AmpersandAmpersandToken;\n break;\n case BinaryOperator.Bigger:\n binaryOperator = ts.SyntaxKind.GreaterThanToken;\n break;\n case BinaryOperator.BiggerEquals:\n binaryOperator = ts.SyntaxKind.GreaterThanEqualsToken;\n break;\n case BinaryOperator.Divide:\n binaryOperator = ts.SyntaxKind.SlashToken;\n break;\n case BinaryOperator.Equals:\n binaryOperator = ts.SyntaxKind.EqualsEqualsToken;\n break;\n case BinaryOperator.Identical:\n binaryOperator = ts.SyntaxKind.EqualsEqualsEqualsToken;\n break;\n case BinaryOperator.Lower:\n binaryOperator = ts.SyntaxKind.LessThanToken;\n break;\n case BinaryOperator.LowerEquals:\n binaryOperator = ts.SyntaxKind.LessThanEqualsToken;\n break;\n case BinaryOperator.Minus:\n binaryOperator = ts.SyntaxKind.MinusToken;\n break;\n case BinaryOperator.Modulo:\n binaryOperator = ts.SyntaxKind.PercentToken;\n break;\n case BinaryOperator.Multiply:\n binaryOperator = ts.SyntaxKind.AsteriskToken;\n break;\n case BinaryOperator.NotEquals:\n binaryOperator = ts.SyntaxKind.ExclamationEqualsToken;\n break;\n case BinaryOperator.NotIdentical:\n binaryOperator = ts.SyntaxKind.ExclamationEqualsEqualsToken;\n break;\n case BinaryOperator.Or:\n binaryOperator = ts.SyntaxKind.BarBarToken;\n break;\n case BinaryOperator.Plus:\n binaryOperator = ts.SyntaxKind.PlusToken;\n break;\n default:\n throw new Error(`Unknown operator: ${expr.operator}`);\n }\n return this.record(\n expr, ts.createBinary(\n expr.lhs.visitExpression(this, null), binaryOperator,\n expr.rhs.visitExpression(this, null)));\n }\n\n visitReadPropExpr(expr: ReadPropExpr): RecordedNode<ts.PropertyAccessExpression> {\n return this.record(\n expr, ts.createPropertyAccess(expr.receiver.visitExpression(this, null), expr.name));\n }\n\n visitReadKeyExpr(expr: ReadKeyExpr): RecordedNode<ts.ElementAccessExpression> {\n return this.record(\n expr,\n ts.createElementAccess(\n expr.receiver.visitExpression(this, null), expr.index.visitExpression(this, null)));\n }\n\n visitLiteralArrayExpr(expr: LiteralArrayExpr): RecordedNode<ts.ArrayLiteralExpression> {\n return this.record(\n expr, ts.createArrayLiteral(expr.entries.map(entry => entry.visitExpression(this, null))));\n }\n\n visitLiteralMapExpr(expr: LiteralMapExpr): RecordedNode<ts.ObjectLiteralExpression> {\n return this.record(\n expr, ts.createObjectLiteral(expr.entries.map(\n entry => ts.createPropertyAssignment(\n entry.quoted ? ts.createLiteral(entry.key) : entry.key,\n entry.value.visitExpression(this, null)))));\n }\n\n visitCommaExpr(expr: CommaExpr): RecordedNode<ts.Expression> {\n return this.record(\n expr, expr.parts.map(e => e.visitExpression(this, null))\n .reduce<ts.Expression|null>(\n (left, right) =>\n left ? ts.createBinary(left, ts.SyntaxKind.CommaToken, right) : right,\n null));\n }\n\n private _visitStatements(statements: Statement[]): ts.Block {\n return this._visitStatementsPrefix([], statements);\n }\n\n private _visitStatementsPrefix(prefix: ts.Statement[], statements: Statement[]) {\n return ts.createBlock([\n ...prefix, ...statements.map(stmt => stmt.visitStatement(this, null)).filter(f => f != null)\n ]);\n }\n\n private _visitIdentifier(value: ExternalReference): ts.Expression {\n const {name, moduleName} = value;\n let prefixIdent: ts.Identifier|null = null;\n if (moduleName) {\n let prefix = this._importsWithPrefixes.get(moduleName);\n if (prefix == null) {\n prefix = `i${this._importsWithPrefixes.size}`;\n this._importsWithPrefixes.set(moduleName, prefix);\n }\n prefixIdent = ts.createIdentifier(prefix);\n }\n // name can only be null during JIT which never executes this code.\n let result: ts.Expression =\n prefixIdent ? ts.createPropertyAccess(prefixIdent, name !) : ts.createIdentifier(name !);\n return result;\n }\n}\n\n\nfunction getMethodName(methodRef: {name: string | null; builtin: BuiltinMethod | null}): string {\n if (methodRef.name) {\n return methodRef.name;\n } else {\n switch (methodRef.builtin) {\n case BuiltinMethod.Bind:\n return 'bind';\n case BuiltinMethod.ConcatArray:\n return 'concat';\n case BuiltinMethod.SubscribeObservable:\n return 'subscribe';\n }\n }\n throw new Error('Unexpected method reference form');\n}\n"]}
|