test-tsmg-pplugins v1.0.1
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 codemodes (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 { forkTSServer, migrate, MigrateConfig } from 'ts-migrate-server';
// get input files folder
const inputDir = path.resolve(__dirname, 'input');
// initialize a typescript server
const server = forkTSServer();
process.on('exit', () => {
server.kill();
});
// 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, server });
// kill server
server.kill();
process.exit(exitCode);
List of plugins
Name | Description |
---|---|
declare-missing-class-properties | Declare missing class properties. |
eslint-fix | Run eslint fix to fix any eslint violations that happened along the way. |
explicit-any | Annotate variables with any ($TSFixMe ) in the case of an implicit any violation. |
hoist-class-statics | Hoist static class members into the class body (vs. assigning them after the class definition). |
react-class-lifecycle-methods | Annotate React lifecycle method types. |
react-class-state | Declare React state type. |
react-default-props | Annotate React default props. |
react-props | Convert React prop types to TypeScript type. |
react-shape | Convert prop types shapes to TypeScript type. |
strip-ts-ignore | Strip // @ts-ignore . comments |
ts-ignore | Add // @ts-ignore comments for the remaining errors. |
FAQ
What is the ts-migrate plugin?
The plugin is an abstraction around codemodes 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;
getDiagnostics: () => Promise<PluginDiagnostics>;
}
export type Diagnostic = tsp.Diagnostic | tsp.DiagnosticWithLinePosition;
export interface PluginDiagnostics {
semanticDiagnostics: Diagnostic[];
syntacticDiagnostics: Diagnostic[];
suggestionDiagnostics: Diagnostic[];
}
How I can write my own plugin?
You can take a look into the simple plugin implementation, the example folder. For more examples, please see 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.
4 years ago