UNPKG

ts-simple-ast

Version:

TypeScript compiler wrapper for AST navigation and code generation.

267 lines (202 loc) 16.8 kB
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>ts-simple-ast - Imports</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous"> <link rel="stylesheet" href="/assets/css/style.css?v=502728dc7b09041e36b06c50f79a13adbfb6f1b2"> <!-- <link rel="stylesheet" href="/assets/css/style.css?v=502728dc7b09041e36b06c50f79a13adbfb6f1b2"> <link rel="stylesheet" href="/assets/css/custom-style.css?v=502728dc7b09041e36b06c50f79a13adbfb6f1b2"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script src="/assets/js/main.js"></script>--> </head> <body> <div class="main"> <header class="container"> <div class="row"> <h1 onclick="document.location.href = '/'" class="headerLink">ts-simple-ast</h1> <!--<p class="subText">Simple way to navigate and manipulate the TypeScript AST.</p>--> </div> </header> <div class="container"> <div class="row"> <div class="col-md-3"> <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <nav class="sidebar-nav" id="navbarSupportedContent"> <ul class="navbar-nav navbar-default"> <li class="nav-item"> <a class="nav-link" href="/">Overview</a> </li> <li class="nav-item"> <a class="nav-link" href="/setup">Setup</a> </li> <li class="nav-item"> <a class="nav-link" href="/navigation">Navigation</a> </li> <li class="nav-item"> <a class="nav-link" href="/manipulation">Manipulation</a> </li> <li class="nav-item"> <a class="nav-link" href="/emitting">Emitting</a> </li> <li class=""> <a class="nav-link" href="/details/index">Details</a> <ul> <li class=""><a href="/details/source-files">Source Files</a></li> <li class=""><a href="/details/classes">Classes</a></li> <li class=""><a href="/details/decorators">Decorators</a></li> <li class=""><a href="/details/enums">Enums</a></li> <li class=""><a href="/details/functions">Functions</a></li> <li class="active"><a href="/details/imports">Imports</a></li> <li class=""><a href="/details/interfaces">Interfaces</a></li> <li class=""><a href="/details/namespaces">Namespaces</a></li> <li class=""><a href="/details/parameters">Parameters</a></li> <li class=""><a href="/details/type-aliases">Type Aliases</a></li> <li class=""><a href="/details/variables">Variables</a></li> <li>--</li> <li class=""><a href="/details/types">Types</a></li> <li class=""><a href="/details/signatures">Signatures</a></li> <li>--</li> <li class=""><a href="/details/expressions">Expressions</a></li> <li class=""><a href="/details/object-literal-expressions">Object Literal Expressions</a></li> <li class=""><a href="/details/identifiers">Identifiers</a></li> <li class=""><a href="/details/ambient">Ambient</a></li> <li class=""><a href="/details/async">Async</a></li> <li class=""><a href="/details/exports">Exports</a></li> <li class=""><a href="/details/generators">Generators</a></li> <li class=""><a href="/details/initializers">Initializers</a></li> <li class=""><a href="/details/documentation">JS Docs</a></li> <li class=""><a href="/details/literals">Literals</a></li> <li class=""><a href="/details/modifiers">Modifiers</a></li> </ul> </li> <li class="nav-item"> <a class="nav-link" href="/utilities">Utilities</a> </li> <li class="nav-item"> <a class="nav-link" href="http://github.com/dsherret/ts-simple-ast">View on GitHub</a> </li> </ul> </nav> </div> <section class="container-fluid col-md-9"> <h2 id="imports">Imports</h2> <p>Imports of a source file can be retrieved by calling:</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="c1">// get them all</span> <span class="kd">const</span> <span class="nx">imports</span> <span class="o">=</span> <span class="nx">sourceFile</span><span class="p">.</span><span class="nx">getImportDeclarations</span><span class="p">();</span> <span class="c1">// or get the first one that matches a condition</span> <span class="kd">const</span> <span class="nx">importWithDefaultImport</span> <span class="o">=</span> <span class="nx">sourceFile</span><span class="p">.</span><span class="nx">getImport</span><span class="p">(</span><span class="nx">i</span> <span class="o">=&gt;</span> <span class="nx">i</span><span class="p">.</span><span class="nx">getDefaultImport</span><span class="p">()</span> <span class="o">!=</span> <span class="kc">null</span><span class="p">);</span> </code></pre> </div> <h3 id="addinsert">Add/Insert</h3> <p>Add or insert use <code class="highlighter-rouge">insertImportDeclaration</code>, <code class="highlighter-rouge">insertImportDeclarations</code>, <code class="highlighter-rouge">addImportDeclaration</code>, or <code class="highlighter-rouge">addImportDeclarations</code>:</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">importDeclaration</span> <span class="o">=</span> <span class="nx">sourceFile</span><span class="p">.</span><span class="nx">addImportDeclaration</span><span class="p">({</span> <span class="na">defaultImport</span><span class="p">:</span> <span class="s2">"MyClass"</span><span class="p">,</span> <span class="na">moduleSpecifier</span><span class="p">:</span> <span class="s2">"./file"</span> <span class="p">});</span> </code></pre> </div> <h3 id="remove">Remove</h3> <p>Call <code class="highlighter-rouge">.remove()</code>:</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">importDeclaration</span><span class="p">.</span><span class="nx">remove</span><span class="p">();</span> </code></pre> </div> <h3 id="module-specifier">Module specifier</h3> <p>Get it:</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">moduleSpecifier</span> <span class="o">=</span> <span class="nx">importDeclaration</span><span class="p">.</span><span class="nx">getModuleSpecifier</span><span class="p">();</span> <span class="c1">// returns: string</span> </code></pre> </div> <p><em>Example:</em> For <code class="highlighter-rouge">import settings from "./settings";</code> would return <code class="highlighter-rouge">./settings</code>.</p> <p>Set it:</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">importDeclaration</span><span class="p">.</span><span class="nx">setModuleSpecifier</span><span class="p">(</span><span class="s2">"./new-file"</span><span class="p">);</span> </code></pre> </div> <h3 id="default-import">Default import</h3> <p>Get it:</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">defaultImport</span> <span class="o">=</span> <span class="nx">importDeclaration</span><span class="p">.</span><span class="nx">getDefaultImport</span><span class="p">();</span> <span class="c1">// returns: Identifier | undefined</span> </code></pre> </div> <p>Set it:</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">importDeclaration</span><span class="p">.</span><span class="nx">setDefaultImport</span><span class="p">(</span><span class="s2">"MyClass"</span><span class="p">);</span> </code></pre> </div> <h4 id="example">Example</h4> <p>Given the file:</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="k">import</span> <span class="nx">MyClass</span> <span class="k">from</span> <span class="s2">"./file"</span><span class="p">;</span> <span class="kd">const</span> <span class="nx">instance</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">MyClass</span><span class="p">();</span> </code></pre> </div> <p>Doing the following:</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">importDeclaration</span> <span class="o">=</span> <span class="nx">sourceFile</span><span class="p">.</span><span class="nx">getImportDeclarations</span><span class="p">()[</span><span class="mi">0</span><span class="p">];</span> <span class="nx">importDeclaration</span><span class="p">.</span><span class="nx">setDefaultImport</span><span class="p">(</span><span class="s2">"NewName"</span><span class="p">);</span> </code></pre> </div> <p>Will rename the default import and all its usages:</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="k">import</span> <span class="nx">NewName</span> <span class="k">from</span> <span class="s2">"./file"</span><span class="p">;</span> <span class="kd">const</span> <span class="nx">instance</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">NewName</span><span class="p">();</span> </code></pre> </div> <h3 id="namespace-import">Namespace import</h3> <p>Get it:</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">namespaceImport</span> <span class="o">=</span> <span class="nx">importDeclaration</span><span class="p">.</span><span class="nx">getNamespaceImport</span><span class="p">();</span> <span class="c1">// returns: Identifier | undefined</span> </code></pre> </div> <p>Set it:</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">importDeclaration</span><span class="p">.</span><span class="nx">setNamespaceImport</span><span class="p">(</span><span class="s2">"newName"</span><span class="p">);</span> </code></pre> </div> <p><em>Note:</em> Setting the namespace import for an existing namespace import will rename any uses of the namespace import in the current file.</p> <h3 id="named-imports">Named imports</h3> <p>Getting a named import:</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">namedImports</span> <span class="o">=</span> <span class="nx">importDeclaration</span><span class="p">.</span><span class="nx">getNamedImports</span><span class="p">();</span> <span class="c1">// returns: ImportSpecifier</span> </code></pre> </div> <p>Adding or inserting named imports can be done via the <code class="highlighter-rouge">addNamedImport</code>, <code class="highlighter-rouge">addNamedImports</code>, <code class="highlighter-rouge">insertNamedImport</code>, or <code class="highlighter-rouge">insertNamedImports</code> methods.</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">namedImport</span> <span class="o">=</span> <span class="nx">importDeclaration</span><span class="p">.</span><span class="nx">addNamedImport</span><span class="p">({</span> <span class="na">name</span><span class="p">:</span> <span class="s2">"MyClass"</span><span class="p">,</span> <span class="na">alias</span><span class="p">:</span> <span class="s2">"MyAliasName"</span> <span class="c1">// alias is optional</span> <span class="p">});</span> </code></pre> </div> <p>Removing one named import:</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">namedImport</span><span class="p">.</span><span class="nx">remove</span><span class="p">();</span> </code></pre> </div> <p>Removing all named imports:</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">importDeclaration</span><span class="p">.</span><span class="nx">removeNamedImports</span><span class="p">();</span> </code></pre> </div> <h4 id="import-specifier">Import specifier</h4> <p>Import specifiers are the individual named imports.</p> <h5 id="name">Name</h5> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">namedImport</span><span class="p">.</span><span class="nx">getNameNode</span><span class="p">();</span> <span class="c1">// returns: Identifier</span> <span class="nx">namedImport</span><span class="p">.</span><span class="nx">setName</span><span class="p">(</span><span class="s2">"NewName"</span><span class="p">);</span> <span class="nx">namedImport</span><span class="p">.</span><span class="nx">renameName</span><span class="p">(</span><span class="s2">"NewName"</span><span class="p">);</span> </code></pre> </div> <h5 id="alias">Alias</h5> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">namedImport</span><span class="p">.</span><span class="nx">getAliasIdentifier</span><span class="p">();</span> <span class="c1">// returns: Identifier | undefined</span> <span class="nx">namedImport</span><span class="p">.</span><span class="nx">setAlias</span><span class="p">(</span><span class="s2">"NewAliasName"</span><span class="p">);</span> </code></pre> </div> <p><em>Note:</em> Setting the alias will rename any uses of the alias or identifier in the current file to the new value.</p> <h5 id="parent-import-declaration">Parent import declaration</h5> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">namedImport</span><span class="p">.</span><span class="nx">getImportDeclaration</span><span class="p">();</span> <span class="c1">// returns: ImportDeclaration</span> </code></pre> </div> </section> </div> </div> <footer> </footer> </div> <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script> <!--[if !IE]><script>fixScale(document);</script><![endif]--> </body> </html>