From 236b633a7688e36af75adb13a2a6823d73e6d228 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 26 Nov 2024 09:39:20 +0100 Subject: [PATCH] style: address integration tests lint errors --- .eslintignore | 3 - .eslintrc.js | 47 - eslint.config.mjs | 51 + .../auto-mock/test/bar.service.spec.ts | 1 + integration/auto-mock/tsconfig.json | 3 +- integration/graphql-code-first/src/main.ts | 2 +- .../src/recipes/recipes.resolver.ts | 2 +- .../e2e/graphql-request-scoped.spec.ts | 2 +- .../src/cats/cats.resolvers.ts | 4 +- integration/graphql-schema-first/src/main.ts | 2 +- .../hello-world/e2e/interceptors.spec.ts | 2 +- .../src/host-array/host-array.controller.ts | 2 +- .../hello-world/src/host/host.controller.ts | 2 +- .../hooks/src/enable-shutdown-hooks-main.ts | 2 +- .../e2e/lazy-import-global-modules.spec.ts | 4 +- integration/lazy-modules/src/main.ts | 2 +- integration/lazy-modules/tsconfig.json | 40 + .../microservices/e2e/math-grpc.spec.ts | 2 +- .../microservices/e2e/sum-kafka.spec.ts | 2 +- .../microservices/e2e/sum-mqtt.spec.ts | 10 +- .../microservices/e2e/sum-nats.spec.ts | 2 +- .../microservices/e2e/sum-redis.spec.ts | 2 +- integration/microservices/e2e/sum-rmq.spec.ts | 2 +- .../microservices/e2e/sum-rpc-tls.spec.ts | 6 +- integration/microservices/e2e/sum-rpc.spec.ts | 2 +- .../microservices/src/grpc/grpc.controller.ts | 8 +- integration/microservices/src/main.ts | 2 +- integration/module-utils/tsconfig.json | 3 +- integration/mongoose/src/main.ts | 2 +- .../nest-application/app-locals/tsconfig.json | 4 +- .../nest-application/get-url/tsconfig.json | 4 +- .../global-prefix/tsconfig.json | 4 +- .../listen/e2e/express.spec.ts | 4 +- .../listen/e2e/fastify.spec.ts | 2 +- .../nest-application/listen/tsconfig.json | 40 + .../nest-application/raw-body/tsconfig.json | 4 +- .../sse/src/app.controller.ts | 2 +- .../nest-application/sse/tsconfig.json | 4 +- integration/repl/e2e/repl.spec.ts | 28 +- .../scopes/e2e/circular-request-scope.spec.ts | 8 +- .../e2e/circular-transient-scope.spec.ts | 2 +- .../scopes/e2e/msvc-request-scope.spec.ts | 16 +- .../scopes/e2e/request-modules-scope.spec.ts | 10 +- integration/scopes/e2e/request-scope.spec.ts | 20 +- .../scopes/e2e/transient-scope.spec.ts | 20 +- integration/scopes/src/main.ts | 2 +- .../src/transient/users/user-by-id.pipe.ts | 9 +- integration/send-files/e2e/utils.ts | 6 +- .../{e2e => }/circular-dependency/a.module.ts | 2 +- .../{e2e => }/circular-dependency/b.module.ts | 2 +- .../e2e/modules-override.spec.ts | 5 +- .../testing-module-override/tsconfig.json | 22 +- integration/typeorm/src/main.ts | 2 +- .../versioning/e2e/default-versioning.spec.ts | 2 +- integration/versioning/src/main.ts | 2 +- .../websockets/e2e/error-gateway.spec.ts | 2 +- integration/websockets/e2e/ws-gateway.spec.ts | 25 +- integration/websockets/src/error.gateway.ts | 2 +- package-lock.json | 1237 ++++++++++------- package.json | 10 +- .../core/exception-filters.decorator.ts | 5 +- .../decorators/core/use-guards.decorator.ts | 4 +- .../core/use-interceptors.decorator.ts | 3 +- .../decorators/core/use-pipes.decorator.ts | 3 +- packages/common/exceptions/http.exception.ts | 7 +- packages/common/pipes/parse-array.pipe.ts | 4 +- packages/common/pipes/parse-date.pipe.ts | 4 +- .../common/services/console-logger.service.ts | 6 +- .../test/utils/load-package.util.spec.ts | 1 - packages/common/utils/shared.utils.ts | 1 - packages/core/adapters/http-adapter.ts | 3 +- .../core/hooks/before-app-shutdown.hook.ts | 4 +- packages/core/hooks/on-app-bootstrap.hook.ts | 4 +- packages/core/hooks/on-app-shutdown.hook.ts | 4 +- packages/core/hooks/on-module-destroy.hook.ts | 2 +- packages/core/hooks/on-module-init.hook.ts | 2 +- .../core/injector/helpers/silent-logger.ts | 1 - .../injector/inquirer/inquirer-providers.ts | 1 - packages/core/injector/instance-wrapper.ts | 2 +- .../core/inspector/noop-graph-inspector.ts | 1 - packages/core/middleware/utils.ts | 2 +- .../core/router/request/request-providers.ts | 1 - packages/core/router/router-explorer.ts | 5 +- packages/core/scanner.ts | 12 +- .../helpers/external-context-creator.spec.ts | 10 +- .../helpers/provider-classifier.spec.ts | 2 +- packages/core/test/injector/module.spec.ts | 12 +- .../interceptors-context-creator.spec.ts | 2 +- packages/core/test/middleware/utils.spec.ts | 4 +- .../router/router-execution-context.spec.ts | 10 +- .../decorators/message-pattern.decorator.ts | 2 +- .../exceptions/base-rpc-exception-filter.ts | 1 - .../microservices/server/server-factory.ts | 14 +- packages/microservices/server/server-grpc.ts | 2 +- packages/microservices/server/server-nats.ts | 2 +- .../test/client/client-mqtt.spec.ts | 2 +- .../test/client/client-rmq.spec.ts | 2 +- .../kafka-reply-partition-assigner.spec.ts | 6 +- .../test/listeners-controller.spec.ts | 2 +- .../test/module/clients.module.spec.ts | 4 +- .../utils/get-body-parser-options.util.ts | 2 +- .../test/multer/multer/multer.module.spec.ts | 4 +- .../adapters/fastify-adapter.ts | 2 +- .../platform-socket.io/adapters/io-adapter.ts | 2 +- .../services/testing-logger.service.ts | 2 - packages/websockets/adapters/ws-adapter.ts | 1 - packages/websockets/web-sockets-controller.ts | 2 +- tsconfig.spec.json | 2 +- 108 files changed, 1074 insertions(+), 818 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.js create mode 100644 eslint.config.mjs create mode 100644 integration/lazy-modules/tsconfig.json create mode 100644 integration/nest-application/listen/tsconfig.json rename integration/testing-module-override/{e2e => }/circular-dependency/a.module.ts (82%) rename integration/testing-module-override/{e2e => }/circular-dependency/b.module.ts (82%) diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 07c71c90c..000000000 --- a/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -**/node_modules/** -*.d.ts -*.js \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 37bb3aefb..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,47 +0,0 @@ -module.exports = { - root: true, - env: { - node: true, - }, - plugins: ['@typescript-eslint/eslint-plugin'], - extends: [ - 'plugin:@typescript-eslint/recommended', - 'prettier', - ], - overrides: [ - { - files: ['**/*.ts'], - parser: '@typescript-eslint/parser', - parserOptions: { - project: 'tsconfig.json', - sourceType: 'module', - }, - rules: { - '@typescript-eslint/interface-name-prefix': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/ban-types': 'off', - '@typescript-eslint/no-array-constructor': 'off', - }, - }, - { - files: ['**/*.spec.ts', 'integration/**/*.ts'], - parser: '@typescript-eslint/parser', - parserOptions: { - project: 'tsconfig.spec.json', - sourceType: 'module', - }, - rules: { - '@typescript-eslint/interface-name-prefix': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/ban-types': 'off', - '@typescript-eslint/no-empty-function': 'off', - }, - } - ] -}; diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..9b575c36e --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,51 @@ +// @ts-check +import eslint from '@eslint/js'; +import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; + +export default tseslint.config( + { + ignores: ['node_modules', '**/node_modules/**', '**/*.js', '**/*.d.ts'], + }, + eslint.configs.recommended, + ...tseslint.configs.recommendedTypeChecked, + eslintPluginPrettierRecommended, + { + languageOptions: { + globals: { + ...globals.node, + ...globals.jest, + }, + ecmaVersion: 5, + sourceType: 'module', + parserOptions: { + project: ['tsconfig.json', 'tsconfig.spec.json'], + projectService: true, + tsconfigRootDir: import.meta.dirname, + }, + }, + }, + { + rules: { + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-function-type': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + + '@typescript-eslint/no-unused-expressions': 'off', + '@typescript-eslint/no-require-imports': 'off', + '@typescript-eslint/no-unused-vars': 'off', + "@typescript-eslint/no-misused-promises": [ + "error", + { + "checksVoidReturn": false + } + ], + "@typescript-eslint/require-await": "off" + }, + }, +); \ No newline at end of file diff --git a/integration/auto-mock/test/bar.service.spec.ts b/integration/auto-mock/test/bar.service.spec.ts index 5c8343167..84845a674 100644 --- a/integration/auto-mock/test/bar.service.spec.ts +++ b/integration/auto-mock/test/bar.service.spec.ts @@ -48,6 +48,7 @@ describe('Auto-Mocking with token in factory', () => { expect(fooServ.foo.called); }); it('cannot mock the dependencies', async () => { + /* eslint-disable @typescript-eslint/unbound-method */ const moduleRef = Test.createTestingModule({ providers: [BarService], }).useMocker(token => { diff --git a/integration/auto-mock/tsconfig.json b/integration/auto-mock/tsconfig.json index cef623d14..18d4bbcd6 100644 --- a/integration/auto-mock/tsconfig.json +++ b/integration/auto-mock/tsconfig.json @@ -32,7 +32,8 @@ }, "include": [ "src/**/*", - "e2e/**/*" + "e2e/**/*", + "test/**/*" ], "exclude": [ "node_modules", diff --git a/integration/graphql-code-first/src/main.ts b/integration/graphql-code-first/src/main.ts index 5a5fd57ce..4561536fa 100644 --- a/integration/graphql-code-first/src/main.ts +++ b/integration/graphql-code-first/src/main.ts @@ -7,4 +7,4 @@ async function bootstrap() { app.useGlobalPipes(new ValidationPipe()); await app.listen(3000); } -bootstrap(); +void bootstrap(); diff --git a/integration/graphql-code-first/src/recipes/recipes.resolver.ts b/integration/graphql-code-first/src/recipes/recipes.resolver.ts index 8d77a22c9..068090d50 100644 --- a/integration/graphql-code-first/src/recipes/recipes.resolver.ts +++ b/integration/graphql-code-first/src/recipes/recipes.resolver.ts @@ -35,7 +35,7 @@ export class RecipesResolver { @Args('newRecipeData') newRecipeData: NewRecipeInput, ): Promise { const recipe = await this.recipesService.create(newRecipeData); - pubSub.publish('recipeAdded', { recipeAdded: recipe }); + void pubSub.publish('recipeAdded', { recipeAdded: recipe }); return recipe; } diff --git a/integration/graphql-schema-first/e2e/graphql-request-scoped.spec.ts b/integration/graphql-schema-first/e2e/graphql-request-scoped.spec.ts index 5f2309689..125a55c81 100644 --- a/integration/graphql-schema-first/e2e/graphql-request-scoped.spec.ts +++ b/integration/graphql-schema-first/e2e/graphql-request-scoped.spec.ts @@ -42,7 +42,7 @@ describe('GraphQL request scoped', () => { ], }, }) - .end((err, res) => { + .end(err => { if (err) return end(err); end(); }); diff --git a/integration/graphql-schema-first/src/cats/cats.resolvers.ts b/integration/graphql-schema-first/src/cats/cats.resolvers.ts index afccc5602..9d77423c0 100644 --- a/integration/graphql-schema-first/src/cats/cats.resolvers.ts +++ b/integration/graphql-schema-first/src/cats/cats.resolvers.ts @@ -27,8 +27,8 @@ export class CatsResolvers { @Mutation('createCat') async create(@Args() args: Cat): Promise { - const createdCat = await this.catsService.create(args); - pubSub.publish('catCreated', { catCreated: createdCat }); + const createdCat = this.catsService.create(args); + void pubSub.publish('catCreated', { catCreated: createdCat }); return createdCat; } diff --git a/integration/graphql-schema-first/src/main.ts b/integration/graphql-schema-first/src/main.ts index 13cad38cf..23f3240c2 100644 --- a/integration/graphql-schema-first/src/main.ts +++ b/integration/graphql-schema-first/src/main.ts @@ -5,4 +5,4 @@ async function bootstrap() { const app = await NestFactory.create(AppModule); await app.listen(3000); } -bootstrap(); +void bootstrap(); diff --git a/integration/hello-world/e2e/interceptors.spec.ts b/integration/hello-world/e2e/interceptors.spec.ts index c9a0c3179..249eb9312 100644 --- a/integration/hello-world/e2e/interceptors.spec.ts +++ b/integration/hello-world/e2e/interceptors.spec.ts @@ -48,7 +48,7 @@ export class HeaderInterceptor { const ctx = context.switchToHttp(); const res = ctx.getResponse(); for (const key in this.headers) { - if (this.headers.hasOwnProperty(key)) { + if (Object.prototype.hasOwnProperty.call(this.headers, key)) { res.header(key, this.headers[key]); } } diff --git a/integration/hello-world/src/host-array/host-array.controller.ts b/integration/hello-world/src/host-array/host-array.controller.ts index 089cf51b3..8f6456bef 100644 --- a/integration/hello-world/src/host-array/host-array.controller.ts +++ b/integration/hello-world/src/host-array/host-array.controller.ts @@ -18,7 +18,7 @@ export class HostArrayController { @Get('async') async asyncGreeting(@HostParam('tenant') tenant: string): Promise { - return `${await this.hostService.greeting()} tenant=${tenant}`; + return `${this.hostService.greeting()} tenant=${tenant}`; } @Get('stream') diff --git a/integration/hello-world/src/host/host.controller.ts b/integration/hello-world/src/host/host.controller.ts index 60e9a5e64..8501d59eb 100644 --- a/integration/hello-world/src/host/host.controller.ts +++ b/integration/hello-world/src/host/host.controller.ts @@ -18,7 +18,7 @@ export class HostController { @Get('async') async asyncGreeting(@HostParam('tenant') tenant: string): Promise { - return `${await this.hostService.greeting()} tenant=${tenant}`; + return `${this.hostService.greeting()} tenant=${tenant}`; } @Get('stream') diff --git a/integration/hooks/src/enable-shutdown-hooks-main.ts b/integration/hooks/src/enable-shutdown-hooks-main.ts index 0d0172215..565b2d59f 100644 --- a/integration/hooks/src/enable-shutdown-hooks-main.ts +++ b/integration/hooks/src/enable-shutdown-hooks-main.ts @@ -39,4 +39,4 @@ async function bootstrap() { process.kill(process.pid, SIGNAL); } -bootstrap(); +void bootstrap(); diff --git a/integration/lazy-modules/e2e/lazy-import-global-modules.spec.ts b/integration/lazy-modules/e2e/lazy-import-global-modules.spec.ts index 93f5910d0..7bb41fb4e 100644 --- a/integration/lazy-modules/e2e/lazy-import-global-modules.spec.ts +++ b/integration/lazy-modules/e2e/lazy-import-global-modules.spec.ts @@ -2,12 +2,11 @@ import { INestApplication } from '@nestjs/common'; import { Test } from '@nestjs/testing'; import * as chai from 'chai'; import { expect } from 'chai'; -import chaiAsPromised = require('chai-as-promised'); import { AppModule } from '../src/app.module'; +import chaiAsPromised = require('chai-as-promised'); chai.use(chaiAsPromised); describe('Lazy imports', () => { - let server; let app: INestApplication; beforeEach(async () => { @@ -16,7 +15,6 @@ describe('Lazy imports', () => { }).compile(); app = module.createNestApplication(); - server = app.getHttpAdapter().getInstance(); }); it(`should allow imports of global modules`, async () => { diff --git a/integration/lazy-modules/src/main.ts b/integration/lazy-modules/src/main.ts index 13cad38cf..23f3240c2 100644 --- a/integration/lazy-modules/src/main.ts +++ b/integration/lazy-modules/src/main.ts @@ -5,4 +5,4 @@ async function bootstrap() { const app = await NestFactory.create(AppModule); await app.listen(3000); } -bootstrap(); +void bootstrap(); diff --git a/integration/lazy-modules/tsconfig.json b/integration/lazy-modules/tsconfig.json new file mode 100644 index 000000000..cef623d14 --- /dev/null +++ b/integration/lazy-modules/tsconfig.json @@ -0,0 +1,40 @@ +{ + "compilerOptions": { + "module": "commonjs", + "declaration": false, + "noImplicitAny": false, + "removeComments": true, + "noLib": false, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "target": "ES2021", + "sourceMap": true, + "allowJs": true, + "outDir": "./dist", + "paths": { + "@nestjs/common": ["../../packages/common"], + "@nestjs/common/*": ["../../packages/common/*"], + "@nestjs/core": ["../../packages/core"], + "@nestjs/core/*": ["../../packages/core/*"], + "@nestjs/microservices": ["../../packages/microservices"], + "@nestjs/microservices/*": ["../../packages/microservices/*"], + "@nestjs/websockets": ["../../packages/websockets"], + "@nestjs/websockets/*": ["../../packages/websockets/*"], + "@nestjs/testing": ["../../packages/testing"], + "@nestjs/testing/*": ["../../packages/testing/*"], + "@nestjs/platform-express": ["../../packages/platform-express"], + "@nestjs/platform-express/*": ["../../packages/platform-express/*"], + "@nestjs/platform-socket.io": ["../../packages/platform-socket.io"], + "@nestjs/platform-socket.io/*": ["../../packages/platform-socket.io/*"], + "@nestjs/platform-ws": ["../../packages/platform-ws"], + "@nestjs/platform-ws/*": ["../../packages/platform-ws/*"] + } + }, + "include": [ + "src/**/*", + "e2e/**/*" + ], + "exclude": [ + "node_modules", + ] +} \ No newline at end of file diff --git a/integration/microservices/e2e/math-grpc.spec.ts b/integration/microservices/e2e/math-grpc.spec.ts index d280a82a4..8a80ced27 100644 --- a/integration/microservices/e2e/math-grpc.spec.ts +++ b/integration/microservices/e2e/math-grpc.spec.ts @@ -180,7 +180,7 @@ describe('GRPC transport', () => { stream.on('error', err => { if (err.code !== GRPC.status.CANCELLED) { - reject(err); + reject(err as Error); } }); diff --git a/integration/microservices/e2e/sum-kafka.spec.ts b/integration/microservices/e2e/sum-kafka.spec.ts index 0ab86ec73..d01e8d498 100644 --- a/integration/microservices/e2e/sum-kafka.spec.ts +++ b/integration/microservices/e2e/sum-kafka.spec.ts @@ -91,7 +91,7 @@ describe.skip('Kafka transport', function () { }); it(`/POST (async event notification)`, done => { - request(server) + return request(server) .post('/notify') .send() .end(() => { diff --git a/integration/microservices/e2e/sum-mqtt.spec.ts b/integration/microservices/e2e/sum-mqtt.spec.ts index 5cbce8a9c..b69c3c631 100644 --- a/integration/microservices/e2e/sum-mqtt.spec.ts +++ b/integration/microservices/e2e/sum-mqtt.spec.ts @@ -75,7 +75,7 @@ describe('MQTT transport', () => { }).timeout(5000); it(`/POST (event notification)`, done => { - request(server) + return request(server) .post('/notify') .send([1, 2, 3, 4, 5]) .end(() => { @@ -87,7 +87,7 @@ describe('MQTT transport', () => { }); it(`/POST (wildcard EVENT #)`, done => { - request(server) + return request(server) .post('/wildcard-event') .send([1, 2, 3, 4, 5]) .end(() => { @@ -106,7 +106,7 @@ describe('MQTT transport', () => { }); it(`/POST (wildcard EVENT +)`, done => { - request(server) + return request(server) .post('/wildcard-event2') .send([1, 2, 3, 4, 5]) .end(() => { @@ -125,7 +125,7 @@ describe('MQTT transport', () => { }); it(`/POST (shared wildcard EVENT #)`, done => { - request(server) + return request(server) .post('/shared-wildcard-event') .send([1, 2, 3, 4, 5]) .end(() => { @@ -144,7 +144,7 @@ describe('MQTT transport', () => { }); it(`/POST (shared wildcard EVENT +)`, done => { - request(server) + return request(server) .post('/shared-wildcard-event2') .send([1, 2, 3, 4, 5]) .end(() => { diff --git a/integration/microservices/e2e/sum-nats.spec.ts b/integration/microservices/e2e/sum-nats.spec.ts index 7206d60ba..32e80e07d 100644 --- a/integration/microservices/e2e/sum-nats.spec.ts +++ b/integration/microservices/e2e/sum-nats.spec.ts @@ -84,7 +84,7 @@ describe('NATS transport', () => { }); it(`/POST (event notification)`, done => { - request(server) + return request(server) .post('/notify') .send([1, 2, 3, 4, 5]) .end(() => { diff --git a/integration/microservices/e2e/sum-redis.spec.ts b/integration/microservices/e2e/sum-redis.spec.ts index 10a9e396a..197aead4c 100644 --- a/integration/microservices/e2e/sum-redis.spec.ts +++ b/integration/microservices/e2e/sum-redis.spec.ts @@ -78,7 +78,7 @@ describe('REDIS transport', () => { }); it(`/POST (event notification)`, done => { - request(server) + return request(server) .post('/notify') .send([1, 2, 3, 4, 5]) .end(() => { diff --git a/integration/microservices/e2e/sum-rmq.spec.ts b/integration/microservices/e2e/sum-rmq.spec.ts index 0d23de554..9a389b943 100644 --- a/integration/microservices/e2e/sum-rmq.spec.ts +++ b/integration/microservices/e2e/sum-rmq.spec.ts @@ -85,7 +85,7 @@ describe('RabbitMQ transport', () => { }).timeout(10000); it(`/POST (event notification)`, done => { - request(server) + return request(server) .post('/notify') .send([1, 2, 3, 4, 5]) .end(() => { diff --git a/integration/microservices/e2e/sum-rpc-tls.spec.ts b/integration/microservices/e2e/sum-rpc-tls.spec.ts index e32a726df..eb097f9b4 100644 --- a/integration/microservices/e2e/sum-rpc-tls.spec.ts +++ b/integration/microservices/e2e/sum-rpc-tls.spec.ts @@ -2,11 +2,11 @@ import { INestApplication } from '@nestjs/common'; import { Transport } from '@nestjs/microservices'; import { Test } from '@nestjs/testing'; import { expect } from 'chai'; +import * as fs from 'fs'; +import * as path from 'path'; import * as request from 'supertest'; import { AppController } from '../src/tcp-tls/app.controller'; import { ApplicationModule } from '../src/tcp-tls/app.module'; -import * as fs from 'fs'; -import * as path from 'path'; describe('RPC TLS transport', () => { let server; @@ -109,7 +109,7 @@ describe('RPC TLS transport', () => { }); it(`/POST (event notification)`, done => { - request(server) + return request(server) .post('/notify') .send([1, 2, 3, 4, 5]) .end(() => { diff --git a/integration/microservices/e2e/sum-rpc.spec.ts b/integration/microservices/e2e/sum-rpc.spec.ts index 648d7a117..e776f0be1 100644 --- a/integration/microservices/e2e/sum-rpc.spec.ts +++ b/integration/microservices/e2e/sum-rpc.spec.ts @@ -94,7 +94,7 @@ describe('RPC transport', () => { }); it(`/POST (event notification)`, done => { - request(server) + return request(server) .post('/notify') .send([1, 2, 3, 4, 5]) .end(() => { diff --git a/integration/microservices/src/grpc/grpc.controller.ts b/integration/microservices/src/grpc/grpc.controller.ts index 11e635aea..8d435f18b 100644 --- a/integration/microservices/src/grpc/grpc.controller.ts +++ b/integration/microservices/src/grpc/grpc.controller.ts @@ -2,15 +2,15 @@ import { Body, Controller, HttpCode, Post, Query } from '@nestjs/common'; import { Client, ClientGrpc, + ClientGrpcProxy, GrpcMethod, GrpcStreamCall, GrpcStreamMethod, - Transport, - ClientGrpcProxy, RpcException, + Transport, } from '@nestjs/microservices'; import { join } from 'path'; -import { Observable, of, catchError, from, mergeMap } from 'rxjs'; +import { catchError, from, mergeMap, Observable, of } from 'rxjs'; class ErrorHandlingProxy extends ClientGrpcProxy { serializeError(err) { @@ -81,7 +81,7 @@ export class GrpcController { }); }, error: err => { - reject(err); + reject(err as Error); }, }); }); diff --git a/integration/microservices/src/main.ts b/integration/microservices/src/main.ts index afb93ba07..cdecc1bb6 100644 --- a/integration/microservices/src/main.ts +++ b/integration/microservices/src/main.ts @@ -5,4 +5,4 @@ async function bootstrap() { const app = await NestFactory.create(ApplicationModule); await app.listen(3000); } -bootstrap(); +void bootstrap(); diff --git a/integration/module-utils/tsconfig.json b/integration/module-utils/tsconfig.json index cef623d14..18d4bbcd6 100644 --- a/integration/module-utils/tsconfig.json +++ b/integration/module-utils/tsconfig.json @@ -32,7 +32,8 @@ }, "include": [ "src/**/*", - "e2e/**/*" + "e2e/**/*", + "test/**/*" ], "exclude": [ "node_modules", diff --git a/integration/mongoose/src/main.ts b/integration/mongoose/src/main.ts index 5847364d6..2699ee9d7 100644 --- a/integration/mongoose/src/main.ts +++ b/integration/mongoose/src/main.ts @@ -5,4 +5,4 @@ async function bootstrap() { const app = await NestFactory.create(ApplicationModule); await app.listen(3001); } -bootstrap(); +void bootstrap(); diff --git a/integration/nest-application/app-locals/tsconfig.json b/integration/nest-application/app-locals/tsconfig.json index c3692649c..5c1ce2f6e 100644 --- a/integration/nest-application/app-locals/tsconfig.json +++ b/integration/nest-application/app-locals/tsconfig.json @@ -20,8 +20,8 @@ "@nestjs/microservices/*": ["../../../packages/microservices/*"], "@nestjs/websockets": ["../../../packages/websockets"], "@nestjs/websockets/*": ["../../../packages/websockets/*"], - "@nestjs/testing": ["../../../packages/websockets"], - "@nestjs/testing/*": ["../../../packages/websockets/*"], + "@nestjs/testing": ["../../../packages/testing"], + "@nestjs/testing/*": ["../../../packages/testing/*"], "@nestjs/platform-express": ["../../../packages/platform-express"], "@nestjs/platform-express/*": ["../../../packages/platform-express/*"], "@nestjs/platform-socket.io": ["../../../packages/platform-socket.io"], diff --git a/integration/nest-application/get-url/tsconfig.json b/integration/nest-application/get-url/tsconfig.json index c3692649c..5c1ce2f6e 100644 --- a/integration/nest-application/get-url/tsconfig.json +++ b/integration/nest-application/get-url/tsconfig.json @@ -20,8 +20,8 @@ "@nestjs/microservices/*": ["../../../packages/microservices/*"], "@nestjs/websockets": ["../../../packages/websockets"], "@nestjs/websockets/*": ["../../../packages/websockets/*"], - "@nestjs/testing": ["../../../packages/websockets"], - "@nestjs/testing/*": ["../../../packages/websockets/*"], + "@nestjs/testing": ["../../../packages/testing"], + "@nestjs/testing/*": ["../../../packages/testing/*"], "@nestjs/platform-express": ["../../../packages/platform-express"], "@nestjs/platform-express/*": ["../../../packages/platform-express/*"], "@nestjs/platform-socket.io": ["../../../packages/platform-socket.io"], diff --git a/integration/nest-application/global-prefix/tsconfig.json b/integration/nest-application/global-prefix/tsconfig.json index c3692649c..5c1ce2f6e 100644 --- a/integration/nest-application/global-prefix/tsconfig.json +++ b/integration/nest-application/global-prefix/tsconfig.json @@ -20,8 +20,8 @@ "@nestjs/microservices/*": ["../../../packages/microservices/*"], "@nestjs/websockets": ["../../../packages/websockets"], "@nestjs/websockets/*": ["../../../packages/websockets/*"], - "@nestjs/testing": ["../../../packages/websockets"], - "@nestjs/testing/*": ["../../../packages/websockets/*"], + "@nestjs/testing": ["../../../packages/testing"], + "@nestjs/testing/*": ["../../../packages/testing/*"], "@nestjs/platform-express": ["../../../packages/platform-express"], "@nestjs/platform-express/*": ["../../../packages/platform-express/*"], "@nestjs/platform-socket.io": ["../../../packages/platform-socket.io"], diff --git a/integration/nest-application/listen/e2e/express.spec.ts b/integration/nest-application/listen/e2e/express.spec.ts index 98e757368..b209fa0c3 100644 --- a/integration/nest-application/listen/e2e/express.spec.ts +++ b/integration/nest-application/listen/e2e/express.spec.ts @@ -1,9 +1,9 @@ +import { INestApplication } from '@nestjs/common'; import { ExpressAdapter } from '@nestjs/platform-express'; import { Test, TestingModule } from '@nestjs/testing'; import { expect } from 'chai'; import * as express from 'express'; import { AppModule } from '../src/app.module'; -import { INestApplication } from '@nestjs/common'; describe('Listen (Express Application)', () => { let testModule: TestingModule; @@ -17,7 +17,7 @@ describe('Listen (Express Application)', () => { }); afterEach(async () => { - app.close(); + await app.close(); }); it('should resolve with httpServer on success', async () => { diff --git a/integration/nest-application/listen/e2e/fastify.spec.ts b/integration/nest-application/listen/e2e/fastify.spec.ts index b779d3557..ba267c8dd 100644 --- a/integration/nest-application/listen/e2e/fastify.spec.ts +++ b/integration/nest-application/listen/e2e/fastify.spec.ts @@ -16,7 +16,7 @@ describe('Listen (Fastify Application)', () => { }); afterEach(async () => { - app.close(); + await app.close(); }); it('should resolve with httpServer on success', async () => { diff --git a/integration/nest-application/listen/tsconfig.json b/integration/nest-application/listen/tsconfig.json new file mode 100644 index 000000000..5c1ce2f6e --- /dev/null +++ b/integration/nest-application/listen/tsconfig.json @@ -0,0 +1,40 @@ +{ + "compilerOptions": { + "module": "commonjs", + "declaration": false, + "noImplicitAny": false, + "removeComments": true, + "noLib": false, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "target": "ES2021", + "sourceMap": true, + "allowJs": true, + "outDir": "./dist", + "paths": { + "@nestjs/common": ["../../../packages/common"], + "@nestjs/common/*": ["../../../packages/common/*"], + "@nestjs/core": ["../../../packages/core"], + "@nestjs/core/*": ["../../../packages/core/*"], + "@nestjs/microservices": ["../../../packages/microservices"], + "@nestjs/microservices/*": ["../../../packages/microservices/*"], + "@nestjs/websockets": ["../../../packages/websockets"], + "@nestjs/websockets/*": ["../../../packages/websockets/*"], + "@nestjs/testing": ["../../../packages/testing"], + "@nestjs/testing/*": ["../../../packages/testing/*"], + "@nestjs/platform-express": ["../../../packages/platform-express"], + "@nestjs/platform-express/*": ["../../../packages/platform-express/*"], + "@nestjs/platform-socket.io": ["../../../packages/platform-socket.io"], + "@nestjs/platform-socket.io/*": ["../../../packages/platform-socket.io/*"], + "@nestjs/platform-ws": ["../../../packages/platform-ws"], + "@nestjs/platform-ws/*": ["../../../packages/platform-ws/*"] + } + }, + "include": [ + "src/**/*", + "e2e/**/*" + ], + "exclude": [ + "node_modules", + ] +} \ No newline at end of file diff --git a/integration/nest-application/raw-body/tsconfig.json b/integration/nest-application/raw-body/tsconfig.json index c3692649c..5c1ce2f6e 100644 --- a/integration/nest-application/raw-body/tsconfig.json +++ b/integration/nest-application/raw-body/tsconfig.json @@ -20,8 +20,8 @@ "@nestjs/microservices/*": ["../../../packages/microservices/*"], "@nestjs/websockets": ["../../../packages/websockets"], "@nestjs/websockets/*": ["../../../packages/websockets/*"], - "@nestjs/testing": ["../../../packages/websockets"], - "@nestjs/testing/*": ["../../../packages/websockets/*"], + "@nestjs/testing": ["../../../packages/testing"], + "@nestjs/testing/*": ["../../../packages/testing/*"], "@nestjs/platform-express": ["../../../packages/platform-express"], "@nestjs/platform-express/*": ["../../../packages/platform-express/*"], "@nestjs/platform-socket.io": ["../../../packages/platform-socket.io"], diff --git a/integration/nest-application/sse/src/app.controller.ts b/integration/nest-application/sse/src/app.controller.ts index c4da79df9..e740d542b 100644 --- a/integration/nest-application/sse/src/app.controller.ts +++ b/integration/nest-application/sse/src/app.controller.ts @@ -6,7 +6,7 @@ export class AppController { @Sse('sse') sse(): Observable { return interval(1000).pipe( - map(_ => ({ data: { hello: 'world' } }) as MessageEvent), + map(() => ({ data: { hello: 'world' } }) as MessageEvent), ); } } diff --git a/integration/nest-application/sse/tsconfig.json b/integration/nest-application/sse/tsconfig.json index 261e01453..23ca65610 100644 --- a/integration/nest-application/sse/tsconfig.json +++ b/integration/nest-application/sse/tsconfig.json @@ -21,8 +21,8 @@ "@nestjs/microservices/*": ["../../../packages/microservices/*"], "@nestjs/websockets": ["../../../packages/websockets"], "@nestjs/websockets/*": ["../../../packages/websockets/*"], - "@nestjs/testing": ["../../../packages/websockets"], - "@nestjs/testing/*": ["../../../packages/websockets/*"], + "@nestjs/testing": ["../../../packages/testing"], + "@nestjs/testing/*": ["../../../packages/testing/*"], "@nestjs/platform-express": ["../../../packages/platform-express"], "@nestjs/platform-express/*": ["../../../packages/platform-express/*"], "@nestjs/platform-socket.io": ["../../../packages/platform-socket.io"], diff --git a/integration/repl/e2e/repl.spec.ts b/integration/repl/e2e/repl.spec.ts index b239776ee..8ddcc673d 100644 --- a/integration/repl/e2e/repl.spec.ts +++ b/integration/repl/e2e/repl.spec.ts @@ -1,14 +1,14 @@ import { clc } from '@nestjs/common/utils/cli-colors.util'; import { repl } from '@nestjs/core'; -import { ReplContext } from '@nestjs/core/repl/repl-context'; import { - HelpReplFn, + DebugReplFn, GetReplFn, + HelpReplFn, + MethodsReplFn, ResolveReplFn, SelectReplFn, - DebugReplFn, - MethodsReplFn, } from '@nestjs/core/repl/native-functions'; +import { ReplContext } from '@nestjs/core/repl/repl-context'; import { expect } from 'chai'; import * as sinon from 'sinon'; import { AppModule } from '../src/app.module'; @@ -34,7 +34,7 @@ describe('REPL', () => { server.context; let outputText = ''; sinon.stub(process.stdout, 'write').callsFake(text => { - outputText += text; + outputText += text as string; return true; }); server.emit('line', 'get(UsersService)'); @@ -63,7 +63,7 @@ ${PROMPT}`); server.context; let outputText = ''; sinon.stub(process.stdout, 'write').callsFake(text => { - outputText += text; + outputText += text as string; return true; }); server.emit('line', '$(UsersService)'); @@ -92,7 +92,7 @@ ${PROMPT}`); let outputText = ''; sinon.stub(process.stdout, 'write').callsFake(text => { - outputText += text; + outputText += text as string; return true; }); server.emit('line', 'debug(UsersModule)'); @@ -115,7 +115,7 @@ ${PROMPT}`, let outputText = ''; sinon.stub(process.stdout, 'write').callsFake(text => { - outputText += text; + outputText += text as string; return true; }); server.emit('line', 'methods("UsersRepository")'); @@ -153,7 +153,7 @@ ${PROMPT}`, ).fnDefinition; let outputText = ''; sinon.stub(process.stdout, 'write').callsFake(text => { - outputText += text; + outputText += text as string; return true; }); @@ -172,7 +172,7 @@ ${PROMPT}`); ).fnDefinition; let outputText = ''; sinon.stub(process.stdout, 'write').callsFake(text => { - outputText += text; + outputText += text as string; return true; }); @@ -191,7 +191,7 @@ ${PROMPT}`); ).fnDefinition; let outputText = ''; sinon.stub(process.stdout, 'write').callsFake(text => { - outputText += text; + outputText += text as string; return true; }); @@ -210,7 +210,7 @@ ${PROMPT}`); ).fnDefinition; let outputText = ''; sinon.stub(process.stdout, 'write').callsFake(text => { - outputText += text; + outputText += text as string; return true; }); @@ -229,7 +229,7 @@ ${PROMPT}`); ).fnDefinition; let outputText = ''; sinon.stub(process.stdout, 'write').callsFake(text => { - outputText += text; + outputText += text as string; return true; }); @@ -248,7 +248,7 @@ ${PROMPT}`); ).fnDefinition; let outputText = ''; sinon.stub(process.stdout, 'write').callsFake(text => { - outputText += text; + outputText += text as string; return true; }); diff --git a/integration/scopes/e2e/circular-request-scope.spec.ts b/integration/scopes/e2e/circular-request-scope.spec.ts index 4676ccf58..72489dc60 100644 --- a/integration/scopes/e2e/circular-request-scope.spec.ts +++ b/integration/scopes/e2e/circular-request-scope.spec.ts @@ -48,19 +48,19 @@ describe('Circular request scope', () => { await new Promise(resolve => performHttpCall(resolve)); }); - it(`should create controller for each request`, async () => { + it(`should create controller for each request`, () => { expect(HelloController.COUNTER).to.be.eql(3); }); - it(`should create service for each request`, async () => { + it(`should create service for each request`, () => { expect(UsersService.COUNTER).to.be.eql(3); }); - it(`should create service for each request`, async () => { + it(`should create service for each request`, () => { expect(HelloService.COUNTER).to.be.eql(3); }); - it(`should create provider for each inquirer`, async () => { + it(`should create provider for each inquirer`, () => { expect(Meta.COUNTER).to.be.eql(3); }); }); diff --git a/integration/scopes/e2e/circular-transient-scope.spec.ts b/integration/scopes/e2e/circular-transient-scope.spec.ts index 16310a8f3..acfaecbe4 100644 --- a/integration/scopes/e2e/circular-transient-scope.spec.ts +++ b/integration/scopes/e2e/circular-transient-scope.spec.ts @@ -39,7 +39,7 @@ describe('Circular transient scope', () => { const performHttpCall = end => request(server) .get('/hello') - .end((err, res) => { + .end(err => { if (err) return end(err); end(); }); diff --git a/integration/scopes/e2e/msvc-request-scope.spec.ts b/integration/scopes/e2e/msvc-request-scope.spec.ts index 7a6b6d649..6ce1a6a5a 100644 --- a/integration/scopes/e2e/msvc-request-scope.spec.ts +++ b/integration/scopes/e2e/msvc-request-scope.spec.ts @@ -47,29 +47,29 @@ describe('Request scope (microservices)', () => { if (err) return end(err); end(); }); - await new Promise(resolve => performHttpCall(resolve)); - await new Promise(resolve => performHttpCall(resolve)); - await new Promise(resolve => performHttpCall(resolve)); + await new Promise(resolve => performHttpCall(resolve)); + await new Promise(resolve => performHttpCall(resolve)); + await new Promise(resolve => performHttpCall(resolve)); }); - it(`should create controller for each request`, async () => { + it(`should create controller for each request`, () => { expect(HelloController.COUNTER).to.be.eql(3); }); - it(`should create service for each request`, async () => { + it(`should create service for each request`, () => { expect(UsersService.COUNTER).to.be.eql(3); }); - it(`should share static provider across requests`, async () => { + it(`should share static provider across requests`, () => { expect(Meta.COUNTER).to.be.eql(1); }); - it(`should create request scoped interceptor for each request`, async () => { + it(`should create request scoped interceptor for each request`, () => { expect(Interceptor.COUNTER).to.be.eql(3); expect(Interceptor.REQUEST_SCOPED_DATA).to.deep.equal([1, 1, 1]); }); - it(`should create request scoped guard for each request`, async () => { + it(`should create request scoped guard for each request`, () => { expect(Guard.COUNTER).to.be.eql(3); expect(Guard.REQUEST_SCOPED_DATA).to.deep.equal([1, 1, 1]); }); diff --git a/integration/scopes/e2e/request-modules-scope.spec.ts b/integration/scopes/e2e/request-modules-scope.spec.ts index d7aea5896..0a7d54ada 100644 --- a/integration/scopes/e2e/request-modules-scope.spec.ts +++ b/integration/scopes/e2e/request-modules-scope.spec.ts @@ -24,16 +24,16 @@ describe('Request scope (modules propagation)', () => { const performHttpCall = end => request(server) .get('/hello') - .end((err, res) => { + .end(err => { if (err) return end(err); end(); }); - await new Promise(resolve => performHttpCall(resolve)); - await new Promise(resolve => performHttpCall(resolve)); - await new Promise(resolve => performHttpCall(resolve)); + await new Promise(resolve => performHttpCall(resolve)); + await new Promise(resolve => performHttpCall(resolve)); + await new Promise(resolve => performHttpCall(resolve)); }); - it(`should not fail`, async () => { + it(`should not fail`, () => { expect(RequestChainService.COUNTER).to.be.eql(3); }); }); diff --git a/integration/scopes/e2e/request-scope.spec.ts b/integration/scopes/e2e/request-scope.spec.ts index df58a5f07..7b146972b 100644 --- a/integration/scopes/e2e/request-scope.spec.ts +++ b/integration/scopes/e2e/request-scope.spec.ts @@ -40,38 +40,38 @@ describe('Request scope', () => { const performHttpCall = end => request(server) .get('/hello') - .end((err, res) => { + .end(err => { if (err) return end(err); end(); }); - await new Promise(resolve => performHttpCall(resolve)); - await new Promise(resolve => performHttpCall(resolve)); - await new Promise(resolve => performHttpCall(resolve)); + await new Promise(resolve => performHttpCall(resolve)); + await new Promise(resolve => performHttpCall(resolve)); + await new Promise(resolve => performHttpCall(resolve)); }); - it(`should create controller for each request`, async () => { + it(`should create controller for each request`, () => { expect(HelloController.COUNTER).to.be.eql(3); }); - it(`should create service for each request`, async () => { + it(`should create service for each request`, () => { expect(UsersService.COUNTER).to.be.eql(3); }); - it(`should share static provider across requests`, async () => { + it(`should share static provider across requests`, () => { expect(Meta.COUNTER).to.be.eql(1); }); - it(`should create request scoped pipe for each request`, async () => { + it(`should create request scoped pipe for each request`, () => { expect(UserByIdPipe.COUNTER).to.be.eql(3); expect(UserByIdPipe.REQUEST_SCOPED_DATA).to.deep.equal([1, 1, 1]); }); - it(`should create request scoped interceptor for each request`, async () => { + it(`should create request scoped interceptor for each request`, () => { expect(Interceptor.COUNTER).to.be.eql(3); expect(Interceptor.REQUEST_SCOPED_DATA).to.deep.equal([1, 1, 1]); }); - it(`should create request scoped guard for each request`, async () => { + it(`should create request scoped guard for each request`, () => { expect(Guard.COUNTER).to.be.eql(3); expect(Guard.REQUEST_SCOPED_DATA).to.deep.equal([1, 1, 1]); }); diff --git a/integration/scopes/e2e/transient-scope.spec.ts b/integration/scopes/e2e/transient-scope.spec.ts index 609574e90..8658f932d 100644 --- a/integration/scopes/e2e/transient-scope.spec.ts +++ b/integration/scopes/e2e/transient-scope.spec.ts @@ -41,36 +41,36 @@ describe('Transient scope', () => { const performHttpCall = end => request(server) .get('/hello') - .end((err, res) => { + .end(err => { if (err) return end(err); end(); }); - await new Promise(resolve => performHttpCall(resolve)); - await new Promise(resolve => performHttpCall(resolve)); - await new Promise(resolve => performHttpCall(resolve)); + await new Promise(resolve => performHttpCall(resolve)); + await new Promise(resolve => performHttpCall(resolve)); + await new Promise(resolve => performHttpCall(resolve)); }); - it(`should create controller for each request`, async () => { + it(`should create controller for each request`, () => { expect(HelloController.COUNTER).to.be.eql(3); }); - it(`should create service for each request`, async () => { + it(`should create service for each request`, () => { expect(UsersService.COUNTER).to.be.eql(3); }); - it(`should create provider for each inquirer`, async () => { + it(`should create provider for each inquirer`, () => { expect(Meta.COUNTER).to.be.eql(7); }); - it(`should create transient pipe for each controller (3 requests, 1 static)`, async () => { + it(`should create transient pipe for each controller (3 requests, 1 static)`, () => { expect(UserByIdPipe.COUNTER).to.be.eql(4); }); - it(`should create transient interceptor for each controller (3 requests, 1 static)`, async () => { + it(`should create transient interceptor for each controller (3 requests, 1 static)`, () => { expect(Interceptor.COUNTER).to.be.eql(4); }); - it(`should create transient guard for each controller (3 requests, 1 static)`, async () => { + it(`should create transient guard for each controller (3 requests, 1 static)`, () => { expect(Guard.COUNTER).to.be.eql(4); }); }); diff --git a/integration/scopes/src/main.ts b/integration/scopes/src/main.ts index afb93ba07..cdecc1bb6 100644 --- a/integration/scopes/src/main.ts +++ b/integration/scopes/src/main.ts @@ -5,4 +5,4 @@ async function bootstrap() { const app = await NestFactory.create(ApplicationModule); await app.listen(3000); } -bootstrap(); +void bootstrap(); diff --git a/integration/scopes/src/transient/users/user-by-id.pipe.ts b/integration/scopes/src/transient/users/user-by-id.pipe.ts index 7d06ff9d5..3e8274038 100644 --- a/integration/scopes/src/transient/users/user-by-id.pipe.ts +++ b/integration/scopes/src/transient/users/user-by-id.pipe.ts @@ -1,9 +1,4 @@ -import { - ArgumentMetadata, - Injectable, - PipeTransform, - Scope, -} from '@nestjs/common'; +import { Injectable, PipeTransform, Scope } from '@nestjs/common'; @Injectable({ scope: Scope.TRANSIENT }) export class UserByIdPipe implements PipeTransform { @@ -12,7 +7,7 @@ export class UserByIdPipe implements PipeTransform { UserByIdPipe.COUNTER++; } - transform(value: string, metadata: ArgumentMetadata) { + transform(value: string) { return value; } } diff --git a/integration/send-files/e2e/utils.ts b/integration/send-files/e2e/utils.ts index bc2f1f7b6..ac29622b5 100644 --- a/integration/send-files/e2e/utils.ts +++ b/integration/send-files/e2e/utils.ts @@ -1,5 +1,5 @@ import { INestApplication } from '@nestjs/common'; -import { IncomingMessage, request, RequestOptions } from 'http'; +import { IncomingMessage, request } from 'http'; import { URL } from 'url'; export const getHttpBaseOptions = async ( @@ -10,7 +10,7 @@ export const getHttpBaseOptions = async ( }; export const sendCanceledHttpRequest = async (url: URL) => { - return new Promise((resolve, reject) => { + return new Promise(resolve => { const req = request(url, res => { // close the request once we get the first response of data res.on('data', () => { @@ -29,7 +29,7 @@ export const sendHttpRequest = async (url: URL) => { const req = request(url, res => { // this makes sure that the response actually starts and is read. We could verify this value against the same // that is in an earlier test, but all we care about in _this_ test is that the status code is 200 - res.on('data', chunk => { + res.on('data', () => { // no op }); // fail the test if something goes wrong diff --git a/integration/testing-module-override/e2e/circular-dependency/a.module.ts b/integration/testing-module-override/circular-dependency/a.module.ts similarity index 82% rename from integration/testing-module-override/e2e/circular-dependency/a.module.ts rename to integration/testing-module-override/circular-dependency/a.module.ts index 695a9edbd..6540ded32 100644 --- a/integration/testing-module-override/e2e/circular-dependency/a.module.ts +++ b/integration/testing-module-override/circular-dependency/a.module.ts @@ -1,5 +1,5 @@ import { Injectable, Module, forwardRef } from '@nestjs/common'; -import { BModule, BProvider } from './b.module'; +import { BModule } from './b.module'; @Injectable() export class AProvider {} diff --git a/integration/testing-module-override/e2e/circular-dependency/b.module.ts b/integration/testing-module-override/circular-dependency/b.module.ts similarity index 82% rename from integration/testing-module-override/e2e/circular-dependency/b.module.ts rename to integration/testing-module-override/circular-dependency/b.module.ts index 6671d82a6..2f4d5baf6 100644 --- a/integration/testing-module-override/e2e/circular-dependency/b.module.ts +++ b/integration/testing-module-override/circular-dependency/b.module.ts @@ -1,5 +1,5 @@ import { Injectable, Module, forwardRef } from '@nestjs/common'; -import { AModule, AProvider } from './a.module'; +import { AModule } from './a.module'; @Injectable() export class BProvider {} diff --git a/integration/testing-module-override/e2e/modules-override.spec.ts b/integration/testing-module-override/e2e/modules-override.spec.ts index 4db9fcd10..234767e18 100644 --- a/integration/testing-module-override/e2e/modules-override.spec.ts +++ b/integration/testing-module-override/e2e/modules-override.spec.ts @@ -9,9 +9,8 @@ import { import { LazyModuleLoader } from '@nestjs/core'; import { Test, TestingModule } from '@nestjs/testing'; import { expect } from 'chai'; - -import { AModule, AProvider } from './circular-dependency/a.module'; -import { BModule, BProvider } from './circular-dependency/b.module'; +import { AModule, AProvider } from '../circular-dependency/a.module'; +import { BModule, BProvider } from '../circular-dependency/b.module'; describe('Modules overriding', () => { describe('Top-level module', () => { diff --git a/integration/testing-module-override/tsconfig.json b/integration/testing-module-override/tsconfig.json index d9c82ca97..c43c3d1b1 100644 --- a/integration/testing-module-override/tsconfig.json +++ b/integration/testing-module-override/tsconfig.json @@ -11,7 +11,25 @@ "outDir": "./dist", "baseUrl": "./", "incremental": true, - "skipLibCheck": true + "skipLibCheck": true, + "paths": { + "@nestjs/common": ["../../packages/common"], + "@nestjs/common/*": ["../../packages/common/*"], + "@nestjs/core": ["../../packages/core"], + "@nestjs/core/*": ["../../packages/core/*"], + "@nestjs/microservices": ["../../packages/microservices"], + "@nestjs/microservices/*": ["../../packages/microservices/*"], + "@nestjs/websockets": ["../../packages/websockets"], + "@nestjs/websockets/*": ["../../packages/websockets/*"], + "@nestjs/testing": ["../../packages/testing"], + "@nestjs/testing/*": ["../../packages/testing/*"], + "@nestjs/platform-express": ["../../packages/platform-express"], + "@nestjs/platform-express/*": ["../../packages/platform-express/*"], + "@nestjs/platform-socket.io": ["../../packages/platform-socket.io"], + "@nestjs/platform-socket.io/*": ["../../packages/platform-socket.io/*"], + "@nestjs/platform-ws": ["../../packages/platform-ws"], + "@nestjs/platform-ws/*": ["../../packages/platform-ws/*"] + } }, - "include": ["src/**/*"] + "include": ["src/**/*", "e2e/**/*"], } diff --git a/integration/typeorm/src/main.ts b/integration/typeorm/src/main.ts index 7d4c1629f..c7f4a1871 100644 --- a/integration/typeorm/src/main.ts +++ b/integration/typeorm/src/main.ts @@ -5,4 +5,4 @@ async function bootstrap() { const app = await NestFactory.create(AppModule); await app.listen(3001); } -bootstrap(); +void bootstrap(); diff --git a/integration/versioning/e2e/default-versioning.spec.ts b/integration/versioning/e2e/default-versioning.spec.ts index a11bdf6dc..d1b62e0ec 100644 --- a/integration/versioning/e2e/default-versioning.spec.ts +++ b/integration/versioning/e2e/default-versioning.spec.ts @@ -1,4 +1,4 @@ -import { INestApplication, VersioningType } from '@nestjs/common'; +import { INestApplication } from '@nestjs/common'; import { FastifyAdapter, NestFastifyApplication, diff --git a/integration/versioning/src/main.ts b/integration/versioning/src/main.ts index 01a86abd3..1d316cac8 100644 --- a/integration/versioning/src/main.ts +++ b/integration/versioning/src/main.ts @@ -12,4 +12,4 @@ async function bootstrap() { await app.listen(3000); console.log(`Application is running on: ${await app.getUrl()}`); } -bootstrap(); +void bootstrap(); diff --git a/integration/websockets/e2e/error-gateway.spec.ts b/integration/websockets/e2e/error-gateway.spec.ts index 95a7d4d28..c1963c030 100644 --- a/integration/websockets/e2e/error-gateway.spec.ts +++ b/integration/websockets/e2e/error-gateway.spec.ts @@ -11,7 +11,7 @@ describe('ErrorGateway', () => { const testingModule = await Test.createTestingModule({ providers: [ErrorGateway], }).compile(); - app = await testingModule.createNestApplication(); + app = testingModule.createNestApplication(); await app.listen(3000); }); diff --git a/integration/websockets/e2e/ws-gateway.spec.ts b/integration/websockets/e2e/ws-gateway.spec.ts index 94f56d7e9..f2a6ab80f 100644 --- a/integration/websockets/e2e/ws-gateway.spec.ts +++ b/integration/websockets/e2e/ws-gateway.spec.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-base-to-string */ import { INestApplication } from '@nestjs/common'; import { WsAdapter } from '@nestjs/platform-ws'; import { Test } from '@nestjs/testing'; @@ -10,7 +11,7 @@ import { ServerGateway } from '../src/server.gateway'; import { WsPathGateway } from '../src/ws-path.gateway'; import { WsPathGateway2 } from '../src/ws-path2.gateway'; -async function createNestApp(...gateways): Promise { +async function createNestApp(...gateways: any[]): Promise { const testingModule = await Test.createTestingModule({ providers: gateways, }).compile(); @@ -20,7 +21,7 @@ async function createNestApp(...gateways): Promise { } describe('WebSocketGateway (WsAdapter)', () => { - let ws, ws2, app; + let ws: WebSocket, ws2: WebSocket, app: INestApplication; it(`should handle message (2nd port)`, async () => { app = await createNestApp(ApplicationGateway); @@ -39,7 +40,7 @@ describe('WebSocketGateway (WsAdapter)', () => { ); await new Promise(resolve => ws.on('message', data => { - expect(JSON.parse(data).data.test).to.be.eql('test'); + expect(JSON.parse(data.toString()).data.test).to.be.eql('test'); ws.close(); resolve(); }), @@ -63,7 +64,7 @@ describe('WebSocketGateway (WsAdapter)', () => { ); await new Promise(resolve => ws.on('message', data => { - expect(JSON.parse(data).data.test).to.be.eql('test'); + expect(JSON.parse(data.toString()).data.test).to.be.eql('test'); ws.close(); resolve(); }), @@ -90,7 +91,7 @@ describe('WebSocketGateway (WsAdapter)', () => { ); await new Promise(resolve => ws.on('message', data => { - expect(JSON.parse(data).data.test).to.be.eql('test'); + expect(JSON.parse(data.toString()).data.test).to.be.eql('test'); ws.close(); resolve(); }), @@ -115,7 +116,7 @@ describe('WebSocketGateway (WsAdapter)', () => { await new Promise(resolve => ws.on('open', () => { ws.on('message', data => { - expect(JSON.parse(data).data.test).to.be.eql('test'); + expect(JSON.parse(data.toString()).data.test).to.be.eql('test'); ws.close(); resolve(); }); @@ -132,7 +133,7 @@ describe('WebSocketGateway (WsAdapter)', () => { await new Promise(resolve => { ws2.on('message', data => { - expect(JSON.parse(data).data.test).to.be.eql('test'); + expect(JSON.parse(data.toString()).data.test).to.be.eql('test'); ws2.close(); resolve(); }); @@ -162,7 +163,7 @@ describe('WebSocketGateway (WsAdapter)', () => { await new Promise(resolve => ws.on('open', () => { ws.on('message', data => { - expect(JSON.parse(data).data.test).to.be.eql('test'); + expect(JSON.parse(data.toString()).data.test).to.be.eql('test'); ws.close(); resolve(); }); @@ -179,7 +180,7 @@ describe('WebSocketGateway (WsAdapter)', () => { await new Promise(resolve => { ws2.on('message', data => { - expect(JSON.parse(data).data.test).to.be.eql('test'); + expect(JSON.parse(data.toString()).data.test).to.be.eql('test'); ws2.close(); resolve(); }); @@ -211,7 +212,7 @@ describe('WebSocketGateway (WsAdapter)', () => { ); await new Promise(resolve => ws.on('message', data => { - expect(JSON.parse(data).data.path).to.be.eql('getClient'); + expect(JSON.parse(data.toString()).data.path).to.be.eql('getClient'); ws.close(); resolve(); }), @@ -238,7 +239,7 @@ describe('WebSocketGateway (WsAdapter)', () => { ws.send(JSON.stringify(['push', { test: 'test' }])); await new Promise(resolve => ws.on('message', data => { - expect(JSON.parse(data).data.test).to.be.eql('test'); + expect(JSON.parse(data.toString()).data.test).to.be.eql('test'); ws.close(); resolve(); }), @@ -266,7 +267,7 @@ describe('WebSocketGateway (WsAdapter)', () => { ws.send(JSON.stringify(['push', { test: 'test' }])); await new Promise(resolve => ws.on('message', data => { - expect(JSON.parse(data).data.test).to.be.eql('test'); + expect(JSON.parse(data.toString()).data.test).to.be.eql('test'); ws.close(); resolve(); }), diff --git a/integration/websockets/src/error.gateway.ts b/integration/websockets/src/error.gateway.ts index 9daca28da..7bc2c19c1 100644 --- a/integration/websockets/src/error.gateway.ts +++ b/integration/websockets/src/error.gateway.ts @@ -8,7 +8,7 @@ import { throwError } from 'rxjs'; @WebSocketGateway(8080) export class ErrorGateway { @SubscribeMessage('push') - onPush(client, data) { + onPush() { return throwError(() => new WsException('test')); } } diff --git a/package-lock.json b/package-lock.json index 9a9932810..8563c11eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,6 +34,8 @@ "@codechecks/client": "0.1.12", "@commitlint/cli": "19.5.0", "@commitlint/config-angular": "19.5.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "^9.15.0", "@fastify/cors": "9.0.1", "@fastify/formbody": "7.4.0", "@fastify/middie": "8.3.1", @@ -51,6 +53,7 @@ "@types/chai": "4.3.16", "@types/chai-as-promised": "7.1.8", "@types/cors": "2.8.17", + "@types/eslint__js": "^8.42.3", "@types/express": "4.17.21", "@types/gulp": "4.0.17", "@types/http-errors": "2.0.4", @@ -59,8 +62,6 @@ "@types/sinon": "17.0.3", "@types/supertest": "2.0.16", "@types/ws": "8.5.12", - "@typescript-eslint/eslint-plugin": "7.18.0", - "@typescript-eslint/parser": "7.18.0", "amqp-connection-manager": "4.1.14", "amqplib": "0.10.4", "artillery": "2.0.20", @@ -77,12 +78,14 @@ "coveralls": "3.1.1", "delete-empty": "3.0.0", "engine.io-client": "6.6.1", - "eslint": "8.57.1", + "eslint": "^9.15.0", "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.29.1", + "eslint-plugin-prettier": "^5.2.1", "eventsource": "2.0.2", "fancy-log": "2.0.0", "fastify": "4.28.1", + "globals": "^15.12.0", "graphql": "16.9.0", "graphql-tools": "9.0.1", "gulp": "4.0.2", @@ -110,7 +113,7 @@ "nats": "2.28.2", "nodemon": "3.1.5", "nyc": "14.1.1", - "prettier": "3.3.3", + "prettier": "^3.3.3", "redis": "4.7.0", "rxjs-compat": "6.6.7", "sinon": "19.0.2", @@ -122,6 +125,7 @@ "ts-node": "10.9.2", "typeorm": "0.3.20", "typescript": "5.6.2", + "typescript-eslint": "^8.15.0", "wrk": "1.2.1", "ws": "8.18.0" }, @@ -4796,23 +4800,75 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", + "node_modules/@eslint/config-array": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.0.tgz", + "integrity": "sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/config-array/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/core": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.0.tgz", + "integrity": "sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -4820,7 +4876,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -4847,6 +4903,47 @@ } } }, + "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", "dev": true, @@ -4870,12 +4967,35 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz", + "integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz", + "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@fastify/accept-negotiator": { @@ -5573,43 +5693,43 @@ "@hapi/hoek": "^9.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, + "license": "Apache-2.0", "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "ms": "^2.1.3" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", @@ -5623,12 +5743,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@hutson/parse-repository-url": { "version": "5.0.0", @@ -8136,6 +8263,18 @@ "node": ">=14" } }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/@playwright/browser-chromium": { "version": "1.45.3", "resolved": "https://registry.npmjs.org/@playwright/browser-chromium/-/browser-chromium-1.45.3.tgz", @@ -11455,6 +11594,31 @@ "@types/node": "*" } }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint__js": { + "version": "8.42.3", + "resolved": "https://registry.npmjs.org/@types/eslint__js/-/eslint__js-8.42.3.tgz", + "integrity": "sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==", + "dev": true, + "dependencies": { + "@types/eslint": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true + }, "node_modules/@types/expect": { "version": "1.20.4", "dev": true, @@ -11656,6 +11820,12 @@ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, "node_modules/@types/json5": { "version": "0.0.29", "dev": true, @@ -11867,282 +12037,6 @@ "@types/node": "*" } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "dev": true, - "license": "ISC" - }, "node_modules/@wry/context": { "version": "0.7.3", "dev": true, @@ -12200,9 +12094,10 @@ } }, "node_modules/acorn": { - "version": "8.9.0", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -18888,17 +18783,6 @@ "node": ">=8" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dogapi": { "version": "2.8.4", "resolved": "https://registry.npmjs.org/dogapi/-/dogapi-2.8.4.tgz", @@ -19575,14 +19459,6 @@ "source-map": "~0.6.1" } }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, "node_modules/escodegen/node_modules/source-map": { "version": "0.6.1", "dev": true, @@ -19593,58 +19469,63 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.15.0.tgz", + "integrity": "sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.15.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.5", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-prettier": { @@ -19733,6 +19614,53 @@ "semver": "bin/semver.js" } }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", "dev": true, @@ -19744,19 +19672,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" - }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "dev": true, @@ -19814,7 +19729,9 @@ "license": "MIT" }, "node_modules/eslint/node_modules/cross-spawn": { - "version": "7.0.3", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -19827,11 +19744,13 @@ } }, "node_modules/eslint/node_modules/debug": { - "version": "4.3.2", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -19853,27 +19772,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", + "node_modules/eslint/node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, "engines": { - "node": ">=4.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/find-up": { @@ -19910,37 +19837,6 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/is-path-inside": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint/node_modules/locate-path": { "version": "6.0.0", "dev": true, @@ -19955,6 +19851,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/eslint/node_modules/optionator": { "version": "0.9.3", "dev": true, @@ -20009,22 +19912,18 @@ }, "node_modules/eslint/node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/eslint/node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint/node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", "dependencies": { @@ -20036,36 +19935,18 @@ }, "node_modules/eslint/node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint/node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "license": "ISC", "dependencies": { @@ -20134,16 +20015,10 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -20153,8 +20028,10 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -20678,6 +20555,12 @@ "version": "3.1.3", "license": "MIT" }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, "node_modules/fast-glob": { "version": "3.3.2", "dev": true, @@ -21035,14 +20918,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-uri-to-path": { @@ -21319,33 +21204,23 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.2.2", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "dev": true, "license": "ISC" }, @@ -22214,25 +22089,12 @@ } }, "node_modules/globals": { - "version": "13.23.0", + "version": "15.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz", + "integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==", "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -26260,6 +26122,20 @@ "camelcase": "^4.1.0" } }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/libphonenumber-js": { "version": "1.10.53", "license": "MIT" @@ -32126,6 +32002,16 @@ "node": ">=14" } }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/prepend-http": { "version": "1.0.4", "dev": true, @@ -32163,6 +32049,18 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/pretty-hrtime": { "version": "1.0.3", "dev": true, @@ -35818,6 +35716,22 @@ "node": ">= 8" } }, + "node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/tap": { "version": "19.2.5", "resolved": "https://registry.npmjs.org/tap/-/tap-19.2.5.tgz", @@ -36211,11 +36125,6 @@ "node": ">=0.10" } }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, "node_modules/thenify": { "version": "3.3.1", "dev": true, @@ -37378,6 +37287,19 @@ "version": "1.2.0", "license": "ISC" }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/type-detect": { "version": "4.0.8", "dev": true, @@ -37941,6 +37863,293 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.15.0.tgz", + "integrity": "sha512-wY4FRGl0ZI+ZU4Jo/yjdBu0lVTSML58pu6PgGtJmCufvzfV565pUF6iACQt092uFOd49iLOTX/sEVmHtbSrS+w==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.15.0", + "@typescript-eslint/parser": "8.15.0", + "@typescript-eslint/utils": "8.15.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.15.0.tgz", + "integrity": "sha512-+zkm9AR1Ds9uLWN3fkoeXgFppaQ+uEVtfOV62dDmsy9QCNqlRHWNEck4yarvRNrvRcHQLGfqBNui3cimoz8XAg==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.15.0", + "@typescript-eslint/type-utils": "8.15.0", + "@typescript-eslint/utils": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.15.0.tgz", + "integrity": "sha512-7n59qFpghG4uazrF9qtGKBZXn7Oz4sOMm8dwNWDQY96Xlm2oX67eipqcblDj+oY1lLCbf1oltMZFpUso66Kl1A==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.15.0", + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/typescript-estree": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.15.0.tgz", + "integrity": "sha512-QRGy8ADi4J7ii95xz4UoiymmmMd/zuy9azCaamnZ3FM8T5fZcex8UfJcjkiEZjJSztKfEBe3dZ5T/5RHAmw2mA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.15.0.tgz", + "integrity": "sha512-UU6uwXDoI3JGSXmcdnP5d8Fffa2KayOhUUqr/AiBnG1Gl7+7ut/oyagVeSkh7bxQ0zSXV9ptRh/4N15nkCqnpw==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.15.0", + "@typescript-eslint/utils": "8.15.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.15.0.tgz", + "integrity": "sha512-n3Gt8Y/KyJNe0S3yDCD2RVKrHBC4gTUcLTebVBXacPy091E6tNspFLKRXlk3hwT4G55nfr1n2AdFqi/XMxzmPQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.15.0.tgz", + "integrity": "sha512-1eMp2JgNec/niZsR7ioFBlsh/Fk0oJbhaqO0jRyQBMgkz7RrFfkqF9lYYmBoGBaSiLnu8TAPQTwoTUiSTUW9dg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.15.0.tgz", + "integrity": "sha512-k82RI9yGhr0QM3Dnq+egEpz9qB6Un+WLYhmoNcvl8ltMEededhh7otBVVIDDsEEttauwdY/hQoSsOv13lxrFzQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.15.0", + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/typescript-estree": "8.15.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.15.0.tgz", + "integrity": "sha512-h8vYOulWec9LhpwfAdZf2bjr8xIp0KNKnpgqSz0qqYYKAW/QZKw3ktRndbiAtUz4acH4QLQavwZBYCc0wulA/Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.15.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/typescript-eslint/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typescript-eslint/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/typescript-eslint/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/uglify-js": { "version": "3.4.10", "dev": true, diff --git a/package.json b/package.json index 596d10e84..70ef05554 100644 --- a/package.json +++ b/package.json @@ -82,6 +82,8 @@ "@codechecks/client": "0.1.12", "@commitlint/cli": "19.5.0", "@commitlint/config-angular": "19.5.0", + "@eslint/eslintrc": "3.2.0", + "@eslint/js": "9.15.0", "@fastify/cors": "9.0.1", "@fastify/formbody": "7.4.0", "@fastify/middie": "8.3.1", @@ -99,6 +101,7 @@ "@types/chai": "4.3.16", "@types/chai-as-promised": "7.1.8", "@types/cors": "2.8.17", + "@types/eslint__js": "8.42.3", "@types/express": "4.17.21", "@types/gulp": "4.0.17", "@types/http-errors": "2.0.4", @@ -107,8 +110,6 @@ "@types/sinon": "17.0.3", "@types/supertest": "2.0.16", "@types/ws": "8.5.12", - "@typescript-eslint/eslint-plugin": "7.18.0", - "@typescript-eslint/parser": "7.18.0", "amqp-connection-manager": "4.1.14", "amqplib": "0.10.4", "artillery": "2.0.20", @@ -125,12 +126,14 @@ "coveralls": "3.1.1", "delete-empty": "3.0.0", "engine.io-client": "6.6.1", - "eslint": "8.57.1", + "eslint": "9.15.0", "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.29.1", + "eslint-plugin-prettier": "5.2.1", "eventsource": "2.0.2", "fancy-log": "2.0.0", "fastify": "4.28.1", + "globals": "15.12.0", "graphql": "16.9.0", "graphql-tools": "9.0.1", "gulp": "4.0.2", @@ -170,6 +173,7 @@ "ts-node": "10.9.2", "typeorm": "0.3.20", "typescript": "5.6.2", + "typescript-eslint": "8.15.0", "wrk": "1.2.1", "ws": "8.18.0" }, diff --git a/packages/common/decorators/core/exception-filters.decorator.ts b/packages/common/decorators/core/exception-filters.decorator.ts index cf730f84c..27bc387b9 100644 --- a/packages/common/decorators/core/exception-filters.decorator.ts +++ b/packages/common/decorators/core/exception-filters.decorator.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-use-before-define */ import { EXCEPTION_FILTERS_METADATA } from '../../constants'; import { ExceptionFilter } from '../../index'; import { extendArrayMetadata } from '../../utils/extend-metadata.util'; @@ -40,9 +39,7 @@ function addExceptionFiltersMetadata( ) => { const isFilterValid = >( filter: T, - ) => - filter && - (isFunction(filter) || isFunction((filter as Record).catch)); + ) => filter && (isFunction(filter) || isFunction(filter.catch)); if (descriptor) { validateEach( diff --git a/packages/common/decorators/core/use-guards.decorator.ts b/packages/common/decorators/core/use-guards.decorator.ts index 0e2bde1b4..c3fb7cd2f 100644 --- a/packages/common/decorators/core/use-guards.decorator.ts +++ b/packages/common/decorators/core/use-guards.decorator.ts @@ -34,9 +34,7 @@ export function UseGuards( descriptor?: TypedPropertyDescriptor, ) => { const isGuardValid = >(guard: T) => - guard && - (isFunction(guard) || - isFunction((guard as Record).canActivate)); + guard && (isFunction(guard) || isFunction(guard.canActivate)); if (descriptor) { validateEach( diff --git a/packages/common/decorators/core/use-interceptors.decorator.ts b/packages/common/decorators/core/use-interceptors.decorator.ts index 9923bc34c..474c47a6d 100644 --- a/packages/common/decorators/core/use-interceptors.decorator.ts +++ b/packages/common/decorators/core/use-interceptors.decorator.ts @@ -37,8 +37,7 @@ export function UseInterceptors( interceptor: T, ) => interceptor && - (isFunction(interceptor) || - isFunction((interceptor as Record).intercept)); + (isFunction(interceptor) || isFunction(interceptor.intercept)); if (descriptor) { validateEach( diff --git a/packages/common/decorators/core/use-pipes.decorator.ts b/packages/common/decorators/core/use-pipes.decorator.ts index 03a7bc08d..b9ead653f 100644 --- a/packages/common/decorators/core/use-pipes.decorator.ts +++ b/packages/common/decorators/core/use-pipes.decorator.ts @@ -35,8 +35,7 @@ export function UsePipes( descriptor?: TypedPropertyDescriptor, ) => { const isPipeValid = >(pipe: T) => - pipe && - (isFunction(pipe) || isFunction((pipe as Record).transform)); + pipe && (isFunction(pipe) || isFunction(pipe.transform)); if (descriptor) { extendArrayMetadata(PIPES_METADATA, pipes, descriptor.value); diff --git a/packages/common/exceptions/http.exception.ts b/packages/common/exceptions/http.exception.ts index 143df233e..a69e64905 100644 --- a/packages/common/exceptions/http.exception.ts +++ b/packages/common/exceptions/http.exception.ts @@ -86,11 +86,8 @@ export class HttpException extends Error { public initMessage() { if (isString(this.response)) { this.message = this.response; - } else if ( - isObject(this.response) && - isString((this.response as Record).message) - ) { - this.message = (this.response as Record).message; + } else if (isObject(this.response) && isString(this.response.message)) { + this.message = this.response.message; } else if (this.constructor) { this.message = this.constructor.name.match(/[A-Z][a-z]+|[0-9]+/g)?.join(' ') ?? diff --git a/packages/common/pipes/parse-array.pipe.ts b/packages/common/pipes/parse-array.pipe.ts index 3887dfe23..91f3bb1cb 100644 --- a/packages/common/pipes/parse-array.pipe.ts +++ b/packages/common/pipes/parse-array.pipe.ts @@ -126,8 +126,8 @@ export class ParseArrayPipe implements PipeTransform { targetArray[i] = await toClassInstance(targetArray[i]); } catch (err) { let message: string[] | unknown; - if ((err as any).getResponse) { - const response = (err as any).getResponse(); + if (err.getResponse) { + const response = err.getResponse(); if (Array.isArray(response.message)) { message = response.message.map( (item: string) => `[${i}] ${item}`, diff --git a/packages/common/pipes/parse-date.pipe.ts b/packages/common/pipes/parse-date.pipe.ts index 4980882a4..c86ca3630 100644 --- a/packages/common/pipes/parse-date.pipe.ts +++ b/packages/common/pipes/parse-date.pipe.ts @@ -54,9 +54,7 @@ export class ParseDatePipe */ transform(value: string | number | undefined | null): Date { if (this.options.optional && isNil(value)) { - return this.options.default - ? this.options.default() - : (value as undefined | null); + return this.options.default ? this.options.default() : value; } if (!value) { diff --git a/packages/common/services/console-logger.service.ts b/packages/common/services/console-logger.service.ts index 79c967f17..2b6e54c03 100644 --- a/packages/common/services/console-logger.service.ts +++ b/packages/common/services/console-logger.service.ts @@ -142,7 +142,7 @@ export class ConsoleLogger implements LoggerService { // eslint-disable-next-line prefer-const let [context, opts] = isString(contextOrOptions) ? [contextOrOptions, options] - : !!options + : options ? [undefined, options] : [contextOrOptions?.context, contextOrOptions]; @@ -515,7 +515,7 @@ export class ConsoleLogger implements LoggerService { return { messages: args, context: this.context }; } return { - context: lastElement as string, + context: lastElement, messages: args.slice(0, args.length - 1), }; } @@ -545,7 +545,7 @@ export class ConsoleLogger implements LoggerService { return { messages, context }; } return { - stack: lastElement as string, + stack: lastElement, messages: messages.slice(0, messages.length - 1), context, }; diff --git a/packages/common/test/utils/load-package.util.spec.ts b/packages/common/test/utils/load-package.util.spec.ts index 7ca864409..3126cb3b6 100644 --- a/packages/common/test/utils/load-package.util.spec.ts +++ b/packages/common/test/utils/load-package.util.spec.ts @@ -5,7 +5,6 @@ describe('loadPackage', () => { describe('when package is available', () => { it('should return package', () => { expect(loadPackage('reflect-metadata', 'ctx')).to.be.eql( - // eslint-disable-next-line @typescript-eslint/no-var-requires require('reflect-metadata'), ); }); diff --git a/packages/common/utils/shared.utils.ts b/packages/common/utils/shared.utils.ts index 876b41551..c2582dc0f 100644 --- a/packages/common/utils/shared.utils.ts +++ b/packages/common/utils/shared.utils.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-use-before-define */ export const isUndefined = (obj: any): obj is undefined => typeof obj === 'undefined'; diff --git a/packages/core/adapters/http-adapter.ts b/packages/core/adapters/http-adapter.ts index 106e447ca..d36fc2c12 100644 --- a/packages/core/adapters/http-adapter.ts +++ b/packages/core/adapters/http-adapter.ts @@ -19,7 +19,6 @@ export abstract class AbstractHttpAdapter< constructor(protected instance?: any) {} - // eslint-disable-next-line @typescript-eslint/no-empty-function public async init() {} public use(...args: any[]) { @@ -129,7 +128,7 @@ export abstract class AbstractHttpAdapter< } public getHttpServer(): TServer { - return this.httpServer as TServer; + return this.httpServer; } public setHttpServer(httpServer: TServer) { diff --git a/packages/core/hooks/before-app-shutdown.hook.ts b/packages/core/hooks/before-app-shutdown.hook.ts index 8925cb61a..25652dd31 100644 --- a/packages/core/hooks/before-app-shutdown.hook.ts +++ b/packages/core/hooks/before-app-shutdown.hook.ts @@ -70,8 +70,6 @@ export async function callBeforeAppShutdownHook( hasBeforeApplicationShutdownHook(moduleClassInstance) && moduleClassHost.isDependencyTreeStatic() ) { - await ( - moduleClassInstance as BeforeApplicationShutdown - ).beforeApplicationShutdown(signal); + await moduleClassInstance.beforeApplicationShutdown(signal); } } diff --git a/packages/core/hooks/on-app-bootstrap.hook.ts b/packages/core/hooks/on-app-bootstrap.hook.ts index 10e14d099..583ad8fbc 100644 --- a/packages/core/hooks/on-app-bootstrap.hook.ts +++ b/packages/core/hooks/on-app-bootstrap.hook.ts @@ -64,8 +64,6 @@ export async function callModuleBootstrapHook(module: Module): Promise { hasOnAppBootstrapHook(moduleClassInstance) && moduleClassHost.isDependencyTreeStatic() ) { - await ( - moduleClassInstance as OnApplicationBootstrap - ).onApplicationBootstrap(); + await moduleClassInstance.onApplicationBootstrap(); } } diff --git a/packages/core/hooks/on-app-shutdown.hook.ts b/packages/core/hooks/on-app-shutdown.hook.ts index 7f58d0ee7..2496d5888 100644 --- a/packages/core/hooks/on-app-shutdown.hook.ts +++ b/packages/core/hooks/on-app-shutdown.hook.ts @@ -69,8 +69,6 @@ export async function callAppShutdownHook( hasOnAppShutdownHook(moduleClassInstance) && moduleClassHost.isDependencyTreeStatic() ) { - await (moduleClassInstance as OnApplicationShutdown).onApplicationShutdown( - signal, - ); + await moduleClassInstance.onApplicationShutdown(signal); } } diff --git a/packages/core/hooks/on-module-destroy.hook.ts b/packages/core/hooks/on-module-destroy.hook.ts index a631cbc85..41c9f435f 100644 --- a/packages/core/hooks/on-module-destroy.hook.ts +++ b/packages/core/hooks/on-module-destroy.hook.ts @@ -63,6 +63,6 @@ export async function callModuleDestroyHook(module: Module): Promise { hasOnModuleDestroyHook(moduleClassInstance) && moduleClassHost.isDependencyTreeStatic() ) { - await (moduleClassInstance as OnModuleDestroy).onModuleDestroy(); + await moduleClassInstance.onModuleDestroy(); } } diff --git a/packages/core/hooks/on-module-init.hook.ts b/packages/core/hooks/on-module-init.hook.ts index 52a34cb6a..7b821e89a 100644 --- a/packages/core/hooks/on-module-init.hook.ts +++ b/packages/core/hooks/on-module-init.hook.ts @@ -59,6 +59,6 @@ export async function callModuleInitHook(module: Module): Promise { hasOnModuleInitHook(moduleClassInstance) && moduleClassHost.isDependencyTreeStatic() ) { - await (moduleClassInstance as OnModuleInit).onModuleInit(); + await moduleClassInstance.onModuleInit(); } } diff --git a/packages/core/injector/helpers/silent-logger.ts b/packages/core/injector/helpers/silent-logger.ts index 07ae0ecc4..d4de2c7eb 100644 --- a/packages/core/injector/helpers/silent-logger.ts +++ b/packages/core/injector/helpers/silent-logger.ts @@ -1,6 +1,5 @@ import { Logger } from '@nestjs/common'; -// eslint-disable-next-line @typescript-eslint/no-empty-function const noop = () => {}; export class SilentLogger extends Logger { log = noop; diff --git a/packages/core/injector/inquirer/inquirer-providers.ts b/packages/core/injector/inquirer/inquirer-providers.ts index 3f741802f..20a49d217 100644 --- a/packages/core/injector/inquirer/inquirer-providers.ts +++ b/packages/core/injector/inquirer/inquirer-providers.ts @@ -1,7 +1,6 @@ import { Provider, Scope } from '@nestjs/common'; import { INQUIRER } from './inquirer-constants'; -// eslint-disable-next-line @typescript-eslint/no-empty-function const noop = () => {}; export const inquirerProvider: Provider = { provide: INQUIRER, diff --git a/packages/core/injector/instance-wrapper.ts b/packages/core/injector/instance-wrapper.ts index 5c5f729f9..020e9bf0c 100644 --- a/packages/core/injector/instance-wrapper.ts +++ b/packages/core/injector/instance-wrapper.ts @@ -338,7 +338,7 @@ export class InstanceWrapper { public isInRequestScope( contextId: ContextId, - inquirer?: InstanceWrapper | undefined, + inquirer?: InstanceWrapper, ): boolean { const isDependencyTreeStatic = this.isDependencyTreeStatic(); diff --git a/packages/core/inspector/noop-graph-inspector.ts b/packages/core/inspector/noop-graph-inspector.ts index f4a36ee0e..ba48ce5d8 100644 --- a/packages/core/inspector/noop-graph-inspector.ts +++ b/packages/core/inspector/noop-graph-inspector.ts @@ -1,6 +1,5 @@ import { GraphInspector } from './graph-inspector'; -// eslint-disable-next-line @typescript-eslint/no-empty-function const noop = () => {}; export const NoopGraphInspector: GraphInspector = new Proxy( GraphInspector.prototype, diff --git a/packages/core/middleware/utils.ts b/packages/core/middleware/utils.ts index 7a23e24d0..f9883a64c 100644 --- a/packages/core/middleware/utils.ts +++ b/packages/core/middleware/utils.ts @@ -52,7 +52,7 @@ export const mapToClass = >( if (excludedRoutes.length <= 0) { return middleware; } - const MiddlewareHost = class extends (middleware as Type) { + const MiddlewareHost = class extends middleware { use(...params: unknown[]) { const [req, _, next] = params as [Record, any, Function]; const isExcluded = isMiddlewareRouteExcluded( diff --git a/packages/core/router/request/request-providers.ts b/packages/core/router/request/request-providers.ts index 3334b7c93..308f79065 100644 --- a/packages/core/router/request/request-providers.ts +++ b/packages/core/router/request/request-providers.ts @@ -1,7 +1,6 @@ import { Provider, Scope } from '@nestjs/common'; import { REQUEST } from './request-constants'; -// eslint-disable-next-line @typescript-eslint/no-empty-function const noop = () => {}; export const requestProvider: Provider = { provide: REQUEST, diff --git a/packages/core/router/router-explorer.ts b/packages/core/router/router-explorer.ts index 411d86efb..52ae84109 100644 --- a/packages/core/router/router-explorer.ts +++ b/packages/core/router/router-explorer.ts @@ -225,9 +225,8 @@ export class RouterExplorer { requestMethod: RequestMethod[ requestMethod ] as keyof typeof RequestMethod, - methodVersion: routePathMetadata.methodVersion as VersionValue, - controllerVersion: - routePathMetadata.controllerVersion as VersionValue, + methodVersion: routePathMetadata.methodVersion, + controllerVersion: routePathMetadata.controllerVersion, }, }; diff --git a/packages/core/scanner.ts b/packages/core/scanner.ts index 38b8f9dc7..aba25daca 100644 --- a/packages/core/scanner.ts +++ b/packages/core/scanner.ts @@ -411,7 +411,7 @@ export class DependenciesScanner { }); }; - const rootModule = modulesGenerator.next().value as Module; + const rootModule = modulesGenerator.next().value; calculateDistance(rootModule); } @@ -438,17 +438,11 @@ export class DependenciesScanner { public insertProvider(provider: Provider, token: string) { const isCustomProvider = this.isCustomProvider(provider); if (!isCustomProvider) { - return this.container.addProvider(provider as Type, token); + return this.container.addProvider(provider, token); } const applyProvidersMap = this.getApplyProvidersMap(); const providersKeys = Object.keys(applyProvidersMap); - const type = ( - provider as - | ClassProvider - | ValueProvider - | FactoryProvider - | ExistingProvider - ).provide; + const type = provider.provide; if (!providersKeys.includes(type as string)) { return this.container.addProvider(provider as any, token); diff --git a/packages/core/test/helpers/external-context-creator.spec.ts b/packages/core/test/helpers/external-context-creator.spec.ts index cad7ed3b5..cae5fa051 100644 --- a/packages/core/test/helpers/external-context-creator.spec.ts +++ b/packages/core/test/helpers/external-context-creator.spec.ts @@ -55,7 +55,7 @@ describe('ExternalContextCreator', () => { contextCreator, 'getContextModuleKey', ); - contextCreator.create({ foo: 'bar' }, callback as any, '', '', null); + contextCreator.create({ foo: 'bar' }, callback, '', '', null); expect(getContextModuleKeySpy.called).to.be.true; done(); }); @@ -65,13 +65,7 @@ describe('ExternalContextCreator', () => { beforeEach(() => { instance = { foo: 'bar' }; - proxyContext = contextCreator.create( - instance, - callback as any, - '', - '', - null, - ); + proxyContext = contextCreator.create(instance, callback, '', '', null); }); it('should be a function', () => { expect(proxyContext).to.be.a('function'); diff --git a/packages/core/test/injector/helpers/provider-classifier.spec.ts b/packages/core/test/injector/helpers/provider-classifier.spec.ts index 091600bfb..9314cfe99 100644 --- a/packages/core/test/injector/helpers/provider-classifier.spec.ts +++ b/packages/core/test/injector/helpers/provider-classifier.spec.ts @@ -126,7 +126,7 @@ describe('provider classifier', () => { useFactory: undefined, }; - expect(isFactoryProvider(factoryProvider as FactoryProvider)).to.be.false; + expect(isFactoryProvider(factoryProvider)).to.be.false; }); }); }); diff --git a/packages/core/test/injector/module.spec.ts b/packages/core/test/injector/module.spec.ts index 53d3acc9f..345f7438e 100644 --- a/packages/core/test/injector/module.spec.ts +++ b/packages/core/test/injector/module.spec.ts @@ -116,7 +116,7 @@ describe('Module', () => { const provider = { provide: 'test', useValue: 'test' }; moduleRef.addProvider(provider as any); - expect((addCustomProvider as sinon.SinonSpy).called).to.be.true; + expect(addCustomProvider.called).to.be.true; }); it('should call "addCustomClass" when "useClass" property exists', () => { @@ -126,7 +126,7 @@ describe('Module', () => { const provider = { provide: 'test', useClass: () => null }; moduleRef.addCustomProvider(provider as any, new Map()); - expect((addCustomClass as sinon.SinonSpy).called).to.be.true; + expect(addCustomClass.called).to.be.true; }); it('should call "addCustomValue" when "useValue" property exists', () => { @@ -136,7 +136,7 @@ describe('Module', () => { const provider = { provide: 'test', useValue: () => null }; moduleRef.addCustomProvider(provider as any, new Map()); - expect((addCustomValue as sinon.SinonSpy).called).to.be.true; + expect(addCustomValue.called).to.be.true; }); it('should call "addCustomValue" when "useValue" property exists but its value is `undefined`', () => { @@ -146,7 +146,7 @@ describe('Module', () => { const provider = { provide: 'test', useValue: undefined }; moduleRef.addCustomProvider(provider as any, new Map()); - expect((addCustomValue as sinon.SinonSpy).called).to.be.true; + expect(addCustomValue.called).to.be.true; }); it('should call "addCustomFactory" when "useFactory" property exists', () => { @@ -156,7 +156,7 @@ describe('Module', () => { const provider = { provide: 'test', useFactory: () => null }; moduleRef.addCustomProvider(provider as any, new Map()); - expect((addCustomFactory as sinon.SinonSpy).called).to.be.true; + expect(addCustomFactory.called).to.be.true; }); it('should call "addCustomUseExisting" when "useExisting" property exists', () => { @@ -166,7 +166,7 @@ describe('Module', () => { const provider = { provide: 'test', useExisting: () => null }; moduleRef.addCustomUseExisting(provider as any, new Map()); - expect((addCustomUseExisting as sinon.SinonSpy).called).to.be.true; + expect(addCustomUseExisting.called).to.be.true; }); describe('addCustomClass', () => { diff --git a/packages/core/test/interceptors/interceptors-context-creator.spec.ts b/packages/core/test/interceptors/interceptors-context-creator.spec.ts index 0e093b2a2..81d74a2ff 100644 --- a/packages/core/test/interceptors/interceptors-context-creator.spec.ts +++ b/packages/core/test/interceptors/interceptors-context-creator.spec.ts @@ -53,7 +53,7 @@ describe('InterceptorsContextCreator', () => { }; applicationConfig = new ApplicationConfig(); interceptorsContextCreator = new InterceptorsContextCreator( - container as any, + container, applicationConfig, ); }); diff --git a/packages/core/test/middleware/utils.spec.ts b/packages/core/test/middleware/utils.spec.ts index a1c91d77b..927d40d27 100644 --- a/packages/core/test/middleware/utils.spec.ts +++ b/packages/core/test/middleware/utils.spec.ts @@ -75,12 +75,12 @@ describe('middleware utils', () => { expect(metatype).to.not.eql(fnMiddleware); }); it('should define a `use` method', () => { - const metatype = mapToClass(fnMiddleware, [], noopAdapter) as Type; + const metatype = mapToClass(fnMiddleware, [], noopAdapter); expect(new metatype().use).to.exist; }); it('should encapsulate a function', () => { const spy = sinon.spy(); - const metatype = mapToClass(spy, [], noopAdapter) as Type; + const metatype = mapToClass(spy, [], noopAdapter); new metatype().use(); expect(spy.called).to.be.true; }); diff --git a/packages/core/test/router/router-execution-context.spec.ts b/packages/core/test/router/router-execution-context.spec.ts index f8e032d57..bf0af4271 100644 --- a/packages/core/test/router/router-execution-context.spec.ts +++ b/packages/core/test/router/router-execution-context.spec.ts @@ -84,7 +84,7 @@ describe('RouterExecutionContext', () => { it('should call "exchangeKeysForValues" with expected arguments', done => { const keys = Object.keys(metadata); - contextCreator.create({ foo: 'bar' }, callback as any, '', '', 0); + contextCreator.create({ foo: 'bar' }, callback, '', '', 0); expect(exchangeKeysForValuesSpy.called).to.be.true; expect(exchangeKeysForValuesSpy.calledWith(keys, metadata)).to.be.true; done(); @@ -105,13 +105,7 @@ describe('RouterExecutionContext', () => { tryActivateStub = sinon .stub(guardsConsumer, 'tryActivate') .callsFake(async () => true); - proxyContext = contextCreator.create( - instance, - callback as any, - '', - '', - 0, - ); + proxyContext = contextCreator.create(instance, callback, '', '', 0); }); it('should be a function', () => { expect(proxyContext).to.be.a('function'); diff --git a/packages/microservices/decorators/message-pattern.decorator.ts b/packages/microservices/decorators/message-pattern.decorator.ts index a9f9a748c..32030fe8a 100644 --- a/packages/microservices/decorators/message-pattern.decorator.ts +++ b/packages/microservices/decorators/message-pattern.decorator.ts @@ -4,7 +4,7 @@ import { isNil, isSymbol, } from '@nestjs/common/utils/shared.utils'; -/* eslint-disable @typescript-eslint/no-use-before-define */ + import { PATTERN_HANDLER_METADATA, PATTERN_METADATA, diff --git a/packages/microservices/exceptions/base-rpc-exception-filter.ts b/packages/microservices/exceptions/base-rpc-exception-filter.ts index 849bc9ac2..dbac62039 100644 --- a/packages/microservices/exceptions/base-rpc-exception-filter.ts +++ b/packages/microservices/exceptions/base-rpc-exception-filter.ts @@ -1,4 +1,3 @@ -/* eslint-disable prefer-spread */ import { ArgumentsHost, Logger, RpcExceptionFilter } from '@nestjs/common'; import { isObject } from '@nestjs/common/utils/shared.utils'; import { MESSAGES } from '@nestjs/core/constants'; diff --git a/packages/microservices/server/server-factory.ts b/packages/microservices/server/server-factory.ts index ac77a6887..b978d9f40 100644 --- a/packages/microservices/server/server-factory.ts +++ b/packages/microservices/server/server-factory.ts @@ -20,19 +20,19 @@ export class ServerFactory { >; switch (transport) { case Transport.REDIS: - return new ServerRedis(options as ServerRedis['options']); + return new ServerRedis(options); case Transport.NATS: - return new ServerNats(options as ServerNats['options']); + return new ServerNats(options); case Transport.MQTT: - return new ServerMqtt(options as MqttOptions['options']); + return new ServerMqtt(options); case Transport.GRPC: - return new ServerGrpc(options as ServerGrpc['options']); + return new ServerGrpc(options); case Transport.KAFKA: - return new ServerKafka(options as ServerKafka['options']); + return new ServerKafka(options); case Transport.RMQ: - return new ServerRMQ(options as ServerRMQ['options']); + return new ServerRMQ(options); default: - return new ServerTCP(options as ServerTCP['options']); + return new ServerTCP(options); } } } diff --git a/packages/microservices/server/server-grpc.ts b/packages/microservices/server/server-grpc.ts index 118764799..b46943ef4 100644 --- a/packages/microservices/server/server-grpc.ts +++ b/packages/microservices/server/server-grpc.ts @@ -328,7 +328,7 @@ export class ServerGrpc extends Server { const drain = () => { writing = true; while (valuesWaitingToBeDrained.length > 0) { - const value = valuesWaitingToBeDrained.shift()!; + const value = valuesWaitingToBeDrained.shift(); if (writing) { // The first time `call.write` returns false, we need to stop. // It wrote the value, but it won't write anything else. diff --git a/packages/microservices/server/server-nats.ts b/packages/microservices/server/server-nats.ts index f3212fcb4..2cc3a97bf 100644 --- a/packages/microservices/server/server-nats.ts +++ b/packages/microservices/server/server-nats.ts @@ -179,7 +179,7 @@ export class ServerNats< // In case the "reply" topic is not provided, there's no need for a reply. // Method returns a noop function instead - // eslint-disable-next-line @typescript-eslint/no-empty-function + return () => {}; } diff --git a/packages/microservices/test/client/client-mqtt.spec.ts b/packages/microservices/test/client/client-mqtt.spec.ts index 0c60dba6a..ffba44dda 100644 --- a/packages/microservices/test/client/client-mqtt.spec.ts +++ b/packages/microservices/test/client/client-mqtt.spec.ts @@ -315,7 +315,7 @@ describe('ClientMqtt', () => { on: (ev, callback) => callback(error), off: () => ({}), }; - client.mergeCloseEvent(instance as any, EMPTY).subscribe({ + client.mergeCloseEvent(instance, EMPTY).subscribe({ error: (err: any) => expect(err).to.be.eql(error), }); }); diff --git a/packages/microservices/test/client/client-rmq.spec.ts b/packages/microservices/test/client/client-rmq.spec.ts index 25a6a2dd2..f0329cdb2 100644 --- a/packages/microservices/test/client/client-rmq.spec.ts +++ b/packages/microservices/test/client/client-rmq.spec.ts @@ -174,7 +174,7 @@ describe('ClientRMQ', function () { off: () => ({}), }; client - .mergeDisconnectEvent(instance as any, EMPTY) + .mergeDisconnectEvent(instance, EMPTY) .subscribe({ error: (err: any) => expect(err).to.be.eql(error) }); }); }); diff --git a/packages/microservices/test/helpers/kafka-reply-partition-assigner.spec.ts b/packages/microservices/test/helpers/kafka-reply-partition-assigner.spec.ts index 93ab12f73..1004deb5c 100644 --- a/packages/microservices/test/helpers/kafka-reply-partition-assigner.spec.ts +++ b/packages/microservices/test/helpers/kafka-reply-partition-assigner.spec.ts @@ -21,7 +21,7 @@ describe('kafka reply partition assigner', () => { getPreviousAssignment = sinon.spy(assigner, 'getPreviousAssignment'); // reset previous assignments - (client as any).consumerAssignments = {}; + client.consumerAssignments = {}; }); describe('assign', () => { @@ -259,7 +259,7 @@ describe('kafka reply partition assigner', () => { describe('protocol', () => { it('returns the assigner name and metadata', () => { // set previous assignments - (client as any).consumerAssignments = { + client.consumerAssignments = { 'topic-A': 0, 'topic-B': 1, }; @@ -276,7 +276,7 @@ describe('kafka reply partition assigner', () => { topics, userData: Buffer.from( JSON.stringify({ - previousAssignment: (client as any).consumerAssignments, + previousAssignment: client.consumerAssignments, }), ), }), diff --git a/packages/microservices/test/listeners-controller.spec.ts b/packages/microservices/test/listeners-controller.spec.ts index 8e82bdf3d..a0faa82c3 100644 --- a/packages/microservices/test/listeners-controller.spec.ts +++ b/packages/microservices/test/listeners-controller.spec.ts @@ -26,7 +26,7 @@ describe('ListenersController', () => { server: any, serverTCP: any, serverCustom: any, - customTransport: Symbol, + customTransport: symbol, addSpy: sinon.SinonSpy, addSpyTCP: sinon.SinonSpy, addSpyCustom: sinon.SinonSpy, diff --git a/packages/microservices/test/module/clients.module.spec.ts b/packages/microservices/test/module/clients.module.spec.ts index 37feba4fa..4b85be39a 100644 --- a/packages/microservices/test/module/clients.module.spec.ts +++ b/packages/microservices/test/module/clients.module.spec.ts @@ -98,9 +98,7 @@ describe('ClientsModule', () => { createClientOptions: sinon.spy(), }; try { - await ((dynamicModule.providers[0] as any).useFactory as any)( - optionsFactory, - ); + await (dynamicModule.providers[0] as any).useFactory(optionsFactory); } catch (e) { console.log(e); } diff --git a/packages/platform-express/adapters/utils/get-body-parser-options.util.ts b/packages/platform-express/adapters/utils/get-body-parser-options.util.ts index c89ed92ab..f7833ad68 100644 --- a/packages/platform-express/adapters/utils/get-body-parser-options.util.ts +++ b/packages/platform-express/adapters/utils/get-body-parser-options.util.ts @@ -15,7 +15,7 @@ const rawBodyParser = ( export function getBodyParserOptions( rawBody: boolean, - options?: Omit | undefined, + options?: Omit, ): Options { let parserOptions: Options = (options || {}) as Options; diff --git a/packages/platform-express/test/multer/multer/multer.module.spec.ts b/packages/platform-express/test/multer/multer/multer.module.spec.ts index 35a34f7a0..7ac73e63d 100644 --- a/packages/platform-express/test/multer/multer/multer.module.spec.ts +++ b/packages/platform-express/test/multer/multer/multer.module.spec.ts @@ -76,9 +76,7 @@ describe('MulterModule', () => { const optionsFactory = { createMulterOptions: sinon.spy(), }; - await ((dynamicModule.providers[0] as any).useFactory as any)( - optionsFactory, - ); + await (dynamicModule.providers[0] as any).useFactory(optionsFactory); expect(optionsFactory.createMulterOptions.called).to.be.true; }); }); diff --git a/packages/platform-fastify/adapters/fastify-adapter.ts b/packages/platform-fastify/adapters/fastify-adapter.ts index 5345f3e3c..10ced1290 100644 --- a/packages/platform-fastify/adapters/fastify-adapter.ts +++ b/packages/platform-fastify/adapters/fastify-adapter.ts @@ -426,7 +426,7 @@ export class FastifyAdapter< response.statusCode = statusCode; return response; } - return (response as TReply).code(statusCode); + return response.code(statusCode); } public end(response: TReply, message?: string) { diff --git a/packages/platform-socket.io/adapters/io-adapter.ts b/packages/platform-socket.io/adapters/io-adapter.ts index c18dd6ebe..fc540462f 100644 --- a/packages/platform-socket.io/adapters/io-adapter.ts +++ b/packages/platform-socket.io/adapters/io-adapter.ts @@ -67,7 +67,7 @@ export class IoAdapter extends AbstractWsAdapter { public mapPayload(payload: unknown): { data: any; ack?: Function } { if (!Array.isArray(payload)) { if (isFunction(payload)) { - return { data: undefined, ack: payload as Function }; + return { data: undefined, ack: payload }; } return { data: payload }; } diff --git a/packages/testing/services/testing-logger.service.ts b/packages/testing/services/testing-logger.service.ts index 3e4b89bf8..a1ca5d107 100644 --- a/packages/testing/services/testing-logger.service.ts +++ b/packages/testing/services/testing-logger.service.ts @@ -1,5 +1,3 @@ -/* eslint-disable @typescript-eslint/no-empty-function */ -/* eslint-disable @typescript-eslint/no-unused-vars */ import { ConsoleLogger } from '@nestjs/common'; /** diff --git a/packages/websockets/adapters/ws-adapter.ts b/packages/websockets/adapters/ws-adapter.ts index b32be38b8..b5499b7ae 100644 --- a/packages/websockets/adapters/ws-adapter.ts +++ b/packages/websockets/adapters/ws-adapter.ts @@ -39,7 +39,6 @@ export abstract class AbstractWsAdapter< isCallable && (await new Promise(resolve => server.close(resolve))); } - // eslint-disable-next-line @typescript-eslint/no-empty-function public async dispose() {} public abstract create(port: number, options?: TOptions): TServer; diff --git a/packages/websockets/web-sockets-controller.ts b/packages/websockets/web-sockets-controller.ts index bb29f373f..d4103e79f 100644 --- a/packages/websockets/web-sockets-controller.ts +++ b/packages/websockets/web-sockets-controller.ts @@ -235,7 +235,7 @@ export class WebSocketsController { instance: NestGateway, subscribersMap: MessageMappingProperties[], ) { - const gatewayClassName = (instance as Object)?.constructor?.name; + const gatewayClassName = (instance as object)?.constructor?.name; if (!gatewayClassName) { return; } diff --git a/tsconfig.spec.json b/tsconfig.spec.json index 95af08508..204fc267b 100644 --- a/tsconfig.spec.json +++ b/tsconfig.spec.json @@ -1,5 +1,5 @@ { "extends": "./tsconfig.json", - "include": ["integration/**/*", "**/*.spec.ts"], + "include": ["integration/**/*", "integration/**/*.spec.ts", "packages/**/*.spec.ts"], "exclude": ["node_modules", "dist"] } \ No newline at end of file