TypeScript compiler wrapper for static analysis and code manipulation.

Downloads in past


21.0.45 years ago7 years agoMinified + gzip package size for ts-simple-ast in KB


ts-simple-ast ============= npm version Build Status Coverage Status stable TypeScript Compiler API wrapper. Provides a simple way to navigate and manipulate TypeScript and JavaScript code.


ts-simple-ast has been renamed to ts-morph.

Library Development - Progress Update (06 January 2019)

View information on breaking changes in breaking-changes.md. This library is still under early active development. Most common code manipulation/generation use cases are implemented, but there's still a lot of work to do. Please open an issue if you find a feature missing or bug that isn't in the issue tracker.


View a generated report on what nodes have been wrapped in the wrapped-nodes.md file.


Work in progress: https://dsherret.github.io/ts-simple-ast/

Getting Started

  1. Installing
  1. Instantiating
  1. Adding source files
  1. Getting source files
  1. Navigating
  1. Manipulating


```ts import { Project } from "ts-simple-ast"; // initialize const project = new Project({
// Optionally specify compiler options, tsconfig.json, virtual file system, and more here.
// If you initialize with a tsconfig.json, then it will automatically populate the project
// with the associated source files.
// Read more: https://dsherret.github.io/ts-simple-ast/setup/
}); // add source files project.addExistingSourceFiles("src//.ts"); const myClassFile = project.createSourceFile("src/MyClass.ts", "export class MyClass {}"); const myEnumFile = project.createSourceFile("src/MyEnum.ts", {
enums: [{
name: "MyEnum",
isExported: true,
members: [{ name: "member" }]
}); // get information from ast const myClass = myClassFile.getClassOrThrow("MyClass"); myClass.getName(); // returns: "MyClass" myClass.hasExportKeyword(); // returns: true myClass.isDefaultExport(); // returns: false // manipulate ast const myInterface = myClassFile.addInterface({
name: "IMyInterface",
isExported: true,
properties: [{
name: "myProp",
type: "number"
}); myClass.rename("NewName"); myClass.addImplements(myInterface.getName()); myClass.addProperty({
name: "myProp",
initializer: "5"
}); project.getSourceFileOrThrow("src/ExistingFile.ts").delete(); // asynchronously save all the changes above project.save(); // get underlying compiler node from the typescript AST from any node const compilerNode = myClassFile.compilerNode; ``` Or navigate existing compiler nodes created with the TypeScript compiler (the ts named export is the TypeScript compiler): ```ts ignore-error: 1109 import { createWrappedNode, ClassDeclaration, ts } from "ts-simple-ast"; // some code that creates a class declaration using the ts object const classNode: ts.ClassDeclaration = ...; // create and use a wrapped node const classDec = createWrappedNode(classNode) as ClassDeclaration; const firstProperty = classDec.getProperties()0
; // ... do more stuff here ... ```