Skip to content

Commit 8d2a9e3

Browse files
antrossmolantsarvaje
authored andcommitted
Chore: Enable strict type-checking
Fix #576 Close #1382 Co-authored-by: Antón Molleda <amolleda@gmail.com> Co-authored-by: Jesus David García Gomez <jdgarcia@outlook.com>
1 parent 932fa86 commit 8d2a9e3

File tree

163 files changed

+964
-560
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

163 files changed

+964
-560
lines changed

@types/listr-input.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
declare module 'listr-input';

package.json

+6-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
"devDependencies": {
33
"@alrra/travis-scripts": "^3.0.1",
44
"@types/fs-extra": "5.0.4",
5-
"@types/node": "8.0.14",
5+
"@types/listr": "^0.13.0",
6+
"@types/node": "10.9.1",
7+
"@types/shelljs": "^0.8.0",
8+
"@types/yargs": "^12.0.1",
69
"chalk": "^2.4.1",
710
"cpx": "^1.5.0",
811
"eslint": "^5.6.1",
@@ -48,7 +51,7 @@
4851
"build:connector-edge": "node -e \"process.platform !== 'win32' && process.exit(1);\" && (cd packages/connector-edge && yarn build) || echo \"\"",
4952
"build:connector-jsdom": "cd packages/connector-jsdom && yarn build",
5053
"build:connector-local": "cd packages/connector-local && yarn build",
51-
"build:connectors": "yarn build:connector-edge && yarn build:connector-chrome && yarn build:connector-jsdom && yarn build:connector-local",
54+
"build:connectors": "yarn build:connector-chrome && yarn build:connector-jsdom && yarn build:connector-local",
5255
"build:hint": "cd packages/hint && yarn build",
5356
"build:parser:babel": "cd packages/parser-babel-config && yarn build",
5457
"build:parser:html": "cd packages/parser-html && yarn build",
@@ -65,7 +68,7 @@
6568
"build:utils-server": "cd packages/utils-create-server && yarn build",
6669
"build:utils-test": "cd packages/utils-tests-helpers && yarn build",
6770
"clean": "npm-run-all clean:*",
68-
"clean:packages": "rimraf \"packages/!(extension-vscode)/{dist,node_modules,npm-shrinkwrap.json,package-lock.json,yarn.lock}\"",
71+
"clean:packages": "rimraf \"packages/!(connector-edge|extension-vscode)/{dist,node_modules,npm-shrinkwrap.json,package-lock.json,yarn.lock}\"",
6972
"clean:root": "rimraf dist",
7073
"lint": "npm-run-all lint:*",
7174
"lint:md": "markdownlint *.md",

packages/connector-chrome/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"devDependencies": {
1717
"@hint/utils-create-server": "^1.0.3",
1818
"@types/is-ci": "^1.1.0",
19+
"@types/lockfile": "^1.0.0",
1920
"@types/lodash": "^4.14.115",
2021
"ava": "^0.25.0",
2122
"cpx": "^1.5.0",

packages/connector-chrome/src/chrome-launcher.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@ import readFileAsync from 'hint/dist/src/lib/utils/fs/read-file-async';
1717
import writeFileAsync from 'hint/dist/src/lib/utils/fs/write-file-async';
1818

1919
const debug: debug.IDebugger = d(__filename);
20-
const lock = promisify(lockfile.lock);
20+
const lock = promisify(lockfile.lock) as (path: string, options: lockfile.Options) => Promise<void>;
2121
const unlock = promisify(lockfile.unlock);
2222

2323
export class CDPLauncher extends Launcher {
2424
/** Indicates if the default profile should be used by Chrome or not */
2525
private userDataDir: string | boolean;
2626
private chromeFlags: Array<string>;
2727

28-
public constructor(options?: LauncherOptions) {
28+
public constructor(options: LauncherOptions) {
2929
super(options);
3030

3131
this.chromeFlags = options && options.flags || ['--no-default-browser-check'];

packages/connector-chrome/src/connector.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ import { Engine } from 'hint/dist/src/lib/engine';
1818

1919
export default class ChromeConnector extends Connector {
2020
public constructor(server: Engine, config?: object) {
21-
const launcher: ILauncher = new CDPLauncher(config);
21+
const launcher: ILauncher = new CDPLauncher(config || {});
2222

23-
super(server, config, launcher);
23+
super(server, config || {}, launcher);
2424
}
2525
}

packages/connector-chrome/tsconfig.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"compilerOptions": {
3-
"outDir": "dist"
3+
"outDir": "dist",
4+
"strict": true
45
},
56
"exclude": [
67
"dist",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
declare module 'node-windows';

packages/connector-edge/src/connector-edge-launcher.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ export class EdgeLauncher extends Launcher {
104104
private checkIfRunning(procs: Array<string>): Promise<Array<boolean>> {
105105
return new Promise((resolve, reject) => {
106106
const cmd = spawn('cmd');
107-
let out = [];
107+
let out: (string | Buffer)[] = [];
108108

109109
cmd.stdout.on('data', (data) => {
110110
out = out.concat(data);
@@ -133,7 +133,7 @@ export class EdgeLauncher extends Launcher {
133133
});
134134
}
135135

136-
public async launch(url): Promise<BrowserInfo> {
136+
public async launch(url: string): Promise<BrowserInfo> {
137137
const osInfo = this.isWin10();
138138

139139
if (!osInfo.isWin || osInfo.version < 10) {

packages/connector-edge/src/connector-edge.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55

66
import { Connector } from '@hint/utils-debugging-protocol-common/dist/src/debugging-protocol-connector';
7-
import { ILauncher } from 'hint/dist/src/lib/types';
7+
import { ILauncher, LauncherOptions } from 'hint/dist/src/lib/types';
88
import { EdgeLauncher } from './connector-edge-launcher';
99

1010
import { Engine } from 'hint/dist/src/lib/engine';
@@ -15,7 +15,7 @@ export default class EdgeConnector extends Connector {
1515
tabUrl: 'https://empty.webhint.io/',
1616
useTabUrl: true
1717
};
18-
const edgeConfig = Object.assign({}, edgeRequiredConfig, config);
18+
const edgeConfig = Object.assign({}, edgeRequiredConfig, config) as LauncherOptions;
1919
const launcher: ILauncher = new EdgeLauncher(edgeConfig);
2020

2121
super(server, config, launcher);

packages/connector-edge/tsconfig.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"compilerOptions": {
3-
"outDir": "dist"
3+
"outDir": "dist",
4+
"strict": true
45
},
56
"exclude": [
67
"dist",

packages/connector-jsdom/src/@types/jsdom.d.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ declare module 'jsdom' {
1818
/// <reference types="node" />
1919

2020
import { EventEmitter } from 'events';
21-
import { MarkupData } from 'parse5';
2221
import * as tough from 'tough-cookie';
2322
import { Script } from 'vm';
2423

@@ -43,7 +42,7 @@ declare module 'jsdom' {
4342
/**
4443
* The nodeLocation() method will find where a DOM node is within the source document, returning the parse5 location info for the node.
4544
*/
46-
nodeLocation(node: Node): MarkupData.ElementLocation | null;
45+
nodeLocation(node: Node): any | null;
4746

4847
/**
4948
* The built-in vm module of Node.js allows you to create Script instances,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
declare module 'jsdom/lib/jsdom/living/generated/utils';

packages/connector-jsdom/src/before-parse.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ import * as path from 'path';
99
import * as jsdomutils from 'jsdom/lib/jsdom/living/generated/utils';
1010

1111
import readFile from 'hint/dist/src/lib/utils/fs/read-file';
12+
import { DOMWindow } from 'jsdom';
1213

13-
export const beforeParse = (finalHref) => {
14-
return (window) => {
14+
export const beforeParse = (finalHref: string) => {
15+
return (window: DOMWindow) => {
1516
const mutationObserverPolyfill = readFile(require.resolve('mutationobserver-shim'));
1617
const customElementsPolyfill = readFile(path.join(__dirname, 'polyfills', 'custom-elements.min.js'));
1718

@@ -25,7 +26,7 @@ export const beforeParse = (finalHref) => {
2526

2627
/* istanbul ignore next */
2728
window.matchMedia = () => {
28-
return { addListener() { } };
29+
return { addListener() { } } as any;
2930
};
3031

3132
Object.defineProperty(window.HTMLHtmlElement.prototype, 'clientWidth', { value: 1024 });

packages/connector-jsdom/src/connector.ts

+15-17
Original file line numberDiff line numberDiff line change
@@ -58,23 +58,21 @@ const debug: debug.IDebugger = d(__filename);
5858
const defaultOptions = { waitFor: 1000 };
5959

6060
export default class JSDOMConnector implements IConnector {
61-
private _options;
62-
private _headers;
63-
private _href: string;
64-
private _targetNetworkData: NetworkData;
65-
private _window: Window;
66-
private _document: JSDOMAsyncHTMLDocument;
61+
private _options: any;
62+
private _href: string = '';
63+
private _targetNetworkData!: NetworkData;
64+
private _window!: Window;
65+
private _document!: JSDOMAsyncHTMLDocument;
6766
private _timeout: number;
6867
private _resourceLoader: ResourceLoader;
6968

7069
public request: Requester;
7170
public server: Engine;
72-
public finalHref: string;
73-
public fetchedHrefs: Set<string>;
71+
public finalHref!: string;
72+
public fetchedHrefs!: Set<string>;
7473

7574
public constructor(server: Engine, config?: object) {
7675
this._options = Object.assign({}, defaultOptions, config);
77-
this._headers = this._options.headers;
7876
this.request = new Requester(this._options);
7977
this.server = server;
8078
this._timeout = server.timeout;
@@ -156,7 +154,7 @@ export default class JSDOMConnector implements IConnector {
156154
* * uses the `src` attribute of `<link rel="icon">` if present.
157155
* * uses `favicon.ico` and the final url after redirects.
158156
*/
159-
private async getFavicon(element?: HTMLElement) {
157+
private async getFavicon(element?: Element | null) {
160158
const href = (element && element.getAttribute('href')) || '/favicon.ico';
161159

162160
try {
@@ -203,7 +201,7 @@ export default class JSDOMConnector implements IConnector {
203201
} catch (err) {
204202
const hops: Array<string> = this.request.getRedirects(err.uri);
205203
const fetchError: FetchError = {
206-
element: null,
204+
element: null as any,
207205
/* istanbul ignore next */
208206
error: err.error ? err.error : err,
209207
hops,
@@ -234,11 +232,11 @@ export default class JSDOMConnector implements IConnector {
234232

235233
const { charset, mediaType } = getContentTypeData(fetchEnd.element, fetchEnd.resource, fetchEnd.response.headers, fetchEnd.response.body.rawContent);
236234

237-
fetchEnd.response.mediaType = mediaType;
238-
fetchEnd.response.charset = charset;
235+
fetchEnd.response.mediaType = mediaType!;
236+
fetchEnd.response.charset = charset!;
239237

240238
// Event is also emitted when status code in response is not 200.
241-
await this.server.emitAsync(`fetch::end::${getType(mediaType)}`, fetchEnd);
239+
await this.server.emitAsync(`fetch::end::${getType(mediaType!)}`, fetchEnd);
242240

243241
/*
244242
* If the target is not an HTML we don't need to
@@ -255,7 +253,7 @@ export default class JSDOMConnector implements IConnector {
255253

256254
const virtualConsole = new VirtualConsole();
257255

258-
virtualConsole.on('error', (err) => {
256+
virtualConsole.on('error', (err: Error) => {
259257
debug(`Console: ${err}`);
260258
});
261259

@@ -314,7 +312,7 @@ export default class JSDOMConnector implements IConnector {
314312
}, this._options.waitFor);
315313
};
316314

317-
const onError = (error) => {
315+
const onError = (error: ErrorEvent) => {
318316
debug(`onError: ${error}`);
319317
};
320318

@@ -377,7 +375,7 @@ export default class JSDOMConnector implements IConnector {
377375
return new Promise((resolve, reject) => {
378376
/* istanbul ignore next */
379377
const runner: ChildProcess = fork(path.join(__dirname, 'evaluate-runner'), [this.finalHref || this._href, this._options.waitFor], { execArgv: [] });
380-
let timeoutId;
378+
let timeoutId: NodeJS.Timer | null = null;
381379

382380
runner.on('message', (result) => {
383381
/* istanbul ignore if */

packages/connector-jsdom/src/evaluate-runner.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,22 @@ import { beforeParse } from './before-parse';
99

1010
const debug: debug.IDebugger = d(__filename);
1111

12-
const run = async (data) => {
12+
const run = async (data: { source: string }) => {
1313
const { source } = data;
1414
const result = {
15-
error: null,
15+
error: null as ErrorEvent | null,
1616
evaluate: 'result'
1717
};
1818
const url = process.argv[2];
1919
const waitFor = parseInt(process.argv[3], 10);
2020

2121
const virtualConsole = new VirtualConsole();
2222

23-
virtualConsole.on('error', (err) => {
23+
virtualConsole.on('error', (err: Error) => {
2424
debug(err);
2525
});
2626

27-
virtualConsole.on('jsdomError', (err) => {
27+
virtualConsole.on('jsdomError', (err: Error) => {
2828
debug(err);
2929
});
3030

@@ -52,14 +52,14 @@ const run = async (data) => {
5252
result.error = err;
5353
}
5454

55-
process.send(result);
55+
process.send!(result);
5656
}, waitFor);
5757
};
5858

59-
const onError = (error) => {
59+
const onError = (error: ErrorEvent) => {
6060
result.error = error;
6161

62-
process.send(result);
62+
process.send!(result);
6363
};
6464

6565
jsdom.window.addEventListener('load', onLoad, { once: true });

packages/connector-jsdom/src/resource-loader.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ export default class CustomResourceLoader extends ResourceLoader {
1919
this._connector = connector;
2020
}
2121

22-
public fetch(url: string, options: { element: HTMLElement }) {
22+
public async fetch(url: string, options: { element: HTMLElement }): Promise<Buffer | null> {
2323
/* istanbul ignore if */
2424
if (!url) {
2525
const promise = Promise.resolve(null);
2626

2727
(promise as any).abort = () => { };
2828

29-
return promise;
29+
return await promise;
3030
}
3131

3232
const urlAsUrl = new URL(url);
@@ -47,9 +47,9 @@ export default class CustomResourceLoader extends ResourceLoader {
4747

4848
debug(`resource ${resourceUrl} to be fetched`);
4949

50-
let abort;
50+
let abort: Function;
5151

52-
const promise = new Promise(async (resolve, reject) => {
52+
const promise = new Promise<Buffer>(async (resolve, reject) => {
5353
abort = reject;
5454

5555
await this._connector.server.emitAsync('fetch::start', { resource: resourceUrl });
@@ -67,10 +67,10 @@ export default class CustomResourceLoader extends ResourceLoader {
6767
};
6868

6969
const { charset, mediaType } = getContentTypeData(element, fetchEndEvent.resource, fetchEndEvent.response.headers, fetchEndEvent.response.body.rawContent);
70-
const type = getType(mediaType);
70+
const type = mediaType ? getType(mediaType) : /* istanbul ignore next */ 'unknown';
7171

72-
fetchEndEvent.response.mediaType = mediaType;
73-
fetchEndEvent.response.charset = charset;
72+
fetchEndEvent.response.mediaType = mediaType!;
73+
fetchEndEvent.response.charset = charset!;
7474

7575
/*
7676
* TODO: Replace `null` with `resource` once it
@@ -83,7 +83,7 @@ export default class CustomResourceLoader extends ResourceLoader {
8383
} catch (err) {
8484
const hops: Array<string> = this._connector.request.getRedirects(err.uri);
8585
const fetchError: FetchError = {
86-
element,
86+
element: element!,
8787
error: err.error,
8888
hops,
8989
/* istanbul ignore next */

packages/connector-jsdom/tsconfig.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"compilerOptions": {
3-
"outDir": "dist"
3+
"outDir": "dist",
4+
"strict": true
45
},
56
"exclude": [
67
"dist",

packages/create-hint/tests/create-hint.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ const writeFileAsyncModule = { default() { } };
1111
const isOfficialModule = { default() { } };
1212

1313
const fsExtra = { copy() { } };
14-
const mkdirp = (dir, callback) => {
14+
const mkdirp = (dir: string, callback: Function) => {
1515
callback();
1616
};
1717

packages/create-hint/tsconfig-webpack.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
"inlineSourceMap": false,
66
"removeComments": true,
77
"target": "esnext",
8-
"outDir": "dist"
8+
"outDir": "dist",
9+
"strict": true
910
},
1011
"exclude": [
1112
"dist",

packages/create-hint/tsconfig.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"compilerOptions": {
3-
"outDir": "./dist"
3+
"outDir": "./dist",
4+
"strict": true
45
},
56
"exclude": [
67
"dist",

packages/create-hintrc/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
},
1616
"description": "webhint's configuration file initializer package",
1717
"devDependencies": {
18+
"@types/inquirer": "^0.0.43",
1819
"ava": "^0.25.0",
1920
"cpx": "^1.5.0",
2021
"eslint": "^5.6.1",

0 commit comments

Comments
 (0)