UNPKG

ts-simple-ast

Version:

TypeScript compiler wrapper for AST navigation and code generation.

178 lines (140 loc) 10.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 - Adding Source Files</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 active"> <a class="nav-link" href="/setup">Setup</a> <ul> <li class=""><a href="/setup/index">Instantiating</a></li> <li class="active"><a href="/setup/adding-source-files">Adding Source Files</a></li> <li class=""><a href="/setup/diagnostics">Diagnostics</a></li> <li class=""><a href="/setup/file-system">File System</a></li> <li class=""><a href="/setup/ast-viewers">AST Viewers</a></li> </ul> </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> </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="adding-source-files">Adding Source Files</h2> <p>You will need to populate the <code class="highlighter-rouge">ast</code> object with source files.</p> <h3 id="by-a-tsconfigjson">By a <em>tsconfig.json</em></h3> <p>Source files will be added when instantiating with a <code class="highlighter-rouge">tsConfigFilePath</code>:</p> <div class="language-ts highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">ast</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Ast</span><span class="p">({</span> <span class="na">tsConfigFilePath</span><span class="p">:</span> <span class="s2">"path/to/tsconfig.json"</span> <span class="p">});</span> </code></pre> </div> <p>…and this can be disabled by setting <code class="highlighter-rouge">addFilesFromTsConfig: false</code>.</p> <p>Alternatively, populate the <code class="highlighter-rouge">ast</code> object by calling <code class="highlighter-rouge">addSourceFilesFromTsConfig</code>:</p> <div class="language-ts highlighter-rouge"><pre class="highlight"><code><span class="nx">ast</span><span class="p">.</span><span class="nx">addSourceFilesFromTsConfig</span><span class="p">(</span><span class="s2">"path/to/tsconfig.json"</span><span class="p">);</span> </code></pre> </div> <h3 id="by-file-globs-or-file-paths">By file globs or file paths</h3> <p>Specify as many file globs or file paths as you wish:</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="nx">ast</span><span class="p">.</span><span class="nx">addExistingSourceFiles</span><span class="p">(</span><span class="s2">"folder/**/*{.d.ts,.ts}"</span><span class="p">);</span> <span class="nx">ast</span><span class="p">.</span><span class="nx">addExistingSourceFiles</span><span class="p">([</span><span class="s2">"folder/file.ts"</span><span class="p">,</span> <span class="s2">"folder/otherFile.ts"</span><span class="p">]);</span> <span class="nx">ast</span><span class="p">.</span><span class="nx">addExistingSourceFiles</span><span class="p">([</span><span class="s2">"**/*.ts"</span><span class="p">,</span> <span class="s2">"!**/*.d.ts"</span><span class="p">]);</span> </code></pre> </div> <h3 id="by-file-path">By file path</h3> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">sourceFile</span> <span class="o">=</span> <span class="nx">ast</span><span class="p">.</span><span class="nx">addExistingSourceFile</span><span class="p">(</span><span class="s2">"path/to/file.ts"</span><span class="p">);</span> <span class="c1">// or addSourceFileIfExists</span> </code></pre> </div> <h3 id="by-structure">By structure</h3> <p>Create source files based on an object that looks like the AST of a source file:</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">sourceFile</span> <span class="o">=</span> <span class="nx">ast</span><span class="p">.</span><span class="nx">createSourceFile</span><span class="p">(</span><span class="s2">"path/to/myStructureFile.ts"</span><span class="p">,</span> <span class="p">{</span> <span class="na">enums</span><span class="p">:</span> <span class="p">[{</span> <span class="na">name</span><span class="p">:</span> <span class="s2">"MyEnum"</span><span class="p">,</span> <span class="na">members</span><span class="p">:</span> <span class="p">[{</span> <span class="na">name</span><span class="p">:</span> <span class="s2">"member"</span> <span class="p">}]</span> <span class="p">}],</span> <span class="na">classes</span><span class="p">:</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="c1">// etc...</span> <span class="p">}]</span> <span class="c1">// etc...</span> <span class="p">});</span> </code></pre> </div> <p>The above would create a source file with the following text:</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kr">enum</span> <span class="nx">MyEnum</span> <span class="p">{</span> <span class="nx">member</span> <span class="p">}</span> <span class="kr">class</span> <span class="nx">MyClass</span> <span class="p">{</span> <span class="p">}</span> </code></pre> </div> <p>Note: The file will not be created and saved to the file system until calling <code class="highlighter-rouge">.save()</code> on the source file.</p> <h3 id="by-string">By string</h3> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">fileText</span> <span class="o">=</span> <span class="s2">"enum MyEnum {\n}\n"</span><span class="p">;</span> <span class="kd">const</span> <span class="nx">sourceFile</span> <span class="o">=</span> <span class="nx">ast</span><span class="p">.</span><span class="nx">createSourceFile</span><span class="p">(</span><span class="s2">"path/to/myNewFile.ts"</span><span class="p">,</span> <span class="nx">fileText</span><span class="p">);</span> </code></pre> </div> <p>Note: The file will not be created and saved to the file system until calling <code class="highlighter-rouge">.save()</code> on the source file.</p> <h3 id="note">Note</h3> <p>Adding source files to the AST from a structure or text will act like any other source file, but they will not be saved to the disk unless you ask it to be.</p> <div class="language-typescript highlighter-rouge"><pre class="highlight"><code><span class="c1">// save it to the disk if you wish:</span> <span class="nx">sourceFile</span><span class="p">.</span><span class="nx">save</span><span class="p">();</span> <span class="c1">// or saveSync();</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>