Skip to content

Drop NodeJS 8 #338

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
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
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ references:
jobs:
build:
docker:
- image: circleci/node:8
- image: circleci/node:10

working_directory: ~/repo

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ The `tslint-to-eslint-config` command reads in any existing linter, TypeScript,
For any TSLint rules with corresponding ESLint equivalents, those equivalents will be used in the new configuration.
TSLint rules without ESLint equivalents will be wrapped with [eslint-plugin-tslint](https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin-tslint).

> Requires Node 8+ (LTS)
> Requires Node 10+ (LTS)

### CLI Flags

Expand Down
6,852 changes: 2,246 additions & 4,606 deletions package-lock.json

Large diffs are not rendered by default.

36 changes: 18 additions & 18 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,31 +7,31 @@
},
"description": "Converts your TSLint configuration to the closest reasonable ESLint equivalent.",
"engines": {
"node": ">=8.0.0"
"node": ">=10.0.0"
},
"dependencies": {
"chalk": "3.0.0",
"commander": "4.0.1",
"commander": "4.1.1",
"strip-json-comments": "^3.0.1",
"tslint": "5.20.1",
"typescript": "3.7.4"
"tslint": "6.0.0",
"typescript": "3.7.5"
},
"devDependencies": {
"@babel/core": "7.7.7",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.7.4",
"@babel/plugin-proposal-optional-chaining": "^7.7.5",
"@babel/preset-env": "7.7.7",
"@babel/preset-typescript": "7.7.7",
"@types/jest": "24.0.24",
"@types/node": "12.12.21",
"@typescript-eslint/eslint-plugin": "2.12.0",
"@typescript-eslint/parser": "2.12.0",
"babel-jest": "24.9.0",
"@babel/core": "7.8.4",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3",
"@babel/plugin-proposal-optional-chaining": "^7.8.3",
"@babel/preset-env": "7.8.4",
"@babel/preset-typescript": "7.8.3",
"@types/jest": "25.1.2",
"@types/node": "13.7.1",
"@typescript-eslint/eslint-plugin": "2.19.2",
"@typescript-eslint/parser": "2.19.2",
"babel-jest": "25.1.0",
"eslint": "6.8.0",
"eslint-config-prettier": "6.7.0",
"husky": "3.1.0",
"jest": "24.9.0",
"lint-staged": "9.5.0",
"eslint-config-prettier": "6.10.0",
"husky": "4.2.3",
"jest": "25.1.0",
"lint-staged": "10.0.7",
"prettier": "1.19.1",
"strip-ansi": "6.0.0"
},
Expand Down
4 changes: 2 additions & 2 deletions src/adapters/exec.stubs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ export type CreateStubExecSettings = {
stdout: string;
};

export const createStubExec = ({ stderr = "", stdout = "" } = {}) =>
export const createStubExec = ({ stderr = "", stdout = "" } = {}): jest.Mock =>
jest.fn().mockReturnValue(Promise.resolve({ stderr, stdout }));

export const createStubThrowingExec = ({ stderr = "" } = {}) =>
export const createStubThrowingExec = ({ stderr = "" } = {}): jest.Mock =>
jest.fn().mockRejectedValue(Promise.resolve(new Error(stderr)));
10 changes: 8 additions & 2 deletions src/adapters/fileSystem.stub.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
export const createStubFileSystem = ({ data = {}, exists = true } = {}) => ({
type FileSystemStub = {
fileExists: jest.Mock;
readFile: jest.Mock;
writeFile: jest.Mock;
};

export const createStubFileSystem = ({ data = {}, exists = true } = {}): FileSystemStub => ({
fileExists: jest.fn().mockReturnValue(exists),
readFile: jest.fn().mockReturnValue(Promise.resolve(data)),
writeFile: jest.fn(),
});

export const createStubThrowingFileSystem = ({ err = "" } = {}) => ({
export const createStubThrowingFileSystem = ({ err = "" } = {}): FileSystemStub => ({
fileExists: jest.fn().mockRejectedValue(Promise.resolve(new Error(err))),
readFile: jest.fn().mockRejectedValue(Promise.resolve(new Error(err))),
writeFile: jest.fn().mockRejectedValue(Promise.resolve(new Error(err))),
Expand Down
34 changes: 31 additions & 3 deletions src/adapters/logger.stubs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,28 @@ import stripAnsi from "strip-ansi";

const debugFileName = "stub-output.log";

const createStubWritableStream = () => ({
type StubWritableStream = {
writable: boolean;
addListener: jest.Mock;
emit: jest.Mock;
end: jest.Mock;
eventNames: jest.Mock;
getMaxListeners: jest.Mock;
listenerCount: jest.Mock;
listeners: jest.Mock;
off: jest.Mock;
on: jest.Mock;
once: jest.Mock;
prependListener: jest.Mock;
prependOnceListener: jest.Mock;
rawListeners: jest.Mock;
removeAllListeners: jest.Mock;
removeListener: jest.Mock;
setMaxListeners: jest.Mock;
write: jest.Mock;
};

const createStubWritableStream = (): StubWritableStream => ({
writable: true,
addListener: jest.fn(),
emit: jest.fn(),
Expand All @@ -24,7 +45,14 @@ const createStubWritableStream = () => ({
write: jest.fn(),
});

export const createStubLogger = () => ({
type StubLogger = {
debugFileName: string;
info: StubWritableStream;
stderr: StubWritableStream;
stdout: StubWritableStream;
};

export const createStubLogger = (): StubLogger => ({
debugFileName,
info: createStubWritableStream(),
stderr: createStubWritableStream(),
Expand All @@ -39,7 +67,7 @@ const removeOddCharactersAndTrim = (text: string) =>
)
.trim();

export const expectEqualWrites = (fn: jest.Mock, ...actual: string[]) => {
export const expectEqualWrites = (fn: jest.Mock, ...actual: string[]): void => {
const realCalls = removeOddCharactersAndTrim(fn.mock.calls.map(args => args.join("")).join(""));
const actualCalls = removeOddCharactersAndTrim(actual.join(EOL) + EOL);

Expand Down
2 changes: 1 addition & 1 deletion src/adapters/nativeImporter.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
export type NativeImporter = (moduleName: string) => unknown | Error;

export const nativeImporter = async (moduleName: string) => {
export const nativeImporter = async (moduleName: string): Promise<unknown | Error> => {
try {
return await import(moduleName);
} catch (error) {
Expand Down
2 changes: 1 addition & 1 deletion src/cli/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ const runCliDependencies: RunCliDependencies = {
logger: processLogger,
};

export const main = async (argv: string[]) => {
export const main = async (argv: string[]): Promise<void> => {
try {
const resultStatus = await runCli(runCliDependencies, argv);
processLogger.info.close();
Expand Down
4 changes: 4 additions & 0 deletions src/cli/runCli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,5 +88,9 @@ const logErrorResult = (result: ResultWithStatus, dependencies: RunCliDependenci
dependencies.logger.stderr.write(chalk.gray(` ${error.stack}${EOL}`));
}
break;

case ResultStatus.Succeeded:
// TODO: Display a nice message?
break;
}
};
8 changes: 7 additions & 1 deletion src/creation/eslint/createEnv.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
import { AllOriginalConfigurations } from "../../input/findOriginalConfigurations";

type EnvData = {
browser: boolean;
es6: boolean;
node: boolean;
};

export const createEnv = ({
packages,
typescript,
}: Pick<AllOriginalConfigurations, "packages" | "typescript">) => {
}: Pick<AllOriginalConfigurations, "packages" | "typescript">): {} | Partial<EnvData> => {
const browser =
typescript === undefined ||
typescript.compilerOptions.lib === undefined ||
Expand Down
8 changes: 4 additions & 4 deletions src/creation/formatConvertedRules.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ import { formatMissingRules } from "./formatMissingRules";
export const formatConvertedRules = (
conversionResults: RuleConversionResults,
tslintConfiguration: TSLintConfiguration,
) => {
): { [r: string]: string | any[] } => {
const output: { [i: string]: string | any[] } = {};
const sortedRuleEntries = Array.from(conversionResults.converted).sort(
([ruleNameA], [ruleNameB]) => ruleNameA.localeCompare(ruleNameB),
);
const sortedRuleEntries = Array.from(
conversionResults.converted,
).sort(([ruleNameA], [ruleNameB]) => ruleNameA.localeCompare(ruleNameB));

for (const [ruleName, rule] of sortedRuleEntries) {
output[ruleName] = formatConvertedRule(rule);
Expand Down
1 change: 1 addition & 0 deletions src/creation/formatMissingRules.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { TSLintRuleOptions } from "../rules/types";

// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
export const formatMissingRules = (missing: TSLintRuleOptions[], rulesDirectory: string[] = []) => {
const rules: Record<string, unknown> = {};

Expand Down
3 changes: 2 additions & 1 deletion src/creation/formatting/formatters/formatJsOutput.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { EOL } from "os";

import { withKeysSorted } from "./withKeysSorted";

export const formatJsOutput = (configuration: any) => {
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
export const formatJsOutput = (configuration: any): string => {
return `module.exports = ${JSON.stringify(withKeysSorted(configuration), undefined, 4)};${EOL}`;
};
3 changes: 2 additions & 1 deletion src/creation/formatting/formatters/formatJsonOutput.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { EOL } from "os";

import { withKeysSorted } from "./withKeysSorted";

export const formatJsonOutput = (configuration: any) => {
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
export const formatJsonOutput = (configuration: any): string => {
return `${JSON.stringify(withKeysSorted(configuration), undefined, 4)}${EOL}`;
};
3 changes: 2 additions & 1 deletion src/creation/formatting/formatters/withKeysSorted.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export const withKeysSorted = (input: any) => {
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
export const withKeysSorted = (input: any): Record<string, any> => {
const output: Record<string, any> = {};
const keys = Object.keys(input).sort((a, b) => a.localeCompare(b));

Expand Down
2 changes: 1 addition & 1 deletion src/creation/simplification/collectTSLintRulesets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const nativeExtensions = new Map([

export const collectTSLintRulesets = (
tslint: OriginalConfigurations<Pick<TSLintConfiguration, "extends">>,
) => {
): string[] => {
const allExtensions = uniqueFromSources(tslint.full.extends, tslint.raw.extends);

const extensions = new Set<string>();
Expand Down
2 changes: 1 addition & 1 deletion src/creation/simplification/resolveExtensionNames.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export const resolveExtensionNames = (rawExtensionNames: string | string[]) => {
export const resolveExtensionNames = (rawExtensionNames: string | string[]): string[] => {
if (typeof rawExtensionNames === "string") {
rawExtensionNames = [rawExtensionNames];
}
Expand Down
2 changes: 1 addition & 1 deletion src/creation/writeConversionResults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export const writeConversionResults = async (
outputPath: string,
ruleConversionResults: RuleConversionResults & SimplifiedRuleConversionResults,
originalConfigurations: AllOriginalConfigurations,
) => {
): Promise<undefined | Error> => {
const plugins = ["@typescript-eslint"];
const { eslint, tslint } = originalConfigurations;

Expand Down
8 changes: 6 additions & 2 deletions src/creation/writeEditorConfigConversionResults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export const writeConversionResults = async (
outputPath: string,
conversionResults: EditorSettingConversionResults,
originalConfiguration: DeepPartial<EditorConfiguration>,
) => {
): Promise<undefined | Error> => {
const output = {
...originalConfiguration,
...formatConvertedSettings(conversionResults),
Expand All @@ -22,7 +22,11 @@ export const writeConversionResults = async (
return await dependencies.fileSystem.writeFile(outputPath, formatOutput(outputPath, output));
};

export const formatConvertedSettings = (conversionResults: EditorSettingConversionResults) => {
export const formatConvertedSettings = (
conversionResults: EditorSettingConversionResults,
): {
[i: string]: string | any[];
} => {
const output: { [i: string]: string | any[] } = {};
const sortedEntries = Array.from(conversionResults.converted).sort(([nameA], [nameB]) =>
nameA.localeCompare(nameB),
Expand Down
6 changes: 4 additions & 2 deletions src/editorSettings/convertEditorSetting.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import { ConversionError } from "../errors/conversionError";
import { EditorSettingConverter } from "./converter";
import { EditorSettingConverter, EditorSettingConversionResult } from "./converter";
import { EditorSetting } from "./types";

type ConvertEditorSetting = ConversionError | EditorSettingConversionResult | undefined;

export const convertEditorSetting = (
editorSetting: EditorSetting,
converters: Map<string, EditorSettingConverter>,
) => {
): ConvertEditorSetting => {
const converter = converters.get(editorSetting.editorSettingName);
if (converter === undefined) {
return undefined;
Expand Down
6 changes: 3 additions & 3 deletions src/errors/conversionError.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { ErrorSummary } from "./errorSummary";
export class ConversionError implements ErrorSummary {
private constructor(private readonly summary: string) {}

public static forMerger(eslintRule: string) {
public static forMerger(eslintRule: string): ConversionError {
return new ConversionError(
[
`Error: multiple output ${eslintRule} ESLint rule options were generated, but tslint-to-eslint-config doesn't have "merger" logic to deal with this.`,
Expand All @@ -16,13 +16,13 @@ export class ConversionError implements ErrorSummary {
);
}

public static forRuleError(error: Error, tslintRule: TSLintRuleOptions) {
public static forRuleError(error: Error, tslintRule: TSLintRuleOptions): ConversionError {
return new ConversionError(
`${tslintRule.ruleName} threw an error during conversion: ${error.stack}${EOL}`,
);
}

public static forSettingError(error: Error, editorSetting: EditorSetting) {
public static forSettingError(error: Error, editorSetting: EditorSetting): ConversionError {
return new ConversionError(
`${editorSetting.editorSettingName} threw an error during conversion: ${error.stack}${EOL}`,
);
Expand Down
2 changes: 1 addition & 1 deletion src/input/findEditorConfiguration.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { DEFAULT_VSCODE_SETTINGS_PATH } from "./vsCodeSettings";

const stubConfigPath = "temp/";

export const createStubImporter = (filePath = "") =>
export const createStubImporter = (filePath = ""): jest.Mock =>
jest.fn().mockReturnValue(Promise.resolve(filePath));

const createStubDependencies = (overrides: Partial<FindEditorConfigurationDependencies> = {}) => ({
Expand Down
1 change: 1 addition & 0 deletions src/input/findEditorConfiguration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export type FindEditorConfigurationDependencies = {
importer: SansDependencies<typeof importer>;
};

// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
export const findEditorConfiguration = async (
dependencies: FindEditorConfigurationDependencies,
specifiedConfigPath: string | undefined,
Expand Down
1 change: 1 addition & 0 deletions src/input/findTSLintConfiguration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export type FindTSLintConfigurationDependencies = {
importer: SansDependencies<typeof importer>;
};

// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
export const findTSLintConfiguration = async (
dependencies: FindTSLintConfigurationDependencies,
config: string | undefined,
Expand Down
2 changes: 1 addition & 1 deletion src/reporting/reportConversionResults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import {
export const reportConversionResults = (
dependencies: ReportConversionResultsDependencies,
ruleConversionResults: RuleConversionResults,
) => {
): void => {
if (ruleConversionResults.converted.size !== 0) {
logSuccessfulConversions("rule", ruleConversionResults.converted, dependencies.logger);
logNotices(ruleConversionResults.converted, dependencies.logger);
Expand Down
2 changes: 1 addition & 1 deletion src/reporting/reportEditorSettingConversionResults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
export const reportEditorSettingConversionResults = (
dependencies: ReportConversionResultsDependencies,
editorSettingConversionResults: EditorSettingConversionResults,
) => {
): void => {
if (editorSettingConversionResults.converted.size !== 0) {
logSuccessfulConversions(
"editor setting",
Expand Down
Loading