Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Expanded node API
  • Loading branch information
JoshuaKGoldberg committed Oct 14, 2020
commit 327cd65eed18fdece7395f0f4bcc84e280720509
63 changes: 63 additions & 0 deletions docs/API.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,66 @@ if (result.status !== ResultStatus.Succeeded) {
```

> See the provided `.d.ts` TypeScript typings for full descriptions of inputs and outputs.

## Standalone API

> ⚠ This area of code is still considered experimental.
> Use at your own risk.

The individual steps within `convertTSLintConfig` are each available as exported functions as well.

1. **[`findOriginalConfigurationsStandalone`](#findOriginalConfigurationsStandalone)** takes in an object of original configuration locations and retrieves their raw and computed contents.
2. **[`createESLintConfiguration`](#createESLintConfiguration)** creates an raw output ESLint configuration summary from those input configuration values.
3. `joinConfigConversionResults` turns a raw ESLint configuration summary into ESLint's configuration shape.
4. `formatOutput` prints that formatted output into a string per the output file extension.

> Read the docs also dts yo
> Please file an issue on GitHub if you'd like to see changes.

### `findOriginalConfigurationsStandalone`

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",
});
```

### `createESLintConfiguration`

Generating an ESLint configuration from the contents of a local `tslint.json`:

```ts
import { createESLintConfiguration } from "tslint-to-eslint-config";

const summarizedConfiguration = await createESLintConfiguration({
tslint: {
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);
```
3 changes: 3 additions & 0 deletions src/adapters/fsFileSystem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,23 @@ const writeFile = promisify(fs.writeFile);

export const fsFileSystem: FileSystem = {
fileExists: async (filePath: string) => {
throw new Error("hi fileExists: " + filePath);
try {
return fs.existsSync(filePath);
} catch (error) {
return false;
}
},
readFile: async (filePath: string) => {
throw new Error("hi readFile: " + filePath);
try {
return (await readFile(filePath)).toString();
} catch (error) {
return error;
}
},
writeFile: async (filePath: string, contents: string) => {
throw new Error("hi writeFile: " + filePath);
try {
return writeFile(filePath, contents);
} catch (error) {
Expand Down
17 changes: 4 additions & 13 deletions src/api/convertTSLintConfigStandalone.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,16 @@
import { createESLintConfiguration } from "../converters/lintConfigs/createESLintConfiguration";
import { formatOutput } from "../converters/lintConfigs/formatting/formatOutput";
import {
joinConfigConversionResults,
JoinedConversionResult,
} from "../converters/lintConfigs/joinConfigConversionResults";
import { findOriginalConfigurations } from "../input/findOriginalConfigurations";
import {
ConfigurationErrorResult,
LintConfigConversionSettings,
ResultStatus,
SucceededDataResult,
} from "../types";
import {
createESLintConfigurationDependencies,
findOriginalConfigurationsDependencies,
} from "./dependencies";
import { createESLintConfigurationStandalone } from "./createESLintConfigurationStandalone";
import { findOriginalConfigurationsStandalone } from "./findOriginalConfigurationsStandalone";

/**
* Resultant configuration data from converting a TSLint configuration.
Expand Down Expand Up @@ -43,19 +39,14 @@ export const convertTSLintConfigStandalone = async (
...rawSettings,
config: ".eslintrc.js",
};
const originalConfigurations = await findOriginalConfigurations(
findOriginalConfigurationsDependencies,
settings,
);
const originalConfigurations = await findOriginalConfigurationsStandalone(settings);
if (originalConfigurations.status !== ResultStatus.Succeeded) {
return originalConfigurations;
}

const summarizedConfiguration = await createESLintConfiguration(
createESLintConfigurationDependencies,
const summarizedConfiguration = await createESLintConfigurationStandalone(
originalConfigurations.data,
settings.prettier,
new Map(),
);

const output = joinConfigConversionResults(
Expand Down
49 changes: 49 additions & 0 deletions src/api/createESLintConfigurationStandalone.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { createESLintConfiguration } from "../converters/lintConfigs/createESLintConfiguration";
import { ESLintConfiguration } from "../input/findESLintConfiguration";
import {
AllOriginalConfigurations,
OriginalConfigurations,
} from "../input/findOriginalConfigurations";
import { PackagesConfiguration } from "../input/findPackagesConfiguration";
import { TSLintConfiguration } from "../input/findTSLintConfiguration";
import { TypeScriptConfiguration } from "../input/findTypeScriptConfiguration";
import { createESLintConfigurationDependencies } from "./dependencies";

export type AllOriginalConfigurationsOptionally = {
eslint?: Partial<OriginalConfigurations<ESLintConfiguration>>;
packages?: PackagesConfiguration;
tslint: Partial<OriginalConfigurations<TSLintConfiguration>>;
typescript?: TypeScriptConfiguration;
};

/**
* Creates a raw output ESLint configuration summary from input configuration values.
*
* @param originalConfigurations
* Any input configuration objects, including 'raw' (exact configuration file contents)
* and 'full' (tool-reported computed values) for both ESLint and TSLint.
* @param prettier
* Whether to always consider the output configuration as extending from the Prettier
* ruleset, instead of inferring it from computed rule values (recommended).
*/
export const createESLintConfigurationStandalone = async (
originalConfigurations: AllOriginalConfigurations,
prettier?: boolean,
) => {
const allOriginalConfigurations = { ...originalConfigurations };

if (allOriginalConfigurations.eslint) {
allOriginalConfigurations.eslint.full ??= allOriginalConfigurations.eslint.raw;
}

if (allOriginalConfigurations.tslint) {
allOriginalConfigurations.tslint.full ??= allOriginalConfigurations.tslint.raw;
}

return createESLintConfiguration(
createESLintConfigurationDependencies,
originalConfigurations,
prettier,
new Map<string, string[]>(),
);
};
19 changes: 19 additions & 0 deletions src/api/findOriginalConfigurationsStandalone.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// export { formatOutput } from "../converters/lintConfigs/formatting/formatOutput";
// export { joinConfigConversionResults } from "../converters/lintConfigs/joinConfigConversionResults";
import { findOriginalConfigurations } from "../input/findOriginalConfigurations";
import { ConfigurationLocations } from "../types";
import { findOriginalConfigurationsDependencies } from "./dependencies";

/**
* Retrieves the raw and computed contents of original configuration files.
*
* @param locations - Any overrides to file locations to read from.
*/
export const findOriginalConfigurationsStandalone = async (
locations?: Partial<ConfigurationLocations>,
) => {
return findOriginalConfigurations(findOriginalConfigurationsDependencies, {
...locations,
config: locations?.config ?? ".eslintrc.js",
});
};
3 changes: 3 additions & 0 deletions src/converters/lintConfigs/joinConfigConversionResults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ import { createEnv } from "./eslint/createEnv";
import { formatConvertedRules } from "./formatConvertedRules";
import { SummarizedConfigResultsConfiguration } from "./summarization/types";

/**
* Turns a raw ESLint configuration summary into ESLint's configuration shape.
*/
export const joinConfigConversionResults = (
summarizedResults: SummarizedConfigResultsConfiguration,
originalConfigurations: AllOriginalConfigurations,
Expand Down
4 changes: 4 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
export { convertTSLintConfigStandalone as convertTSLintConfig } from "./api/convertTSLintConfigStandalone";
export { createESLintConfigurationStandalone as createESLintConfiguration } from "./api/createESLintConfigurationStandalone";
export { findOriginalConfigurationsStandalone as findOriginalConfigurations } from "./api/findOriginalConfigurationsStandalone";
export { formatOutput } from "./converters/lintConfigs/formatting/formatOutput";
export { joinConfigConversionResults } from "./converters/lintConfigs/joinConfigConversionResults";
export * from "./types";