UNPKG

ts-simple-ast

Version:

TypeScript compiler wrapper for AST navigation and code generation.

101 lines (100 loc) 3.91 kB
"use strict"; var __extends = (this && this.__extends)/* istanbul ignore next */ || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var ts = require("typescript"); var manipulation_1 = require("./../../manipulation"); var utils_1 = require("./../../utils"); var common_1 = require("./../common"); var ImportSpecifier = /** @class */ (function (_super) { __extends(ImportSpecifier, _super); function ImportSpecifier() { return _super !== null && _super.apply(this, arguments) || this; } /** * Sets the identifier being imported. * @param name - Name being imported. */ ImportSpecifier.prototype.setName = function (name) { var nameNode = this.getNameNode(); if (nameNode.getText() === name) return this; var start = nameNode.getStart(); manipulation_1.replaceNodeText(this.sourceFile, start, start + nameNode.getWidth(), name); return this; }; /** * Renames the identifier being imported. * @param name - New name. */ ImportSpecifier.prototype.renameName = function (name) { this.getNameNode().rename(name); return this; }; /** * Gets the name node of what's being imported. */ ImportSpecifier.prototype.getNameNode = function () { return this.getFirstChildByKindOrThrow(ts.SyntaxKind.Identifier); }; /** * Sets the alias for the name being imported. * @param alias - Alias to set. */ ImportSpecifier.prototype.setAlias = function (alias) { var aliasIdentifier = this.getAliasIdentifier(); if (aliasIdentifier == null) { // trick is to insert an alias with the same name, then rename the alias. TS compiler will take care of the rest. var nameNode = this.getNameNode(); manipulation_1.insertIntoParent({ insertPos: nameNode.getEnd(), childIndex: nameNode.getChildIndex() + 1, insertItemsCount: 2, parent: this, newText: " as " + nameNode.getText() }); aliasIdentifier = this.getAliasIdentifier(); } aliasIdentifier.rename(alias); return this; }; /** * Gets the alias identifier, if it exists. */ ImportSpecifier.prototype.getAliasIdentifier = function () { var asKeyword = this.getFirstChildByKind(ts.SyntaxKind.AsKeyword); if (asKeyword == null) return undefined; var aliasIdentifier = asKeyword.getNextSibling(); if (aliasIdentifier == null || !(utils_1.TypeGuards.isIdentifier(aliasIdentifier))) return undefined; return aliasIdentifier; }; /** * Gets the import declaration associated with this import specifier. */ ImportSpecifier.prototype.getImportDeclaration = function () { return this.getFirstAncestorByKindOrThrow(ts.SyntaxKind.ImportDeclaration); }; /** * Remove the import specifier. */ ImportSpecifier.prototype.remove = function () { var importDeclaration = this.getImportDeclaration(); var namedImports = importDeclaration.getNamedImports(); if (namedImports.length > 1) manipulation_1.removeCommaSeparatedChild(this); else importDeclaration.removeNamedImports(); }; return ImportSpecifier; }(common_1.Node)); exports.ImportSpecifier = ImportSpecifier;