UNPKG

tslint-to-eslint-config

Version:

Converts your TSLint configuration to the closest reasonable ESLint equivalent.

187 lines (131 loc) 6.45 kB
# API You can use `tslint-to-eslint-config` programmatically in your Node apps. It provides a **[`convertTSLintConfig`](#convertTSLintConfig)** function to find relevant configurations on disk and output the generated ESLint configuration. ## `convertTSLintConfig` ```ts import { convertTSLintConfig } from "tslint-to-eslint-config"; const result = await convertTSLintConfig(); ``` Finds relevant configurations on disk and outputs the generated ESLint configuration. Optionally takes in the same settings you can provide via the CLI: * `config`: Output ESLint configuration file path _(default: `.eslintrc.js`)_. * `eslint`: Original ESLint configuration file path _(default: `.eslintrc.js`)_. * `package`: Original packages configuration file path _(default: `package.json`)_. * `prettier`: Whether to add `eslint-config-prettier` to the plugins list. * `tslint`: Original TSLint configuration file path _(default: `tslint.json`)_. * `typescript`: Original TypeScript configuration file path _(default: `tsconfig.json`)_. ```ts import { convertTSLintConfig } from "tslint-to-eslint-config"; const result = await convertTSLintConfig({ config: "./path/to/output/eslintrc.js", eslint: "./path/to/input/eslintrc.js", package: "./path/to/package.json", prettier: true, // Prettier: highly recommended! tslint: "./path/to/tslint.json", typescript: "./path/to/tsconfig.json", }); ``` If the TSLint configuration or any manually specified configurations fail to read from disk, the result will contain: * `complaints`: String complaints describing the errors. * `status`: `ResultStatus.ConfigurationError` (`2`). If no error is detected, the result will contain: * `data`: Resultant ESLint configuration as: * `formatted`: Stringified result per the output config path's file type. * `raw`: Plain old JavaScript object. * `status`: `ResultStatus.Succeeded` (`0`). ```ts import { convertTSLintConfig, ResultStatus } from "tslint-to-eslint-config"; const result = await convertTSLintConfig({ /* ... */ }); if (result.status !== ResultStatus.Succeeded) { console.info("Oh no!"); console.error(result.complaints.join("\n")); } else { console.info("Hooray!"); console.log(result.data.formatted); console.log(result.data.raw); } ``` > See the provided `.d.ts` TypeScript typings for full descriptions of inputs and outputs. ## Standalone Lint Conversion API Portions of the individual lint conversion steps within `convertTSLintConfig` are each available as exported functions as well. * **[`findOriginalConfigurations`](#findOriginalConfigurations)** takes in an object of original configuration locations and retrieves their raw and computed contents. * **[`findReportedConfiguration`](#findReportedConfiguration)** runs a config print command and parses its output as JSON. * **[`createESLintConfiguration`](#createESLintConfiguration)** creates an raw output ESLint configuration summary from those input configuration values. * `joinConfigConversionResults` turns a raw ESLint configuration summary into ESLint's configuration shape. * `formatOutput` prints that formatted output into a string per the output file extension. ### `findOriginalConfigurations` Reading in from the default file locations, including `.eslintrc.js`: ```ts import { findOriginalConfigurations } from "tslint-to-eslint-config"; const originalConfigurations = await findOriginalConfigurations(); ``` Overriding some configuration file locations to read from: ```ts import { findOriginalConfigurations } from "tslint-to-eslint-config"; const originalConfigurations = await findOriginalConfigurations({ config: "./path/to/.eslintrc.json", tslint: "./another/path/to/tslint.custom.json", }); ``` #### `findReportedConfiguration` Retrieving the reported contents of a TSLint configuration: ```ts import { findReportedConfiguration } from "tslint-to-eslint-config"; const full = await findReportedConfiguration("npx tslint --print-config", "./tslint.json"); ``` ### `createESLintConfiguration` Generating an ESLint configuration from the contents of a local `tslint.json`: ```ts import { createESLintConfiguration, findReportedConfiguration } from "tslint-to-eslint-config"; const summarizedConfiguration = await createESLintConfiguration({ tslint: { full: await findReportedConfiguration("npx tslint --print-config", "./tslint.json"), raw: require("./tslint.json"), }, }); ``` Using the full configuration values from disk: ```ts import { createESLintConfiguration, findOriginalConfigurations } from "tslint-to-eslint-config"; const originalConfigurations = await findOriginalConfigurations(); const summarizedConfiguration = await createESLintConfiguration(originalConfigurations); const raw = joinConfigConversionResults(summarizedConfiguration, originalConfigurations.data); const formatted = formatOutput("eslintrc.js", raw); ``` ## Standalone Comment Conversion API The individual per-file conversion logic within `convertComments` is available as a standalone function: ### `convertFileComments` Takes in a file's content and path, and returns the content with inline lint comments converted from TSLint to ESLint: ```ts import { convertFileComments } from "tslint-to-eslint-config"; // "// eslint-disable-next-line" const newContents = convertFileComments({ fileContent: "// tslint:disable-next-line", filePath: "a.ts", }); ``` If using this function across multiple files, pass it a `ruleCommentsCache` so it can skip some conversion calculations for a mild performance boost: ```ts import { convertFileComments } from "tslint-to-eslint-config"; const ruleCommentsCache = new Map<string, string[]>(); const firstNewContents = convertFileComments({ fileContent: "...", filePath: "a.ts", ruleCommentsCache, }); const secondNewContents = convertFileComments({ fileContent: "...", filePath: "b.tsx", ruleCommentsCache, }); ``` If running alongside a lint config conversion, pass the filled out `ruleEquivalents` map for more accurate conversions of TSLint rules whose ESLint equivalents change on different arguments: ```ts import { convertFileComments, createESLintConfiguration } from "tslint-to-eslint-config"; const { ruleEquivalents } = await createESLintConfiguration(originalConfigurations); convertFileComments({ fileContent: "...", filePath: "a.ts", ruleEquivalents, }) ```