ts-simple-ast
Version:
TypeScript compiler wrapper for AST navigation and code generation.
311 lines (237 loc) • 21.6 kB
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 - Export</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=""><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="active"><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="export">Export</h2>
<p>Certain nodes in TypeScript can be <a href="https://www.typescriptlang.org/docs/handbook/modules.html">exported</a>.</p>
<h3 id="is-export">Is export</h3>
<p>Use <code class="highlighter-rouge">isExported()</code>, <code class="highlighter-rouge">isNamedExport()</code>, or <code class="highlighter-rouge">isDefaultExport()</code> methods:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">functionDeclaration</span><span class="p">.</span><span class="nx">isExported</span><span class="p">();</span> <span class="c1">// returns: boolean</span>
<span class="nx">functionDeclaration</span><span class="p">.</span><span class="nx">isNamedExport</span><span class="p">();</span> <span class="c1">// returns: boolean</span>
<span class="nx">functionDeclaration</span><span class="p">.</span><span class="nx">isDefaultExport</span><span class="p">();</span> <span class="c1">// returns: boolean</span>
</code></pre>
</div>
<h3 id="export-and-default-keyword"><code class="highlighter-rouge">export</code> and <code class="highlighter-rouge">default</code> keyword</h3>
<p>Use the <code class="highlighter-rouge">has</code> methods to check for the <code class="highlighter-rouge">export</code> and <code class="highlighter-rouge">default</code> keywords:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">functionDeclaration</span><span class="p">.</span><span class="nx">hasExportKeyword</span><span class="p">();</span> <span class="c1">// returns: boolean</span>
<span class="nx">functionDeclaration</span><span class="p">.</span><span class="nx">hasDefaultKeyword</span><span class="p">();</span> <span class="c1">// returns: boolean</span>
</code></pre>
</div>
<p>And use the <code class="highlighter-rouge">get</code> methods to get the keywords:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">functionDeclaration</span><span class="p">.</span><span class="nx">getExportKeyword</span><span class="p">();</span>
<span class="nx">functionDeclaration</span><span class="p">.</span><span class="nx">getDefaultKeyword</span><span class="p">();</span>
</code></pre>
</div>
<h3 id="setting-as-default-export">Setting as default export</h3>
<p>Use <code class="highlighter-rouge">setIsDefaultExport</code> to set a node as being a default export or not:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">functionDeclaration</span><span class="p">.</span><span class="nx">setIsDefaultExport</span><span class="p">(</span><span class="kc">true</span><span class="p">);</span> <span class="c1">// be one</span>
<span class="nx">functionDeclaration</span><span class="p">.</span><span class="nx">setIsDefaultExport</span><span class="p">(</span><span class="kc">false</span><span class="p">);</span> <span class="c1">// don't be one</span>
</code></pre>
</div>
<p>Note: This will throw an exception if the node’s parent is not a source file.</p>
<h3 id="setting-as-export">Setting as export</h3>
<p>Use <code class="highlighter-rouge">setIsExported</code> to set a node as being a named export if the parent is a source file or an export of a namespace if the parent is a namespace:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">functionDeclaration</span><span class="p">.</span><span class="nx">setIsExported</span><span class="p">(</span><span class="kc">true</span><span class="p">);</span> <span class="c1">// be one</span>
<span class="nx">functionDeclaration</span><span class="p">.</span><span class="nx">setIsExported</span><span class="p">(</span><span class="kc">false</span><span class="p">);</span> <span class="c1">// don't be one</span>
</code></pre>
</div>
<h2 id="export-declarations">Export Declarations</h2>
<p>Export declarations look like this:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="k">export</span> <span class="o">*</span> <span class="k">from</span> <span class="s2">"./some-file"</span><span class="p">;</span>
<span class="k">export</span> <span class="p">{</span><span class="nx">MyClass</span><span class="p">}</span> <span class="k">from</span> <span class="s2">"./other-file"</span><span class="p">;</span>
<span class="k">export</span> <span class="p">{</span><span class="nx">MyClass</span><span class="p">};</span>
</code></pre>
</div>
<p>Get the export declarations by calling:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">exports</span> <span class="o">=</span> <span class="nx">sourceFile</span><span class="p">.</span><span class="nx">getExportDeclarations</span><span class="p">();</span>
<span class="c1">// or to get the first one that matches a condition</span>
<span class="kd">const</span> <span class="nx">exportDeclaration</span> <span class="o">=</span> <span class="nx">sourceFile</span><span class="p">.</span><span class="nx">getExportDeclaration</span><span class="p">(</span><span class="nx">d</span> <span class="o">=></span> <span class="nx">d</span><span class="p">.</span><span class="nx">hasNamedExports</span><span class="p">());</span>
<span class="c1">// tell if it has named exports</span>
<span class="nx">exportDeclaration</span><span class="p">.</span><span class="nx">hasNamedExports</span><span class="p">();</span>
<span class="c1">// or if it's a namespace export</span>
<span class="nx">exportDeclaration</span><span class="p">.</span><span class="nx">isNamespaceExport</span><span class="p">();</span>
<span class="c1">// get/set the module specifier</span>
<span class="nx">exportDeclaration</span><span class="p">.</span><span class="nx">getModuleSpecifier</span><span class="p">();</span> <span class="c1">// returns: string | undefined</span>
<span class="nx">exportDeclaration</span><span class="p">.</span><span class="nx">setModuleSpecifier</span><span class="p">(</span><span class="s2">"./new-file"</span><span class="p">);</span>
<span class="nx">exportDeclaration</span><span class="p">.</span><span class="nx">hasModuleSpecifier</span><span class="p">();</span> <span class="c1">// returns: boolean</span>
</code></pre>
</div>
<h3 id="addinsert">Add/Insert</h3>
<p>Add or insert use <code class="highlighter-rouge">insertExportDeclaration</code>, <code class="highlighter-rouge">insertExportDeclarations</code>, <code class="highlighter-rouge">addExportDeclaration</code>, or <code class="highlighter-rouge">addExportDeclarations</code>:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">exportDeclaration</span> <span class="o">=</span> <span class="nx">sourceFile</span><span class="p">.</span><span class="nx">addExportDeclaration</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">exportDeclaration</span><span class="p">.</span><span class="nx">remove</span><span class="p">();</span>
</code></pre>
</div>
<h3 id="to-namespace-export">To Namespace Export</h3>
<p>Given an export declaration with named exports:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="k">export</span> <span class="p">{</span><span class="nx">Export1</span><span class="p">,</span> <span class="nx">Export2</span><span class="p">,</span> <span class="nx">Export3</span><span class="p">}</span> <span class="k">from</span> <span class="s2">"./other-file"</span><span class="p">;</span>
</code></pre>
</div>
<p>Calling <code class="highlighter-rouge">exportDeclaration.toNamespaceExport();</code> will change the code to the following:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="k">export</span> <span class="o">*</span> <span class="k">from</span> <span class="s2">"./other-file"</span><span class="p">;</span>
</code></pre>
</div>
<h3 id="named-exports">Named Exports</h3>
<p>Get the named exports from an export declaration:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">namedExports</span> <span class="o">=</span> <span class="nx">exportDeclaration</span><span class="p">.</span><span class="nx">getNamedExports</span><span class="p">();</span>
</code></pre>
</div>
<p>Adding or inserting named exports can be done via the <code class="highlighter-rouge">addNamedExport</code>, <code class="highlighter-rouge">addNamedExports</code>, <code class="highlighter-rouge">insertNamedExport</code>, or <code class="highlighter-rouge">insertNamedExports</code> methods.</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">namedExport</span> <span class="o">=</span> <span class="nx">exportDeclaration</span><span class="p">.</span><span class="nx">addNamedExport</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 export:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">namedExport</span><span class="p">.</span><span class="nx">remove</span><span class="p">();</span>
</code></pre>
</div>
<h4 id="export-specifier">Export specifier</h4>
<p>Export specifiers are the individual named exports.</p>
<h5 id="name">Name</h5>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">namedExport</span><span class="p">.</span><span class="nx">getNameNode</span><span class="p">();</span> <span class="c1">// returns: Identifier</span>
<span class="nx">namedExport</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">namedExport</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">namedExport</span><span class="p">.</span><span class="nx">getAliasIdentifier</span><span class="p">();</span> <span class="c1">// returns: Identifier | undefined</span>
<span class="nx">namedExport</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 to the new value.</p>
<h5 id="parent-export-declaration">Parent export declaration</h5>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">namedExport</span><span class="p">.</span><span class="nx">getExportDeclaration</span><span class="p">();</span> <span class="c1">// returns: ExportDeclaration</span>
</code></pre>
</div>
<h2 id="export-assignments">Export Assignments</h2>
<p>Export assignments look like the following:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="k">export</span> <span class="o">=</span> <span class="mi">5</span><span class="p">;</span>
<span class="k">export</span> <span class="k">default</span> <span class="nx">name</span><span class="p">;</span>
</code></pre>
</div>
<p>Get the export assignments by calling:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">exportAssignments</span> <span class="o">=</span> <span class="nx">sourceFile</span><span class="p">.</span><span class="nx">getExportAssignments</span><span class="p">();</span>
<span class="c1">// or to get the first one that matches a condition</span>
<span class="kd">const</span> <span class="nx">exportAssignment</span> <span class="o">=</span> <span class="nx">sourceFile</span><span class="p">.</span><span class="nx">getExportAssignment</span><span class="p">(</span><span class="nx">d</span> <span class="o">=></span> <span class="nx">d</span><span class="p">.</span><span class="nx">isExportEquals</span><span class="p">());</span>
<span class="c1">// get if it's `export =` or `export default`</span>
<span class="kd">const</span> <span class="nx">isExportEquals</span> <span class="o">=</span> <span class="nx">exportAssignment</span><span class="p">.</span><span class="nx">isExportEquals</span><span class="p">();</span>
<span class="c1">// get the expression</span>
<span class="kd">const</span> <span class="nx">expression</span> <span class="o">=</span> <span class="nx">exportAssignment</span><span class="p">.</span><span class="nx">getExpression</span><span class="p">();</span>
</code></pre>
</div>
<h3 id="addinsert-1">Add/Insert</h3>
<p>Add or insert use <code class="highlighter-rouge">insertExportAssignment</code>, <code class="highlighter-rouge">insertExportAssignments</code>, <code class="highlighter-rouge">addExportAssignment</code>, or <code class="highlighter-rouge">addExportAssignments</code>:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">exportAssignment</span> <span class="o">=</span> <span class="nx">sourceFile</span><span class="p">.</span><span class="nx">addExportAssignment</span><span class="p">({</span>
<span class="na">isExportEquals</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> <span class="c1">// defaults to true</span>
<span class="na">expression</span><span class="p">:</span> <span class="s2">"5"</span>
<span class="p">});</span>
</code></pre>
</div>
<h3 id="remove-1">Remove</h3>
<p>Call <code class="highlighter-rouge">.remove()</code>:</p>
<div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">exportAssignment</span><span class="p">.</span><span class="nx">remove</span><span class="p">();</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>