Skip to content

Commit f62d1ac

Browse files
committed
style: add more eslint rules
Add more eslint rules
1 parent 55eff6e commit f62d1ac

File tree

8 files changed

+693
-147
lines changed

8 files changed

+693
-147
lines changed

.eslintrc.js

Lines changed: 74 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,76 @@
11
module.exports = {
2-
parser: '@typescript-eslint/parser',
3-
parserOptions: {
4-
project: true,
5-
sourceType: 'module',
6-
},
7-
plugins: ['@typescript-eslint/eslint-plugin'],
8-
extends: [
9-
'plugin:@typescript-eslint/eslint-recommended',
10-
'plugin:@typescript-eslint/recommended',
11-
'prettier',
2+
parser: '@typescript-eslint/parser',
3+
parserOptions: {
4+
project: true,
5+
tsconfigRootDir: __dirname,
6+
sourceType: 'module',
7+
},
8+
plugins: [
9+
'@typescript-eslint/eslint-plugin',
10+
'simple-import-sort',
11+
'no-type-assertion',
12+
'import',
13+
],
14+
extends: [
15+
'eslint:recommended',
16+
'plugin:@typescript-eslint/strict-type-checked',
17+
'plugin:@typescript-eslint/eslint-recommended',
18+
'plugin:@typescript-eslint/stylistic-type-checked',
19+
'plugin:@typescript-eslint/strict',
20+
'plugin:prettier/recommended',
21+
'plugin:import/recommended',
22+
'plugin:import/typescript',
23+
],
24+
root: true,
25+
env: {
26+
node: true,
27+
jest: true,
28+
},
29+
rules: {
30+
'simple-import-sort/imports': 'error',
31+
'simple-import-sort/exports': 'error',
32+
eqeqeq: 'error',
33+
'no-lonely-if': 'error',
34+
'no-multi-assign': 'error',
35+
'@typescript-eslint/no-shadow': 'error',
36+
'no-useless-return': 'error',
37+
'no-useless-rename': 'error',
38+
'one-var-declaration-per-line': 'error',
39+
'prefer-object-spread': 'error',
40+
'no-unreachable-loop': 'error',
41+
'no-template-curly-in-string': 'error',
42+
'default-case-last': 'error',
43+
'no-array-constructor': 'error',
44+
'no-else-return': 'error',
45+
'no-negated-condition': 'error',
46+
'array-callback-return': 'error',
47+
'@typescript-eslint/consistent-type-definitions': 'error',
48+
'no-type-assertion/no-type-assertion': 'error',
49+
'@typescript-eslint/ban-ts-comment': 'error',
50+
'@typescript-eslint/no-unnecessary-condition': 'error',
51+
'@typescript-eslint/no-extraneous-class': 'off',
52+
'@typescript-eslint/prefer-nullish-coalescing': 'error',
53+
'@typescript-eslint/no-import-type-side-effects': 'error',
54+
'@typescript-eslint/consistent-type-imports': 'error',
55+
'@typescript-eslint/consistent-type-exports': 'error',
56+
'import/consistent-type-specifier-style': 'error',
57+
'import/no-duplicates': 'error',
58+
'import/no-unresolved': 'error',
59+
curly: 'error',
60+
'no-console': [
61+
'warn',
62+
{
63+
allow: ['warn', 'error'],
64+
},
1265
],
13-
root: true,
14-
env: {
15-
node: true,
16-
jest: true,
17-
},
18-
rules: {
19-
'@typescript-eslint/interface-name-prefix': 'off',
20-
'@typescript-eslint/explicit-function-return-type': 'off',
21-
'@typescript-eslint/no-explicit-any': 'off',
22-
'@typescript-eslint/no-use-before-define': 'off',
23-
'@typescript-eslint/no-non-null-assertion': 'off',
24-
25-
'@typescript-eslint/no-import-type-side-effects': 'error',
26-
'@typescript-eslint/consistent-type-imports': 'error',
27-
'@typescript-eslint/consistent-type-exports': 'error',
28-
},
29-
};
66+
quotes: [
67+
'error',
68+
'single',
69+
{
70+
avoidEscape: true,
71+
},
72+
],
73+
'prefer-template': 'error',
74+
'@typescript-eslint/return-await': ['error', 'always'],
75+
},
76+
};

lib/http.module.ts

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
import type { DynamicModule, Provider } from '@nestjs/common';
22
import { Module } from '@nestjs/common';
33
import { randomStringGenerator } from '@nestjs/common/utils/random-string-generator.util';
4-
import Axios from 'axios';
4+
import axios from 'axios';
5+
import axiosRetry from 'axios-retry';
6+
57
import { AXIOS_INSTANCE_TOKEN, HTTP_MODULE_ID, HTTP_MODULE_OPTIONS } from './http.constants';
68
import { HttpService } from './http.service';
7-
import type { HttpModuleAsyncOptions, HttpModuleOptions, HttpModuleOptionsFactory } from './interfaces';
8-
import axiosRetry from 'axios-retry';
9+
import type {
10+
HttpModuleAsyncOptions,
11+
HttpModuleOptions,
12+
HttpModuleOptionsFactory,
13+
} from './interfaces';
914

1015
const createAxiosInstance = (config?: HttpModuleOptions) => {
11-
const axiosInstance = Axios.create(config);
16+
const axiosInstance = axios.create(config);
1217
axiosRetry(axiosInstance, config);
1318
return axiosInstance;
1419
};
@@ -55,23 +60,24 @@ export class HttpModule {
5560
provide: HTTP_MODULE_ID,
5661
useValue: randomStringGenerator(),
5762
},
58-
...(options.extraProviders || []),
63+
...(options.extraProviders ?? []),
5964
],
6065
};
6166
}
6267

6368
private static createAsyncProviders(options: HttpModuleAsyncOptions): Provider[] {
64-
if (options.useExisting || options.useFactory) {
69+
if (!!options.useExisting || !!options.useFactory) {
6570
return [this.createAsyncOptionsProvider(options)];
6671
}
6772

6873
const providers = [this.createAsyncOptionsProvider(options)];
6974

70-
if (options.useClass)
75+
if (options.useClass) {
7176
providers.push({
7277
provide: options.useClass,
7378
useClass: options.useClass,
7479
});
80+
}
7581

7682
return providers;
7783
}
@@ -81,18 +87,21 @@ export class HttpModule {
8187
return {
8288
provide: HTTP_MODULE_OPTIONS,
8389
useFactory: options.useFactory,
84-
inject: options.inject || [],
90+
inject: options.inject ?? [],
8591
};
8692
}
8793

8894
let inject;
89-
if (options.useExisting) inject = [options.useExisting];
90-
else if (options.useClass) inject = [options.useClass];
95+
if (options.useExisting) {
96+
inject = [options.useExisting];
97+
} else if (options.useClass) {
98+
inject = [options.useClass];
99+
}
91100

92101
return {
93102
provide: HTTP_MODULE_OPTIONS,
94103
useFactory: async (optionsFactory: HttpModuleOptionsFactory) =>
95-
optionsFactory.createHttpOptions(),
104+
await optionsFactory.createHttpOptions(),
96105
...(inject && { inject }),
97106
};
98107
}

lib/http.service.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,28 @@
1-
import { Injectable } from '@nestjs/common';
2-
import { Inject } from '@nestjs/common';
3-
import Axios, { AxiosInstance } from 'axios';
1+
/* eslint-disable @typescript-eslint/unbound-method */
2+
3+
import { Inject, Injectable } from '@nestjs/common';
4+
import axios, { AxiosInstance } from 'axios';
5+
46
import { AXIOS_INSTANCE_TOKEN } from './http.constants';
57

68
@Injectable()
79
export class HttpService {
8-
public readonly put: typeof Axios.put;
9-
public readonly post: typeof Axios.post;
10-
public readonly patch: typeof Axios.patch;
11-
public readonly head: typeof Axios.patch;
12-
public readonly delete: typeof Axios.delete;
13-
public readonly get: typeof Axios.get;
14-
public readonly request: typeof Axios.request;
10+
public readonly put: typeof axios.put;
11+
public readonly post: typeof axios.post;
12+
public readonly patch: typeof axios.patch;
13+
public readonly head: typeof axios.patch;
14+
public readonly delete: typeof axios.delete;
15+
public readonly get: typeof axios.get;
16+
public readonly request: typeof axios.request;
1517

1618
constructor(
1719
@Inject(AXIOS_INSTANCE_TOKEN)
18-
private readonly instance: AxiosInstance = Axios,
20+
private readonly instance: AxiosInstance = axios,
1921
) {
2022
this.put = this.instance.put;
2123
this.post = this.instance.post;
2224
this.patch = this.instance.patch;
23-
this.head = this.instance.head as typeof Axios.patch;
25+
this.head = this.instance.head as typeof axios.patch;
2426
this.delete = this.instance.delete;
2527
this.get = this.instance.get;
2628
this.request = this.instance.request;

lib/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
export { HttpService } from './http.service';
21
export { HttpModule } from './http.module';
2+
export { HttpService } from './http.service';
33
export * from './interfaces';

lib/interfaces/http-module.interface.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@ import type { ModuleMetadata, Provider, Type } from '@nestjs/common';
22
import type { AxiosRequestConfig } from 'axios';
33
import type IAxiosRetry from 'axios-retry';
44

5-
65
export type HttpModuleOptions = AxiosRequestConfig &
7-
IAxiosRetry.IAxiosRetryConfig & { isBetterStackTraceEnabled?: boolean };
6+
IAxiosRetry.IAxiosRetryConfig & { isBetterStackTraceEnabled?: boolean };
87

98
export interface HttpModuleOptionsFactory {
109
createHttpOptions(): Promise<HttpModuleOptions> | HttpModuleOptions;
@@ -13,7 +12,9 @@ export interface HttpModuleOptionsFactory {
1312
export interface HttpModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
1413
useExisting?: Type<HttpModuleOptionsFactory>;
1514
useClass?: Type<HttpModuleOptionsFactory>;
15+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1616
useFactory?: (...args: any[]) => Promise<HttpModuleOptions> | HttpModuleOptions;
17+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1718
inject?: any[];
1819
extraProviders?: Provider[];
1920
}

0 commit comments

Comments
 (0)