Project

General

Profile

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"]}
(12-12/18)