0.1.29 • Published 2 years ago

@xtrek/ts-migrate-plugins v0.1.29

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

ts-migrate-plugins

ts-migrate-plugins is designed as a set of plugins, so that it can be pretty customizable for different use-cases. This package contains a set of codemods (plugins), which are doing transformation of js/jsx -> ts/tsx.

ts-migrate-plugins is designed around Airbnb projects. Use at your own risk.

Install

Install ts-migrate using npm:

npm install --save-dev ts-migrate-plugins

Or yarn:

yarn add --dev ts-migrate-plugins

Usage

import path from 'path';
import { tsIgnorePlugin } from 'ts-migrate-plugins';
import { migrate, MigrateConfig } from 'ts-migrate-server';

// get input files folder
const inputDir = path.resolve(__dirname, 'input');

// create new migration config and add ts-ignore plugin with empty options
const config = new MigrateConfig().addPlugin(tsIgnorePlugin, {});

// run migration
const exitCode = await migrate({ rootDir: inputDir, config });

process.exit(exitCode);

List of plugins

NameDescription
add-conversionsAdd conversions to any ($TSFixMe) in the case of type errors.
declare-missing-class-propertiesDeclare missing class properties.
eslint-fixRun eslint fix to fix any eslint violations that happened along the way.
explicit-anyAnnotate variables with any ($TSFixMe) in the case of an implicit any violation.
hoist-class-staticsHoist static class members into the class body (vs. assigning them after the class definition).
jsdocConvert JSDoc @param types to TypeScript annotations.
member-accessibilityAdd accessibility modifiers (private, protected, or public) to class members according to naming conventions.
react-class-lifecycle-methodsAnnotate React lifecycle method types.
react-class-stateDeclare React state type.
react-default-propsAnnotate React default props.
react-propsConvert React prop types to TypeScript type.
react-shapeConvert prop types shapes to TypeScript type.
strip-ts-ignoreStrip // @ts-ignore. comments
ts-ignoreAdd // @ts-ignore comments for the remaining errors.

Type of plugins

We have three main categories of plugins:

  • Text based plugins. Plugins of this category are operating with a text of source files and operate based on this. Example: example-plugin-text.

  • Jscodeshift based plugins. These plugins are using a jscodeshift toolkit as a base for operations and transformations around Abstract Syntax Tree. Example: example-plugin-jscodeshift.

  • TypeScript ast-based plugins. The main idea behind these plugins is by parsing Abstract Syntax Tree with TypeScript compiler API, we can generate an array of updates for the text and apply them to the source file. Example: example-plugin-ts.

FAQ

What is the ts-migrate plugin?

The plugin is an abstraction around codemods which provides centralized interfaces for the ts-migrate. Plugins should implement the following interface:

interface Plugin {
  name: string
  run(params: PluginParams<TPluginOptions = {}>): Promise<string | void> | string | void
}

interface PluginParams<TPluginOptions = {}> {
  options: TPluginOptions;
  fileName: string;
  rootDir: string;
  text: string;
  sourceFile: ts.SourceFile;
  getLanguageService: () => ts.LanguageService;
}

How I can write my own plugin?

You can take a look into the plugin examples. For more information, please check the plugins implementation for the ts-migrate.

I have an issue with a specific plugin, what should I do?

Please file an issue here.

Contributing

See the Contributors Guide.