Skip to content

A wrapper around jscodeshift that runs like rails migrations. It also facilitates delivering API changes to consumers of your NPM module.

Notifications You must be signed in to change notification settings

brysgo/jscodemigrate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Migrate your code like you do with your database!

Greenkeeper badge

Join the chat at https://gitter.im/brysgo/jscodemigrate

Dependency Status Circle CI

This is a simple wrapper around jscodeshift that give you a migration like interface.

Install in your project: npm install jscodemigrate --save-dev

Generate your first codemod:

jscodemigrate g switch-to-es6-classes

And you're off! Look in codemods/ to see your newly generated jscodemigration.

I would recommended taking a look at the template, and also js-codemod for ideas.

Pull in codemigrations from npm dependencies

jscodemigrate deps

Differences from writing jscodeshift

module.exports = {
  // Function to export is called transform
  transform: ({file, root, api, options}) => {
    // All the variables are passed in an options hash
    // Included with the usually is a root variable
    // (so that each migration doens't need to reparse the file)
    const j = api.jscodeshift;
    const {expression, statement, statements} = j.template;

    const printOptions = options.printOptions || {};

    const didTransform = true;
    
    root.find(j.Identifier).replaceWith(
      p => j.identifier(p.node.name.split('').reverse().join(''))
    )
    
    // You'll notice a return hash instead of the usual resulting source string
    return {
      didTransform,
      root,
      printOptions
    };
  }
}

Configuration

.codemodrc file

{ // These options mostly mirror jscodeshift's command line args
  "paths": [ "src/", "tests/", "special/file.js" ], // Paths to search when doing codemods
  "extensions": "js,es6" // Comma separated extensions to consider
}

Per code migration config

module.exports = {
  moduleApiChange: true, // Tell jscodemigrate to pull this into dependencies
  paths: [ "tests/" ], // even if your .codemodrc file looks in all your files, this will only run in 'tests/' directory
  // Tranform is the only thing that isn't optional
  transform: ({file, root, api, options}) => {
    ...
  }
}

Made possible by

About

A wrapper around jscodeshift that runs like rails migrations. It also facilitates delivering API changes to consumers of your NPM module.

Resources

Stars

Watchers

Forks

Packages

No packages published