Skip to content

Commit 6634d96

Browse files
feat: support typescript (#8)
* feat: support typescript * feat: add types * test: set testTimeout * chore: move types to dependencies * chore: move @types/webpack to devDependencies
1 parent db526be commit 6634d96

23 files changed

+733
-184
lines changed

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,19 @@ Specify directories, files, or globs. Must be relative to `options.context`.
8585
Directories are traveresed recursively looking for files matching `options.extensions`.
8686
File and glob patterns ignore `options.extensions`.
8787

88+
### `extensions`
89+
90+
- Type: `String|Array[String]`
91+
- Default: `'js'`
92+
93+
Specify extensions that should be checked.
94+
8895
### `fix`
8996

9097
- Type: `Boolean`
9198
- Default: `false`
9299

93-
Will enable [ESLint autofix feature](http://eslint.org/docs/user-guide/command-line-interface#fix).
100+
Will enable [ESLint autofix feature](https://eslint.org/docs/developer-guide/nodejs-api#%E2%97%86-eslint-outputfixes-results).
94101

95102
**Be careful: this option will change source files.**
96103

declarations/DirtyFileWatcher.d.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
export default class DirtyFileWatcher {
2+
/**
3+
* @param {string|string[]=} files
4+
* @param {string|string[]=} extensions
5+
*/
6+
constructor(
7+
files?: (string | string[]) | undefined,
8+
extensions?: (string | string[]) | undefined
9+
);
10+
startTime: number;
11+
prevTimestamps: Map<any, any>;
12+
isFirstRun: boolean;
13+
globs: string[];
14+
/**
15+
* @param {Map<string,number>=} fileTimestamps
16+
* @returns {string[]}
17+
*/
18+
getDirtyFiles(fileTimestamps?: Map<string, number> | undefined): string[];
19+
/**
20+
* @param {Map<string,number>} fileTimestamps
21+
* @param {string|string[]} globs
22+
* @returns {string[]}
23+
*/
24+
filterChangedFiles(
25+
fileTimestamps: Map<string, number>,
26+
globs: string | string[]
27+
): string[];
28+
}

declarations/ESLintError.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export default class ESLintError extends Error {
2+
/**
3+
* @param {string=} messages
4+
*/
5+
constructor(messages?: string | undefined);
6+
}

declarations/cjs.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
declare const _exports: typeof import('.').default;
2+
export = _exports;

declarations/getESLint.d.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/** @typedef {import('eslint').ESLint} ESLint */
2+
/** @typedef {import('./options').Options} Options */
3+
/**
4+
* @param {Options} options
5+
* @returns {{ESLint: ESLint, eslint: ESLint}}
6+
*/
7+
export default function getESLint(
8+
options: Options
9+
): {
10+
ESLint: import('eslint').ESLint;
11+
eslint: import('eslint').ESLint;
12+
};
13+
export type ESLint = import('eslint').ESLint;
14+
export type Options = {
15+
context?: string | undefined;
16+
emitError?: boolean | undefined;
17+
emitWarning?: boolean | undefined;
18+
eslintPath?: string | undefined;
19+
failOnError?: boolean | undefined;
20+
failOnWarning?: boolean | undefined;
21+
files?: string | string[] | undefined;
22+
extensions?: string | string[] | undefined;
23+
fix?: boolean | undefined;
24+
formatter?: string | import('./options').FormatterFunction | undefined;
25+
lintDirtyModulesOnly?: boolean | undefined;
26+
quiet?: boolean | undefined;
27+
outputReport?: import('./options').OutputReport | undefined;
28+
};

declarations/index.d.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
export default ESLintWebpackPlugin;
2+
export type Compiler = import('webpack').Compiler;
3+
export type Options = {
4+
context?: string | undefined;
5+
emitError?: boolean | undefined;
6+
emitWarning?: boolean | undefined;
7+
eslintPath?: string | undefined;
8+
failOnError?: boolean | undefined;
9+
failOnWarning?: boolean | undefined;
10+
files?: string | string[] | undefined;
11+
extensions?: string | string[] | undefined;
12+
fix?: boolean | undefined;
13+
formatter?: string | import('./options').FormatterFunction | undefined;
14+
lintDirtyModulesOnly?: boolean | undefined;
15+
quiet?: boolean | undefined;
16+
outputReport?: import('./options').OutputReport | undefined;
17+
};
18+
/** @typedef {import('webpack').Compiler} Compiler */
19+
/** @typedef {import('./options').Options} Options */
20+
declare class ESLintWebpackPlugin {
21+
/**
22+
* @param {Options} options
23+
*/
24+
constructor(options?: Options);
25+
options: import('./options').Options;
26+
/**
27+
* @param {Compiler} compiler
28+
* @returns {void}
29+
*/
30+
apply(compiler: Compiler): void;
31+
/**
32+
*
33+
* @param {Compiler} compiler
34+
* @returns {string}
35+
*/
36+
getContext(compiler: Compiler): string;
37+
}

declarations/linter.d.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/** @typedef {import('eslint').ESLint} ESLint */
2+
/** @typedef {import('eslint').ESLint.Formatter} Formatter */
3+
/** @typedef {import('eslint').ESLint.LintResult} LintResult */
4+
/** @typedef {import('webpack').Compiler} Compiler */
5+
/** @typedef {import('./options').Options} Options */
6+
/** @typedef {import('./options').FormatterFunction} FormatterFunction */
7+
/**
8+
* @param {Options} options
9+
* @param {Compiler} compiler
10+
* @returns {Promise<void>}
11+
*/
12+
export default function linter(
13+
options: Options,
14+
compiler: Compiler
15+
): Promise<void>;
16+
export type ESLint = import('eslint').ESLint;
17+
export type Formatter = import('eslint').ESLint.Formatter;
18+
export type LintResult = import('eslint').ESLint.LintResult;
19+
export type Compiler = import('webpack').Compiler;
20+
export type Options = {
21+
context?: string | undefined;
22+
emitError?: boolean | undefined;
23+
emitWarning?: boolean | undefined;
24+
eslintPath?: string | undefined;
25+
failOnError?: boolean | undefined;
26+
failOnWarning?: boolean | undefined;
27+
files?: string | string[] | undefined;
28+
extensions?: string | string[] | undefined;
29+
fix?: boolean | undefined;
30+
formatter?: string | import('./options').FormatterFunction | undefined;
31+
lintDirtyModulesOnly?: boolean | undefined;
32+
quiet?: boolean | undefined;
33+
outputReport?: import('./options').OutputReport | undefined;
34+
};
35+
export type FormatterFunction = (
36+
results: import('eslint').ESLint.LintResult[],
37+
data?: import('eslint').ESLint.LintResultData | undefined
38+
) => string;

declarations/options.d.ts

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/** @typedef {import("eslint").ESLint.Options} ESLintOptions */
2+
/** @typedef {import('eslint').ESLint.LintResult} LintResult */
3+
/** @typedef {import('eslint').ESLint.LintResultData} LintResultData */
4+
/**
5+
* @callback FormatterFunction
6+
* @param {LintResult[]} results
7+
* @param {LintResultData=} data
8+
* @returns {string}
9+
*/
10+
/**
11+
* @typedef {Object} OutputReport
12+
* @property {string=} filePath
13+
* @property {string|FormatterFunction=} formatter
14+
*/
15+
/**
16+
* @typedef {Object} Options
17+
* @property {string=} context
18+
* @property {boolean=} emitError
19+
* @property {boolean=} emitWarning
20+
* @property {string=} eslintPath
21+
* @property {boolean=} failOnError
22+
* @property {boolean=} failOnWarning
23+
* @property {string|string[]=} files
24+
* @property {string|string[]=} extensions
25+
* @property {boolean=} fix
26+
* @property {string|FormatterFunction=} formatter
27+
* @property {boolean=} lintDirtyModulesOnly
28+
* @property {boolean=} quiet
29+
* @property {OutputReport=} outputReport
30+
*/
31+
/**
32+
* @param {Options} pluginOptions
33+
* @returns {Options}
34+
*/
35+
export function getOptions(pluginOptions: Options): Options;
36+
/**
37+
* @param {Options} loaderOptions
38+
* @returns {ESLintOptions}
39+
*/
40+
export function getESLintOptions(loaderOptions: Options): ESLintOptions;
41+
export type ESLintOptions = import('eslint').ESLint.Options;
42+
export type LintResult = import('eslint').ESLint.LintResult;
43+
export type LintResultData = import('eslint').ESLint.LintResultData;
44+
export type FormatterFunction = (
45+
results: LintResult[],
46+
data?: LintResultData | undefined
47+
) => string;
48+
export type OutputReport = {
49+
filePath?: string | undefined;
50+
formatter?: (string | FormatterFunction) | undefined;
51+
};
52+
export type Options = {
53+
context?: string | undefined;
54+
emitError?: boolean | undefined;
55+
emitWarning?: boolean | undefined;
56+
eslintPath?: string | undefined;
57+
failOnError?: boolean | undefined;
58+
failOnWarning?: boolean | undefined;
59+
files?: (string | string[]) | undefined;
60+
extensions?: (string | string[]) | undefined;
61+
fix?: boolean | undefined;
62+
formatter?: (string | FormatterFunction) | undefined;
63+
lintDirtyModulesOnly?: boolean | undefined;
64+
quiet?: boolean | undefined;
65+
outputReport?: OutputReport | undefined;
66+
};

declarations/utils.d.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* @param {string|string[]} files
3+
* @param {string} context
4+
* @returns {string[]}
5+
*/
6+
export function parseFiles(files: string | string[], context: string): string[];
7+
/**
8+
* @param {string} str
9+
* @returns {string}
10+
*/
11+
export function replaceBackslashes(str: string): string;
12+
/**
13+
* @param {string|string[]} patterns
14+
* @param {string|string[]} extensions
15+
* @returns {string[]}
16+
*/
17+
export function parseFoldersToGlobs(
18+
patterns: string | string[],
19+
extensions: string | string[]
20+
): string[];

lint-staged.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
module.exports = {
22
'*.js': ['prettier --write', 'eslint --fix', 'git add'],
3-
'*.{json,md,yml,css}': ['prettier --write', 'git add'],
3+
'*.{json,md,yml,css,ts}': ['prettier --write', 'git add'],
44
};

0 commit comments

Comments
 (0)