116: Add few tsconfig rules r=D4nte a=D4nte



Co-authored-by: Franck Royer <franck@status.im>
This commit is contained in:
bors[bot] 2021-05-04 05:14:40 +00:00 committed by GitHub
commit abbbd50512
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 75 additions and 66 deletions

View File

@ -15,6 +15,7 @@
],
"globals": { "BigInt": true, "console": true, "WebAssembly": true },
"rules": {
"@typescript-eslint/explicit-function-return-type": ["error"],
"@typescript-eslint/explicit-module-boundary-types": "off",
"eslint-comments/disable-enable-pair": [
"error",
@ -30,5 +31,13 @@
"error",
{ "ignoreDeclarationSort": true, "ignoreCase": true }
]
}
},
"overrides": [
{
"files": ["*.spec.ts", "**/test_utils/*.ts"],
"rules": {
"@typescript-eslint/no-non-null-assertion": "off"
}
}
]
}

View File

@ -3,6 +3,6 @@
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"eamodio.gitlens",
"streetsidesoftware.code-spell-checker",
"streetsidesoftware.code-spell-checker"
]
}

3
.vscode/launch.json vendored
View File

@ -25,5 +25,6 @@
"outputCapture": "std",
"skipFiles": ["<node_internals>/**/*.js"]
// "smartStep": true
}]
}
]
}

View File

@ -13,7 +13,7 @@
"build:main": "tsc -p tsconfig.json",
"build:module": "tsc -p tsconfig.module.json",
"fix": "run-s fix:*",
"fix:prettier": "prettier \"src/**/*.ts\" --write",
"fix:prettier": "prettier \"src/**/*.ts\" \"./*.json\" --write",
"fix:lint": "eslint src --ext .ts --fix",
"pretest": "run-s pretest:*",
"pretest:1-init-git-submodules": "[ -f './nim-waku/build/wakunode2' ] || git submodule update --init --recursive",
@ -22,7 +22,7 @@
"chat": "ts-node src/chat/index.ts",
"test": "run-s build test:*",
"test:lint": "eslint src --ext .ts",
"test:prettier": "prettier \"src/**/*.ts\" --list-different",
"test:prettier": "prettier \"src/**/*.ts\" \"./*.json\" --list-different",
"test:spelling": "cspell \"{README.md,.github/*.md,src/**/*.ts}\"",
"test:unit": "nyc --silent mocha --exit # TODO: Remove `--exit` and fix hanging processes",
"proto": "run-s proto:*",

View File

@ -13,7 +13,7 @@ import { ChatMessage } from './chat_message';
const ChatContentTopic = 'dingpu';
(async function () {
(async function (): Promise<void> {
const opts = processArguments();
const waku = await Waku.create({
@ -124,7 +124,7 @@ function processArguments(): Options {
return opts;
}
function printMessage(chatMsg: ChatMessage) {
function printMessage(chatMsg: ChatMessage): void {
const timestamp = chatMsg.timestamp.toLocaleString([], {
month: 'short',
day: 'numeric',

View File

@ -1,3 +1,3 @@
export function delay(ms: number) {
export function delay(ms: number): Promise<void> {
return new Promise((resolve) => setTimeout(resolve, ms));
}

View File

@ -98,16 +98,21 @@ export default class Waku {
* Dials to the provided peer.
* @param peer The peer to dial
*/
async dial(peer: PeerId | Multiaddr | string) {
await this.libp2p.dialProtocol(peer, [RelayCodec, StoreCodec]);
async dial(
peer: PeerId | Multiaddr | string
): Promise<{
stream: import('libp2p-interfaces/src/stream-muxer/types').MuxedStream;
protocol: string;
}> {
return this.libp2p.dialProtocol(peer, [RelayCodec, StoreCodec]);
}
addPeerToAddressBook(peerId: PeerId, multiaddr: Multiaddr[]) {
addPeerToAddressBook(peerId: PeerId, multiaddr: Multiaddr[]): void {
this.libp2p.peerStore.addressBook.set(peerId, multiaddr);
}
async stop() {
await this.libp2p.stop();
async stop(): Promise<void> {
return this.libp2p.stop();
}
/**

View File

@ -18,7 +18,7 @@ export function getRelayPeers(
router: Gossipsub,
topic: string,
count: number,
filter: (id: string) => boolean = () => true
filter: (id: string) => boolean = (): boolean => true
): Set<string> {
const peersInTopic = router.topics.get(topic);
if (!peersInTopic) {

View File

@ -32,10 +32,7 @@ describe('Waku Relay', () => {
}),
]);
await waku1.addPeerToAddressBook(
waku2.libp2p.peerId,
waku2.libp2p.multiaddrs
);
waku1.addPeerToAddressBook(waku2.libp2p.peerId, waku2.libp2p.multiaddrs);
await Promise.all([
new Promise((resolve) =>
@ -133,7 +130,7 @@ describe('Waku Relay', () => {
await waku.relay.send(message);
let msgs = [];
let msgs: WakuMessage[] = [];
while (msgs.length === 0) {
await delay(200);
@ -143,7 +140,7 @@ describe('Waku Relay', () => {
expect(msgs[0].contentTopic).to.equal(message.contentTopic);
expect(msgs[0].version).to.equal(message.version);
const payload = Buffer.from(msgs[0].payload);
const payload = Buffer.from(msgs[0].payload!);
expect(Buffer.compare(payload, message.payload!)).to.equal(0);
});
@ -216,7 +213,7 @@ describe('Waku Relay', () => {
await delay(1000);
await waku.relay.send(message);
let msgs = [];
let msgs: WakuMessage[] = [];
while (msgs.length === 0) {
console.log('Waiting for messages');
@ -227,7 +224,7 @@ describe('Waku Relay', () => {
expect(msgs[0].contentTopic).to.equal(message.contentTopic);
expect(msgs[0].version).to.equal(message.version);
const payload = Buffer.from(msgs[0].payload);
const payload = Buffer.from(msgs[0].payload!);
expect(Buffer.compare(payload, message.payload!)).to.equal(0);
});

View File

@ -78,7 +78,7 @@ export class WakuRelay extends Gossipsub {
* @override
* @returns {void}
*/
start() {
start(): void {
super.start();
super.subscribe(constants.RelayDefaultTopic);
}
@ -89,7 +89,7 @@ export class WakuRelay extends Gossipsub {
* @param {WakuMessage} message
* @returns {Promise<void>}
*/
async send(message: WakuMessage) {
async send(message: WakuMessage): Promise<void> {
const msg = message.encode();
await super.publish(constants.RelayDefaultTopic, Buffer.from(msg));
}

View File

@ -31,10 +31,10 @@ export class RelayHeartbeat extends Heartbeat {
this._heartbeatTimer = {
_intervalId: undefined,
runPeriodically: (fn, period) => {
runPeriodically: (fn, period): void => {
this._heartbeatTimer!._intervalId = setInterval(fn, period);
},
cancel: () => {
cancel: (): void => {
clearTimeout(timeout);
clearInterval(this._heartbeatTimer?._intervalId as NodeJS.Timeout);
},

View File

@ -2,14 +2,14 @@ import fs, { promises as asyncFs } from 'fs';
import { promisify } from 'util';
import { delay } from '../lib/delay';
export const existsAsync = (filepath: string) =>
export const existsAsync = (filepath: string): Promise<void> =>
asyncFs.access(filepath, fs.constants.F_OK);
export const openAsync = promisify(fs.open);
export const mkdirAsync = asyncFs.mkdir;
export async function waitForFile(path: string) {
export async function waitForFile(path: string): Promise<void> {
let found = false;
do {
try {

View File

@ -4,7 +4,10 @@ import { Tail } from 'tail';
import { waitForFile } from './async_fs';
export default async function waitForLine(filepath: string, logLine: string) {
export default async function waitForLine(
filepath: string,
logLine: string
): Promise<void> {
await pTimeout(waitForFile(filepath), 2000);
const options = {
@ -22,7 +25,7 @@ export default async function waitForLine(filepath: string, logLine: string) {
tail.unwatch();
}
async function find(tail: Tail, line: string) {
async function find(tail: Tail, line: string): Promise<string> {
return new Promise((resolve, reject) => {
tail.on('line', (data: string) => {
if (data.includes(line)) {

View File

@ -58,7 +58,7 @@ export class NimWaku {
this.logPath = `${LOG_DIR}/nim-waku_${logName}.log`;
}
async start(args?: Args) {
async start(args?: Args): Promise<void> {
try {
await existsAsync(LOG_DIR);
} catch (e) {
@ -116,7 +116,7 @@ export class NimWaku {
await this.waitForLog('RPC Server started');
}
public stop() {
public stop(): void {
dbg(
`nim-waku ${
this.process ? this.process.pid : this.pid
@ -126,7 +126,7 @@ export class NimWaku {
this.process = undefined;
}
async waitForLog(msg: string) {
async waitForLog(msg: string): Promise<void> {
return waitForLine(this.logPath, msg);
}
@ -134,23 +134,19 @@ export class NimWaku {
* for known peers
* @throws if nim-waku2 isn't started.
*/
async peers() {
async peers(): Promise<string[]> {
this.checkProcess();
const res = await this.rpcCall('get_waku_v2_admin_v1_peers', []);
return res.result;
return this.rpcCall<string[]>('get_waku_v2_admin_v1_peers', []);
}
async info(): Promise<RpcInfoResponse> {
this.checkProcess();
const res = await this.rpcCall('get_waku_v2_debug_v1_info', []);
return res.result;
return this.rpcCall<RpcInfoResponse>('get_waku_v2_debug_v1_info', []);
}
async sendMessage(message: WakuMessage) {
async sendMessage(message: WakuMessage): Promise<boolean> {
this.checkProcess();
if (!message.payload) {
@ -162,22 +158,18 @@ export class NimWaku {
contentTopic: message.contentTopic,
};
const res = await this.rpcCall('post_waku_v2_relay_v1_message', [
return this.rpcCall<boolean>('post_waku_v2_relay_v1_message', [
RelayDefaultTopic,
rpcMessage,
]);
return res.result;
}
async messages() {
async messages(): Promise<WakuMessage[]> {
this.checkProcess();
const res = await this.rpcCall('get_waku_v2_relay_v1_messages', [
return this.rpcCall<WakuMessage[]>('get_waku_v2_relay_v1_messages', [
RelayDefaultTopic,
]);
return res.result;
}
async getPeerId(): Promise<PeerId> {
@ -213,10 +205,10 @@ export class NimWaku {
return `http://localhost:${port}/`;
}
private async rpcCall(
private async rpcCall<T>(
method: string,
params: Array<string | number | unknown>
) {
): Promise<T> {
const res = await axios.post(
this.rpcUrl,
{
@ -230,10 +222,10 @@ export class NimWaku {
}
);
return res.data;
return res.data.result;
}
private checkProcess() {
private checkProcess(): void {
if (!this.process) {
throw "Nim Waku isn't started";
}
@ -282,7 +274,7 @@ export function strToHex(str: string): string {
return hex;
}
export function bufToHex(buffer: Uint8Array) {
export function bufToHex(buffer: Uint8Array): string {
return Array.prototype.map
.call(buffer, (x) => ('00' + x.toString(16)).slice(-2))
.join('');

View File

@ -14,18 +14,19 @@
"strict": true /* Enable all strict type-checking options. */,
/* Strict Type-Checking Options */
// "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */,
// "strictNullChecks": true /* Enable strict null checks. */,
// "strictFunctionTypes": true /* Enable strict checking of function types. */,
// "strictPropertyInitialization": true /* Enable strict checking of property initialization in classes. */,
// "noImplicitThis": true /* Raise error on 'this' expressions with an implied 'any' type. */,
// "alwaysStrict": true /* Parse in strict mode and emit "use strict" for each source file. */,
"noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */,
"strictNullChecks": true /* Enable strict null checks. */,
"strictFunctionTypes": true /* Enable strict checking of function types. */,
"strictPropertyInitialization": true /* Enable strict checking of property initialization in classes. */,
"noImplicitThis": true /* Raise error on 'this' expressions with an implied 'any' type. */,
"alwaysStrict": true /* Parse in strict mode and emit "use strict" for each source file. */,
/* Additional Checks */
"noUnusedLocals": true /* Report errors on unused locals. */,
"noUnusedParameters": true /* Report errors on unused parameters. */,
"noImplicitReturns": true /* Report error when not all code paths in function return a value. */,
"noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */,
"forceConsistentCasingInFileNames": true,
/* Debugging Options */
"traceResolution": false /* Report module resolution log messages. */,

View File

@ -5,7 +5,5 @@
"outDir": "build/module",
"module": "esnext"
},
"exclude": [
"node_modules/**"
]
"exclude": ["node_modules/**"]
}

View File

@ -35,9 +35,9 @@
"fix": "run-s fix:*",
"test": "run-s build test:*",
"test:lint": "eslint src --ext .ts --ext .tsx",
"test:prettier": "prettier \"src/**/*.{ts,tsx}\" --list-different",
"test:prettier": "prettier \"src/**/*.{ts,tsx}\" \"./*.json\" --list-different",
"test:spelling": "cspell \"{README.md,.github/*.md,src/**/*.{ts,tsx},public/**/*.html}\"",
"fix:prettier": "prettier \"src/**/*.{ts,tsx}\" --write",
"fix:prettier": "prettier \"src/**/*.{ts,tsx}\" \"./*.json\" --write",
"fix:lint": "eslint src --ext .ts --ext .tsx --fix",
"js-waku:build": "cd ../; npm run build",
"predeploy": "run-s js-waku:build build",

View File

@ -1,6 +1,6 @@
import { multiaddr } from 'multiaddr';
import PeerId from 'peer-id';
import React, { useEffect, useState } from 'react';
import { useEffect, useState } from 'react';
import './App.css';
import { ChatMessage } from 'waku-chat/chat_message';
import { WakuMessage } from 'waku/waku_message';

View File

@ -1,6 +1,7 @@
{
"compilerOptions": {
"target": "es5",
"incremental": true,
"target": "es2017",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
@ -8,6 +9,8 @@
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",