UNPKG

ts-simple-ast

Version:

TypeScript compiler wrapper for static analysis and code manipulation.

49 lines (48 loc) 2.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var typescript_1 = require("../../typescript"); function printNode(node, sourceFileOrOptions, secondOverloadOptions) { var isFirstOverload = sourceFileOrOptions == null || sourceFileOrOptions.kind !== typescript_1.SyntaxKind.SourceFile; var options = getOptions(); var sourceFile = getSourceFile(); var printer = typescript_1.ts.createPrinter({ newLine: options.newLineKind == null ? typescript_1.NewLineKind.LineFeed : options.newLineKind, removeComments: options.removeComments || false }); if (sourceFile == null) return printer.printFile(node); else return printer.printNode(options.emitHint == null ? typescript_1.EmitHint.Unspecified : options.emitHint, node, sourceFile); function getSourceFile() { if (isFirstOverload) { if (node.kind === typescript_1.SyntaxKind.SourceFile) return undefined; var topParent = getNodeSourceFile(); if (topParent == null) { // create a result file (see https://github.com/Microsoft/TypeScript/wiki/Using-the-Compiler-API) var scriptKind = getScriptKind(); return typescript_1.ts.createSourceFile("print." + getFileExt(scriptKind), "", typescript_1.ScriptTarget.Latest, false, scriptKind); } return topParent; } return sourceFileOrOptions; function getScriptKind() { return options.scriptKind == null ? typescript_1.ScriptKind.TSX : options.scriptKind; } function getFileExt(scriptKind) { if (scriptKind === typescript_1.ScriptKind.JSX || scriptKind === typescript_1.ScriptKind.TSX) return "tsx"; return "ts"; } } function getNodeSourceFile() { var topNode = node.parent; while (topNode != null && topNode.parent != null) topNode = topNode.parent; return topNode; } function getOptions() { return (isFirstOverload ? sourceFileOrOptions : secondOverloadOptions) || {}; } } exports.printNode = printNode;