ts-simple-ast
Version:
TypeScript compiler wrapper for AST navigation and code generation.
35 lines (34 loc) • 1.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var ts = require("typescript");
var errors = require("./errors");
var GlobalContainer_1 = require("./GlobalContainer");
var fileSystem_1 = require("./fileSystem");
/**
* Creates a wrapped node from a compiler node.
* @param node - Node to create a wrapped node from.
* @param info - Info for creating the wrapped node.
*/
function createWrappedNode(node, opts) {
if (opts === void 0) { opts = {}; }
var _a = opts.compilerOptions, compilerOptions = _a === void 0 ? {} : _a, sourceFile = opts.sourceFile, typeChecker = opts.typeChecker;
var globalContainer = new GlobalContainer_1.GlobalContainer(new fileSystem_1.DefaultFileSystemHost(), compilerOptions, { createLanguageService: false, typeChecker: typeChecker });
var wrappedSourceFile = globalContainer.compilerFactory.getSourceFile(getSourceFileNode());
return globalContainer.compilerFactory.getNodeFromCompilerNode(node, wrappedSourceFile);
function getSourceFileNode() {
return sourceFile == null ? getSourceFileFromNode(node) : sourceFile;
}
function getSourceFileFromNode(compilerNode) {
if (compilerNode.kind === ts.SyntaxKind.SourceFile)
return compilerNode;
if (compilerNode.parent == null)
throw new errors.InvalidOperationError("Please ensure the node was created from a source file with 'setParentNodes' set to 'true'.");
var parent = compilerNode;
while (parent.parent != null)
parent = parent.parent;
if (parent.kind !== ts.SyntaxKind.SourceFile)
throw new errors.NotImplementedError("For some reason the top parent was not a source file.");
return parent;
}
}
exports.createWrappedNode = createWrappedNode;