ts-codemod
Code-Modifier for Typescript based projects
Last updated 2 months ago by tusharmathur .
ISC · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install ts-codemod 
SYNC missed versions from official npm registry.

ts-codemod

Build Status npm

Code-Modifier for Typescript based projects.

Index

Installation

npm i -g ts-codemod

Command Line Usage

A typical command looks like -

ts-codemod --transformation [transformation name] --params [transformation params] --write [glob pattern]
Argument Purpose Value
--write -w (optional) Writes back to the file false
--transformation -t (required) Name of the transformation or file path
--params -p ( optional) Additional transformation specific args

Example

So lets say I want to update the import statements throughout the application from something like —

import * as components from '../../../component'

to something like —

import * as components from 'component'

Here I have removed the unnecessary ../../../ from the import statement. To achieve this goal I can use the [normalize-import-path] transformation.

  1. Create a .tscodemodrc file
{
  // name of the transformation
  transformation: 'normalize-import-path',

  // transformation params
  params: {
    module: 'component'
  }
}
  1. Run the code mod.
ts-codemod --write src/**/*.ts

Alternatively you can also pass all the arguments without creating a .tscodemodrc file —

ts-codemod --transformation normalize-import-path --params.module=component --write src/**/*.ts

Custom transformation

Writing a custom transformation isn't very easy and one needs to understand how typescript internally converts plain string to an AST.

A good starter could be to checkout the [transformations] directory. Those transformations are written for a varied level of complexity. Also checkout the AST Explorer website to get an understanding of ASTs in general.

A custom transformation (my-custom-transformation.ts) can be implemented via extending the Transformation class.

import * as ts from 'typescript'
import {Transformation} from 'ts-codemod'

// my-custom-transformation.ts
export default class MyCustomTransformation extends Transformation {
  apply(node: ts.Node): ts.VisitResult<ts.Node> {
    // write your implementation here
    return node // will apply no-change
  }
}

It can then be executed as —

ts-codemod -t ./my-custom-transformation.ts src/**.ts

Passing Custom Params: To pass custom params to your transformation can be done as follows —

export type MyParams = {
  moduleName: string
}

// my-custom-transformation.ts
export default class MyCustomTransformation extends Transformation<MyParams> {

  // Called before the transformation is applied on the file
  before () {

  }

  apply(node: ts.Node): ts.VisitResult<ts.Node> {


    // access the params
    console.log(this.params.moduleName)

    ...
  }

  // Called after the transformation is applied on the file
  after () {

  }
}

The additional params are passed via the --params.moduleName cli argument or if you are using a .tscodemodrc file —

{
  params: {
    moduleName: 'abc'
  }
}

Post Transformation

  1. Life can't be that simple right? Running transformations will generally ruin the formatting of your files. A recommended way to solve that problem is by using Prettier.
  2. Even after running prettier its possible to have unnecessary new lines added/removed. This can be solved by ignoring white spaces while staging the changes in git.
git diff --ignore-blank-lines | git apply --cached

Current Tags

  • 4.0.0                                ...           latest (2 months ago)

22 Versions

  • 4.0.0                                ...           2 months ago
  • 3.0.2                                ...           2 months ago
  • 3.0.1                                ...           4 months ago
  • 3.0.0                                ...           9 months ago
  • 2.3.2                                ...           9 months ago
  • 2.3.1                                ...           9 months ago
  • 2.3.0                                ...           9 months ago
  • 2.2.0                                ...           9 months ago
  • 2.1.0                                ...           9 months ago
  • 2.0.0                                ...           9 months ago
  • 1.4.0                                ...           9 months ago
  • 1.3.4                                ...           9 months ago
  • 1.3.3                                ...           9 months ago
  • 1.3.2                                ...           9 months ago
  • 1.3.1                                ...           9 months ago
  • 1.3.0                                ...           9 months ago
  • 1.2.0                                ...           9 months ago
  • 1.1.1                                ...           9 months ago
  • 1.1.0                                ...           9 months ago
  • 1.0.2                                ...           9 months ago
  • 1.0.1                                ...           9 months ago
  • 1.0.0                                ...           9 months ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 22
Last Day 0
Last Week 22
Last Month 24
Dependencies (9)
Dev Dependencies (12)
Dependents (0)
None

Copyright 2014 - 2016 © taobao.org |