1.0.1 • Published 4 years ago

test-tsmg-pplugins v1.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
4 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 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

NameDescription
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).
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.

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.

1.0.1

4 years ago