From 8617ee9952f4961841c8609329de9627cd8087f9 Mon Sep 17 00:00:00 2001 From: Manuel Herrera Date: Wed, 19 Jan 2022 22:30:22 -0300 Subject: [PATCH 001/122] feat(microservices): added MqttOption for passing raw output to pub --- .../interfaces/microservice-configuration.interface.ts | 1 + packages/microservices/server/server-mqtt.ts | 7 +++++-- packages/microservices/test/server/server-mqtt.spec.ts | 7 +++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/microservices/interfaces/microservice-configuration.interface.ts b/packages/microservices/interfaces/microservice-configuration.interface.ts index 9942b8b5580..9d63931f3c2 100644 --- a/packages/microservices/interfaces/microservice-configuration.interface.ts +++ b/packages/microservices/interfaces/microservice-configuration.interface.ts @@ -119,6 +119,7 @@ export interface MqttOptions { rh?: number; }; userProperties?: Record; + rawOutputPackets?: boolean; }; } diff --git a/packages/microservices/server/server-mqtt.ts b/packages/microservices/server/server-mqtt.ts index 6ba956b68c8..4dc058116c5 100644 --- a/packages/microservices/server/server-mqtt.ts +++ b/packages/microservices/server/server-mqtt.ts @@ -32,11 +32,12 @@ export class ServerMqtt extends Server implements CustomTransportStrategy { private readonly url: string; private mqttClient: MqttClient; + rawOutputPackets: boolean; constructor(private readonly options: MqttOptions['options']) { super(); this.url = this.getOptionsProp(options, 'url') || MQTT_DEFAULT_URL; - + this.rawOutputPackets = this.getOptionsProp(options, 'rawOutputPackets'); mqttPackage = this.loadPackage('mqtt', ServerMqtt.name, () => require('mqtt'), ); @@ -137,7 +138,9 @@ export class ServerMqtt extends Server implements CustomTransportStrategy { return client.publish( this.getReplyPattern(pattern), - JSON.stringify(outgoingResponse), + this.rawOutputPackets + ? (outgoingResponse as any) + : JSON.stringify(outgoingResponse), options, ); }; diff --git a/packages/microservices/test/server/server-mqtt.spec.ts b/packages/microservices/test/server/server-mqtt.spec.ts index c5a0e30f251..8a72740515d 100644 --- a/packages/microservices/test/server/server-mqtt.spec.ts +++ b/packages/microservices/test/server/server-mqtt.spec.ts @@ -172,6 +172,13 @@ describe('ServerMqtt', () => { ), ).to.be.true; }); + it(`should call "publish" with expected raw arguments`, () => { + const respond = 'test'; + server.rawOutputPackets = true; + publisher({ respond, id }); + expect(publisherSpy.calledWith(`${pattern}/reply`, { respond, id })).to.be + .true; + }); }); describe('getRequestPattern', () => { const test = 'test'; From b8ac795804143be242f93818b68eaff7ac7cb063 Mon Sep 17 00:00:00 2001 From: Manuel Herrera Date: Thu, 20 Jan 2022 10:24:16 -0300 Subject: [PATCH 002/122] feat(microservices): removed rawOutput and moved stringify to serializer --- .../serializers/mqtt-record.serializer.ts | 19 ++++++------------- packages/microservices/server/server-mqtt.ts | 19 +++++++++---------- .../test/server/server-mqtt.spec.ts | 7 ------- 3 files changed, 15 insertions(+), 30 deletions(-) diff --git a/packages/microservices/serializers/mqtt-record.serializer.ts b/packages/microservices/serializers/mqtt-record.serializer.ts index 2120c99b89c..24f5c747e37 100644 --- a/packages/microservices/serializers/mqtt-record.serializer.ts +++ b/packages/microservices/serializers/mqtt-record.serializer.ts @@ -3,22 +3,15 @@ import { ReadPacket } from '../interfaces'; import { Serializer } from '../interfaces/serializer.interface'; import { MqttRecord } from '../record-builders'; -export class MqttRecordSerializer - implements Serializer> -{ - serialize(packet: ReadPacket | any): ReadPacket & Partial { - if ( - packet?.data && - isObject(packet.data) && - packet.data instanceof MqttRecord - ) { +export class MqttRecordSerializer implements Serializer { + serialize(packet: ReadPacket | any): string { + if (isObject(packet?.data) && packet.data instanceof MqttRecord) { const record = packet.data as MqttRecord; - return { + return JSON.stringify({ ...packet, data: record.data, - options: record.options, - }; + }); } - return packet; + return JSON.stringify(packet); } } diff --git a/packages/microservices/server/server-mqtt.ts b/packages/microservices/server/server-mqtt.ts index 4dc058116c5..0f8f88e7c09 100644 --- a/packages/microservices/server/server-mqtt.ts +++ b/packages/microservices/server/server-mqtt.ts @@ -1,4 +1,4 @@ -import { isUndefined } from '@nestjs/common/utils/shared.utils'; +import { isUndefined, isObject } from '@nestjs/common/utils/shared.utils'; import { Observable } from 'rxjs'; import { CONNECT_EVENT, @@ -32,12 +32,11 @@ export class ServerMqtt extends Server implements CustomTransportStrategy { private readonly url: string; private mqttClient: MqttClient; - rawOutputPackets: boolean; constructor(private readonly options: MqttOptions['options']) { super(); this.url = this.getOptionsProp(options, 'url') || MQTT_DEFAULT_URL; - this.rawOutputPackets = this.getOptionsProp(options, 'rawOutputPackets'); + mqttPackage = this.loadPackage('mqtt', ServerMqtt.name, () => require('mqtt'), ); @@ -131,16 +130,16 @@ export class ServerMqtt extends Server implements CustomTransportStrategy { public getPublisher(client: MqttClient, pattern: any, id: string): any { return (response: any) => { Object.assign(response, { id }); - const outgoingResponse: Partial = + const options = + isObject(response?.data) && response.data instanceof MqttRecord + ? (response.data as MqttRecord)?.options + : {}; + delete response?.data?.options; + const outgoingResponse: string | Buffer = this.serializer.serialize(response); - const options = outgoingResponse.options; - delete outgoingResponse.options; - return client.publish( this.getReplyPattern(pattern), - this.rawOutputPackets - ? (outgoingResponse as any) - : JSON.stringify(outgoingResponse), + outgoingResponse, options, ); }; diff --git a/packages/microservices/test/server/server-mqtt.spec.ts b/packages/microservices/test/server/server-mqtt.spec.ts index 8a72740515d..c5a0e30f251 100644 --- a/packages/microservices/test/server/server-mqtt.spec.ts +++ b/packages/microservices/test/server/server-mqtt.spec.ts @@ -172,13 +172,6 @@ describe('ServerMqtt', () => { ), ).to.be.true; }); - it(`should call "publish" with expected raw arguments`, () => { - const respond = 'test'; - server.rawOutputPackets = true; - publisher({ respond, id }); - expect(publisherSpy.calledWith(`${pattern}/reply`, { respond, id })).to.be - .true; - }); }); describe('getRequestPattern', () => { const test = 'test'; From 0ba8946bcd7cea8c82de6957423bf37de1379962 Mon Sep 17 00:00:00 2001 From: Manuel Herrera Date: Thu, 20 Jan 2022 13:54:56 -0300 Subject: [PATCH 003/122] feat(microservices): removed rawOutputPackets from MqttOptions interface --- .../interfaces/microservice-configuration.interface.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/microservices/interfaces/microservice-configuration.interface.ts b/packages/microservices/interfaces/microservice-configuration.interface.ts index 9d63931f3c2..9942b8b5580 100644 --- a/packages/microservices/interfaces/microservice-configuration.interface.ts +++ b/packages/microservices/interfaces/microservice-configuration.interface.ts @@ -119,7 +119,6 @@ export interface MqttOptions { rh?: number; }; userProperties?: Record; - rawOutputPackets?: boolean; }; } From 5baba4b3e25048cb6c8f0632b003df7378ed7f73 Mon Sep 17 00:00:00 2001 From: Manuel Herrera Date: Fri, 21 Jan 2022 18:58:23 -0300 Subject: [PATCH 004/122] feat(microservices): raw output to publish and dispatch on mqtt client --- packages/microservices/client/client-mqtt.ts | 31 ++++++++++++-------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/packages/microservices/client/client-mqtt.ts b/packages/microservices/client/client-mqtt.ts index 8797b56f8cb..cb00aba0a34 100644 --- a/packages/microservices/client/client-mqtt.ts +++ b/packages/microservices/client/client-mqtt.ts @@ -1,4 +1,5 @@ import { Logger } from '@nestjs/common/services/logger.service'; +import { isObject } from '@nestjs/common/utils/shared.utils'; import { loadPackage } from '@nestjs/common/utils/load-package.util'; import { EmptyError, fromEvent, lastValueFrom, merge, Observable } from 'rxjs'; import { first, map, share, tap } from 'rxjs/operators'; @@ -129,10 +130,8 @@ export class ClientMqtt extends ClientProxy { try { const packet = this.assignPacketId(partialPacket); const pattern = this.normalizePattern(partialPacket.pattern); - const serializedPacket: ReadPacket & Partial = - this.serializer.serialize(packet); - const responseChannel = this.getResponsePattern(pattern); + let subscriptionsCount = this.subscriptionsCount.get(responseChannel) || 0; @@ -140,13 +139,16 @@ export class ClientMqtt extends ClientProxy { subscriptionsCount = this.subscriptionsCount.get(responseChannel) || 0; this.subscriptionsCount.set(responseChannel, subscriptionsCount + 1); this.routingMap.set(packet.id, callback); - - const options = serializedPacket.options; - delete serializedPacket.options; - + const options = + isObject(packet?.data) && packet.data instanceof MqttRecord + ? (packet.data as MqttRecord)?.options + : {}; + delete packet?.data?.options; + const serializedPacket: string | Buffer = + this.serializer.serialize(packet); this.mqttClient.publish( this.getRequestPattern(pattern), - JSON.stringify(serializedPacket), + serializedPacket, this.mergePacketOptions(options), ); }; @@ -171,14 +173,19 @@ export class ClientMqtt extends ClientProxy { protected dispatchEvent(packet: ReadPacket): Promise { const pattern = this.normalizePattern(packet.pattern); - const serializedPacket: ReadPacket & Partial = - this.serializer.serialize(packet); + const options = + isObject(packet?.data) && packet.data instanceof MqttRecord + ? (packet.data as MqttRecord)?.options + : {}; + delete packet?.data?.options; + + const serializedPacket: string | Buffer = this.serializer.serialize(packet); return new Promise((resolve, reject) => this.mqttClient.publish( pattern, - JSON.stringify(serializedPacket), - this.mergePacketOptions(serializedPacket.options), + serializedPacket, + this.mergePacketOptions(options), (err: any) => (err ? reject(err) : resolve()), ), ); From 5b40b2fe8155c2f2c8c6a06b896d70b2f3a33bc1 Mon Sep 17 00:00:00 2001 From: Manuel Herrera Date: Fri, 21 Jan 2022 19:09:34 -0300 Subject: [PATCH 005/122] feat(microservices): replaced empty options object with undefined --- packages/microservices/client/client-mqtt.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/microservices/client/client-mqtt.ts b/packages/microservices/client/client-mqtt.ts index cb00aba0a34..4a20ebf971c 100644 --- a/packages/microservices/client/client-mqtt.ts +++ b/packages/microservices/client/client-mqtt.ts @@ -142,7 +142,7 @@ export class ClientMqtt extends ClientProxy { const options = isObject(packet?.data) && packet.data instanceof MqttRecord ? (packet.data as MqttRecord)?.options - : {}; + : undefined; delete packet?.data?.options; const serializedPacket: string | Buffer = this.serializer.serialize(packet); @@ -176,7 +176,7 @@ export class ClientMqtt extends ClientProxy { const options = isObject(packet?.data) && packet.data instanceof MqttRecord ? (packet.data as MqttRecord)?.options - : {}; + : undefined; delete packet?.data?.options; const serializedPacket: string | Buffer = this.serializer.serialize(packet); From cdf2aa5b067386677fc6b97f934acd7b18da3dcc Mon Sep 17 00:00:00 2001 From: Manuel Herrera Date: Fri, 21 Jan 2022 19:20:52 -0300 Subject: [PATCH 006/122] feat(microservices): fixed mqtt serializer tests --- .../serializers/mqtt-record.serializer.spec.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/microservices/test/serializers/mqtt-record.serializer.spec.ts b/packages/microservices/test/serializers/mqtt-record.serializer.spec.ts index 95a50d3b5c9..3ba48884192 100644 --- a/packages/microservices/test/serializers/mqtt-record.serializer.spec.ts +++ b/packages/microservices/test/serializers/mqtt-record.serializer.spec.ts @@ -8,7 +8,7 @@ describe('MqttRecordSerializer', () => { instance = new MqttRecordSerializer(); }); describe('serialize', () => { - it('should parse mqtt record instance', () => { + it('should parse mqtt record instance to a string, ignoring options', () => { const mqttMessage = new MqttRecordBuilder() .setData({ value: 'string' }) .setQoS(1) @@ -21,16 +21,17 @@ describe('MqttRecordSerializer', () => { instance.serialize({ data: mqttMessage, }), - ).to.deep.eq({ - options: { qos: 1, retain: true, dup: true, properties: {} }, - data: { value: 'string' }, - }); + ).to.eq( + JSON.stringify({ + data: { value: 'string' }, + }), + ); }); - it('should act as an indentity function if msg is not an instance of MqttRecord class', () => { + it('should act as an stringified indentity function if msg is not an instance of MqttRecord class', () => { const packet = { data: { random: true }, }; - expect(instance.serialize(packet)).to.eq(packet); + expect(instance.serialize(packet)).to.eq(JSON.stringify(packet)); }); }); }); From d04886d8167bb7df92ec28adfa135a8187d0a6d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Zeidler?= Date: Wed, 16 Aug 2023 10:59:46 +0200 Subject: [PATCH 007/122] fix(core): fix type and return value of `Reflector#getAllAndMerge` When only a single metadata value is present in the list of targets for `Reflector#getAllAndMerge`, that value gets wrapped in an array if it is not already an array or an object. Previously, single values were returned as is, so the method could actually return any value. Now the method always returns an array or an object as indicated by its return type. This also fixes the return type of both `getAll` and `getAllAndMerge` when using the strongly typed `ReflectableDecorator`. Fixes #12231 --- packages/core/services/reflector.service.ts | 19 ++- .../test/services/reflector.service.spec.ts | 122 +++++++++++++----- 2 files changed, 104 insertions(+), 37 deletions(-) diff --git a/packages/core/services/reflector.service.ts b/packages/core/services/reflector.service.ts index 7a05a09093a..de400f7b408 100644 --- a/packages/core/services/reflector.service.ts +++ b/packages/core/services/reflector.service.ts @@ -118,8 +118,8 @@ export class Reflector { targets: (Type | Function)[], ): T extends ReflectableDecorator ? R extends Array - ? R[] - : R + ? R + : R[] : unknown; /** * Retrieve metadata for a specified key for a specified set of targets. @@ -158,7 +158,13 @@ export class Reflector { public getAllAndMerge>( decorator: T, targets: (Type | Function)[], - ): T extends ReflectableDecorator ? R : unknown; + ): T extends ReflectableDecorator + ? R extends Array + ? R + : R extends object + ? R | [] + : R[] + : unknown; /** * Retrieve metadata for a specified key for a specified set of targets and merge results. * @@ -189,6 +195,13 @@ export class Reflector { if (isEmpty(metadataCollection)) { return metadataCollection as TResult; } + if (metadataCollection.length === 1) { + const value = metadataCollection[0]; + if (isObject(value)) { + return value as TResult; + } + return metadataCollection as TResult; + } return metadataCollection.reduce((a, b) => { if (Array.isArray(a)) { return a.concat(b); diff --git a/packages/core/test/services/reflector.service.spec.ts b/packages/core/test/services/reflector.service.spec.ts index 6432ce0151d..4578f1346b0 100644 --- a/packages/core/test/services/reflector.service.spec.ts +++ b/packages/core/test/services/reflector.service.spec.ts @@ -1,25 +1,36 @@ import { expect } from 'chai'; import { Reflector } from '../../services/reflector.service'; +type TestObject = { + only1?: string; + only2?: string; + both: string; +}; + describe('Reflector', () => { + const key = 'key'; let reflector: Reflector; - class Test {} + class Test1 {} + class Test2 {} + beforeEach(() => { + Reflect.deleteMetadata(key, Test1); + Reflect.deleteMetadata(key, Test2); reflector = new Reflector(); }); describe('get', () => { it('should reflect metadata by key', () => { - const key = 'key'; const value = 'value'; - Reflect.defineMetadata(key, value, Test); - expect(reflector.get(key, Test)).to.eql(value); + Reflect.defineMetadata(key, value, Test1); + expect(reflector.get(key, Test1)).to.eql(value); }); it('should reflect metadata by decorator', () => { const decorator = Reflector.createDecorator(); const value = 'value'; - Reflect.defineMetadata(decorator.KEY, value, Test); + Reflect.defineMetadata(decorator.KEY, value, Test1); - let reflectedValue = reflector.get(decorator, Test); + // string + let reflectedValue = reflector.get(decorator, Test1); expect(reflectedValue).to.eql(value); // @ts-expect-error 'value' is not assignable to parameter of type 'string' @@ -29,9 +40,10 @@ describe('Reflector', () => { it('should reflect metadata by decorator (custom key)', () => { const decorator = Reflector.createDecorator({ key: 'custom' }); const value = ['value']; - Reflect.defineMetadata('custom', value, Test); + Reflect.defineMetadata('custom', value, Test1); - let reflectedValue = reflector.get(decorator, Test); + // string[] + let reflectedValue = reflector.get(decorator, Test1); expect(reflectedValue).to.eql(value); // @ts-expect-error 'value' is not assignable to parameter of type 'string[]' @@ -40,53 +52,95 @@ describe('Reflector', () => { }); describe('getAll', () => { - it('should reflect metadata of all targets', () => { - const key = 'key'; - const value = 'value'; - Reflect.defineMetadata(key, value, Test); - expect(reflector.getAll(key, [Test])).to.eql([value]); + it('should reflect metadata of all targets by key', () => { + const value1 = 'value1'; + const value2 = 'value2'; + Reflect.defineMetadata(key, value1, Test1); + Reflect.defineMetadata(key, value2, Test2); + expect(reflector.getAll(key, [Test1, Test2])).to.eql([value1, value2]); + }); + it('should reflect metadata of all targets by decorator', () => { + const decorator = Reflector.createDecorator(); + const value1 = 'value1'; + const value2 = 'value2'; + Reflect.defineMetadata(decorator.KEY, value1, Test1); + Reflect.defineMetadata(decorator.KEY, value2, Test2); + + // string[] + const reflectedValue = reflector.getAll(decorator, [Test1, Test2]); + expect(reflectedValue).to.eql([value1, value2]); }); }); describe('getAllAndMerge', () => { it('should return an empty array when there are no targets', () => { - const key = 'key'; expect(reflector.getAllAndMerge(key, [])).to.be.empty; }); it('should reflect metadata of all targets and concat arrays', () => { - const key = 'key'; + const decorator = Reflector.createDecorator(); const value = 'value'; - Reflect.defineMetadata(key, [value], Test); - expect(reflector.getAllAndMerge(key, [Test, Test])).to.eql([ - value, - value, + Reflect.defineMetadata(decorator.KEY, [value], Test1); + + // string[] + const reflectedValue = reflector.getAllAndMerge(decorator, [ + Test1, + Test1, ]); + expect(reflectedValue).to.eql([value, value]); }); it('should reflect metadata of all targets and create an array', () => { - const key = 'key'; + const decorator = Reflector.createDecorator(); const value = 'value'; - Reflect.defineMetadata(key, value, Test); - expect(reflector.getAllAndMerge(key, [Test, Test])).to.eql([ - value, - value, + Reflect.defineMetadata(decorator.KEY, value, Test1); + + // string[] + const reflectedValue = reflector.getAllAndMerge(decorator, [ + Test1, + Test1, ]); + expect(reflectedValue).to.eql([value, value]); }); - it('should reflect metadata of all targets and merge an object', () => { - const key = 'key'; - const value = { test: 'test' }; - Reflect.defineMetadata(key, value, Test); - expect(reflector.getAllAndMerge(key, [Test, Test])).to.eql({ - ...value, + it('should reflect metadata of all targets and merge objects', () => { + const decorator = Reflector.createDecorator(); + const value1: TestObject = { only1: 'test1', both: 'overriden' }; + const value2: TestObject = { only2: 'test2', both: 'test' }; + Reflect.defineMetadata(decorator.KEY, value1, Test1); + Reflect.defineMetadata(decorator.KEY, value2, Test2); + + // [] | TestObject + const reflectedValue = reflector.getAllAndMerge(decorator, [ + Test1, + Test2, + ]); + expect(reflectedValue).to.eql({ + ...value1, + ...value2, }); }); + it('should reflect metadata of all targets and create an array from a single value', () => { + const value = 'value'; + Reflect.defineMetadata(key, value, Test1); + expect(reflector.getAllAndMerge(key, [Test1, Test2])).to.eql([value]); + }); + it('should reflect metadata of all targets and return a single array unmodified', () => { + const value = ['value']; + Reflect.defineMetadata(key, value, Test1); + expect(reflector.getAllAndMerge(key, [Test1, Test2])).to.eql(value); + }); + it('should reflect metadata of all targets and return a single object unmodified', () => { + const value = { test: 'value' }; + Reflect.defineMetadata(key, value, Test1); + expect(reflector.getAllAndMerge(key, [Test1, Test2])).to.eql(value); + }); }); describe('getAllAndOverride', () => { it('should reflect metadata of all targets and return a first not undefined value', () => { - const key = 'key'; - const value = 'value'; - Reflect.defineMetadata(key, value, Test); - expect(reflector.getAllAndOverride(key, [Test, Test])).to.eql(value); + const value1 = 'value1'; + const value2 = 'value2'; + Reflect.defineMetadata(key, value1, Test1); + Reflect.defineMetadata(key, value2, Test2); + expect(reflector.getAllAndOverride(key, [Test1, Test2])).to.eql(value1); }); }); }); From 2f2252264bff45e383488252c838b0ab55a49a25 Mon Sep 17 00:00:00 2001 From: Jay McDoniel Date: Fri, 20 Oct 2023 14:21:33 -0700 Subject: [PATCH 008/122] feat: allow for microservice options to come from the di container Microservices are now able to be created by getting their options from within the DI container itself. This has been a long requested feature of developers and I finally had some time to work through how we could possibly let this happen. --- .../microservices/e2e/sum-rpc-async.spec.ts | 98 +++++++++++++++++++ .../microservice-configuration.interface.ts | 12 ++- packages/microservices/nest-microservice.ts | 28 ++++-- 3 files changed, 130 insertions(+), 8 deletions(-) create mode 100644 integration/microservices/e2e/sum-rpc-async.spec.ts diff --git a/integration/microservices/e2e/sum-rpc-async.spec.ts b/integration/microservices/e2e/sum-rpc-async.spec.ts new file mode 100644 index 00000000000..45ed1e5ccdb --- /dev/null +++ b/integration/microservices/e2e/sum-rpc-async.spec.ts @@ -0,0 +1,98 @@ +import { + Controller, + INestMicroservice, + Injectable, + Module, +} from '@nestjs/common'; +import { + AsyncOptions, + ClientTCP, + ClientsModule, + MessagePattern, + MicroserviceOptions, + Payload, + TcpClientOptions, + Transport, +} from '@nestjs/microservices'; +import { expect } from 'chai'; +import { NestFactory } from '@nestjs/core'; + +let port: number; + +do { + port = Math.round(Math.random() * 10000); +} while (port < 1000); + +@Injectable() +class RpcOptionsProvider { + getOptions(): TcpClientOptions { + return { + transport: Transport.TCP, + options: { + port, + host: '0.0.0.0', + }, + }; + } +} + +@Controller() +class RpcController { + @MessagePattern({ cmd: 'sum' }) + sumPayload(@Payload() payload: number[]) { + return payload.reduce((a, b) => a + b, 0); + } +} + +@Module({ + imports: [ + ClientsModule.register([ + { + name: 'RPC_CLIENT', + transport: Transport.TCP, + options: { + port, + host: '0.0.0.0', + }, + }, + ]), + ], + controllers: [RpcController], + providers: [RpcOptionsProvider], +}) +class RpcModule {} + +describe('RPC Async transport', () => { + let app: INestMicroservice; + let client: ClientTCP; + + beforeEach(async () => { + app = await NestFactory.createMicroservice< + AsyncOptions + >(RpcModule, { + logger: false, + inject: [RpcOptionsProvider], + useFactory: (optionsProvider: RpcOptionsProvider) => + optionsProvider.getOptions(), + }); + + await app.listen(); + client = app.get('RPC_CLIENT', { strict: false }); + }); + + it(`/POST`, done => { + let retData = 0; + client.send({ cmd: 'sum' }, [1, 2, 3, 4, 5]).subscribe({ + next: val => (retData += val), + error: done, + complete: () => { + expect(retData).to.eq(15); + done(); + }, + }); + }); + + afterEach(async () => { + await app.close(); + }); +}); diff --git a/packages/microservices/interfaces/microservice-configuration.interface.ts b/packages/microservices/interfaces/microservice-configuration.interface.ts index 06bf7433d02..8c6cbf0e63e 100644 --- a/packages/microservices/interfaces/microservice-configuration.interface.ts +++ b/packages/microservices/interfaces/microservice-configuration.interface.ts @@ -1,4 +1,4 @@ -import { Type } from '@nestjs/common'; +import { FactoryProvider, InjectionToken, Type } from '@nestjs/common'; import { ConnectionOptions } from 'tls'; import { Transport } from '../enums/transport.enum'; import { ChannelOptions } from '../external/grpc-options.interface'; @@ -28,6 +28,16 @@ export type MicroserviceOptions = | KafkaOptions | CustomStrategy; +export type AsyncMicroserviceOptions = { + inject: InjectionToken[]; + useFactory: (...args: any[]) => MicroserviceOptions; +}; + +export type AsyncOptions = { + inject: InjectionToken[]; + useFactory: (...args: any[]) => T; +}; + /** * @publicApi */ diff --git a/packages/microservices/nest-microservice.ts b/packages/microservices/nest-microservice.ts index 7b0930e69dd..fd9c7aee671 100644 --- a/packages/microservices/nest-microservice.ts +++ b/packages/microservices/nest-microservice.ts @@ -17,7 +17,10 @@ import { GraphInspector } from '@nestjs/core/inspector/graph-inspector'; import { NestApplicationContext } from '@nestjs/core/nest-application-context'; import { Transport } from './enums/transport.enum'; import { CustomTransportStrategy } from './interfaces/custom-transport-strategy.interface'; -import { MicroserviceOptions } from './interfaces/microservice-configuration.interface'; +import { + AsyncMicroserviceOptions, + MicroserviceOptions, +} from './interfaces/microservice-configuration.interface'; import { MicroservicesModule } from './microservices-module'; import { Server } from './server/server'; import { ServerFactory } from './server/server-factory'; @@ -43,7 +46,8 @@ export class NestMicroservice constructor( container: NestContainer, - config: NestMicroserviceOptions & MicroserviceOptions = {}, + config: NestMicroserviceOptions & + (MicroserviceOptions | AsyncMicroserviceOptions) = {}, private readonly graphInspector: GraphInspector, private readonly applicationConfig: ApplicationConfig, ) { @@ -60,12 +64,22 @@ export class NestMicroservice this.selectContextModule(); } - public createServer(config: NestMicroserviceOptions & MicroserviceOptions) { + public createServer( + config: NestMicroserviceOptions & + (MicroserviceOptions | AsyncMicroserviceOptions), + ) { try { - this.microserviceConfig = { - transport: Transport.TCP, - ...config, - } as any; + if ('useFactory' in config) { + const args = config.inject?.map(token => + this.get(token, { strict: false }), + ); + this.microserviceConfig = config.useFactory(...args); + } else { + this.microserviceConfig = { + transport: Transport.TCP, + ...config, + } as any; + } const { strategy } = config as any; this.server = strategy ? strategy From 61791e5115bf0c934f73536ea52903453a9d3515 Mon Sep 17 00:00:00 2001 From: "Micael Levi L. Cavalcante" Date: Mon, 13 Nov 2023 11:27:47 -0400 Subject: [PATCH 009/122] feat(common): narrow allowed injection tokens for `@Inject()` --- packages/common/decorators/core/inject.decorator.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/common/decorators/core/inject.decorator.ts b/packages/common/decorators/core/inject.decorator.ts index e8f559124a6..e9a21035dd0 100644 --- a/packages/common/decorators/core/inject.decorator.ts +++ b/packages/common/decorators/core/inject.decorator.ts @@ -2,6 +2,7 @@ import { PROPERTY_DEPS_METADATA, SELF_DECLARED_DEPS_METADATA, } from '../../constants'; +import { ForwardReference, InjectionToken } from '../../interfaces'; import { isUndefined } from '../../utils/shared.utils'; /** @@ -33,8 +34,8 @@ import { isUndefined } from '../../utils/shared.utils'; * * @publicApi */ -export function Inject( - token?: T, +export function Inject( + token?: InjectionToken | ForwardReference, ): PropertyDecorator & ParameterDecorator { return (target: object, key: string | symbol | undefined, index?: number) => { const type = token || Reflect.getMetadata('design:type', target, key); From c47be164f353c4cdf142f7e431c19d4e8103de0b Mon Sep 17 00:00:00 2001 From: "Micael Levi L. Cavalcante" Date: Mon, 13 Nov 2023 22:06:18 -0400 Subject: [PATCH 010/122] ci: switch to shallow cloning of 'wrk' repository --- .circleci/install-wrk.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/install-wrk.sh b/.circleci/install-wrk.sh index 31f910eddb6..e78e1362290 100755 --- a/.circleci/install-wrk.sh +++ b/.circleci/install-wrk.sh @@ -6,8 +6,8 @@ cd "$(dirname "$0")" cd /tmp/ sudo apt-get install build-essential libssl-dev git -y -git clone https://github.com/wg/wrk.git wrk +git clone --depth=1 https://github.com/wg/wrk.git wrk cd wrk sudo make # move the executable to somewhere in your PATH, ex: -sudo cp wrk /usr/local/bin \ No newline at end of file +sudo cp wrk /usr/local/bin From 0cbc15405d03a5031f949319a749e99a0b890f4c Mon Sep 17 00:00:00 2001 From: Pieter Scheffers Date: Thu, 16 Nov 2023 11:26:44 +0100 Subject: [PATCH 011/122] refactor: Use TCP_DEFAULT_PORT as default instead of using a boolean check --- packages/microservices/server/server-tcp.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/microservices/server/server-tcp.ts b/packages/microservices/server/server-tcp.ts index 655fcd00388..cb5a7b754c6 100644 --- a/packages/microservices/server/server-tcp.ts +++ b/packages/microservices/server/server-tcp.ts @@ -40,7 +40,7 @@ export class ServerTCP extends Server implements CustomTransportStrategy { constructor(private readonly options: TcpOptions['options']) { super(); - this.port = this.getOptionsProp(options, 'port') || TCP_DEFAULT_PORT; + this.port = this.getOptionsProp(options, 'port', TCP_DEFAULT_PORT); this.host = this.getOptionsProp(options, 'host') || TCP_DEFAULT_HOST; this.socketClass = this.getOptionsProp(options, 'socketClass') || JsonSocket; From ed8699769d8337a5009705fa86bfe57f2a43dbfc Mon Sep 17 00:00:00 2001 From: kmw14641 <102219400+kmw14641@users.noreply.github.com> Date: Fri, 17 Nov 2023 00:59:04 +0900 Subject: [PATCH 012/122] fix(common): apply options to plaintoclass in classserializerinterceptor fixed issue that with type option which is not already converted, any other option cannot be applied to plainToClass Closes #12763 --- packages/common/serializer/class-serializer.interceptor.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/common/serializer/class-serializer.interceptor.ts b/packages/common/serializer/class-serializer.interceptor.ts index 3773fddc036..73258c23c08 100644 --- a/packages/common/serializer/class-serializer.interceptor.ts +++ b/packages/common/serializer/class-serializer.interceptor.ts @@ -94,7 +94,11 @@ export class ClassSerializerInterceptor implements NestInterceptor { if (plainOrClass instanceof options.type) { return classTransformer.classToPlain(plainOrClass, options); } - const instance = classTransformer.plainToClass(options.type, plainOrClass); + const instance = classTransformer.plainToClass( + options.type, + plainOrClass, + options, + ); return classTransformer.classToPlain(instance, options); } From 0d7a768b89d9bf9c715cfbb43bad0a2a3f475147 Mon Sep 17 00:00:00 2001 From: Hareloo Date: Wed, 6 Dec 2023 20:52:48 +0200 Subject: [PATCH 013/122] fix(common): when transforming undefined numeric values Transforming numeric values in validationpipe is incorrect when value is undefined closes #12864 --- packages/common/pipes/validation.pipe.ts | 6 +++++ .../common/test/pipes/validation.pipe.spec.ts | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/packages/common/pipes/validation.pipe.ts b/packages/common/pipes/validation.pipe.ts index 6ee05a4adf9..d86953b3f49 100644 --- a/packages/common/pipes/validation.pipe.ts +++ b/packages/common/pipes/validation.pipe.ts @@ -203,6 +203,12 @@ export class ValidationPipe implements PipeTransform { return value === true || value === 'true'; } if (metatype === Number) { + if (isUndefined(value)) { + // This is a workaround to deal with optional numeric values since + // optional numerics shouldn't be parsed to a valid number when + // they were not defined + return undefined; + } return +value; } return value; diff --git a/packages/common/test/pipes/validation.pipe.spec.ts b/packages/common/test/pipes/validation.pipe.spec.ts index 980c43212b0..c69ca85ea31 100644 --- a/packages/common/test/pipes/validation.pipe.spec.ts +++ b/packages/common/test/pipes/validation.pipe.spec.ts @@ -205,6 +205,18 @@ describe('ValidationPipe', () => { }), ).to.be.equal(+value); }); + it('should parse undefined to undefined', async () => { + target = new ValidationPipe({ transform: true }); + const value = undefined; + + expect( + await target.transform(value, { + metatype: Number, + data: 'test', + type: 'query', + }), + ).to.be.undefined; + }); }); describe('when input is a path parameter (number)', () => { it('should parse to number', async () => { @@ -219,6 +231,18 @@ describe('ValidationPipe', () => { }), ).to.be.equal(+value); }); + it('should parse undefined to undefined', async () => { + target = new ValidationPipe({ transform: true }); + const value = undefined; + + expect( + await target.transform(value, { + metatype: Number, + data: 'test', + type: 'param', + }), + ).to.be.undefined; + }); }); describe('when input is a query parameter (boolean)', () => { it('should parse the string "true" to the boolean true', async () => { From fb72a8ec9f17a65102fa36dbe0d8dae6b23f018e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Mon, 18 Mar 2024 10:12:16 +0100 Subject: [PATCH 014/122] feat(core): introduce different module opaque key factories --- ...t-application-context-options.interface.ts | 9 ++ packages/core/injector/compiler.ts | 52 +++++--- packages/core/injector/container.ts | 31 +++-- packages/core/injector/module.ts | 7 +- .../by-reference-module-opaque-key-factory.ts | 63 ++++++++++ .../deep-hashed-module-opaque-key-factory.ts} | 53 +++++---- .../module-opaque-key-factory.interface.ts | 26 ++++ packages/core/nest-application-context.ts | 11 +- packages/core/test/injector/compiler.spec.ts | 11 +- ...eference-module-opaque-key-factory.spec.ts | 111 ++++++++++++++++++ ...-hashed-module-opaque-key-factory.spec.ts} | 26 ++-- 11 files changed, 336 insertions(+), 64 deletions(-) create mode 100644 packages/core/injector/opaque-key-factory/by-reference-module-opaque-key-factory.ts rename packages/core/injector/{module-token-factory.ts => opaque-key-factory/deep-hashed-module-opaque-key-factory.ts} (76%) create mode 100644 packages/core/injector/opaque-key-factory/interfaces/module-opaque-key-factory.interface.ts create mode 100644 packages/core/test/injector/opaque-key-factory/by-reference-module-opaque-key-factory.spec.ts rename packages/core/test/injector/{module-token-factory.spec.ts => opaque-key-factory/deep-hashed-module-opaque-key-factory.spec.ts} (81%) diff --git a/packages/common/interfaces/nest-application-context-options.interface.ts b/packages/common/interfaces/nest-application-context-options.interface.ts index d5204b55d04..db661d95382 100644 --- a/packages/common/interfaces/nest-application-context-options.interface.ts +++ b/packages/common/interfaces/nest-application-context-options.interface.ts @@ -44,4 +44,13 @@ export class NestApplicationContextOptions { * @default false */ snapshot?: boolean; + + /** + * Determines what algorithm use to generate module ids. + * When set to `deep-hash`, the module id is generated based on the serialized module definition. + * When set to `reference`, each module obtains a unique id based on its reference. + * + * @default 'reference' + */ + moduleIdGeneratorAlgorithm?: 'deep-hash' | 'reference'; } diff --git a/packages/core/injector/compiler.ts b/packages/core/injector/compiler.ts index 353e2758104..2b7a056f67c 100644 --- a/packages/core/injector/compiler.ts +++ b/packages/core/injector/compiler.ts @@ -3,7 +3,7 @@ import { ForwardReference, Type, } from '@nestjs/common/interfaces'; -import { ModuleTokenFactory } from './module-token-factory'; +import { ModuleOpaqueKeyFactory } from './opaque-key-factory/interfaces/module-opaque-key-factory.interface'; export interface ModuleFactory { type: Type; @@ -12,36 +12,58 @@ export interface ModuleFactory { } export class ModuleCompiler { - constructor(private readonly moduleTokenFactory = new ModuleTokenFactory()) {} + constructor( + private readonly _moduleOpaqueKeyFactory: ModuleOpaqueKeyFactory, + ) {} + + get moduleOpaqueKeyFactory(): ModuleOpaqueKeyFactory { + return this._moduleOpaqueKeyFactory; + } public async compile( - metatype: Type | DynamicModule | Promise, + moduleClsOrDynamic: + | Type + | DynamicModule + | ForwardReference + | Promise, ): Promise { - const { type, dynamicMetadata } = this.extractMetadata(await metatype); - const token = this.moduleTokenFactory.create(type, dynamicMetadata); + moduleClsOrDynamic = await moduleClsOrDynamic; + + const { type, dynamicMetadata } = this.extractMetadata(moduleClsOrDynamic); + const token = dynamicMetadata + ? this._moduleOpaqueKeyFactory.createForDynamic( + type, + dynamicMetadata, + moduleClsOrDynamic as DynamicModule | ForwardReference, + ) + : this._moduleOpaqueKeyFactory.createForStatic( + type, + moduleClsOrDynamic as Type, + ); + return { type, dynamicMetadata, token }; } public extractMetadata( - metatype: Type | ForwardReference | DynamicModule, + moduleClsOrDynamic: Type | ForwardReference | DynamicModule, ): { - type: Type; + type: Type; dynamicMetadata?: Partial | undefined; } { - if (!this.isDynamicModule(metatype)) { + if (!this.isDynamicModule(moduleClsOrDynamic)) { return { - type: (metatype as ForwardReference)?.forwardRef - ? (metatype as ForwardReference).forwardRef() - : metatype, + type: (moduleClsOrDynamic as ForwardReference)?.forwardRef + ? (moduleClsOrDynamic as ForwardReference).forwardRef() + : moduleClsOrDynamic, }; } - const { module: type, ...dynamicMetadata } = metatype; + const { module: type, ...dynamicMetadata } = moduleClsOrDynamic; return { type, dynamicMetadata }; } public isDynamicModule( - module: Type | DynamicModule | ForwardReference, - ): module is DynamicModule { - return !!(module as DynamicModule).module; + moduleClsOrDynamic: Type | DynamicModule | ForwardReference, + ): moduleClsOrDynamic is DynamicModule { + return !!(moduleClsOrDynamic as DynamicModule).module; } } diff --git a/packages/core/injector/container.ts b/packages/core/injector/container.ts index e9418a1b8a8..e4b2dc395ef 100644 --- a/packages/core/injector/container.ts +++ b/packages/core/injector/container.ts @@ -4,6 +4,7 @@ import { GLOBAL_MODULE_METADATA, } from '@nestjs/common/constants'; import { Injectable, Type } from '@nestjs/common/interfaces'; +import { NestApplicationContextOptions } from '@nestjs/common/interfaces/nest-application-context-options.interface'; import { ApplicationConfig } from '../application-config'; import { DiscoverableMetaHostCollection } from '../discovery/discoverable-meta-host-collection'; import { @@ -19,16 +20,16 @@ import { ContextId } from './instance-wrapper'; import { InternalCoreModule } from './internal-core-module/internal-core-module'; import { InternalProvidersStorage } from './internal-providers-storage'; import { Module } from './module'; -import { ModuleTokenFactory } from './module-token-factory'; import { ModulesContainer } from './modules-container'; +import { ByReferenceModuleOpaqueKeyFactory } from './opaque-key-factory/by-reference-module-opaque-key-factory'; +import { DeepHashedModuleOpaqueKeyFactory } from './opaque-key-factory/deep-hashed-module-opaque-key-factory'; +import { ModuleOpaqueKeyFactory } from './opaque-key-factory/interfaces/module-opaque-key-factory.interface'; type ModuleMetatype = Type | DynamicModule | Promise; type ModuleScope = Type[]; export class NestContainer { private readonly globalModules = new Set(); - private readonly moduleTokenFactory = new ModuleTokenFactory(); - private readonly moduleCompiler = new ModuleCompiler(this.moduleTokenFactory); private readonly modules = new ModulesContainer(); private readonly dynamicModulesMetadata = new Map< string, @@ -36,11 +37,27 @@ export class NestContainer { >(); private readonly internalProvidersStorage = new InternalProvidersStorage(); private readonly _serializedGraph = new SerializedGraph(); + private moduleCompiler: ModuleCompiler; private internalCoreModule: Module; constructor( - private readonly _applicationConfig: ApplicationConfig = undefined, - ) {} + private readonly _applicationConfig: + | ApplicationConfig + | undefined = undefined, + private readonly _contextOptions: + | NestApplicationContextOptions + | undefined = undefined, + ) { + const moduleOpaqueKeyFactory = + this._contextOptions?.moduleIdGeneratorAlgorithm === 'deep-hash' + ? new DeepHashedModuleOpaqueKeyFactory() + : new ByReferenceModuleOpaqueKeyFactory({ + keyGenerationStrategy: this._contextOptions?.snapshot + ? 'shallow' + : 'random', + }); + this.moduleCompiler = new ModuleCompiler(moduleOpaqueKeyFactory); + } get serializedGraph(): SerializedGraph { return this._serializedGraph; @@ -321,8 +338,8 @@ export class NestContainer { this.modules[InternalCoreModule.name] = moduleRef; } - public getModuleTokenFactory(): ModuleTokenFactory { - return this.moduleTokenFactory; + public getModuleTokenFactory(): ModuleOpaqueKeyFactory { + return this.moduleCompiler.moduleOpaqueKeyFactory; } public registerRequestProvider(request: T, contextId: ContextId) { diff --git a/packages/core/injector/module.ts b/packages/core/injector/module.ts index 634377544b9..807e2049907 100644 --- a/packages/core/injector/module.ts +++ b/packages/core/injector/module.ts @@ -653,7 +653,12 @@ export class Module { private generateUuid(): string { const prefix = 'M_'; - const key = this.name?.toString() ?? this.token?.toString(); + const key = this.token + ? this.token.includes(':') + ? this.token.split(':')[1] + : this.token + : this.name; + return key ? UuidFactory.get(`${prefix}_${key}`) : randomStringGenerator(); } } diff --git a/packages/core/injector/opaque-key-factory/by-reference-module-opaque-key-factory.ts b/packages/core/injector/opaque-key-factory/by-reference-module-opaque-key-factory.ts new file mode 100644 index 00000000000..d712f60e8b9 --- /dev/null +++ b/packages/core/injector/opaque-key-factory/by-reference-module-opaque-key-factory.ts @@ -0,0 +1,63 @@ +import { DynamicModule } from '@nestjs/common/interfaces/modules/dynamic-module.interface'; +import { ForwardReference } from '@nestjs/common/interfaces/modules/forward-reference.interface'; +import { Type } from '@nestjs/common/interfaces/type.interface'; +import { randomStringGenerator } from '@nestjs/common/utils/random-string-generator.util'; +import { createHash } from 'crypto'; +import { ModuleOpaqueKeyFactory } from './interfaces/module-opaque-key-factory.interface'; + +const K_MODULE_ID = Symbol('K_MODULE_ID'); + +export class ByReferenceModuleOpaqueKeyFactory + implements ModuleOpaqueKeyFactory +{ + private readonly keyGenerationStrategy: 'random' | 'shallow'; + + constructor(options?: { keyGenerationStrategy: 'random' | 'shallow' }) { + this.keyGenerationStrategy = options?.keyGenerationStrategy ?? 'random'; + } + + public createForStatic( + moduleCls: Type, + originalRef: Type | ForwardReference = moduleCls, + ): string { + return this.getOrCreateModuleId(moduleCls, undefined, originalRef); + } + + public createForDynamic( + moduleCls: Type, + dynamicMetadata: Partial, + originalRef: DynamicModule | ForwardReference, + ): string { + return this.getOrCreateModuleId(moduleCls, dynamicMetadata, originalRef); + } + + private getOrCreateModuleId( + moduleCls: Type, + dynamicMetadata: Partial | undefined, + originalRef: Type | DynamicModule | ForwardReference, + ): string { + if (originalRef[K_MODULE_ID]) { + return originalRef[K_MODULE_ID]; + } + + let moduleId: string; + if (this.keyGenerationStrategy === 'random') { + moduleId = this.generateRandomString(); + } else { + moduleId = dynamicMetadata + ? `${this.generateRandomString()}:${this.hashString(moduleCls.name + JSON.stringify(dynamicMetadata))}` + : `${this.generateRandomString()}:${this.hashString(moduleCls.toString())}`; + } + + originalRef[K_MODULE_ID] = moduleId; + return moduleId; + } + + private hashString(value: string): string { + return createHash('sha256').update(value).digest('hex'); + } + + private generateRandomString(): string { + return randomStringGenerator(); + } +} diff --git a/packages/core/injector/module-token-factory.ts b/packages/core/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.ts similarity index 76% rename from packages/core/injector/module-token-factory.ts rename to packages/core/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.ts index 6fbebe4e707..9a56ca40f1c 100644 --- a/packages/core/injector/module-token-factory.ts +++ b/packages/core/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.ts @@ -1,34 +1,48 @@ -import { DynamicModule, Logger } from '@nestjs/common'; +import { DynamicModule } from '@nestjs/common/interfaces/modules/dynamic-module.interface'; import { Type } from '@nestjs/common/interfaces/type.interface'; +import { Logger } from '@nestjs/common/services/logger.service'; import { randomStringGenerator } from '@nestjs/common/utils/random-string-generator.util'; import { isFunction, isSymbol } from '@nestjs/common/utils/shared.utils'; import { createHash } from 'crypto'; import stringify from 'fast-safe-stringify'; -import { performance } from 'perf_hooks'; +import { ModuleOpaqueKeyFactory } from './interfaces/module-opaque-key-factory.interface'; const CLASS_STR = 'class '; const CLASS_STR_LEN = CLASS_STR.length; -export class ModuleTokenFactory { - private readonly moduleTokenCache = new Map(); +export class DeepHashedModuleOpaqueKeyFactory + implements ModuleOpaqueKeyFactory +{ private readonly moduleIdsCache = new WeakMap, string>(); - private readonly logger = new Logger(ModuleTokenFactory.name, { + private readonly moduleTokenCache = new Map(); + private readonly logger = new Logger(DeepHashedModuleOpaqueKeyFactory.name, { timestamp: true, }); - public create( - metatype: Type, - dynamicModuleMetadata?: Partial | undefined, - ): string { - const moduleId = this.getModuleId(metatype); + public createForStatic(moduleCls: Type): string { + const moduleId = this.getModuleId(moduleCls); + const moduleName = this.getModuleName(moduleCls); - if (!dynamicModuleMetadata) { - return this.getStaticModuleToken(moduleId, this.getModuleName(metatype)); + const key = `${moduleId}_${moduleName}`; + if (this.moduleTokenCache.has(key)) { + return this.moduleTokenCache.get(key); } + + const hash = this.hashString(key); + this.moduleTokenCache.set(key, hash); + return hash; + } + + public createForDynamic( + moduleCls: Type, + dynamicMetadata: Partial, + ): string { + const moduleId = this.getModuleId(moduleCls); + const moduleName = this.getModuleName(moduleCls); const opaqueToken = { id: moduleId, - module: this.getModuleName(metatype), - dynamic: dynamicModuleMetadata, + module: moduleName, + dynamic: dynamicMetadata, }; const start = performance.now(); const opaqueTokenString = this.getStringifiedOpaqueToken(opaqueToken); @@ -44,17 +58,6 @@ export class ModuleTokenFactory { return this.hashString(opaqueTokenString); } - public getStaticModuleToken(moduleId: string, moduleName: string): string { - const key = `${moduleId}_${moduleName}`; - if (this.moduleTokenCache.has(key)) { - return this.moduleTokenCache.get(key); - } - - const hash = this.hashString(key); - this.moduleTokenCache.set(key, hash); - return hash; - } - public getStringifiedOpaqueToken(opaqueToken: object | undefined): string { // Uses safeStringify instead of JSON.stringify to support circular dynamic modules // The replacer function is also required in order to obtain real class names diff --git a/packages/core/injector/opaque-key-factory/interfaces/module-opaque-key-factory.interface.ts b/packages/core/injector/opaque-key-factory/interfaces/module-opaque-key-factory.interface.ts new file mode 100644 index 00000000000..0b6ebb37c7e --- /dev/null +++ b/packages/core/injector/opaque-key-factory/interfaces/module-opaque-key-factory.interface.ts @@ -0,0 +1,26 @@ +import { DynamicModule } from '@nestjs/common/interfaces/modules/dynamic-module.interface'; +import { ForwardReference } from '@nestjs/common/interfaces/modules/forward-reference.interface'; +import { Type } from '@nestjs/common/interfaces/type.interface'; + +export interface ModuleOpaqueKeyFactory { + /** + * Creates a unique opaque key for the given static module. + * @param moduleCls A static module class. + * @param originalRef Original object reference. In most cases, it's the same as `moduleCls`. + */ + createForStatic( + moduleCls: Type, + originalRef: Type | ForwardReference, + ): string; + /** + * Creates a unique opaque key for the given dynamic module. + * @param moduleCls A dynamic module class reference. + * @param dynamicMetadata Partial dynamic module metadata. + * @param originalRef Original object reference. + */ + createForDynamic( + moduleCls: Type, + dynamicMetadata: Partial, + originalRef: DynamicModule | ForwardReference, + ): string; +} diff --git a/packages/core/nest-application-context.ts b/packages/core/nest-application-context.ts index eacd82ec2dc..dcb43cd719e 100644 --- a/packages/core/nest-application-context.ts +++ b/packages/core/nest-application-context.ts @@ -50,7 +50,7 @@ export class NestApplicationContext< private shouldFlushLogsOnOverride = false; private readonly activeShutdownSignals = new Array(); - private readonly moduleCompiler = new ModuleCompiler(); + private readonly moduleCompiler: ModuleCompiler; private shutdownCleanupRef?: (...args: unknown[]) => unknown; private _instanceLinksHost: InstanceLinksHost; private _moduleRefsForHooksByDistance?: Array; @@ -70,6 +70,7 @@ export class NestApplicationContext< ) { super(); this.injector = new Injector(); + this.moduleCompiler = container.getModuleCompiler(); if (this.appOptions.preview) { this.printInPreviewModeWarning(); @@ -95,7 +96,13 @@ export class NestApplicationContext< const moduleTokenFactory = this.container.getModuleTokenFactory(); const { type, dynamicMetadata } = this.moduleCompiler.extractMetadata(moduleType); - const token = moduleTokenFactory.create(type, dynamicMetadata); + const token = dynamicMetadata + ? moduleTokenFactory.createForDynamic( + type, + dynamicMetadata, + moduleType as DynamicModule, + ) + : moduleTokenFactory.createForStatic(type, moduleType as Type); const selectedModule = modulesContainer.get(token); if (!selectedModule) { diff --git a/packages/core/test/injector/compiler.spec.ts b/packages/core/test/injector/compiler.spec.ts index c4cb35b2038..6a0eee91698 100644 --- a/packages/core/test/injector/compiler.spec.ts +++ b/packages/core/test/injector/compiler.spec.ts @@ -1,27 +1,28 @@ import { expect } from 'chai'; import { ModuleCompiler } from '../../injector/compiler'; +import { ByReferenceModuleOpaqueKeyFactory } from '../../injector/opaque-key-factory/by-reference-module-opaque-key-factory'; describe('ModuleCompiler', () => { let compiler: ModuleCompiler; beforeEach(() => { - compiler = new ModuleCompiler(); + compiler = new ModuleCompiler(new ByReferenceModuleOpaqueKeyFactory()); }); describe('extractMetadata', () => { describe('when module is a dynamic module', () => { - it('should return object with "type" and "dynamicMetadata" property', async () => { + it('should return object with "type" and "dynamicMetadata" property', () => { const obj = { module: 'test', providers: [] }; const { module, ...dynamicMetadata } = obj; - expect(await compiler.extractMetadata(obj as any)).to.be.deep.equal({ + expect(compiler.extractMetadata(obj as any)).to.be.deep.equal({ type: module, dynamicMetadata, }); }); }); describe('when module is a not dynamic module', () => { - it('should return object with "type" property', async () => { + it('should return object with "type" property', () => { const type = 'test'; - expect(await compiler.extractMetadata(type as any)).to.be.deep.equal({ + expect(compiler.extractMetadata(type as any)).to.be.deep.equal({ type, }); }); diff --git a/packages/core/test/injector/opaque-key-factory/by-reference-module-opaque-key-factory.spec.ts b/packages/core/test/injector/opaque-key-factory/by-reference-module-opaque-key-factory.spec.ts new file mode 100644 index 00000000000..2d9db42eb57 --- /dev/null +++ b/packages/core/test/injector/opaque-key-factory/by-reference-module-opaque-key-factory.spec.ts @@ -0,0 +1,111 @@ +import { expect } from 'chai'; +import * as sinon from 'sinon'; +import { ByReferenceModuleOpaqueKeyFactory } from '../../../injector/opaque-key-factory/by-reference-module-opaque-key-factory'; + +describe('ByReferenceModuleOpaqueKeyFactory', () => { + const moduleId = 'constId'; + let factory: ByReferenceModuleOpaqueKeyFactory; + + describe('when generating algorithm is random', () => { + beforeEach(() => { + factory = new ByReferenceModuleOpaqueKeyFactory(); + sinon.stub(factory as any, 'generateRandomString').returns(moduleId); + }); + + describe('createForStatic', () => { + class Module {} + + it('should return expected token', () => { + const type = Module; + const token1 = factory.createForStatic(type); + const token2 = factory.createForStatic(type); + expect(token1).to.be.deep.eq(token2); + }); + }); + + describe('createForDynamic', () => { + class Module {} + + it('should include dynamic metadata', () => { + const dynamicModule = { + module: Module, + providers: [ + { + provide: 'test', + useValue: 'test', + }, + ], + }; + const token1 = factory.createForDynamic( + dynamicModule.module, + { + providers: dynamicModule.providers, + }, + dynamicModule, + ); + const token2 = factory.createForDynamic( + dynamicModule.module, + { + providers: dynamicModule.providers, + }, + dynamicModule, + ); + + expect(token1).to.be.deep.eq(token2); + }); + }); + }); + describe('when generating algorithm is shallow', () => { + beforeEach(() => { + factory = new ByReferenceModuleOpaqueKeyFactory({ + keyGenerationStrategy: 'shallow', + }); + sinon.stub(factory as any, 'generateRandomString').returns(moduleId); + }); + + describe('createForStatic', () => { + class Module {} + + it('should return expected token', () => { + const type = Module; + const token1 = factory.createForStatic(type); + const token2 = factory.createForStatic(type); + + expect(token1).to.be.deep.eq(token2); + }); + }); + + describe('createForDynamic', () => { + class Module {} + + it('should include dynamic metadata', () => { + const dynamicModule = { + module: Module, + providers: [ + { + provide: 'test', + useValue: 'test', + }, + ], + }; + + const token1 = factory.createForDynamic( + dynamicModule.module, + { + providers: dynamicModule.providers, + }, + dynamicModule, + ); + const token2 = factory.createForDynamic( + dynamicModule.module, + { + providers: dynamicModule.providers, + }, + dynamicModule, + ); + + expect(token1).to.be.deep.eq(token2); + }); + }); + }); +}); diff --git a/packages/core/test/injector/module-token-factory.spec.ts b/packages/core/test/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.spec.ts similarity index 81% rename from packages/core/test/injector/module-token-factory.spec.ts rename to packages/core/test/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.spec.ts index 22bda3e3783..28d05a6cb14 100644 --- a/packages/core/test/injector/module-token-factory.spec.ts +++ b/packages/core/test/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.spec.ts @@ -1,41 +1,48 @@ import { expect } from 'chai'; import * as sinon from 'sinon'; -import { ModuleTokenFactory } from '../../injector/module-token-factory'; +import { DeepHashedModuleOpaqueKeyFactory } from '../../../injector/opaque-key-factory/deep-hashed-module-opaque-key-factory'; -describe('ModuleTokenFactory', () => { +describe('DeepHashedModuleOpaqueKeyFactory', () => { const moduleId = 'constId'; - let factory: ModuleTokenFactory; + let factory: DeepHashedModuleOpaqueKeyFactory; beforeEach(() => { - factory = new ModuleTokenFactory(); + factory = new DeepHashedModuleOpaqueKeyFactory(); sinon.stub(factory, 'getModuleId').returns(moduleId); }); - describe('create', () => { + describe('createForStatic', () => { class Module {} + it('should return expected token', () => { const type = Module; - const token1 = factory.create(type, undefined); - const token2 = factory.create(type, undefined); + const token1 = factory.createForStatic(type); + const token2 = factory.createForStatic(type); expect(token1).to.be.deep.eq(token2); }); + }); + describe('createForDynamic', () => { + class Module {} + it('should include dynamic metadata', () => { const type = Module; - const token1 = factory.create(type, { + const token1 = factory.createForDynamic(type, { providers: [{}], } as any); - const token2 = factory.create(type, { + const token2 = factory.createForDynamic(type, { providers: [{}], } as any); expect(token1).to.be.deep.eq(token2); }); }); + describe('getModuleName', () => { it('should map module metatype to name', () => { const metatype = () => {}; expect(factory.getModuleName(metatype as any)).to.be.eql(metatype.name); }); }); + describe('getStringifiedOpaqueToken', () => { describe('when metadata exists', () => { it('should return hash', () => { @@ -80,6 +87,7 @@ describe('ModuleTokenFactory', () => { ); }); }); + describe('when metadata does not exist', () => { it('should return empty string', () => { expect(factory.getStringifiedOpaqueToken(undefined)).to.be.eql(''); From 30110d49e05542ac6956cfa18d414f0c2a45c06b Mon Sep 17 00:00:00 2001 From: Kamil Mysliwiec Date: Tue, 19 Mar 2024 09:33:04 +0100 Subject: [PATCH 015/122] Update packages/core/injector/compiler.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vinicius Lourenço <12551007+H4ad@users.noreply.github.com> --- packages/core/injector/compiler.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/injector/compiler.ts b/packages/core/injector/compiler.ts index 2b7a056f67c..047d35d36e2 100644 --- a/packages/core/injector/compiler.ts +++ b/packages/core/injector/compiler.ts @@ -55,6 +55,7 @@ export class ModuleCompiler { type: (moduleClsOrDynamic as ForwardReference)?.forwardRef ? (moduleClsOrDynamic as ForwardReference).forwardRef() : moduleClsOrDynamic, + dynamicMetadata: undefined, }; } const { module: type, ...dynamicMetadata } = moduleClsOrDynamic; From 094c35cf79b5ebae6ed8307eb668976f2e52236d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 19 Mar 2024 09:35:43 +0100 Subject: [PATCH 016/122] refactor: update types to better reflect dynamic metadata shape --- packages/core/injector/compiler.ts | 4 ++-- .../by-reference-module-opaque-key-factory.ts | 2 +- .../deep-hashed-module-opaque-key-factory.ts | 2 +- .../interfaces/module-opaque-key-factory.interface.ts | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/core/injector/compiler.ts b/packages/core/injector/compiler.ts index 047d35d36e2..075d97bc3ae 100644 --- a/packages/core/injector/compiler.ts +++ b/packages/core/injector/compiler.ts @@ -48,14 +48,14 @@ export class ModuleCompiler { moduleClsOrDynamic: Type | ForwardReference | DynamicModule, ): { type: Type; - dynamicMetadata?: Partial | undefined; + dynamicMetadata: Omit | undefined; } { if (!this.isDynamicModule(moduleClsOrDynamic)) { return { type: (moduleClsOrDynamic as ForwardReference)?.forwardRef ? (moduleClsOrDynamic as ForwardReference).forwardRef() : moduleClsOrDynamic, - dynamicMetadata: undefined, + dynamicMetadata: undefined, }; } const { module: type, ...dynamicMetadata } = moduleClsOrDynamic; diff --git a/packages/core/injector/opaque-key-factory/by-reference-module-opaque-key-factory.ts b/packages/core/injector/opaque-key-factory/by-reference-module-opaque-key-factory.ts index d712f60e8b9..a5721fb327f 100644 --- a/packages/core/injector/opaque-key-factory/by-reference-module-opaque-key-factory.ts +++ b/packages/core/injector/opaque-key-factory/by-reference-module-opaque-key-factory.ts @@ -25,7 +25,7 @@ export class ByReferenceModuleOpaqueKeyFactory public createForDynamic( moduleCls: Type, - dynamicMetadata: Partial, + dynamicMetadata: Omit, originalRef: DynamicModule | ForwardReference, ): string { return this.getOrCreateModuleId(moduleCls, dynamicMetadata, originalRef); diff --git a/packages/core/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.ts b/packages/core/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.ts index 9a56ca40f1c..285792acf51 100644 --- a/packages/core/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.ts +++ b/packages/core/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.ts @@ -35,7 +35,7 @@ export class DeepHashedModuleOpaqueKeyFactory public createForDynamic( moduleCls: Type, - dynamicMetadata: Partial, + dynamicMetadata: Omit, ): string { const moduleId = this.getModuleId(moduleCls); const moduleName = this.getModuleName(moduleCls); diff --git a/packages/core/injector/opaque-key-factory/interfaces/module-opaque-key-factory.interface.ts b/packages/core/injector/opaque-key-factory/interfaces/module-opaque-key-factory.interface.ts index 0b6ebb37c7e..1b58a5fffdc 100644 --- a/packages/core/injector/opaque-key-factory/interfaces/module-opaque-key-factory.interface.ts +++ b/packages/core/injector/opaque-key-factory/interfaces/module-opaque-key-factory.interface.ts @@ -15,12 +15,12 @@ export interface ModuleOpaqueKeyFactory { /** * Creates a unique opaque key for the given dynamic module. * @param moduleCls A dynamic module class reference. - * @param dynamicMetadata Partial dynamic module metadata. + * @param dynamicMetadata Dynamic module metadata. * @param originalRef Original object reference. */ createForDynamic( moduleCls: Type, - dynamicMetadata: Partial, + dynamicMetadata: Omit, originalRef: DynamicModule | ForwardReference, ): string; } From c4a905b9963a9f1a6702e09acbf5edfa29399e87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 19 Mar 2024 09:37:58 +0100 Subject: [PATCH 017/122] chore: update comment to suggest switching to a different algorithm --- .../opaque-key-factory/deep-hashed-module-opaque-key-factory.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.ts b/packages/core/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.ts index 285792acf51..d5ac6dc5051 100644 --- a/packages/core/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.ts +++ b/packages/core/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.ts @@ -51,7 +51,7 @@ export class DeepHashedModuleOpaqueKeyFactory if (timeSpentInMs > 10) { const formattedTimeSpent = timeSpentInMs.toFixed(2); this.logger.warn( - `The module "${opaqueToken.module}" is taking ${formattedTimeSpent}ms to serialize, this may be caused by larger objects statically assigned to the module. More details: https://github.com/nestjs/nest/issues/12738`, + `The module "${opaqueToken.module}" is taking ${formattedTimeSpent}ms to serialize, this may be caused by larger objects statically assigned to the module. Consider changing the "moduleIdGeneratorAlgorithm" option to "reference" to improve the performance.`, ); } From b3f85e9c0490e0c49ae218697cb9880abadc3c59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 19 Mar 2024 10:52:31 +0100 Subject: [PATCH 018/122] test: update module compiler test --- packages/core/test/injector/compiler.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/test/injector/compiler.spec.ts b/packages/core/test/injector/compiler.spec.ts index 6a0eee91698..2929c49e11b 100644 --- a/packages/core/test/injector/compiler.spec.ts +++ b/packages/core/test/injector/compiler.spec.ts @@ -24,6 +24,7 @@ describe('ModuleCompiler', () => { const type = 'test'; expect(compiler.extractMetadata(type as any)).to.be.deep.equal({ type, + dynamicMetadata: undefined, }); }); }); From 50e1d705c3d4285675ca5f56e35dc99cd2239910 Mon Sep 17 00:00:00 2001 From: MegaSpaceHamlet Date: Sat, 30 Mar 2024 22:43:51 -0400 Subject: [PATCH 019/122] feat(platform-express): multer errors show 'field' Multer errors may include a 'field' property for certain errors. Pass it along into the error message. --- .../platform-express/multer/multer/multer.utils.ts | 5 +++++ .../test/multer/multer/multer.utils.spec.ts | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/packages/platform-express/multer/multer/multer.utils.ts b/packages/platform-express/multer/multer/multer.utils.ts index 9df215832ea..8b73e6d5199 100644 --- a/packages/platform-express/multer/multer/multer.utils.ts +++ b/packages/platform-express/multer/multer/multer.utils.ts @@ -19,6 +19,11 @@ export function transformException(error: Error | undefined) { case multerExceptions.LIMIT_UNEXPECTED_FILE: case multerExceptions.LIMIT_PART_COUNT: case multerExceptions.MISSING_FIELD_NAME: + //@ts-expect-error: Multer may attach the fieldname to the error object + if (error.field) { + //@ts-expect-error: Multer may attach the fieldname to the error object + return new BadRequestException(`${error.message} - ${error.field}`); + } return new BadRequestException(error.message); case busboyExceptions.MULTIPART_BOUNDARY_NOT_FOUND: return new BadRequestException(error.message); diff --git a/packages/platform-express/test/multer/multer/multer.utils.spec.ts b/packages/platform-express/test/multer/multer/multer.utils.spec.ts index f3745b936cf..e6462e4093d 100644 --- a/packages/platform-express/test/multer/multer/multer.utils.spec.ts +++ b/packages/platform-express/test/multer/multer/multer.utils.spec.ts @@ -57,5 +57,16 @@ describe('transformException', () => { ); }); }); + describe(`and has a 'field' property`, () => { + it('should return the field propery appended to the error message', () => { + const err = { + message: multerExceptions.LIMIT_UNEXPECTED_FILE, + field: 'foo', + }; + expect(transformException(err as any).message).to.equal( + `${multerExceptions.LIMIT_UNEXPECTED_FILE} - foo`, + ); + }); + }); }); }); From 1ccc7f9d9174dd40d997234ab5d596d279684673 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 2 Apr 2024 16:01:17 +0500 Subject: [PATCH 020/122] =?UTF-8?q?=D0=A1orrection=20of=20`Reflector`=20ty?= =?UTF-8?q?pes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/services/reflector.service.ts | 31 ++++++++++----------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/packages/core/services/reflector.service.ts b/packages/core/services/reflector.service.ts index 8de84dd7398..7293e91af33 100644 --- a/packages/core/services/reflector.service.ts +++ b/packages/core/services/reflector.service.ts @@ -127,14 +127,11 @@ export class Reflector { * @param targets context (decorated objects) to retrieve metadata from * */ - public getAll>( - decorator: T, - targets: (Type | Function)[], - ): T extends ReflectableDecorator - ? R extends Array - ? R - : R[] - : unknown; + public getAll< + TParam = any, + TTransformed = TParam, + T extends ReflectableDecorator = ReflectableDecorator, + >(decorator: T, targets: (Type | Function)[]): TTransformed extends any[] ? TTransformed : TTransformed[]; /** * Retrieve metadata for a specified key for a specified set of targets. * @@ -169,10 +166,11 @@ export class Reflector { * @param targets context (decorated objects) to retrieve metadata from * */ - public getAllAndMerge>( - decorator: T, - targets: (Type | Function)[], - ): T extends ReflectableDecorator ? R : unknown; + public getAllAndMerge< + TParam = any, + TTransformed = TParam, + T extends ReflectableDecorator = ReflectableDecorator, + >(decorator: T, targets: (Type | Function)[]): TTransformed; /** * Retrieve metadata for a specified key for a specified set of targets and merge results. * @@ -224,10 +222,11 @@ export class Reflector { * @param targets context (decorated objects) to retrieve metadata from * */ - public getAllAndOverride>( - decorator: T, - targets: (Type | Function)[], - ): T extends ReflectableDecorator ? R : unknown; + public getAllAndOverride< + TParam = any, + TTransformed = TParam, + T extends ReflectableDecorator = ReflectableDecorator, + >(decorator: T, targets: (Type | Function)[]): TTransformed; /** * Retrieve metadata for a specified key for a specified set of targets and return a first not undefined value. * From 52b2c72124847db1f2708b54e17b5bc1d34bd45e Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 3 Apr 2024 12:26:16 +0500 Subject: [PATCH 021/122] Improving types --- packages/core/services/reflector.service.ts | 27 +++++++++------------ 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/packages/core/services/reflector.service.ts b/packages/core/services/reflector.service.ts index 7293e91af33..e42c39fb1f1 100644 --- a/packages/core/services/reflector.service.ts +++ b/packages/core/services/reflector.service.ts @@ -127,11 +127,10 @@ export class Reflector { * @param targets context (decorated objects) to retrieve metadata from * */ - public getAll< - TParam = any, - TTransformed = TParam, - T extends ReflectableDecorator = ReflectableDecorator, - >(decorator: T, targets: (Type | Function)[]): TTransformed extends any[] ? TTransformed : TTransformed[]; + public getAll( + decorator: ReflectableDecorator, + targets: (Type | Function)[], + ): TTransformed extends any[] ? TTransformed : TTransformed[]; /** * Retrieve metadata for a specified key for a specified set of targets. * @@ -166,11 +165,10 @@ export class Reflector { * @param targets context (decorated objects) to retrieve metadata from * */ - public getAllAndMerge< - TParam = any, - TTransformed = TParam, - T extends ReflectableDecorator = ReflectableDecorator, - >(decorator: T, targets: (Type | Function)[]): TTransformed; + public getAllAndMerge( + decorator: ReflectableDecorator, + targets: (Type | Function)[], + ): TTransformed; /** * Retrieve metadata for a specified key for a specified set of targets and merge results. * @@ -222,11 +220,10 @@ export class Reflector { * @param targets context (decorated objects) to retrieve metadata from * */ - public getAllAndOverride< - TParam = any, - TTransformed = TParam, - T extends ReflectableDecorator = ReflectableDecorator, - >(decorator: T, targets: (Type | Function)[]): TTransformed; + public getAllAndOverride( + decorator: ReflectableDecorator, + targets: (Type | Function)[], + ): TTransformed; /** * Retrieve metadata for a specified key for a specified set of targets and return a first not undefined value. * From ef12d355ff91377a2fd1d5a66afe60841d4be6ec Mon Sep 17 00:00:00 2001 From: MegaSpaceHamlet Date: Mon, 8 Apr 2024 16:58:33 -0400 Subject: [PATCH 022/122] refactor(platform-express): modify error arg type Add the possible `field` property to the `error` arg in `transformExecption`. --- packages/platform-express/multer/multer/multer.utils.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/platform-express/multer/multer/multer.utils.ts b/packages/platform-express/multer/multer/multer.utils.ts index 8b73e6d5199..62c1a7f1074 100644 --- a/packages/platform-express/multer/multer/multer.utils.ts +++ b/packages/platform-express/multer/multer/multer.utils.ts @@ -5,7 +5,11 @@ import { } from '@nestjs/common'; import { multerExceptions, busboyExceptions } from './multer.constants'; -export function transformException(error: Error | undefined) { +// Multer may add in a 'field' property to the error +// https://github.com/expressjs/multer/blob/aa42bea6ac7d0cb8fcb279b15a7278cda805dc63/lib/multer-error.js#L19 +export function transformException( + error: (Error & { field?: string }) | undefined, +) { if (!error || error instanceof HttpException) { return error; } @@ -19,9 +23,7 @@ export function transformException(error: Error | undefined) { case multerExceptions.LIMIT_UNEXPECTED_FILE: case multerExceptions.LIMIT_PART_COUNT: case multerExceptions.MISSING_FIELD_NAME: - //@ts-expect-error: Multer may attach the fieldname to the error object if (error.field) { - //@ts-expect-error: Multer may attach the fieldname to the error object return new BadRequestException(`${error.message} - ${error.field}`); } return new BadRequestException(error.message); From 7d5adfcc1faf8a103933e488d104aba5ccb9a26d Mon Sep 17 00:00:00 2001 From: Kamil Mysliwiec Date: Fri, 19 Apr 2024 09:14:09 +0200 Subject: [PATCH 023/122] Revert "Revert "fix(microservice) Delete unnecessary call of grpcClient.start"" --- packages/microservices/server/server-grpc.ts | 1 - .../microservices/test/server/server-grpc.spec.ts | 13 ------------- 2 files changed, 14 deletions(-) diff --git a/packages/microservices/server/server-grpc.ts b/packages/microservices/server/server-grpc.ts index 2b81b9268ed..84b3c552bd1 100644 --- a/packages/microservices/server/server-grpc.ts +++ b/packages/microservices/server/server-grpc.ts @@ -81,7 +81,6 @@ export class ServerGrpc extends Server implements CustomTransportStrategy { public async start(callback?: () => void) { await this.bindEvents(); - this.grpcClient.start(); callback(); } diff --git a/packages/microservices/test/server/server-grpc.spec.ts b/packages/microservices/test/server/server-grpc.spec.ts index 3e0fb4147cd..657eb40f6ed 100644 --- a/packages/microservices/test/server/server-grpc.spec.ts +++ b/packages/microservices/test/server/server-grpc.spec.ts @@ -51,13 +51,6 @@ describe('ServerGrpc', () => { await server.close(); expect(bindEventsStub.called).to.be.true; }); - it('should call "client.start"', async () => { - const client = { start: sinon.spy() }; - sinon.stub(server, 'createClient').callsFake(async () => client); - - await server.listen(callback); - expect(client.start.called).to.be.true; - }); it('should call callback', async () => { await server.listen(callback); await server.close(); @@ -95,12 +88,6 @@ describe('ServerGrpc', () => { await serverMulti.close(); expect(bindEventsStub.called).to.be.true; }); - it('should call "client.start"', async () => { - const client = { start: sinon.spy() }; - sinon.stub(serverMulti, 'createClient').callsFake(async () => client); - await serverMulti.listen(callback); - expect(client.start.called).to.be.true; - }); it('should call callback', async () => { await serverMulti.listen(callback); await serverMulti.close(); From 3fd422005246b143857840a0ebe3ac8d6a371c29 Mon Sep 17 00:00:00 2001 From: Tom Florentin Date: Wed, 29 May 2024 11:09:42 +0200 Subject: [PATCH 024/122] plain to class deprectated --- .../interfaces/external/transformer-package.interface.ts | 2 +- packages/common/pipes/validation.pipe.ts | 2 +- packages/common/serializer/class-serializer.interceptor.ts | 2 +- sample/01-cats-app/src/common/pipes/validation.pipe.ts | 4 ++-- sample/10-fastify/src/common/pipes/validation.pipe.ts | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/common/interfaces/external/transformer-package.interface.ts b/packages/common/interfaces/external/transformer-package.interface.ts index cd08a05525f..f13c5fa2e10 100644 --- a/packages/common/interfaces/external/transformer-package.interface.ts +++ b/packages/common/interfaces/external/transformer-package.interface.ts @@ -2,7 +2,7 @@ import { Type } from '../type.interface'; import { ClassTransformOptions } from './class-transform-options.interface'; export interface TransformerPackage { - plainToClass( + plainToInstance( cls: Type, plain: unknown, options?: ClassTransformOptions, diff --git a/packages/common/pipes/validation.pipe.ts b/packages/common/pipes/validation.pipe.ts index 6ee05a4adf9..0aaaa8272f3 100644 --- a/packages/common/pipes/validation.pipe.ts +++ b/packages/common/pipes/validation.pipe.ts @@ -121,7 +121,7 @@ export class ValidationPipe implements PipeTransform { const isNil = value !== originalValue; const isPrimitive = this.isPrimitive(value); this.stripProtoKeys(value); - let entity = classTransformer.plainToClass( + let entity = classTransformer.plainToInstance( metatype, value, this.transformOptions, diff --git a/packages/common/serializer/class-serializer.interceptor.ts b/packages/common/serializer/class-serializer.interceptor.ts index 3773fddc036..c0534c4d34c 100644 --- a/packages/common/serializer/class-serializer.interceptor.ts +++ b/packages/common/serializer/class-serializer.interceptor.ts @@ -94,7 +94,7 @@ export class ClassSerializerInterceptor implements NestInterceptor { if (plainOrClass instanceof options.type) { return classTransformer.classToPlain(plainOrClass, options); } - const instance = classTransformer.plainToClass(options.type, plainOrClass); + const instance = classTransformer.plainToInstance(options.type, plainOrClass); return classTransformer.classToPlain(instance, options); } diff --git a/sample/01-cats-app/src/common/pipes/validation.pipe.ts b/sample/01-cats-app/src/common/pipes/validation.pipe.ts index 9df091a8812..1a79ae2141c 100644 --- a/sample/01-cats-app/src/common/pipes/validation.pipe.ts +++ b/sample/01-cats-app/src/common/pipes/validation.pipe.ts @@ -5,7 +5,7 @@ import { PipeTransform, Type, } from '@nestjs/common'; -import { plainToClass } from 'class-transformer'; +import { plainToInstance } from 'class-transformer'; import { validate } from 'class-validator'; @Injectable() @@ -15,7 +15,7 @@ export class ValidationPipe implements PipeTransform { if (!metatype || !this.toValidate(metatype)) { return value; } - const object = plainToClass(metatype, value); + const object = plainToInstance(metatype, value); const errors = await validate(object); if (errors.length > 0) { throw new BadRequestException('Validation failed'); diff --git a/sample/10-fastify/src/common/pipes/validation.pipe.ts b/sample/10-fastify/src/common/pipes/validation.pipe.ts index 9df091a8812..1a79ae2141c 100644 --- a/sample/10-fastify/src/common/pipes/validation.pipe.ts +++ b/sample/10-fastify/src/common/pipes/validation.pipe.ts @@ -5,7 +5,7 @@ import { PipeTransform, Type, } from '@nestjs/common'; -import { plainToClass } from 'class-transformer'; +import { plainToInstance } from 'class-transformer'; import { validate } from 'class-validator'; @Injectable() @@ -15,7 +15,7 @@ export class ValidationPipe implements PipeTransform { if (!metatype || !this.toValidate(metatype)) { return value; } - const object = plainToClass(metatype, value); + const object = plainToInstance(metatype, value); const errors = await validate(object); if (errors.length > 0) { throw new BadRequestException('Validation failed'); From ba761c1488a869db28842711fe997a924d35f07a Mon Sep 17 00:00:00 2001 From: Patrick Acioli Date: Wed, 17 Jul 2024 20:42:55 -0300 Subject: [PATCH 025/122] fix(fastify-adapter): middleware not executed when root path is excluded --- .../e2e/middleware-fastify.spec.ts | 131 ++++++++++++++++++ .../adapters/fastify-adapter.ts | 12 ++ 2 files changed, 143 insertions(+) diff --git a/integration/hello-world/e2e/middleware-fastify.spec.ts b/integration/hello-world/e2e/middleware-fastify.spec.ts index 36a6d64e024..a0d9d9f211e 100644 --- a/integration/hello-world/e2e/middleware-fastify.spec.ts +++ b/integration/hello-world/e2e/middleware-fastify.spec.ts @@ -16,6 +16,8 @@ import { import { Test } from '@nestjs/testing'; import { expect } from 'chai'; import { AppModule } from '../src/app.module'; +import * as request from 'supertest'; +import { FastifyRequest } from 'fastify'; describe('Middleware (FastifyAdapter)', () => { let app: NestFastifyApplication; @@ -398,4 +400,133 @@ describe('Middleware (FastifyAdapter)', () => { await app.close(); }); }); + + describe('should have data attached in middleware', () => { + @Controller() + class DataController { + @Get('data') + async data(@Req() req: FastifyRequest['raw']) { + return { + success: true, + extras: req?.['raw']?.extras, + pong: req?.['raw']?.headers?.ping, + }; + } + @Get('pong') + async pong(@Req() req: FastifyRequest['raw']) { + return { success: true, pong: req?.['raw']?.headers?.ping }; + } + + @Get('') + async rootPath(@Req() req: FastifyRequest['raw']) { + return { success: true, root: true }; + } + } + + @Module({ + controllers: [DataController], + }) + class DataModule implements NestModule { + configure(consumer: MiddlewareConsumer) { + consumer + .apply((req, res, next) => { + req.extras = { data: 'Data attached in middleware' }; + req.headers['ping'] = 'pong'; + next(); + }) + .forRoutes('*'); + } + } + + beforeEach(async () => { + app = ( + await Test.createTestingModule({ + imports: [DataModule], + }).compile() + ).createNestApplication(new FastifyAdapter()); + }); + + it(`GET forRoutes('*') with global prefix`, async () => { + app.setGlobalPrefix('/api'); + await app.init(); + await app.getHttpAdapter().getInstance().ready(); + return app + .inject({ + method: 'GET', + url: '/api/pong', + }) + .then(({ payload }) => + expect(payload).to.be.eql( + JSON.stringify({ + success: true, + pong: 'pong', + }), + ), + ); + }); + + it(`GET forRoutes('*') without prefix config`, async () => { + await app.init(); + await app.getHttpAdapter().getInstance().ready(); + return app + .inject({ + method: 'GET', + url: '/pong', + }) + .then(({ payload }) => + expect(payload).to.be.eql( + JSON.stringify({ + success: true, + pong: 'pong', + }), + ), + ); + }); + + it(`GET forRoutes('*') with global prefix and exclude patterns`, async () => { + app.setGlobalPrefix('/api', { exclude: ['/'] }); + await app.init(); + await app.getHttpAdapter().getInstance().ready(); + + await request(app.getHttpServer()) + .get('/') + .expect(200, { success: true, root: true }); + }); + + it(`GET forRoutes('*') with global prefix and global prefix options`, async () => { + app.setGlobalPrefix('/api', { exclude: ['/'] }); + await app.init(); + await app.getHttpAdapter().getInstance().ready(); + + await request(app.getHttpServer()) + .get('/api/data') + .expect(200, { + success: true, + extras: { data: 'Data attached in middleware' }, + pong: 'pong', + }); + await request(app.getHttpServer()) + .get('/') + .expect(200, { success: true, root: true }); + }); + + it(`GET forRoutes('*') with global prefix that not starts with /`, async () => { + app.setGlobalPrefix('api'); + await app.init(); + await app.getHttpAdapter().getInstance().ready(); + + await request(app.getHttpServer()) + .get('/api/data') + .expect(200, { + success: true, + extras: { data: 'Data attached in middleware' }, + pong: 'pong', + }); + await request(app.getHttpServer()).get('/').expect(404); + }); + + afterEach(async () => { + await app.close(); + }); + }); }); diff --git a/packages/platform-fastify/adapters/fastify-adapter.ts b/packages/platform-fastify/adapters/fastify-adapter.ts index 837eb09e0c5..9843dd34b0c 100644 --- a/packages/platform-fastify/adapters/fastify-adapter.ts +++ b/packages/platform-fastify/adapters/fastify-adapter.ts @@ -131,6 +131,7 @@ export class FastifyAdapter< > = FastifyInstance, > extends AbstractHttpAdapter { protected readonly instance: TInstance; + protected _pathPrefix?: string; private _isParserRegistered: boolean; private isMiddieRegistered: boolean; @@ -521,6 +522,11 @@ export class FastifyAdapter< this.registerJsonContentParser(rawBody); this._isParserRegistered = true; + this._pathPrefix = prefix + ? !prefix.startsWith('/') + ? `/${prefix}` + : prefix + : undefined; } public useBodyParser( @@ -577,6 +583,12 @@ export class FastifyAdapter< // Fallback to "(.*)" to support plugins like GraphQL normalizedPath = normalizedPath === '/(.*)' ? '(.*)' : normalizedPath; + // Normalize the path to support the prefix if it set in application + normalizedPath = + this._pathPrefix && !normalizedPath.startsWith(this._pathPrefix) + ? `${this._pathPrefix}${normalizedPath}(.*)` + : normalizedPath; + let re = pathToRegexp(normalizedPath); re = hasEndOfStringCharacter ? new RegExp(re.source + '$', re.flags) : re; From b62b9255cf6754b0e15d4a3305c20c6a961a7b24 Mon Sep 17 00:00:00 2001 From: johaven Date: Thu, 29 Feb 2024 16:08:51 +0100 Subject: [PATCH 026/122] feat(core,common,platform-fastify): add webdav http methods support --- .../http/request-mapping.decorator.ts | 63 +++ packages/common/enums/http-status.enum.ts | 7 + packages/common/enums/request-method.enum.ts | 7 + .../interfaces/http/http-server.interface.ts | 14 + .../decorators/route-params.decorator.spec.ts | 423 +++++++++++++++++- packages/core/adapters/http-adapter.ts | 42 ++ .../core/helpers/router-method-factory.ts | 7 + .../helpers/router-method-factory.spec.ts | 18 + .../adapters/fastify-adapter.ts | 28 ++ 9 files changed, 608 insertions(+), 1 deletion(-) diff --git a/packages/common/decorators/http/request-mapping.decorator.ts b/packages/common/decorators/http/request-mapping.decorator.ts index 2b3506efcad..e707883cf46 100644 --- a/packages/common/decorators/http/request-mapping.decorator.ts +++ b/packages/common/decorators/http/request-mapping.decorator.ts @@ -118,3 +118,66 @@ export const All = createMappingDecorator(RequestMethod.ALL); * @publicApi */ export const Search = createMappingDecorator(RequestMethod.SEARCH); + +/** + * Route handler (method) Decorator. Routes Webdav PROPFIND requests to the specified path. + * + * @see [Routing](https://docs.nestjs.com/controllers#routing) + * + * @publicApi + */ +export const Propfind = createMappingDecorator(RequestMethod.PROPFIND); + +/** + * Route handler (method) Decorator. Routes Webdav PROPPATCH requests to the specified path. + * + * @see [Routing](https://docs.nestjs.com/controllers#routing) + * + * @publicApi + */ +export const Proppatch = createMappingDecorator(RequestMethod.PROPPATCH); + +/** + * Route handler (method) Decorator. Routes Webdav MKCOL requests to the specified path. + * + * @see [Routing](https://docs.nestjs.com/controllers#routing) + * + * @publicApi + */ +export const Mkcol = createMappingDecorator(RequestMethod.MKCOL); + +/** + * Route handler (method) Decorator. Routes Webdav COPY requests to the specified path. + * + * @see [Routing](https://docs.nestjs.com/controllers#routing) + * + * @publicApi + */ +export const Copy = createMappingDecorator(RequestMethod.COPY); + +/** + * Route handler (method) Decorator. Routes Webdav MOVE requests to the specified path. + * + * @see [Routing](https://docs.nestjs.com/controllers#routing) + * + * @publicApi + */ +export const Move = createMappingDecorator(RequestMethod.MOVE); + +/** + * Route handler (method) Decorator. Routes Webdav LOCK requests to the specified path. + * + * @see [Routing](https://docs.nestjs.com/controllers#routing) + * + * @publicApi + */ +export const Lock = createMappingDecorator(RequestMethod.LOCK); + +/** + * Route handler (method) Decorator. Routes Webdav UNLOCK requests to the specified path. + * + * @see [Routing](https://docs.nestjs.com/controllers#routing) + * + * @publicApi + */ +export const Unlock = createMappingDecorator(RequestMethod.UNLOCK); diff --git a/packages/common/enums/http-status.enum.ts b/packages/common/enums/http-status.enum.ts index 326001344c2..8d6da452686 100644 --- a/packages/common/enums/http-status.enum.ts +++ b/packages/common/enums/http-status.enum.ts @@ -13,6 +13,9 @@ export enum HttpStatus { NO_CONTENT = 204, RESET_CONTENT = 205, PARTIAL_CONTENT = 206, + MULTI_STATUS = 207, + ALREADY_REPORTED = 208, + CONTENT_DIFFERENT = 210, AMBIGUOUS = 300, MOVED_PERMANENTLY = 301, FOUND = 302, @@ -41,13 +44,17 @@ export enum HttpStatus { I_AM_A_TEAPOT = 418, MISDIRECTED = 421, UNPROCESSABLE_ENTITY = 422, + LOCKED = 423, FAILED_DEPENDENCY = 424, PRECONDITION_REQUIRED = 428, TOO_MANY_REQUESTS = 429, + UNRECOVERABLE_ERROR = 456, INTERNAL_SERVER_ERROR = 500, NOT_IMPLEMENTED = 501, BAD_GATEWAY = 502, SERVICE_UNAVAILABLE = 503, GATEWAY_TIMEOUT = 504, HTTP_VERSION_NOT_SUPPORTED = 505, + INSUFFICIENT_STORAGE = 507, + LOOP_DETECTED = 508, } diff --git a/packages/common/enums/request-method.enum.ts b/packages/common/enums/request-method.enum.ts index e28455633f4..9bd12a98ca5 100644 --- a/packages/common/enums/request-method.enum.ts +++ b/packages/common/enums/request-method.enum.ts @@ -8,4 +8,11 @@ export enum RequestMethod { OPTIONS, HEAD, SEARCH, + PROPFIND, + PROPPATCH, + MKCOL, + COPY, + MOVE, + LOCK, + UNLOCK, } diff --git a/packages/common/interfaces/http/http-server.interface.ts b/packages/common/interfaces/http/http-server.interface.ts index 28e8278b0fc..91494021e57 100644 --- a/packages/common/interfaces/http/http-server.interface.ts +++ b/packages/common/interfaces/http/http-server.interface.ts @@ -47,6 +47,20 @@ export interface HttpServer< put(path: string, handler: RequestHandler): any; patch(handler: RequestHandler): any; patch(path: string, handler: RequestHandler): any; + propfind?(handler: RequestHandler): any; + propfind?(path: string, handler: RequestHandler): any; + proppatch?(handler: RequestHandler): any; + proppatch?(path: string, handler: RequestHandler): any; + mkcol?(handler: RequestHandler): any; + mkcol?(path: string, handler: RequestHandler): any; + copy?(handler: RequestHandler): any; + copy?(path: string, handler: RequestHandler): any; + move?(handler: RequestHandler): any; + move?(path: string, handler: RequestHandler): any; + lock?(handler: RequestHandler): any; + lock?(path: string, handler: RequestHandler): any; + unlock?(handler: RequestHandler): any; + unlock?(path: string, handler: RequestHandler): any; all(path: string, handler: RequestHandler): any; all(handler: RequestHandler): any; options(handler: RequestHandler): any; diff --git a/packages/common/test/decorators/route-params.decorator.spec.ts b/packages/common/test/decorators/route-params.decorator.spec.ts index 3c4eabf5cbd..da3a85a9adb 100644 --- a/packages/common/test/decorators/route-params.decorator.spec.ts +++ b/packages/common/test/decorators/route-params.decorator.spec.ts @@ -1,7 +1,22 @@ import { expect } from 'chai'; import { Body, HostParam, Param, Query, Search } from '../../decorators'; import { RequestMethod } from '../../enums/request-method.enum'; -import { All, Delete, Get, ParseIntPipe, Patch, Post, Put } from '../../index'; +import { + All, + Delete, + Get, + ParseIntPipe, + Patch, + Post, + Put, + Propfind, + Proppatch, + Mkcol, + Move, + Copy, + Lock, + Unlock, +} from '../../index'; import { ROUTE_ARGS_METADATA } from '../../constants'; import { RouteParamtypes } from '../../enums/route-paramtypes.enum'; @@ -415,3 +430,409 @@ describe('Inheritance', () => { expect(methodUsingArray).to.be.eql(requestPropsUsingArray.method); }); }); + +describe('@PropFind', () => { + const requestPath = 'test'; + const requestProps = { + path: requestPath, + method: RequestMethod.PROPFIND, + }; + + const requestPathUsingArray = ['foo', 'bar']; + const requestPropsUsingArray = { + path: requestPathUsingArray, + method: RequestMethod.PROPFIND, + }; + + it('should enhance class with expected request metadata', () => { + class Test { + @Propfind(requestPath) + public static test() {} + + @Propfind(requestPathUsingArray) + public static testUsingArray() {} + } + + const path = Reflect.getMetadata('path', Test.test); + const method = Reflect.getMetadata('method', Test.test); + const pathUsingArray = Reflect.getMetadata('path', Test.testUsingArray); + const methodUsingArray = Reflect.getMetadata('method', Test.testUsingArray); + + expect(path).to.be.eql(requestPath); + expect(method).to.be.eql(requestProps.method); + expect(pathUsingArray).to.be.eql(requestPathUsingArray); + expect(methodUsingArray).to.be.eql(requestPropsUsingArray.method); + }); + + it('should set path on "/" by default', () => { + class Test { + @Propfind() + public static test( + @Query() query, + @Param() params, + @HostParam() hostParams, + ) {} + + @Propfind([]) + public static testUsingArray( + @Query() query, + @Param() params, + @HostParam() hostParams, + ) {} + } + + const path = Reflect.getMetadata('path', Test.test); + const pathUsingArray = Reflect.getMetadata('path', Test.testUsingArray); + + expect(path).to.be.eql('/'); + expect(pathUsingArray).to.be.eql('/'); + }); +}); + +describe('@PropPatch', () => { + const requestPath = 'test'; + const requestProps = { + path: requestPath, + method: RequestMethod.PROPPATCH, + }; + + const requestPathUsingArray = ['foo', 'bar']; + const requestPropsUsingArray = { + path: requestPathUsingArray, + method: RequestMethod.PROPPATCH, + }; + + it('should enhance class with expected request metadata', () => { + class Test { + @Proppatch(requestPath) + public static test() {} + + @Proppatch(requestPathUsingArray) + public static testUsingArray() {} + } + + const path = Reflect.getMetadata('path', Test.test); + const method = Reflect.getMetadata('method', Test.test); + const pathUsingArray = Reflect.getMetadata('path', Test.testUsingArray); + const methodUsingArray = Reflect.getMetadata('method', Test.testUsingArray); + + expect(path).to.be.eql(requestPath); + expect(method).to.be.eql(requestProps.method); + expect(pathUsingArray).to.be.eql(requestPathUsingArray); + expect(methodUsingArray).to.be.eql(requestPropsUsingArray.method); + }); + + it('should set path on "/" by default', () => { + class Test { + @Proppatch() + public static test( + @Query() query, + @Param() params, + @HostParam() hostParams, + ) {} + + @Proppatch([]) + public static testUsingArray( + @Query() query, + @Param() params, + @HostParam() hostParams, + ) {} + } + + const path = Reflect.getMetadata('path', Test.test); + const pathUsingArray = Reflect.getMetadata('path', Test.testUsingArray); + + expect(path).to.be.eql('/'); + expect(pathUsingArray).to.be.eql('/'); + }); +}); + +describe('@MkCol', () => { + const requestPath = 'test'; + const requestProps = { + path: requestPath, + method: RequestMethod.MKCOL, + }; + + const requestPathUsingArray = ['foo', 'bar']; + const requestPropsUsingArray = { + path: requestPathUsingArray, + method: RequestMethod.MKCOL, + }; + + it('should enhance class with expected request metadata', () => { + class Test { + @Mkcol(requestPath) + public static test() {} + + @Mkcol(requestPathUsingArray) + public static testUsingArray() {} + } + + const path = Reflect.getMetadata('path', Test.test); + const method = Reflect.getMetadata('method', Test.test); + const pathUsingArray = Reflect.getMetadata('path', Test.testUsingArray); + const methodUsingArray = Reflect.getMetadata('method', Test.testUsingArray); + + expect(path).to.be.eql(requestPath); + expect(method).to.be.eql(requestProps.method); + expect(pathUsingArray).to.be.eql(requestPathUsingArray); + expect(methodUsingArray).to.be.eql(requestPropsUsingArray.method); + }); + + it('should set path on "/" by default', () => { + class Test { + @Mkcol() + public static test( + @Query() query, + @Param() params, + @HostParam() hostParams, + ) {} + + @Mkcol([]) + public static testUsingArray( + @Query() query, + @Param() params, + @HostParam() hostParams, + ) {} + } + + const path = Reflect.getMetadata('path', Test.test); + const pathUsingArray = Reflect.getMetadata('path', Test.testUsingArray); + + expect(path).to.be.eql('/'); + expect(pathUsingArray).to.be.eql('/'); + }); +}); + +describe('@Copy', () => { + const requestPath = 'test'; + const requestProps = { + path: requestPath, + method: RequestMethod.COPY, + }; + + const requestPathUsingArray = ['foo', 'bar']; + const requestPropsUsingArray = { + path: requestPathUsingArray, + method: RequestMethod.COPY, + }; + + it('should enhance class with expected request metadata', () => { + class Test { + @Copy(requestPath) + public static test() {} + + @Copy(requestPathUsingArray) + public static testUsingArray() {} + } + + const path = Reflect.getMetadata('path', Test.test); + const method = Reflect.getMetadata('method', Test.test); + const pathUsingArray = Reflect.getMetadata('path', Test.testUsingArray); + const methodUsingArray = Reflect.getMetadata('method', Test.testUsingArray); + + expect(path).to.be.eql(requestPath); + expect(method).to.be.eql(requestProps.method); + expect(pathUsingArray).to.be.eql(requestPathUsingArray); + expect(methodUsingArray).to.be.eql(requestPropsUsingArray.method); + }); + + it('should set path on "/" by default', () => { + class Test { + @Copy() + public static test( + @Query() query, + @Param() params, + @HostParam() hostParams, + ) {} + + @Copy([]) + public static testUsingArray( + @Query() query, + @Param() params, + @HostParam() hostParams, + ) {} + } + + const path = Reflect.getMetadata('path', Test.test); + const pathUsingArray = Reflect.getMetadata('path', Test.testUsingArray); + + expect(path).to.be.eql('/'); + expect(pathUsingArray).to.be.eql('/'); + }); +}); + +describe('@Move', () => { + const requestPath = 'test'; + const requestProps = { + path: requestPath, + method: RequestMethod.MOVE, + }; + + const requestPathUsingArray = ['foo', 'bar']; + const requestPropsUsingArray = { + path: requestPathUsingArray, + method: RequestMethod.MOVE, + }; + + it('should enhance class with expected request metadata', () => { + class Test { + @Move(requestPath) + public static test() {} + + @Move(requestPathUsingArray) + public static testUsingArray() {} + } + + const path = Reflect.getMetadata('path', Test.test); + const method = Reflect.getMetadata('method', Test.test); + const pathUsingArray = Reflect.getMetadata('path', Test.testUsingArray); + const methodUsingArray = Reflect.getMetadata('method', Test.testUsingArray); + + expect(path).to.be.eql(requestPath); + expect(method).to.be.eql(requestProps.method); + expect(pathUsingArray).to.be.eql(requestPathUsingArray); + expect(methodUsingArray).to.be.eql(requestPropsUsingArray.method); + }); + + it('should set path on "/" by default', () => { + class Test { + @Move() + public static test( + @Query() query, + @Param() params, + @HostParam() hostParams, + ) {} + + @Move([]) + public static testUsingArray( + @Query() query, + @Param() params, + @HostParam() hostParams, + ) {} + } + + const path = Reflect.getMetadata('path', Test.test); + const pathUsingArray = Reflect.getMetadata('path', Test.testUsingArray); + + expect(path).to.be.eql('/'); + expect(pathUsingArray).to.be.eql('/'); + }); +}); + +describe('@Lock', () => { + const requestPath = 'test'; + const requestProps = { + path: requestPath, + method: RequestMethod.LOCK, + }; + + const requestPathUsingArray = ['foo', 'bar']; + const requestPropsUsingArray = { + path: requestPathUsingArray, + method: RequestMethod.LOCK, + }; + + it('should enhance class with expected request metadata', () => { + class Test { + @Lock(requestPath) + public static test() {} + + @Lock(requestPathUsingArray) + public static testUsingArray() {} + } + + const path = Reflect.getMetadata('path', Test.test); + const method = Reflect.getMetadata('method', Test.test); + const pathUsingArray = Reflect.getMetadata('path', Test.testUsingArray); + const methodUsingArray = Reflect.getMetadata('method', Test.testUsingArray); + + expect(path).to.be.eql(requestPath); + expect(method).to.be.eql(requestProps.method); + expect(pathUsingArray).to.be.eql(requestPathUsingArray); + expect(methodUsingArray).to.be.eql(requestPropsUsingArray.method); + }); + + it('should set path on "/" by default', () => { + class Test { + @Lock() + public static test( + @Query() query, + @Param() params, + @HostParam() hostParams, + ) {} + + @Lock([]) + public static testUsingArray( + @Query() query, + @Param() params, + @HostParam() hostParams, + ) {} + } + + const path = Reflect.getMetadata('path', Test.test); + const pathUsingArray = Reflect.getMetadata('path', Test.testUsingArray); + + expect(path).to.be.eql('/'); + expect(pathUsingArray).to.be.eql('/'); + }); +}); + +describe('@Unlock', () => { + const requestPath = 'test'; + const requestProps = { + path: requestPath, + method: RequestMethod.UNLOCK, + }; + + const requestPathUsingArray = ['foo', 'bar']; + const requestPropsUsingArray = { + path: requestPathUsingArray, + method: RequestMethod.UNLOCK, + }; + + it('should enhance class with expected request metadata', () => { + class Test { + @Unlock(requestPath) + public static test() {} + + @Unlock(requestPathUsingArray) + public static testUsingArray() {} + } + + const path = Reflect.getMetadata('path', Test.test); + const method = Reflect.getMetadata('method', Test.test); + const pathUsingArray = Reflect.getMetadata('path', Test.testUsingArray); + const methodUsingArray = Reflect.getMetadata('method', Test.testUsingArray); + + expect(path).to.be.eql(requestPath); + expect(method).to.be.eql(requestProps.method); + expect(pathUsingArray).to.be.eql(requestPathUsingArray); + expect(methodUsingArray).to.be.eql(requestPropsUsingArray.method); + }); + + it('should set path on "/" by default', () => { + class Test { + @Unlock() + public static test( + @Query() query, + @Param() params, + @HostParam() hostParams, + ) {} + + @Unlock([]) + public static testUsingArray( + @Query() query, + @Param() params, + @HostParam() hostParams, + ) {} + } + + const path = Reflect.getMetadata('path', Test.test); + const pathUsingArray = Reflect.getMetadata('path', Test.testUsingArray); + + expect(path).to.be.eql('/'); + expect(pathUsingArray).to.be.eql('/'); + }); +}); diff --git a/packages/core/adapters/http-adapter.ts b/packages/core/adapters/http-adapter.ts index 6e079fe55dd..106e447ca41 100644 --- a/packages/core/adapters/http-adapter.ts +++ b/packages/core/adapters/http-adapter.ts @@ -62,6 +62,48 @@ export abstract class AbstractHttpAdapter< return this.instance.patch(...args); } + public propfind(handler: RequestHandler); + public propfind(path: any, handler: RequestHandler); + public propfind(...args: any[]) { + return this.instance.propfind(...args); + } + + public proppatch(handler: RequestHandler); + public proppatch(path: any, handler: RequestHandler); + public proppatch(...args: any[]) { + return this.instance.proppatch(...args); + } + + public mkcol(handler: RequestHandler); + public mkcol(path: any, handler: RequestHandler); + public mkcol(...args: any[]) { + return this.instance.mkcol(...args); + } + + public copy(handler: RequestHandler); + public copy(path: any, handler: RequestHandler); + public copy(...args: any[]) { + return this.instance.copy(...args); + } + + public move(handler: RequestHandler); + public move(path: any, handler: RequestHandler); + public move(...args: any[]) { + return this.instance.move(...args); + } + + public lock(handler: RequestHandler); + public lock(path: any, handler: RequestHandler); + public lock(...args: any[]) { + return this.instance.lock(...args); + } + + public unlock(handler: RequestHandler); + public unlock(path: any, handler: RequestHandler); + public unlock(...args: any[]) { + return this.instance.unlock(...args); + } + public all(handler: RequestHandler); public all(path: any, handler: RequestHandler); public all(...args: any[]) { diff --git a/packages/core/helpers/router-method-factory.ts b/packages/core/helpers/router-method-factory.ts index ff31c57e13a..6051303d67f 100644 --- a/packages/core/helpers/router-method-factory.ts +++ b/packages/core/helpers/router-method-factory.ts @@ -11,6 +11,13 @@ const REQUEST_METHOD_MAP = { [RequestMethod.OPTIONS]: 'options', [RequestMethod.HEAD]: 'head', [RequestMethod.SEARCH]: 'search', + [RequestMethod.PROPFIND]: 'propfind', + [RequestMethod.PROPPATCH]: 'proppatch', + [RequestMethod.MKCOL]: 'mkcol', + [RequestMethod.COPY]: 'copy', + [RequestMethod.MOVE]: 'move', + [RequestMethod.LOCK]: 'lock', + [RequestMethod.UNLOCK]: 'unlock', } as const satisfies Record; export class RouterMethodFactory { diff --git a/packages/core/test/helpers/router-method-factory.spec.ts b/packages/core/test/helpers/router-method-factory.spec.ts index 4f904519f74..6b3edfad54d 100644 --- a/packages/core/test/helpers/router-method-factory.spec.ts +++ b/packages/core/test/helpers/router-method-factory.spec.ts @@ -14,6 +14,13 @@ describe('RouterMethodFactory', () => { patch: () => {}, options: () => {}, head: () => {}, + propfind: () => {}, + proppatch: () => {}, + mkcol: () => {}, + copy: () => {}, + move: () => {}, + lock: () => {}, + unlock: () => {}, all: () => {}, }; beforeEach(() => { @@ -29,6 +36,17 @@ describe('RouterMethodFactory', () => { expect(factory.get(target, RequestMethod.PATCH)).to.equal(target.patch); expect(factory.get(target, RequestMethod.OPTIONS)).to.equal(target.options); expect(factory.get(target, RequestMethod.HEAD)).to.equal(target.head); + expect(factory.get(target, RequestMethod.PROPFIND)).to.equal( + target.propfind, + ); + expect(factory.get(target, RequestMethod.PROPPATCH)).to.equal( + target.proppatch, + ); + expect(factory.get(target, RequestMethod.MKCOL)).to.equal(target.mkcol); + expect(factory.get(target, RequestMethod.COPY)).to.equal(target.copy); + expect(factory.get(target, RequestMethod.MOVE)).to.equal(target.move); + expect(factory.get(target, RequestMethod.LOCK)).to.equal(target.lock); + expect(factory.get(target, RequestMethod.UNLOCK)).to.equal(target.unlock); expect(factory.get(target, -1 as any)).to.equal(target.use); }); }); diff --git a/packages/platform-fastify/adapters/fastify-adapter.ts b/packages/platform-fastify/adapters/fastify-adapter.ts index 6b99fa73d36..b7ec2c92d4c 100644 --- a/packages/platform-fastify/adapters/fastify-adapter.ts +++ b/packages/platform-fastify/adapters/fastify-adapter.ts @@ -320,6 +320,34 @@ export class FastifyAdapter< return this.injectRouteOptions('search', ...args); } + public propfind(...args: any[]) { + return this.injectRouteOptions('propfind', ...args); + } + + public proppatch(...args: any[]) { + return this.injectRouteOptions('proppatch', ...args); + } + + public mkcol(...args: any[]) { + return this.injectRouteOptions('mkcol', ...args); + } + + public copy(...args: any[]) { + return this.injectRouteOptions('copy', ...args); + } + + public move(...args: any[]) { + return this.injectRouteOptions('move', ...args); + } + + public lock(...args: any[]) { + return this.injectRouteOptions('lock', ...args); + } + + public unlock(...args: any[]) { + return this.injectRouteOptions('unlock', ...args); + } + public applyVersionFilter( handler: Function, version: VersionValue, From d20a1e580fc31240411a704bb6edfd8ae5b501dd Mon Sep 17 00:00:00 2001 From: Ali Nowrouzi Date: Wed, 28 Aug 2024 22:30:10 +0330 Subject: [PATCH 027/122] feat(microservices): add gracefull shutdown option for nats server --- packages/microservices/constants.ts | 2 + .../external/nats-client.interface.ts | 2 +- .../microservice-configuration.interface.ts | 2 + packages/microservices/server/server-nats.ts | 44 ++++++++++-- .../test/server/server-nats.spec.ts | 68 +++++++++++++++++-- 5 files changed, 105 insertions(+), 13 deletions(-) diff --git a/packages/microservices/constants.ts b/packages/microservices/constants.ts index c358776dd20..ea04561042d 100644 --- a/packages/microservices/constants.ts +++ b/packages/microservices/constants.ts @@ -71,3 +71,5 @@ export const EADDRINUSE = 'EADDRINUSE'; export const CONNECTION_FAILED_MESSAGE = 'Connection to transport failed. Trying to reconnect...'; + +export const NATS_DEFAULT_GRACE_PERIOD = 10000; diff --git a/packages/microservices/external/nats-client.interface.ts b/packages/microservices/external/nats-client.interface.ts index 637883a42f8..931f1233cc4 100644 --- a/packages/microservices/external/nats-client.interface.ts +++ b/packages/microservices/external/nats-client.interface.ts @@ -50,7 +50,7 @@ interface Sub extends AsyncIterable { getMax(): number | undefined; } -declare type Subscription = Sub; +export declare type Subscription = Sub; declare enum Events { Disconnect = 'disconnect', diff --git a/packages/microservices/interfaces/microservice-configuration.interface.ts b/packages/microservices/interfaces/microservice-configuration.interface.ts index b5850e1b236..1c5d19eba1c 100644 --- a/packages/microservices/interfaces/microservice-configuration.interface.ts +++ b/packages/microservices/interfaces/microservice-configuration.interface.ts @@ -193,6 +193,8 @@ export interface NatsOptions { token?: string; yieldTime?: number; tokenHandler?: any; + gracefulShutdown?: boolean; + gracePeriod?: number; [key: string]: any; }; } diff --git a/packages/microservices/server/server-nats.ts b/packages/microservices/server/server-nats.ts index e9c376b1292..a62b6c8d14a 100644 --- a/packages/microservices/server/server-nats.ts +++ b/packages/microservices/server/server-nats.ts @@ -1,9 +1,17 @@ import { isUndefined, isObject } from '@nestjs/common/utils/shared.utils'; -import { NATS_DEFAULT_URL, NO_MESSAGE_HANDLER } from '../constants'; +import { + NATS_DEFAULT_GRACE_PERIOD, + NATS_DEFAULT_URL, + NO_MESSAGE_HANDLER, +} from '../constants'; import { NatsContext } from '../ctx-host/nats.context'; import { NatsRequestJSONDeserializer } from '../deserializers/nats-request-json.deserializer'; import { Transport } from '../enums'; -import { Client, NatsMsg } from '../external/nats-client.interface'; +import { + Client, + NatsMsg, + Subscription, +} from '../external/nats-client.interface'; import { CustomTransportStrategy } from '../interfaces'; import { NatsOptions } from '../interfaces/microservice-configuration.interface'; import { IncomingRequest } from '../interfaces/packet.interface'; @@ -21,6 +29,10 @@ export class ServerNats extends Server implements CustomTransportStrategy { private natsClient: Client; + private readonly subscriptions: Subscription[] = []; + + private readonly gracePeriod: number; + constructor(private readonly options: NatsOptions['options']) { super(); @@ -28,6 +40,10 @@ export class ServerNats extends Server implements CustomTransportStrategy { require('nats'), ); + this.gracePeriod = + this.getOptionsProp(this.options, 'gracePeriod') || + NATS_DEFAULT_GRACE_PERIOD; + this.initializeSerializer(options); this.initializeDeserializer(options); } @@ -60,12 +76,30 @@ export class ServerNats extends Server implements CustomTransportStrategy { }); const registeredPatterns = [...this.messageHandlers.keys()]; - registeredPatterns.forEach(channel => subscribe(channel)); + for (const channel of registeredPatterns) { + const sub = subscribe(channel); + this.subscriptions.push(sub); + } + } + + private async waitForGracePeriod() { + await new Promise(res => { + setTimeout(() => { + res(); + }, this.gracePeriod); + }); } public async close() { - await this.natsClient?.close(); - this.natsClient = null; + if (this.natsClient) { + const graceful = this.getOptionsProp(this.options, 'gracefulShutdown'); + if (graceful) { + this.subscriptions.forEach(sub => sub.unsubscribe()); + await this.waitForGracePeriod(); + } + await this.natsClient?.close(); + this.natsClient = null; + } } public createNatsClient(): Promise { diff --git a/packages/microservices/test/server/server-nats.spec.ts b/packages/microservices/test/server/server-nats.spec.ts index 1b98399038d..2b315dd9bd1 100644 --- a/packages/microservices/test/server/server-nats.spec.ts +++ b/packages/microservices/test/server/server-nats.spec.ts @@ -41,13 +41,64 @@ describe('ServerNats', () => { beforeEach(() => { (server as any).natsClient = natsClient; }); - it('should close natsClient', () => { - server.close(); + it('should close natsClient', async () => { + await server.close(); expect(natsClient.close.called).to.be.true; }); + + describe('when "gracefulShutdown" is true', () => { + const waitForGracePeriod = sinon.spy(); + const subscriptions = [ + { unsubscribe: sinon.spy() }, + { unsubscribe: sinon.spy() }, + ]; + beforeEach(() => { + (server as any).subscriptions = subscriptions; + (server as any).waitForGracePeriod = waitForGracePeriod; + (server as any).options.gracefulShutdown = true; + }); + + it('should unsubscribe all subscriptions', async () => { + await server.close(); + for (const subscription of subscriptions) { + expect(subscription.unsubscribe.calledOnce).to.be.true; + } + }); + + it('should call "waitForGracePeriod"', async () => { + await server.close(); + expect(waitForGracePeriod.called).to.be.true; + }); + }); + + describe('when "gracefulShutdown" is false', () => { + const waitForGracePeriod = sinon.spy(); + const subscriptions = [ + { unsubscribe: sinon.spy() }, + { unsubscribe: sinon.spy() }, + ]; + beforeEach(() => { + (server as any).subscriptions = subscriptions; + (server as any).waitForGracePeriod = waitForGracePeriod; + (server as any).options.gracefulShutdown = false; + }); + it('should not unsubscribe all subscriptions', async () => { + await server.close(); + for (const subscription of subscriptions) { + expect(subscription.unsubscribe.called).to.be.false; + } + }); + + it('should not call "waitForGracePeriod"', async () => { + await server.close(); + expect(waitForGracePeriod.called).to.be.false; + }); + }); }); describe('bindEvents', () => { let onSpy: sinon.SinonSpy, subscribeSpy: sinon.SinonSpy, natsClient; + const pattern = 'test'; + const messageHandler = sinon.spy(); beforeEach(() => { onSpy = sinon.spy(); @@ -56,16 +107,19 @@ describe('ServerNats', () => { on: onSpy, subscribe: subscribeSpy, }; - }); - it('should subscribe to each acknowledge patterns', () => { - const pattern = 'test'; - const handler = sinon.spy(); (server as any).messageHandlers = objectToMap({ - [pattern]: handler, + [pattern]: messageHandler, }); + }); + it('should subscribe to each acknowledge patterns', () => { server.bindEvents(natsClient); expect(subscribeSpy.calledWith(pattern)).to.be.true; }); + + it('should fill the subscriptions array properly', () => { + server.bindEvents(natsClient); + expect(server['subscriptions'].length).to.be.equals(1); + }); }); describe('getMessageHandler', () => { it(`should return function`, () => { From 5f45310ab66900c297fb6e0a7d2d87b9f6e71dc7 Mon Sep 17 00:00:00 2001 From: Tony133 Date: Tue, 17 Sep 2024 22:23:00 +0200 Subject: [PATCH 028/122] feat(platform-fastify): added compatibility for fastify version 5.x --- packages/platform-fastify/package.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/platform-fastify/package.json b/packages/platform-fastify/package.json index b8d8882b3da..9cb5d00538a 100644 --- a/packages/platform-fastify/package.json +++ b/packages/platform-fastify/package.json @@ -18,17 +18,17 @@ "access": "public" }, "dependencies": { - "@fastify/cors": "9.0.1", - "@fastify/formbody": "7.4.0", - "@fastify/middie": "8.3.3", - "fastify": "4.28.1", + "@fastify/cors": "9.0.1 || 10.0.0", + "@fastify/formbody": "7.4.0 || 8.0.0", + "@fastify/middie": "8.3.3 || 9.0.1", + "fastify": "4.28.1 || 5.0.0", "light-my-request": "6.0.0", "path-to-regexp": "3.3.0", "tslib": "2.7.0" }, "peerDependencies": { - "@fastify/static": "^6.0.0 || ^7.0.0", - "@fastify/view": "^7.0.0 || ^8.0.0", + "@fastify/static": "^6.0.0 || ^7.0.0 || ^8.0.0", + "@fastify/view": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0", "@nestjs/common": "^10.0.0", "@nestjs/core": "^10.0.0" }, From e1c1945a45021d980854b281bc7a648004d6f438 Mon Sep 17 00:00:00 2001 From: Johaven Date: Tue, 8 Oct 2024 13:49:56 +0200 Subject: [PATCH 029/122] fix(platform-fastify): uppercase methods --- .../platform-fastify/adapters/fastify-adapter.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/platform-fastify/adapters/fastify-adapter.ts b/packages/platform-fastify/adapters/fastify-adapter.ts index 6567088fda8..5345f3e3cec 100644 --- a/packages/platform-fastify/adapters/fastify-adapter.ts +++ b/packages/platform-fastify/adapters/fastify-adapter.ts @@ -321,31 +321,31 @@ export class FastifyAdapter< } public propfind(...args: any[]) { - return this.injectRouteOptions('propfind', ...args); + return this.injectRouteOptions('PROPFIND', ...args); } public proppatch(...args: any[]) { - return this.injectRouteOptions('proppatch', ...args); + return this.injectRouteOptions('PROPPATCH', ...args); } public mkcol(...args: any[]) { - return this.injectRouteOptions('mkcol', ...args); + return this.injectRouteOptions('MKCOL', ...args); } public copy(...args: any[]) { - return this.injectRouteOptions('copy', ...args); + return this.injectRouteOptions('COPY', ...args); } public move(...args: any[]) { - return this.injectRouteOptions('move', ...args); + return this.injectRouteOptions('MOVE', ...args); } public lock(...args: any[]) { - return this.injectRouteOptions('lock', ...args); + return this.injectRouteOptions('LOCK', ...args); } public unlock(...args: any[]) { - return this.injectRouteOptions('unlock', ...args); + return this.injectRouteOptions('UNLOCK', ...args); } public applyVersionFilter( From 2c8982a2c77ccabc68910799d5eb7575fad80b4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20L=C3=BCtke=20Stetzkamp?= Date: Tue, 29 Oct 2024 15:33:44 +0100 Subject: [PATCH 030/122] fix(core): revisit dependencies w/ possibly higher distance --- packages/core/scanner.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/core/scanner.ts b/packages/core/scanner.ts index 8f334992e85..9d0822795b3 100644 --- a/packages/core/scanner.ts +++ b/packages/core/scanner.ts @@ -389,12 +389,12 @@ export class DependenciesScanner { // Skip "InternalCoreModule" from calculating distance modulesGenerator.next(); - const modulesStack = []; - const calculateDistance = (moduleRef: Module, distance = 1) => { - if (!moduleRef || modulesStack.includes(moduleRef)) { + const calculateDistance = (moduleRef: Module, distance = 1, modulesStack = []) => { + const localModulesStack = [...modulesStack]; + if (!moduleRef || localModulesStack.includes(moduleRef)) { return; } - modulesStack.push(moduleRef); + localModulesStack.push(moduleRef); const moduleImports = moduleRef.imports; moduleImports.forEach(importedModuleRef => { @@ -402,7 +402,7 @@ export class DependenciesScanner { if (distance > importedModuleRef.distance) { importedModuleRef.distance = distance; } - calculateDistance(importedModuleRef, distance + 1); + calculateDistance(importedModuleRef, distance + 1, localModulesStack); } }); }; From 5ccc88fe8adec6a77e58d6510fe6b34518a6ca93 Mon Sep 17 00:00:00 2001 From: Wenlong Chen Date: Wed, 6 Nov 2024 18:37:20 +0800 Subject: [PATCH 031/122] fix(core): Calculate module distance after bindGlobalScope --- integration/hooks/e2e/on-module-init.spec.ts | 39 ++++++++++++++++++-- packages/core/scanner.ts | 4 +- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/integration/hooks/e2e/on-module-init.spec.ts b/integration/hooks/e2e/on-module-init.spec.ts index 462e26919aa..d35a22d6987 100644 --- a/integration/hooks/e2e/on-module-init.spec.ts +++ b/integration/hooks/e2e/on-module-init.spec.ts @@ -39,11 +39,39 @@ describe('OnModuleInit', () => { }); it('should sort modules by distance (topological sort) - DESC order', async () => { + @Injectable() + class CC implements OnModuleInit { + public field: string; + + async onModuleInit() { + this.field = 'c-field'; + } + } + + @Module({}) + class C { + static forRoot() { + return { + module: C, + global: true, + providers: [ + { + provide: CC, + useValue: new CC(), + }, + ], + exports: [CC], + }; + } + } + @Injectable() class BB implements OnModuleInit { public field: string; + constructor(private cc: CC) {} + async onModuleInit() { - this.field = 'b-field'; + this.field = this.cc.field + '_b-field'; } } @@ -68,14 +96,19 @@ describe('OnModuleInit', () => { }) class A {} + @Module({ + imports: [A, C.forRoot()], + }) + class AppModule {} + const module = await Test.createTestingModule({ - imports: [A], + imports: [AppModule], }).compile(); const app = module.createNestApplication(); await app.init(); const instance = module.get(AA); - expect(instance.field).to.equal('b-field_a-field'); + expect(instance.field).to.equal('c-field_b-field_a-field'); }); }); diff --git a/packages/core/scanner.ts b/packages/core/scanner.ts index 8f334992e85..c52c158f58d 100644 --- a/packages/core/scanner.ts +++ b/packages/core/scanner.ts @@ -92,10 +92,10 @@ export class DependenciesScanner { overrides: options?.overrides, }); await this.scanModulesForDependencies(); - this.calculateModulesDistance(); - this.addScopedEnhancersMetadata(); this.container.bindGlobalScope(); + + this.calculateModulesDistance(); } public async scanForModules({ From 9cb84e78f8ce34f5ad75f63e3e941abb087fe594 Mon Sep 17 00:00:00 2001 From: Kamil Mysliwiec Date: Wed, 6 Nov 2024 12:47:19 +0100 Subject: [PATCH 032/122] Update packages/microservices/server/server-tcp.ts Co-authored-by: Gil Tichon --- packages/microservices/server/server-tcp.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/microservices/server/server-tcp.ts b/packages/microservices/server/server-tcp.ts index cb5a7b754c6..503ddbac966 100644 --- a/packages/microservices/server/server-tcp.ts +++ b/packages/microservices/server/server-tcp.ts @@ -41,9 +41,9 @@ export class ServerTCP extends Server implements CustomTransportStrategy { constructor(private readonly options: TcpOptions['options']) { super(); this.port = this.getOptionsProp(options, 'port', TCP_DEFAULT_PORT); - this.host = this.getOptionsProp(options, 'host') || TCP_DEFAULT_HOST; + this.host = this.getOptionsProp(options, 'host', TCP_DEFAULT_HOST); this.socketClass = - this.getOptionsProp(options, 'socketClass') || JsonSocket; + this.getOptionsProp(options, 'socketClass', JsonSocket); this.tlsOptions = this.getOptionsProp(options, 'tlsOptions'); this.init(); From 34c2ccabe86b2b882632dd66a190b63934ebb159 Mon Sep 17 00:00:00 2001 From: Wenlong Chen Date: Wed, 6 Nov 2024 19:50:16 +0800 Subject: [PATCH 033/122] fix(core): Order of module destroy should be the reverse of module init --- integration/hooks/e2e/on-module-destroy.spec.ts | 17 ++++++----------- packages/core/nest-application-context.ts | 5 ++++- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/integration/hooks/e2e/on-module-destroy.spec.ts b/integration/hooks/e2e/on-module-destroy.spec.ts index d34c15f01db..52468cebea6 100644 --- a/integration/hooks/e2e/on-module-destroy.spec.ts +++ b/integration/hooks/e2e/on-module-destroy.spec.ts @@ -43,10 +43,7 @@ describe('OnModuleDestroy', () => { it('should sort modules by distance (topological sort) - DESC order', async () => { @Injectable() class BB implements OnModuleDestroy { - public field: string; - async onModuleDestroy() { - this.field = 'b-field'; - } + onModuleDestroy = Sinon.spy(); } @Module({ @@ -57,13 +54,10 @@ describe('OnModuleDestroy', () => { @Injectable() class AA implements OnModuleDestroy { - public field: string; constructor(private bb: BB) {} - - async onModuleDestroy() { - this.field = this.bb.field + '_a-field'; - } + onModuleDestroy = Sinon.spy(); } + @Module({ imports: [B], providers: [AA], @@ -78,7 +72,8 @@ describe('OnModuleDestroy', () => { await app.init(); await app.close(); - const instance = module.get(AA); - expect(instance.field).to.equal('b-field_a-field'); + const aa = module.get(AA); + const bb = module.get(BB); + Sinon.assert.callOrder(aa.onModuleDestroy, bb.onModuleDestroy); }); }); diff --git a/packages/core/nest-application-context.ts b/packages/core/nest-application-context.ts index eacd82ec2dc..6cc3db7e885 100644 --- a/packages/core/nest-application-context.ts +++ b/packages/core/nest-application-context.ts @@ -384,7 +384,10 @@ export class NestApplicationContext< * modules and its children. */ protected async callDestroyHook(): Promise { - const modulesSortedByDistance = this.getModulesToTriggerHooksOn(); + const modulesSortedByDistance = [ + ...this.getModulesToTriggerHooksOn(), + ].reverse(); + for (const module of modulesSortedByDistance) { await callModuleDestroyHook(module); } From da8ebded25daf25c9cd1365f2a64411048464e6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 7 Nov 2024 12:01:18 +0100 Subject: [PATCH 034/122] fix(microservices): use instance ref to call handler #13473 --- .../listener-metadata-explorer.ts | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/packages/microservices/listener-metadata-explorer.ts b/packages/microservices/listener-metadata-explorer.ts index faa98b71bde..721c2367062 100644 --- a/packages/microservices/listener-metadata-explorer.ts +++ b/packages/microservices/listener-metadata-explorer.ts @@ -39,25 +39,36 @@ export class ListenerMetadataExplorer { const instancePrototype = Object.getPrototypeOf(instance); return this.metadataScanner .getAllMethodNames(instancePrototype) - .map(method => this.exploreMethodMetadata(instancePrototype, method)) + .map(method => + this.exploreMethodMetadata(instance, instancePrototype, method), + ) .filter(metadata => metadata); } public exploreMethodMetadata( + instance: Controller, instancePrototype: object, methodKey: string, ): EventOrMessageListenerDefinition { - const targetCallback = instancePrototype[methodKey]; + const prototypeCallback = instancePrototype[methodKey]; const handlerType = Reflect.getMetadata( PATTERN_HANDLER_METADATA, - targetCallback, + prototypeCallback, ); if (isUndefined(handlerType)) { return; } - const patterns = Reflect.getMetadata(PATTERN_METADATA, targetCallback); - const transport = Reflect.getMetadata(TRANSPORT_METADATA, targetCallback); - const extras = Reflect.getMetadata(PATTERN_EXTRAS_METADATA, targetCallback); + const patterns = Reflect.getMetadata(PATTERN_METADATA, prototypeCallback); + const transport = Reflect.getMetadata( + TRANSPORT_METADATA, + prototypeCallback, + ); + const extras = Reflect.getMetadata( + PATTERN_EXTRAS_METADATA, + prototypeCallback, + ); + + const targetCallback = instance[methodKey]; return { methodKey, targetCallback, From f27304159487ba0f7051e5ad29527eb299599dcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 7 Nov 2024 12:07:59 +0100 Subject: [PATCH 035/122] test: update unit tests --- .../microservices/test/listeners-metadata-explorer.spec.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/microservices/test/listeners-metadata-explorer.spec.ts b/packages/microservices/test/listeners-metadata-explorer.spec.ts index 18ccdc2f7c9..b4c5c10e2a4 100644 --- a/packages/microservices/test/listeners-metadata-explorer.spec.ts +++ b/packages/microservices/test/listeners-metadata-explorer.spec.ts @@ -71,6 +71,7 @@ describe('ListenerMetadataExplorer', () => { }); it(`should return undefined when "handlerType" metadata is undefined`, () => { const metadata = instance.exploreMethodMetadata( + test, Object.getPrototypeOf(test), 'noPattern', ); @@ -80,6 +81,7 @@ describe('ListenerMetadataExplorer', () => { describe('@MessagePattern', () => { it(`should return pattern properties when "handlerType" metadata is not undefined`, () => { const metadata = instance.exploreMethodMetadata( + test, Object.getPrototypeOf(test), 'testMessage', ); @@ -96,6 +98,7 @@ describe('ListenerMetadataExplorer', () => { }); it(`should return multiple patterns when more than one is declared`, () => { const metadata = instance.exploreMethodMetadata( + test, Object.getPrototypeOf(test), 'testMultipleMessage', ); @@ -116,6 +119,7 @@ describe('ListenerMetadataExplorer', () => { describe('@EventPattern', () => { it(`should return pattern properties when "handlerType" metadata is not undefined`, () => { const metadata = instance.exploreMethodMetadata( + test, Object.getPrototypeOf(test), 'testEvent', ); @@ -132,6 +136,7 @@ describe('ListenerMetadataExplorer', () => { }); it(`should return multiple patterns when more than one is declared`, () => { const metadata = instance.exploreMethodMetadata( + test, Object.getPrototypeOf(test), 'testMultipleEvent', ); From 38bfa9a13a85ee47f2b66bd3c404a72e99fdd884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 7 Nov 2024 12:18:12 +0100 Subject: [PATCH 036/122] feat(core): allow overriding abort on error for select method --- .../nest-application-context.interface.ts | 8 +++++++- packages/core/nest-application-context.ts | 13 ++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/common/interfaces/nest-application-context.interface.ts b/packages/common/interfaces/nest-application-context.interface.ts index 554fa1d1b67..3a8fe439629 100644 --- a/packages/common/interfaces/nest-application-context.interface.ts +++ b/packages/common/interfaces/nest-application-context.interface.ts @@ -1,8 +1,11 @@ import { ShutdownSignal } from '../enums/shutdown-signal.enum'; import { LoggerService, LogLevel } from '../services/logger.service'; import { DynamicModule } from './modules'; +import { NestApplicationContextOptions } from './nest-application-context-options.interface'; import { Type } from './type.interface'; +export type SelectOptions = Pick; + export interface GetOrResolveOptions { /** * If enabled, lookup will only be performed in the host module. @@ -27,7 +30,10 @@ export interface INestApplicationContext { * Allows navigating through the modules tree, for example, to pull out a specific instance from the selected module. * @returns {INestApplicationContext} */ - select(module: Type | DynamicModule): INestApplicationContext; + select( + module: Type | DynamicModule, + options?: SelectOptions, + ): INestApplicationContext; /** * Retrieves an instance of either injectable or controller, otherwise, throws exception. diff --git a/packages/core/nest-application-context.ts b/packages/core/nest-application-context.ts index eacd82ec2dc..e9ec87b7404 100644 --- a/packages/core/nest-application-context.ts +++ b/packages/core/nest-application-context.ts @@ -9,6 +9,7 @@ import { Abstract, DynamicModule, GetOrResolveOptions, + SelectOptions, Type, } from '@nestjs/common/interfaces'; import { NestApplicationContextOptions } from '@nestjs/common/interfaces/nest-application-context-options.interface'; @@ -87,6 +88,7 @@ export class NestApplicationContext< */ public select( moduleType: Type | DynamicModule, + selectOptions?: SelectOptions, ): INestApplicationContext { const modulesContainer = this.container.getModules(); const contextModuleCtor = this.contextModule.metatype; @@ -101,9 +103,18 @@ export class NestApplicationContext< if (!selectedModule) { throw new UnknownModuleException(type.name); } + + const options = + typeof selectOptions?.abortOnError !== 'undefined' + ? { + ...this.appOptions, + ...selectOptions, + } + : this.appOptions; + return new NestApplicationContext( this.container, - this.appOptions, + options, selectedModule, scope, ); From 5bc7f91d900b2aa27f9acb72f421be73c34d3b4c Mon Sep 17 00:00:00 2001 From: "Micael Levi L. Cavalcante" Date: Thu, 7 Nov 2024 08:49:14 -0400 Subject: [PATCH 037/122] fix(common): drop broken support for promises on `exports` of modules --- packages/common/interfaces/modules/module-metadata.interface.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/common/interfaces/modules/module-metadata.interface.ts b/packages/common/interfaces/modules/module-metadata.interface.ts index 9d6699cba74..2baa7d84fad 100644 --- a/packages/common/interfaces/modules/module-metadata.interface.ts +++ b/packages/common/interfaces/modules/module-metadata.interface.ts @@ -35,7 +35,6 @@ export interface ModuleMetadata { */ exports?: Array< | DynamicModule - | Promise | string | symbol | Provider From 7de732055008b399af5eb10f63bb054e8a996a54 Mon Sep 17 00:00:00 2001 From: Tony133 Date: Thu, 7 Nov 2024 18:37:41 +0100 Subject: [PATCH 038/122] chore: upgrade dependencies for nest v11.x --- packages/platform-fastify/package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/platform-fastify/package.json b/packages/platform-fastify/package.json index 9cb5d00538a..923005b69f5 100644 --- a/packages/platform-fastify/package.json +++ b/packages/platform-fastify/package.json @@ -18,11 +18,11 @@ "access": "public" }, "dependencies": { - "@fastify/cors": "9.0.1 || 10.0.0", - "@fastify/formbody": "7.4.0 || 8.0.0", - "@fastify/middie": "8.3.3 || 9.0.1", - "fastify": "4.28.1 || 5.0.0", - "light-my-request": "6.0.0", + "@fastify/cors": "10.0.1", + "@fastify/formbody": "8.0.1", + "@fastify/middie": "9.0.2", + "fastify": "5.1.0", + "light-my-request": "6.3.0", "path-to-regexp": "3.3.0", "tslib": "2.7.0" }, From f13e32ad33bcc8fd66c028206a7eab76c7680cd4 Mon Sep 17 00:00:00 2001 From: Tony133 Date: Thu, 7 Nov 2024 21:12:38 +0100 Subject: [PATCH 039/122] chore: update fastify view options interface --- .../interfaces/external/fastify-view-options.interface.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/platform-fastify/interfaces/external/fastify-view-options.interface.ts b/packages/platform-fastify/interfaces/external/fastify-view-options.interface.ts index 1956ccd1fe9..7c1959aeab7 100644 --- a/packages/platform-fastify/interfaces/external/fastify-view-options.interface.ts +++ b/packages/platform-fastify/interfaces/external/fastify-view-options.interface.ts @@ -27,4 +27,5 @@ export interface FastifyViewOptions { root?: string; viewExt?: string; propertyName?: string; + asyncProperyName?: string; } From 790bafa46ecee1f2b7e4e2a60515ed178b0cac9f Mon Sep 17 00:00:00 2001 From: Tony133 Date: Thu, 7 Nov 2024 21:15:39 +0100 Subject: [PATCH 040/122] refactor(): update fastify static options interface --- .../fastify-static-options.interface.ts | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/packages/platform-fastify/interfaces/external/fastify-static-options.interface.ts b/packages/platform-fastify/interfaces/external/fastify-static-options.interface.ts index 6414a9ed979..e4a434a3549 100644 --- a/packages/platform-fastify/interfaces/external/fastify-static-options.interface.ts +++ b/packages/platform-fastify/interfaces/external/fastify-static-options.interface.ts @@ -3,9 +3,16 @@ * @see https://github.com/fastify/fastify-static/blob/master/types/index.d.ts * @publicApi */ -import { RouteOptions, FastifyRequest } from 'fastify'; +import { RouteOptions, FastifyRequest, FastifyReply } from 'fastify'; import { Stats } from 'fs'; +interface SetHeadersResponse { + getHeader: FastifyReply['getHeader']; + setHeader: FastifyReply['header']; + readonly filename: string; + statusCode: number; +} + interface ExtendedInformation { fileCount: number; totalFileCount: number; @@ -33,13 +40,22 @@ interface ListRender { } interface ListOptions { - format: 'json' | 'html'; names: string[]; - render: ListRender; extendedFolderInfo?: boolean; jsonFormat?: 'names' | 'extended'; } +export interface ListOptionsJsonFormat extends ListOptions { + format: 'json'; + // Required when the URL parameter `format=html` exists + render?: ListRender; +} + +export interface ListOptionsHtmlFormat extends ListOptions { + format: 'html'; + render: ListRender; +} + // Passed on to `send` interface SendOptions { acceptRanges?: boolean; @@ -55,16 +71,16 @@ interface SendOptions { } export interface FastifyStaticOptions extends SendOptions { - root: string | string[]; + root: string | string[] | URL | URL[]; prefix?: string; prefixAvoidTrailingSlash?: boolean; serve?: boolean; decorateReply?: boolean; schemaHide?: boolean; - setHeaders?: (...args: any[]) => void; + setHeaders?: (res: SetHeadersResponse, path: string, stat: Stats) => void; redirect?: boolean; wildcard?: boolean; - list?: boolean | ListOptions; + list?: boolean | ListOptionsJsonFormat | ListOptionsHtmlFormat; allowedPath?: ( pathName: string, root: string, From e75eb1d14a06f9d5958125c67205e2bc59d3ef9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Fri, 8 Nov 2024 11:21:37 +0100 Subject: [PATCH 041/122] feat(common): json logger and a few other improvements --- .../common/services/console-logger.service.ts | 223 ++++++++++++++++-- 1 file changed, 203 insertions(+), 20 deletions(-) diff --git a/packages/common/services/console-logger.service.ts b/packages/common/services/console-logger.service.ts index a6da2a41986..9f11c1cb282 100644 --- a/packages/common/services/console-logger.service.ts +++ b/packages/common/services/console-logger.service.ts @@ -1,3 +1,4 @@ +import { inspect, InspectOptions } from 'util'; import { Injectable, Optional } from '../decorators/core'; import { clc, yellow } from '../utils/cli-colors.util'; import { @@ -9,6 +10,8 @@ import { import { LoggerService, LogLevel } from './logger.service'; import { isLogLevelEnabled } from './utils'; +const DEFAULT_DEPTH = 5; + export interface ConsoleLoggerOptions { /** * Enabled log levels. @@ -16,8 +19,68 @@ export interface ConsoleLoggerOptions { logLevels?: LogLevel[]; /** * If enabled, will print timestamp (time difference) between current and previous log message. + * Note: This option is not used when `json` is enabled. */ timestamp?: boolean; + /** + * A prefix to be used for each log message. + * Note: This option is not used when `json` is enabled. + */ + prefix?: string; + /** + * If enabled, will print the log message in JSON format. + */ + json?: boolean; + /** + * If enabled, will print the log message in color. + * Default true if json is disabled, false otherwise + */ + colors?: boolean; + /** + * The context of the logger. + */ + context?: string; + /** + * If enabled, will print the log message in a single line, even if it is an object with multiple properties. + * If set to a number, the most n inner elements are united on a single line as long as all properties fit into breakLength. Short array elements are also grouped together. + * Default true when `json` is enabled, false otherwise. + */ + compact?: boolean | number; + /** + * Specifies the maximum number of Array, TypedArray, Map, Set, WeakMap, and WeakSet elements to include when formatting. + * Set to null or Infinity to show all elements. Set to 0 or negative to show no elements. + * @default 100 + */ + maxArrayLength?: number; + /** + * Specifies the maximum number of characters to include when formatting. + * Set to null or Infinity to show all elements. Set to 0 or negative to show no characters. + * @default 10000. + */ + maxStringLength?: number; + /** + * If enabled, will sort keys while formatting objects. + * Can also be a custom sorting function. + * @default false + */ + sorted?: boolean | ((a: string, b: string) => number); + /** + * Specifies the number of times to recurse while formatting object. T + * This is useful for inspecting large objects. To recurse up to the maximum call stack size pass Infinity or null. + * @default 5 + */ + depth?: number; + /** + * If true, object's non-enumerable symbols and properties are included in the formatted result. + * WeakMap and WeakSet entries are also included as well as user defined prototype properties + * @default false + */ + showHidden?: boolean; + /** + * The length at which input values are split across multiple lines. Set to Infinity to format the input as a single line (in combination with "compact" set to true). + * Default Infinity when "compact" is true, 80 otherwise. + */ + breakLength?: number; } const DEFAULT_LOG_LEVELS: LogLevel[] = [ @@ -40,22 +103,53 @@ const dateTimeFormatter = new Intl.DateTimeFormat(undefined, { @Injectable() export class ConsoleLogger implements LoggerService { - private static lastTimestampAt?: number; - private originalContext?: string; + /** + * The options of the logger. + */ + protected options: ConsoleLoggerOptions; + /** + * The context of the logger (can be set manually or automatically inferred). + */ + protected context?: string; + /** + * The original context of the logger (set in the constructor). + */ + protected originalContext?: string; + /** + * The options used for the "inspect" method. + */ + protected inspectOptions: InspectOptions; + /** + * The last timestamp at which the log message was printed. + */ + protected static lastTimestampAt?: number; constructor(); constructor(context: string); + constructor(options: ConsoleLoggerOptions); constructor(context: string, options: ConsoleLoggerOptions); constructor( @Optional() - protected context?: string, + contextOrOptions?: string | ConsoleLoggerOptions, @Optional() - protected options: ConsoleLoggerOptions = {}, + options?: ConsoleLoggerOptions, ) { - if (!options.logLevels) { - options.logLevels = DEFAULT_LOG_LEVELS; - } + let [context, opts] = isString(contextOrOptions) + ? [contextOrOptions, options] + : !!options + ? [undefined, options] + : [contextOrOptions?.context, contextOrOptions]; + + opts = opts ?? {}; + opts.logLevels ??= DEFAULT_LOG_LEVELS; + opts.colors ??= opts.json ? false : true; + opts.prefix ??= 'Nest'; + + this.options = opts; + this.inspectOptions = this.getInspectOptions(); + if (context) { + this.context = context; this.originalContext = context; } } @@ -91,7 +185,7 @@ export class ConsoleLogger implements LoggerService { const { messages, context, stack } = this.getContextAndStackAndMessagesToPrint([message, ...optionalParams]); - this.printMessages(messages, context, 'error', 'stderr'); + this.printMessages(messages, context, 'error', 'stderr', stack); this.printStackTrace(stack); } @@ -203,8 +297,18 @@ export class ConsoleLogger implements LoggerService { context = '', logLevel: LogLevel = 'log', writeStreamType?: 'stdout' | 'stderr', + errorStack?: unknown, ) { messages.forEach(message => { + if (this.options.json) { + this.printAsJson(message, { + context, + logLevel, + writeStreamType, + errorStack, + }); + return; + } const pidMessage = this.formatPid(process.pid); const contextMessage = this.formatContext(context); const timestampDiff = this.updateAndGetTimestampDiff(); @@ -222,12 +326,52 @@ export class ConsoleLogger implements LoggerService { }); } + protected printAsJson( + message: unknown, + options: { + context: string; + logLevel: LogLevel; + writeStreamType?: 'stdout' | 'stderr'; + errorStack?: unknown; + }, + ) { + type JsonLogObject = { + context?: string; + level: LogLevel; + message: unknown; + timestamp: number; + stack?: unknown; + }; + + const logObject: JsonLogObject = { + level: options.logLevel, + timestamp: Date.now(), + message, + }; + + if (options.context) { + logObject.context = options.context; + } + + if (options.errorStack) { + logObject.stack = options.errorStack; + } + + const formattedMessage = inspect(logObject, this.inspectOptions); + process[options.writeStreamType ?? 'stdout'].write(`${formattedMessage}\n`); + } + protected formatPid(pid: number) { - return `[Nest] ${pid} - `; + return `[${this.options.prefix}] ${pid} - `; } protected formatContext(context: string): string { - return context ? yellow(`[${context}] `) : ''; + if (!context) { + return ''; + } + + context = `[${context}] `; + return this.options.colors ? yellow(context) : context; } protected formatMessage( @@ -256,23 +400,30 @@ export class ConsoleLogger implements LoggerService { return this.stringifyMessage(message(), logLevel); } - return isPlainObject(message) || Array.isArray(message) - ? `${this.colorize('Object:', logLevel)}\n${JSON.stringify( - message, - (key, value) => - typeof value === 'bigint' ? value.toString() : value, - 2, - )}\n` - : this.colorize(message as string, logLevel); + if (typeof message === 'string') { + return this.colorize(message, logLevel); + } + + const outputText = inspect(message, this.inspectOptions); + if (isPlainObject(message)) { + return `Object(${Object.keys(message).length}) ${outputText}`; + } + if (Array.isArray(message)) { + return `Array(${message.length}) ${outputText}`; + } + return outputText; } protected colorize(message: string, logLevel: LogLevel) { + if (!this.options.colors || this.options.json) { + return message; + } const color = this.getColorByLogLevel(logLevel); return color(message); } protected printStackTrace(stack: string) { - if (!stack) { + if (!stack || this.options.json) { return; } process.stderr.write(`${stack}\n`); @@ -289,7 +440,39 @@ export class ConsoleLogger implements LoggerService { } protected formatTimestampDiff(timestampDiff: number) { - return yellow(` +${timestampDiff}ms`); + const formattedDiff = ` +${timestampDiff}ms`; + return this.options.colors ? yellow(formattedDiff) : formattedDiff; + } + + protected getInspectOptions() { + let breakLength = this.options.breakLength; + if (typeof breakLength === 'undefined') { + breakLength = this.options.colors + ? this.options.compact + ? Infinity + : undefined + : this.options.compact === false + ? undefined + : Infinity; // default breakLength to Infinity if inline is not set and colors is false + } + + const inspectOptions: InspectOptions = { + depth: this.options.depth ?? DEFAULT_DEPTH, + sorted: this.options.sorted, + showHidden: this.options.showHidden, + compact: (this.options.compact ?? this.options.json) ? true : false, + colors: this.options.colors, + breakLength, + }; + + if (this.options.maxArrayLength) { + inspectOptions.maxArrayLength = this.options.maxArrayLength; + } + if (this.options.maxStringLength) { + inspectOptions.maxStringLength = this.options.maxStringLength; + } + + return inspectOptions; } private getContextAndMessagesToPrint(args: unknown[]) { From 03d8bcc21cd10d3dc39e231835226a51126decbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Fri, 8 Nov 2024 11:32:08 +0100 Subject: [PATCH 042/122] feat: add pid to log object --- packages/common/services/console-logger.service.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/common/services/console-logger.service.ts b/packages/common/services/console-logger.service.ts index 9f11c1cb282..52d7afbbe9a 100644 --- a/packages/common/services/console-logger.service.ts +++ b/packages/common/services/console-logger.service.ts @@ -336,15 +336,17 @@ export class ConsoleLogger implements LoggerService { }, ) { type JsonLogObject = { - context?: string; level: LogLevel; - message: unknown; + pid: number; timestamp: number; + message: unknown; + context?: string; stack?: unknown; }; const logObject: JsonLogObject = { level: options.logLevel, + pid: process.pid, timestamp: Date.now(), message, }; From e767bd364e42ff0633ea30eb72786289ede62bc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Fri, 8 Nov 2024 13:49:42 +0100 Subject: [PATCH 043/122] feat: produce a parseable json when colors off and compact on --- .../common/services/console-logger.service.ts | 33 ++- .../test/services/logger.service.spec.ts | 201 ++++++++++++++++-- 2 files changed, 211 insertions(+), 23 deletions(-) diff --git a/packages/common/services/console-logger.service.ts b/packages/common/services/console-logger.service.ts index 52d7afbbe9a..54a8142f243 100644 --- a/packages/common/services/console-logger.service.ts +++ b/packages/common/services/console-logger.service.ts @@ -49,24 +49,28 @@ export interface ConsoleLoggerOptions { /** * Specifies the maximum number of Array, TypedArray, Map, Set, WeakMap, and WeakSet elements to include when formatting. * Set to null or Infinity to show all elements. Set to 0 or negative to show no elements. + * Ignored when `json` is enabled, colors are disabled, and `compact` is set to true as it produces a parseable JSON output. * @default 100 */ maxArrayLength?: number; /** * Specifies the maximum number of characters to include when formatting. * Set to null or Infinity to show all elements. Set to 0 or negative to show no characters. + * Ignored when `json` is enabled, colors are disabled, and `compact` is set to true as it produces a parseable JSON output. * @default 10000. */ maxStringLength?: number; /** * If enabled, will sort keys while formatting objects. * Can also be a custom sorting function. + * Ignored when `json` is enabled, colors are disabled, and `compact` is set to true as it produces a parseable JSON output. * @default false */ sorted?: boolean | ((a: string, b: string) => number); /** * Specifies the number of times to recurse while formatting object. T * This is useful for inspecting large objects. To recurse up to the maximum call stack size pass Infinity or null. + * Ignored when `json` is enabled, colors are disabled, and `compact` is set to true as it produces a parseable JSON output. * @default 5 */ depth?: number; @@ -79,6 +83,7 @@ export interface ConsoleLoggerOptions { /** * The length at which input values are split across multiple lines. Set to Infinity to format the input as a single line (in combination with "compact" set to true). * Default Infinity when "compact" is true, 80 otherwise. + * Ignored when `json` is enabled, colors are disabled, and `compact` is set to true as it produces a parseable JSON output. */ breakLength?: number; } @@ -142,7 +147,7 @@ export class ConsoleLogger implements LoggerService { opts = opts ?? {}; opts.logLevels ??= DEFAULT_LOG_LEVELS; - opts.colors ??= opts.json ? false : true; + opts.colors ??= opts.colors ?? (opts.json ? false : true); opts.prefix ??= 'Nest'; this.options = opts; @@ -359,7 +364,10 @@ export class ConsoleLogger implements LoggerService { logObject.stack = options.errorStack; } - const formattedMessage = inspect(logObject, this.inspectOptions); + const formattedMessage = + !this.options.colors && this.inspectOptions.compact === true + ? JSON.stringify(logObject, this.stringifyReplacer) + : inspect(logObject, this.inspectOptions); process[options.writeStreamType ?? 'stdout'].write(`${formattedMessage}\n`); } @@ -462,7 +470,7 @@ export class ConsoleLogger implements LoggerService { depth: this.options.depth ?? DEFAULT_DEPTH, sorted: this.options.sorted, showHidden: this.options.showHidden, - compact: (this.options.compact ?? this.options.json) ? true : false, + compact: this.options.compact ?? (this.options.json ? true : false), colors: this.options.colors, breakLength, }; @@ -477,6 +485,25 @@ export class ConsoleLogger implements LoggerService { return inspectOptions; } + protected stringifyReplacer(key: string, value: unknown) { + // Mimic util.inspect behavior for JSON logger with compact on and colors off + if (typeof value === 'bigint') { + return value.toString(); + } + if (typeof value === 'symbol') { + return value.toString(); + } + + if ( + value instanceof Map || + value instanceof Set || + value instanceof Error + ) { + return `${inspect(value, this.inspectOptions)}`; + } + return value; + } + private getContextAndMessagesToPrint(args: unknown[]) { if (args?.length <= 1) { return { messages: args, context: this.context }; diff --git a/packages/common/test/services/logger.service.spec.ts b/packages/common/test/services/logger.service.spec.ts index e3a61464d06..8b6d5f362cd 100644 --- a/packages/common/test/services/logger.service.spec.ts +++ b/packages/common/test/services/logger.service.spec.ts @@ -125,9 +125,12 @@ describe('Logger', () => { Logger.error(error); expect(processStderrWriteSpy.calledOnce).to.be.true; - expect(processStderrWriteSpy.firstCall.firstArg).to.include(`Object:`); + + expect(processStderrWriteSpy.firstCall.firstArg).to.include( + `Object(${Object.keys(error).length})`, + ); expect(processStderrWriteSpy.firstCall.firstArg).to.include( - `{\n "randomError": true\n}`, + `randomError: \x1b[33mtrue`, ); }); @@ -181,6 +184,153 @@ describe('Logger', () => { expect(processStderrWriteSpy.thirdCall.firstArg).to.equal(stack + '\n'); }); }); + + describe('when the default logger is used and json mode is enabled', () => { + const logger = new ConsoleLogger({ json: true }); + + let processStdoutWriteSpy: sinon.SinonSpy; + let processStderrWriteSpy: sinon.SinonSpy; + + beforeEach(() => { + processStdoutWriteSpy = sinon.spy(process.stdout, 'write'); + processStderrWriteSpy = sinon.spy(process.stderr, 'write'); + }); + + afterEach(() => { + processStdoutWriteSpy.restore(); + processStderrWriteSpy.restore(); + }); + + it('should print error with stack as JSON to the console', () => { + const errorMessage = 'error message'; + const error = new Error(errorMessage); + + logger.error(error.message, error.stack); + + const json = JSON.parse(processStderrWriteSpy.firstCall?.firstArg); + + expect(json.pid).to.equal(process.pid); + expect(json.level).to.equal('error'); + expect(json.message).to.equal(errorMessage); + }); + it('should log out to stdout as JSON', () => { + const message = 'message 1'; + + logger.log(message); + + const json = JSON.parse(processStdoutWriteSpy.firstCall?.firstArg); + + expect(json.pid).to.equal(process.pid); + expect(json.level).to.equal('log'); + expect(json.message).to.equal(message); + }); + it('should log out an error to stderr as JSON', () => { + const message = 'message 1'; + + logger.error(message); + + const json = JSON.parse(processStderrWriteSpy.firstCall?.firstArg); + + expect(json.pid).to.equal(process.pid); + expect(json.level).to.equal('error'); + expect(json.message).to.equal(message); + }); + it('should log Map object', () => { + const map = new Map([ + ['key1', 'value1'], + ['key2', 'value2'], + ]); + + logger.log(map); + + const json = JSON.parse(processStdoutWriteSpy.firstCall?.firstArg); + + expect(json.pid).to.equal(process.pid); + expect(json.level).to.equal('log'); + expect(json.message).to.equal( + `Map(2) { 'key1' => 'value1', 'key2' => 'value2' }`, + ); + }); + it('should log Set object', () => { + const set = new Set(['value1', 'value2']); + + logger.log(set); + + const json = JSON.parse(processStdoutWriteSpy.firstCall?.firstArg); + + expect(json.pid).to.equal(process.pid); + expect(json.level).to.equal('log'); + expect(json.message).to.equal(`Set(2) { 'value1', 'value2' }`); + }); + it('should log bigint', () => { + const bigInt = BigInt(9007199254740991); + + logger.log(bigInt); + + const json = JSON.parse(processStdoutWriteSpy.firstCall?.firstArg); + + expect(json.pid).to.equal(process.pid); + expect(json.level).to.equal('log'); + expect(json.message).to.equal('9007199254740991'); + }); + it('should log symbol', () => { + const symbol = Symbol('test'); + + logger.log(symbol); + + const json = JSON.parse(processStdoutWriteSpy.firstCall?.firstArg); + + expect(json.pid).to.equal(process.pid); + expect(json.level).to.equal('log'); + expect(json.message).to.equal('Symbol(test)'); + }); + }); + + describe('when the default logger is used, json mode is enabled and compact is false (utils.inspect)', () => { + const logger = new ConsoleLogger({ json: true, compact: false }); + + let processStdoutWriteSpy: sinon.SinonSpy; + let processStderrWriteSpy: sinon.SinonSpy; + + beforeEach(() => { + processStdoutWriteSpy = sinon.spy(process.stdout, 'write'); + processStderrWriteSpy = sinon.spy(process.stderr, 'write'); + }); + + afterEach(() => { + processStdoutWriteSpy.restore(); + processStderrWriteSpy.restore(); + }); + + it('should log out to stdout as JSON (utils.inspect)', () => { + const message = 'message 1'; + + logger.log(message); + + const json = convertInspectToJSON( + processStdoutWriteSpy.firstCall?.firstArg, + ); + + expect(json.pid).to.equal(process.pid); + expect(json.level).to.equal('log'); + expect(json.message).to.equal(message); + }); + + it('should log out an error to stderr as JSON (utils.inspect)', () => { + const message = 'message 1'; + + logger.error(message); + + const json = convertInspectToJSON( + processStderrWriteSpy.firstCall?.firstArg, + ); + + expect(json.pid).to.equal(process.pid); + expect(json.level).to.equal('error'); + expect(json.message).to.equal(message); + }); + }); + describe('when logging is disabled', () => { let processStdoutWriteSpy: sinon.SinonSpy; let previousLoggerRef: LoggerService; @@ -568,6 +718,7 @@ describe('Logger', () => { expect(processStdoutWriteSpy.called).to.be.false; }); }); + describe('when custom logger is being used', () => { class CustomLogger implements LoggerService { log(message: any, context?: string) {} @@ -723,7 +874,7 @@ describe('Logger', () => { } } - const consoleLogger = new CustomConsoleLogger(); + const consoleLogger = new CustomConsoleLogger({ colors: false }); const consoleLoggerSpy = sinon.spy( consoleLogger, 'stringifyMessage' as keyof ConsoleLogger, @@ -739,30 +890,40 @@ describe('Logger', () => { expect(consoleLoggerSpy.getCall(0).returnValue).to.equal('str1'); expect(consoleLoggerSpy.getCall(1).returnValue).to.equal( - `Object: -{ - "key": "str2" -} -`, + `Object(1) { + key: 'str2' +}`, ); expect(consoleLoggerSpy.getCall(2).returnValue).to.equal( - `Object: -[ - "str3" -] -`, + `Array(1) [ + 'str3' +]`, ); expect(consoleLoggerSpy.getCall(3).returnValue).to.equal( - `Object: -[ + `Array(1) [ { - "key": "str4" + key: 'str4' } -] -`, +]`, ); - expect(consoleLoggerSpy.getCall(4).returnValue).to.equal(null); - expect(consoleLoggerSpy.getCall(5).returnValue).to.equal(1); + expect(consoleLoggerSpy.getCall(4).returnValue).to.equal('null'); + expect(consoleLoggerSpy.getCall(5).returnValue).to.equal('1'); }); }); }); + +function convertInspectToJSON(inspectOutput: string) { + let jsonLikeString = inspectOutput + .replace(/'([^']+)'/g, '"$1"') // single-quoted strings + .replace(/([a-zA-Z0-9_]+):/g, '"$1":') // unquoted object keys + .replace(/\bundefined\b/g, 'null') + .replace(/\[Function(: [^\]]+)?\]/g, '"[Function]"') + .replace(/\[Circular\]/g, '"[Circular]"'); + + try { + return JSON.parse(jsonLikeString); + } catch (error) { + console.error('Error parsing the modified inspect output:', error); + throw error; + } +} From 23e602b7122f0b2a8162065250b930b2fd7818c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Fri, 8 Nov 2024 14:09:58 +0100 Subject: [PATCH 044/122] style: fix linter issues --- packages/common/test/services/logger.service.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/common/test/services/logger.service.spec.ts b/packages/common/test/services/logger.service.spec.ts index 8b6d5f362cd..7dd45379afa 100644 --- a/packages/common/test/services/logger.service.spec.ts +++ b/packages/common/test/services/logger.service.spec.ts @@ -913,7 +913,7 @@ describe('Logger', () => { }); function convertInspectToJSON(inspectOutput: string) { - let jsonLikeString = inspectOutput + const jsonLikeString = inspectOutput .replace(/'([^']+)'/g, '"$1"') // single-quoted strings .replace(/([a-zA-Z0-9_]+):/g, '"$1":') // unquoted object keys .replace(/\bundefined\b/g, 'null') From 66c4810b0feee8944a38599673bf6b17a44417ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Fri, 8 Nov 2024 14:29:42 +0100 Subject: [PATCH 045/122] style: fix linter issues --- packages/common/services/console-logger.service.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/common/services/console-logger.service.ts b/packages/common/services/console-logger.service.ts index 54a8142f243..79c967f17f7 100644 --- a/packages/common/services/console-logger.service.ts +++ b/packages/common/services/console-logger.service.ts @@ -139,6 +139,7 @@ export class ConsoleLogger implements LoggerService { @Optional() options?: ConsoleLoggerOptions, ) { + // eslint-disable-next-line prefer-const let [context, opts] = isString(contextOrOptions) ? [contextOrOptions, options] : !!options From cd7079bcc0c6e6c8ad8778573d901f959ada5ede Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Fri, 8 Nov 2024 15:28:13 +0100 Subject: [PATCH 046/122] feat(common): add parse date pipe, add tsdoc to other pipes --- packages/common/pipes/index.ts | 7 ++- packages/common/pipes/parse-array.pipe.ts | 19 +++++- packages/common/pipes/parse-bool.pipe.ts | 13 ++++ packages/common/pipes/parse-date.pipe.ts | 72 +++++++++++++++++++++++ packages/common/pipes/parse-enum.pipe.ts | 13 ++++ packages/common/pipes/parse-float.pipe.ts | 13 ++++ packages/common/pipes/parse-int.pipe.ts | 13 ++++ packages/common/pipes/parse-uuid.pipe.ts | 16 +++++ 8 files changed, 162 insertions(+), 4 deletions(-) create mode 100644 packages/common/pipes/parse-date.pipe.ts diff --git a/packages/common/pipes/index.ts b/packages/common/pipes/index.ts index ebbc55f272a..f416b9467a7 100644 --- a/packages/common/pipes/index.ts +++ b/packages/common/pipes/index.ts @@ -1,9 +1,10 @@ export * from './default-value.pipe'; +export * from './file'; export * from './parse-array.pipe'; export * from './parse-bool.pipe'; -export * from './parse-int.pipe'; -export * from './parse-float.pipe'; +export * from './parse-date.pipe'; export * from './parse-enum.pipe'; +export * from './parse-float.pipe'; +export * from './parse-int.pipe'; export * from './parse-uuid.pipe'; export * from './validation.pipe'; -export * from './file'; diff --git a/packages/common/pipes/parse-array.pipe.ts b/packages/common/pipes/parse-array.pipe.ts index a46acc8fdf0..3887dfe23c0 100644 --- a/packages/common/pipes/parse-array.pipe.ts +++ b/packages/common/pipes/parse-array.pipe.ts @@ -7,7 +7,7 @@ import { PipeTransform, } from '../interfaces/features/pipe-transform.interface'; import { HttpErrorByCode } from '../utils/http-error-by-code.util'; -import { isNil, isUndefined, isString } from '../utils/shared.utils'; +import { isNil, isString, isUndefined } from '../utils/shared.utils'; import { ValidationPipe, ValidationPipeOptions } from './validation.pipe'; const VALIDATION_ERROR_MESSAGE = 'Validation failed (parsable array expected)'; @@ -21,9 +21,26 @@ export interface ParseArrayOptions ValidationPipeOptions, 'transform' | 'validateCustomDecorators' | 'exceptionFactory' > { + /** + * Type for items to be converted into + */ items?: Type; + /** + * Items separator to split string by + * @default ',' + */ separator?: string; + /** + * If true, the pipe will return null or undefined if the value is not provided + * @default false + */ optional?: boolean; + /** + * A factory function that returns an exception object to be thrown + * if validation fails. + * @param error Error message or object + * @returns The exception object + */ exceptionFactory?: (error: any) => any; } diff --git a/packages/common/pipes/parse-bool.pipe.ts b/packages/common/pipes/parse-bool.pipe.ts index ed1fbe5532b..16296f058f9 100644 --- a/packages/common/pipes/parse-bool.pipe.ts +++ b/packages/common/pipes/parse-bool.pipe.ts @@ -15,8 +15,21 @@ import { isNil } from '../utils/shared.utils'; * @publicApi */ export interface ParseBoolPipeOptions { + /** + * The HTTP status code to be used in the response when the validation fails. + */ errorHttpStatusCode?: ErrorHttpStatusCode; + /** + * A factory function that returns an exception object to be thrown + * if validation fails. + * @param error Error message + * @returns The exception object + */ exceptionFactory?: (error: string) => any; + /** + * If true, the pipe will return null or undefined if the value is not provided + * @default false + */ optional?: boolean; } diff --git a/packages/common/pipes/parse-date.pipe.ts b/packages/common/pipes/parse-date.pipe.ts new file mode 100644 index 00000000000..7565d5df284 --- /dev/null +++ b/packages/common/pipes/parse-date.pipe.ts @@ -0,0 +1,72 @@ +import { HttpStatus, Injectable, PipeTransform } from '@nestjs/common'; +import { + ErrorHttpStatusCode, + HttpErrorByCode, +} from '../utils/http-error-by-code.util'; +import { isNil } from '../utils/shared.utils'; + +export interface ParseDatePipeOptions { + /** + * If true, the pipe will return null or undefined if the value is not provided + * @default false + */ + optional?: boolean; + /** + * Default value for the date + */ + default?: () => Date; + /** + * The HTTP status code to be used in the response when the validation fails. + */ + errorHttpStatusCode?: ErrorHttpStatusCode; + /** + * A factory function that returns an exception object to be thrown + * if validation fails. + * @param error Error message + * @returns The exception object + */ + exceptionFactory?: (error: string) => any; +} + +@Injectable() +export class ParseDatePipe + implements PipeTransform +{ + protected exceptionFactory: (error: string) => any; + + constructor(private readonly options: ParseDatePipeOptions = {}) { + const { exceptionFactory, errorHttpStatusCode = HttpStatus.BAD_REQUEST } = + options; + + this.exceptionFactory = + exceptionFactory || + (error => new HttpErrorByCode[errorHttpStatusCode](error)); + } + + /** + * Method that accesses and performs optional transformation on argument for + * in-flight requests. + * + * @param value currently processed route argument + * @param metadata contains metadata about the currently processed route argument + */ + transform(value: string | Date | undefined | null): Date { + if (this.options.optional && isNil(value)) { + return this.options.default + ? this.options.default() + : (value as undefined | null); + } + + if (!value) { + throw this.exceptionFactory('Validation failed (Date is expected)'); + } + + const transformedValue = new Date(value); + + if (isNaN(transformedValue.getTime())) { + throw this.exceptionFactory('Validation failed (invalid Date provided)'); + } + + return transformedValue; + } +} diff --git a/packages/common/pipes/parse-enum.pipe.ts b/packages/common/pipes/parse-enum.pipe.ts index 4d98a96ad08..0bccd8b29f4 100644 --- a/packages/common/pipes/parse-enum.pipe.ts +++ b/packages/common/pipes/parse-enum.pipe.ts @@ -11,8 +11,21 @@ import { isNil } from '../utils/shared.utils'; * @publicApi */ export interface ParseEnumPipeOptions { + /** + * If true, the pipe will return null or undefined if the value is not provided + * @default false + */ optional?: boolean; + /** + * The HTTP status code to be used in the response when the validation fails. + */ errorHttpStatusCode?: ErrorHttpStatusCode; + /** + * A factory function that returns an exception object to be thrown + * if validation fails. + * @param error Error message + * @returns The exception object + */ exceptionFactory?: (error: string) => any; } diff --git a/packages/common/pipes/parse-float.pipe.ts b/packages/common/pipes/parse-float.pipe.ts index a9b25e4d7ba..04f5e97e27e 100644 --- a/packages/common/pipes/parse-float.pipe.ts +++ b/packages/common/pipes/parse-float.pipe.ts @@ -11,8 +11,21 @@ import { isNil } from '../utils/shared.utils'; * @publicApi */ export interface ParseFloatPipeOptions { + /** + * The HTTP status code to be used in the response when the validation fails. + */ errorHttpStatusCode?: ErrorHttpStatusCode; + /** + * A factory function that returns an exception object to be thrown + * if validation fails. + * @param error Error message + * @returns The exception object + */ exceptionFactory?: (error: string) => any; + /** + * If true, the pipe will return null or undefined if the value is not provided + * @default false + */ optional?: boolean; } diff --git a/packages/common/pipes/parse-int.pipe.ts b/packages/common/pipes/parse-int.pipe.ts index a36473efea5..d74aa0205ab 100644 --- a/packages/common/pipes/parse-int.pipe.ts +++ b/packages/common/pipes/parse-int.pipe.ts @@ -15,8 +15,21 @@ import { isNil } from '../utils/shared.utils'; * @publicApi */ export interface ParseIntPipeOptions { + /** + * The HTTP status code to be used in the response when the validation fails. + */ errorHttpStatusCode?: ErrorHttpStatusCode; + /** + * A factory function that returns an exception object to be thrown + * if validation fails. + * @param error Error message + * @returns The exception object + */ exceptionFactory?: (error: string) => any; + /** + * If true, the pipe will return null or undefined if the value is not provided + * @default false + */ optional?: boolean; } diff --git a/packages/common/pipes/parse-uuid.pipe.ts b/packages/common/pipes/parse-uuid.pipe.ts index 6b33ac6fc96..3c13c6b5120 100644 --- a/packages/common/pipes/parse-uuid.pipe.ts +++ b/packages/common/pipes/parse-uuid.pipe.ts @@ -15,9 +15,25 @@ import { isNil, isString } from '../utils/shared.utils'; * @publicApi */ export interface ParseUUIDPipeOptions { + /** + * UUID version to validate + */ version?: '3' | '4' | '5' | '7'; + /** + * The HTTP status code to be used in the response when the validation fails. + */ errorHttpStatusCode?: ErrorHttpStatusCode; + /** + * A factory function that returns an exception object to be thrown + * if validation fails. + * @param error Error message + * @returns The exception object + */ exceptionFactory?: (errors: string) => any; + /** + * If true, the pipe will return null or undefined if the value is not provided + * @default false + */ optional?: boolean; } From 676461ff4e32f51f085feab5dec6fc89f2adf884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Fri, 8 Nov 2024 15:49:24 +0100 Subject: [PATCH 047/122] test: add unit tests, minor updates --- packages/common/pipes/parse-date.pipe.ts | 12 ++-- .../common/test/pipes/parse-date.pipe.spec.ts | 71 +++++++++++++++++++ 2 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 packages/common/test/pipes/parse-date.pipe.spec.ts diff --git a/packages/common/pipes/parse-date.pipe.ts b/packages/common/pipes/parse-date.pipe.ts index 7565d5df284..4980882a412 100644 --- a/packages/common/pipes/parse-date.pipe.ts +++ b/packages/common/pipes/parse-date.pipe.ts @@ -1,4 +1,6 @@ -import { HttpStatus, Injectable, PipeTransform } from '@nestjs/common'; +import { Injectable } from '../decorators/core/injectable.decorator'; +import { HttpStatus } from '../enums/http-status.enum'; +import { PipeTransform } from '../interfaces/features/pipe-transform.interface'; import { ErrorHttpStatusCode, HttpErrorByCode, @@ -30,7 +32,7 @@ export interface ParseDatePipeOptions { @Injectable() export class ParseDatePipe - implements PipeTransform + implements PipeTransform { protected exceptionFactory: (error: string) => any; @@ -50,7 +52,7 @@ export class ParseDatePipe * @param value currently processed route argument * @param metadata contains metadata about the currently processed route argument */ - transform(value: string | Date | undefined | null): Date { + transform(value: string | number | undefined | null): Date { if (this.options.optional && isNil(value)) { return this.options.default ? this.options.default() @@ -58,13 +60,13 @@ export class ParseDatePipe } if (!value) { - throw this.exceptionFactory('Validation failed (Date is expected)'); + throw this.exceptionFactory('Validation failed (no Date provided)'); } const transformedValue = new Date(value); if (isNaN(transformedValue.getTime())) { - throw this.exceptionFactory('Validation failed (invalid Date provided)'); + throw this.exceptionFactory('Validation failed (invalid date format)'); } return transformedValue; diff --git a/packages/common/test/pipes/parse-date.pipe.spec.ts b/packages/common/test/pipes/parse-date.pipe.spec.ts new file mode 100644 index 00000000000..867e26f3f80 --- /dev/null +++ b/packages/common/test/pipes/parse-date.pipe.spec.ts @@ -0,0 +1,71 @@ +import { expect } from 'chai'; +import { BadRequestException } from '../../exceptions'; +import { ParseDatePipe } from '../../pipes/parse-date.pipe'; + +describe('ParseDatePipe', () => { + let target: ParseDatePipe; + + beforeEach(() => { + target = new ParseDatePipe(); + }); + + describe('transform', () => { + describe('when validation passes', () => { + it('should return a valid date object', () => { + const date = new Date().toISOString(); + + const transformedDate = target.transform(date); + expect(transformedDate).to.be.instanceOf(Date); + expect(transformedDate.toISOString()).to.equal(date); + + const asNumber = transformedDate.getTime(); + const transformedNumber = target.transform(asNumber); + expect(transformedNumber).to.be.instanceOf(Date); + expect(transformedNumber.getTime()).to.equal(asNumber); + }); + + it('should not throw an error if the value is undefined/null and optional is true', () => { + const target = new ParseDatePipe({ optional: true }); + const value = target.transform(undefined); + expect(value).to.equal(undefined); + }); + }); + describe('when default value is provided', () => { + it('should return the default value if the value is undefined/null', () => { + const defaultValue = new Date(); + const target = new ParseDatePipe({ + optional: true, + default: () => defaultValue, + }); + const value = target.transform(undefined); + expect(value).to.equal(defaultValue); + }); + }); + describe('when validation fails', () => { + it('should throw an error', () => { + try { + target.transform('123abc'); + expect.fail(); + } catch (error) { + expect(error).to.be.instanceOf(BadRequestException); + expect(error.message).to.equal( + 'Validation failed (invalid date format)', + ); + } + }); + }); + describe('when empty value', () => { + it('should throw an error', () => { + try { + target.transform(''); + expect.fail(); + } catch (error) { + expect(error).to.be.instanceOf(BadRequestException); + expect(error.message).to.equal( + 'Validation failed (no Date provided)', + ); + } + }); + }); + }); +}); From 3cdaaf0bed2e1316a8e49c173403db15e17c663c Mon Sep 17 00:00:00 2001 From: "Micael Levi L. Cavalcante" Date: Sat, 6 Jul 2024 17:20:41 -0400 Subject: [PATCH 048/122] feat(core): type narrowing valid entry module for nestjs factories --- packages/core/nest-factory.ts | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/packages/core/nest-factory.ts b/packages/core/nest-factory.ts index b40ce37bad1..2c84cb06272 100644 --- a/packages/core/nest-factory.ts +++ b/packages/core/nest-factory.ts @@ -3,6 +3,9 @@ import { INestApplication, INestApplicationContext, INestMicroservice, + DynamicModule, + ForwardReference, + Type, } from '@nestjs/common'; import { NestMicroserviceOptions } from '@nestjs/common/interfaces/microservices/nest-microservice-options.interface'; import { NestApplicationContextOptions } from '@nestjs/common/interfaces/nest-application-context-options.interface'; @@ -27,6 +30,15 @@ import { NestApplication } from './nest-application'; import { NestApplicationContext } from './nest-application-context'; import { DependenciesScanner } from './scanner'; +/** + * A valid NestJS entry (or 'root') module reference. + */ +type IEntryNestModule = + | Type + | DynamicModule + | ForwardReference + | Promise; + /** * @publicApi */ @@ -47,7 +59,7 @@ export class NestFactoryStatic { * contains a reference to the NestApplication instance. */ public async create( - module: any, + module: IEntryNestModule, options?: NestApplicationOptions, ): Promise; /** @@ -62,12 +74,12 @@ export class NestFactoryStatic { * contains a reference to the NestApplication instance. */ public async create( - module: any, + module: IEntryNestModule, httpAdapter: AbstractHttpAdapter, options?: NestApplicationOptions, ): Promise; public async create( - moduleCls: any, + moduleCls: IEntryNestModule, serverOrOptions?: AbstractHttpAdapter | NestApplicationOptions, options?: NestApplicationOptions, ): Promise { @@ -112,7 +124,7 @@ export class NestFactoryStatic { * contains a reference to the NestMicroservice instance. */ public async createMicroservice( - moduleCls: any, + moduleCls: IEntryNestModule, options?: NestMicroserviceOptions & T, ): Promise { const { NestMicroservice } = loadPackage( @@ -154,7 +166,7 @@ export class NestFactoryStatic { * contains a reference to the NestApplicationContext instance. */ public async createApplicationContext( - moduleCls: any, + moduleCls: IEntryNestModule, options?: NestApplicationContextOptions, ): Promise { const applicationConfig = new ApplicationConfig(); From e9d57dd795598e3d42e0d153031a203a372795aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Khan=20/=20=EC=9D=B4=EC=B0=BD=EB=AF=BC?= Date: Sun, 10 Nov 2024 16:31:29 +0900 Subject: [PATCH 049/122] fix: type narrowing ctx --- .../http/create-route-param-metadata.decorator.ts | 8 ++------ .../features/custom-route-param-factory.interface.ts | 6 ++++-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/common/decorators/http/create-route-param-metadata.decorator.ts b/packages/common/decorators/http/create-route-param-metadata.decorator.ts index a2cc6c02149..245998d741a 100644 --- a/packages/common/decorators/http/create-route-param-metadata.decorator.ts +++ b/packages/common/decorators/http/create-route-param-metadata.decorator.ts @@ -16,12 +16,8 @@ export type ParamDecoratorEnhancer = ParameterDecorator; * * @publicApi */ -export function createParamDecorator< - FactoryData = any, - FactoryInput = any, - FactoryOutput = any, ->( - factory: CustomParamFactory, +export function createParamDecorator( + factory: CustomParamFactory, enhancers: ParamDecoratorEnhancer[] = [], ): ( ...dataOrPipes: (Type | PipeTransform | FactoryData)[] diff --git a/packages/common/interfaces/features/custom-route-param-factory.interface.ts b/packages/common/interfaces/features/custom-route-param-factory.interface.ts index e022b6669b8..a815f591945 100644 --- a/packages/common/interfaces/features/custom-route-param-factory.interface.ts +++ b/packages/common/interfaces/features/custom-route-param-factory.interface.ts @@ -1,7 +1,9 @@ +import { ExecutionContext } from '..'; + /** * @publicApi */ -export type CustomParamFactory = ( +export type CustomParamFactory = ( data: TData, - input: TInput, + context: ExecutionContext, ) => TOutput; From de13eec632a39bfa4cae3f4d5f9a523aaf905abf Mon Sep 17 00:00:00 2001 From: codytseng Date: Sun, 10 Nov 2024 16:14:07 +0800 Subject: [PATCH 050/122] feat: introduce message preprocessor for ws adapter --- integration/websockets/e2e/ws-gateway.spec.ts | 27 +++++++++++++++++++ packages/platform-ws/adapters/ws-adapter.ts | 13 ++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/integration/websockets/e2e/ws-gateway.spec.ts b/integration/websockets/e2e/ws-gateway.spec.ts index e76165059c4..7190893bc90 100644 --- a/integration/websockets/e2e/ws-gateway.spec.ts +++ b/integration/websockets/e2e/ws-gateway.spec.ts @@ -218,6 +218,33 @@ describe('WebSocketGateway (WsAdapter)', () => { ); }); + it('should preprocess message', async () => { + const testingModule = await Test.createTestingModule({ + providers: [ApplicationGateway], + }).compile(); + app = testingModule.createNestApplication(); + + const wsAdapter = new WsAdapter(app); + wsAdapter.setMessagePreprocessor(data => ({ + event: data[0], + data: data[1], + })); + app.useWebSocketAdapter(wsAdapter); + await app.listen(3000); + + ws = new WebSocket('ws://localhost:8080'); + await new Promise(resolve => ws.on('open', resolve)); + + 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'); + ws.close(); + resolve(); + }), + ); + }); + afterEach(async function () { await app.close(); }); diff --git a/packages/platform-ws/adapters/ws-adapter.ts b/packages/platform-ws/adapters/ws-adapter.ts index a1fff023033..1746c3111a5 100644 --- a/packages/platform-ws/adapters/ws-adapter.ts +++ b/packages/platform-ws/adapters/ws-adapter.ts @@ -25,6 +25,9 @@ type HttpServerRegistryKey = number; type HttpServerRegistryEntry = any; type WsServerRegistryKey = number; type WsServerRegistryEntry = any[]; +type WsMessagePreprocessor = ( + message: any, +) => { event: string; data: any } | void; const UNDERLYING_HTTP_SERVER_PORT = 0; @@ -41,6 +44,7 @@ export class WsAdapter extends AbstractWsAdapter { WsServerRegistryKey, WsServerRegistryEntry >(); + protected messagePreprocessor: WsMessagePreprocessor = message => message; constructor(appOrHttpServer?: INestApplicationContext | any) { super(appOrHttpServer); @@ -138,7 +142,10 @@ export class WsAdapter extends AbstractWsAdapter { transform: (data: any) => Observable, ): Observable { try { - const message = JSON.parse(buffer.data); + const message = this.messagePreprocessor(JSON.parse(buffer.data)); + if (!message) { + return EMPTY; + } const messageHandler = handlersMap.get(message.event); const { callback } = messageHandler; return transform(callback(message.data, message.event)); @@ -179,6 +186,10 @@ export class WsAdapter extends AbstractWsAdapter { this.wsServersRegistry.clear(); } + public setMessagePreprocessor(preprocessor: WsMessagePreprocessor) { + this.messagePreprocessor = preprocessor; + } + protected ensureHttpServerExists( port: number, httpServer = http.createServer(), From 2874478b958e5f4c4ab57acf8694c26abdf6227a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Khan=20/=20=EC=9D=B4=EC=B0=BD=EB=AF=BC?= Date: Mon, 11 Nov 2024 00:05:24 +0900 Subject: [PATCH 051/122] fix: import to use direct file path --- .../interfaces/features/custom-route-param-factory.interface.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/common/interfaces/features/custom-route-param-factory.interface.ts b/packages/common/interfaces/features/custom-route-param-factory.interface.ts index a815f591945..c63b4b85739 100644 --- a/packages/common/interfaces/features/custom-route-param-factory.interface.ts +++ b/packages/common/interfaces/features/custom-route-param-factory.interface.ts @@ -1,4 +1,4 @@ -import { ExecutionContext } from '..'; +import { ExecutionContext } from './execution-context.interface'; /** * @publicApi From e231f9887e0ecc9ead644b85659907b4d2a51b5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Khan=20/=20=EC=9D=B4=EC=B0=BD=EB=AF=BC?= Date: Mon, 11 Nov 2024 15:31:19 +0900 Subject: [PATCH 052/122] fix: rabbitmq bindings and auto-generated queues --- packages/microservices/client/client-rmq.ts | 9 +++++++++ packages/microservices/constants.ts | 2 +- .../microservice-configuration.interface.ts | 2 ++ packages/microservices/server/server-rmq.ts | 12 ++++++++++++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/microservices/client/client-rmq.ts b/packages/microservices/client/client-rmq.ts index 5c8824f57af..653e6f432b2 100644 --- a/packages/microservices/client/client-rmq.ts +++ b/packages/microservices/client/client-rmq.ts @@ -192,6 +192,15 @@ export class ClientRMQ extends ClientProxy { if (!this.noAssert) { await channel.assertQueue(this.queue, this.queueOptions); } + + if (this.options.exchange && this.options.routingKey) { + await channel.bindQueue( + this.queue, + this.options.exchange, + this.options.routingKey, + ); + } + await channel.prefetch(prefetchCount, isGlobalPrefetchCount); await this.consumeChannel(channel); resolve(); diff --git a/packages/microservices/constants.ts b/packages/microservices/constants.ts index c358776dd20..3d295b03af5 100644 --- a/packages/microservices/constants.ts +++ b/packages/microservices/constants.ts @@ -33,7 +33,7 @@ export const PARAM_ARGS_METADATA = ROUTE_ARGS_METADATA; export const REQUEST_PATTERN_METADATA = 'microservices:request_pattern'; export const REPLY_PATTERN_METADATA = 'microservices:reply_pattern'; -export const RQM_DEFAULT_QUEUE = 'default'; +export const RQM_DEFAULT_QUEUE = ''; export const RQM_DEFAULT_PREFETCH_COUNT = 0; export const RQM_DEFAULT_IS_GLOBAL_PREFETCH_COUNT = false; export const RQM_DEFAULT_QUEUE_OPTIONS = {}; diff --git a/packages/microservices/interfaces/microservice-configuration.interface.ts b/packages/microservices/interfaces/microservice-configuration.interface.ts index b5850e1b236..32f6513ee6a 100644 --- a/packages/microservices/interfaces/microservice-configuration.interface.ts +++ b/packages/microservices/interfaces/microservice-configuration.interface.ts @@ -209,6 +209,8 @@ export interface RmqOptions { isGlobalPrefetchCount?: boolean; queueOptions?: AmqplibQueueOptions; socketOptions?: AmqpConnectionManagerSocketOptions; + exchange?: string; + routingKey?: string; noAck?: boolean; consumerTag?: string; serializer?: Serializer; diff --git a/packages/microservices/server/server-rmq.ts b/packages/microservices/server/server-rmq.ts index c0ea0bd8ff4..9d011a67390 100644 --- a/packages/microservices/server/server-rmq.ts +++ b/packages/microservices/server/server-rmq.ts @@ -153,6 +153,18 @@ export class ServerRMQ extends Server implements CustomTransportStrategy { if (!this.noAssert) { await channel.assertQueue(this.queue, this.queueOptions); } + + if (this.options.exchange && this.options.routingKey) { + await channel.assertExchange(this.options.exchange, 'topic', { + durable: true, + }); + await channel.bindQueue( + this.queue, + this.options.exchange, + this.options.routingKey, + ); + } + await channel.prefetch(this.prefetchCount, this.isGlobalPrefetchCount); channel.consume( this.queue, From 35846843e1f68f744b3742db293d050df82cd45c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 12 Nov 2024 11:12:41 +0100 Subject: [PATCH 053/122] feat(common): allow passing number to http error create body #12787 --- packages/common/exceptions/http.exception.ts | 7 ++----- .../interfaces/http/http-exception-body.interface.ts | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/common/exceptions/http.exception.ts b/packages/common/exceptions/http.exception.ts index 111a1f72a5e..143df233eed 100644 --- a/packages/common/exceptions/http.exception.ts +++ b/packages/common/exceptions/http.exception.ts @@ -2,7 +2,7 @@ import { HttpExceptionBody, HttpExceptionBodyMessage, } from '../interfaces/http/http-exception-body.interface'; -import { isObject, isString } from '../utils/shared.utils'; +import { isNumber, isObject, isString } from '../utils/shared.utils'; export interface HttpExceptionOptions { /** original cause of the error */ @@ -115,17 +115,14 @@ export class HttpException extends Error { message: HttpExceptionBodyMessage, statusCode: number, ): HttpExceptionBody; - public static createBody( message: HttpExceptionBodyMessage, error: string, statusCode: number, ): HttpExceptionBody; - public static createBody>( custom: Body, ): Body; - public static createBody>( arg0: null | HttpExceptionBodyMessage | Body, arg1?: HttpExceptionBodyMessage | string, @@ -138,7 +135,7 @@ export class HttpException extends Error { }; } - if (isString(arg0) || Array.isArray(arg0)) { + if (isString(arg0) || Array.isArray(arg0) || isNumber(arg0)) { return { message: arg0, error: arg1 as string, diff --git a/packages/common/interfaces/http/http-exception-body.interface.ts b/packages/common/interfaces/http/http-exception-body.interface.ts index e0b923e5ece..b9f4732d622 100644 --- a/packages/common/interfaces/http/http-exception-body.interface.ts +++ b/packages/common/interfaces/http/http-exception-body.interface.ts @@ -1,4 +1,4 @@ -export type HttpExceptionBodyMessage = string | string[]; +export type HttpExceptionBodyMessage = string | string[] | number; export interface HttpExceptionBody { message: HttpExceptionBodyMessage; From 9ae6a4c19fd9839035d72090a53e894fcc3352ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 12 Nov 2024 13:37:14 +0100 Subject: [PATCH 054/122] feat(microservices): add max tcp packet buffer length --- .../errors/max-packet-length-exceeded.exception.ts | 8 ++++++++ packages/microservices/helpers/json-socket.ts | 10 +++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 packages/microservices/errors/max-packet-length-exceeded.exception.ts diff --git a/packages/microservices/errors/max-packet-length-exceeded.exception.ts b/packages/microservices/errors/max-packet-length-exceeded.exception.ts new file mode 100644 index 00000000000..5d2ccd3c71e --- /dev/null +++ b/packages/microservices/errors/max-packet-length-exceeded.exception.ts @@ -0,0 +1,8 @@ +/** + * @publicApi + */ +export class MaxPacketLengthExceededException extends Error { + constructor(length: number) { + super(`The packet length (${length}) exceeds the maximum allowed length`); + } +} diff --git a/packages/microservices/helpers/json-socket.ts b/packages/microservices/helpers/json-socket.ts index 5d017f9b52b..574d5f267f3 100644 --- a/packages/microservices/helpers/json-socket.ts +++ b/packages/microservices/helpers/json-socket.ts @@ -1,8 +1,11 @@ import { Buffer } from 'buffer'; import { StringDecoder } from 'string_decoder'; import { CorruptedPacketLengthException } from '../errors/corrupted-packet-length.exception'; +import { MaxPacketLengthExceededException } from '../errors/max-packet-length-exceeded.exception'; import { TcpSocket } from './tcp-socket'; +const MAX_BUFFER_SIZE = (512 * 1024 * 1024) / 4; // 512 MBs in characters with 4 bytes per character (32-bit) + export class JsonSocket extends TcpSocket { private contentLength: number | null = null; private buffer = ''; @@ -20,7 +23,12 @@ export class JsonSocket extends TcpSocket { : dataRaw; this.buffer += data; - if (this.contentLength == null) { + if (this.buffer.length > MAX_BUFFER_SIZE) { + this.buffer = ''; + throw new MaxPacketLengthExceededException(this.buffer.length); + } + + if (this.contentLength === null) { const i = this.buffer.indexOf(this.delimiter); /** * Check if the buffer has the delimiter (#), From 2ab99739cd1cb2f0d78043a52cf89374f65f4553 Mon Sep 17 00:00:00 2001 From: codytseng Date: Wed, 13 Nov 2024 09:57:29 +0800 Subject: [PATCH 055/122] refactor(ws): rename to message parser and move json parse logic inside --- integration/websockets/e2e/ws-gateway.spec.ts | 10 +++++----- packages/platform-ws/adapters/ws-adapter.ts | 15 ++++++++------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/integration/websockets/e2e/ws-gateway.spec.ts b/integration/websockets/e2e/ws-gateway.spec.ts index 7190893bc90..c3645c0885c 100644 --- a/integration/websockets/e2e/ws-gateway.spec.ts +++ b/integration/websockets/e2e/ws-gateway.spec.ts @@ -218,17 +218,17 @@ describe('WebSocketGateway (WsAdapter)', () => { ); }); - it('should preprocess message', async () => { + it('should set messageParser by using setMessageParser method', async () => { const testingModule = await Test.createTestingModule({ providers: [ApplicationGateway], }).compile(); app = testingModule.createNestApplication(); const wsAdapter = new WsAdapter(app); - wsAdapter.setMessagePreprocessor(data => ({ - event: data[0], - data: data[1], - })); + wsAdapter.setMessageParser(data => { + const [event, payload] = JSON.parse(data.toString()); + return { event, data: payload }; + }); app.useWebSocketAdapter(wsAdapter); await app.listen(3000); diff --git a/packages/platform-ws/adapters/ws-adapter.ts b/packages/platform-ws/adapters/ws-adapter.ts index 1746c3111a5..b77b8dfc3f7 100644 --- a/packages/platform-ws/adapters/ws-adapter.ts +++ b/packages/platform-ws/adapters/ws-adapter.ts @@ -25,9 +25,8 @@ type HttpServerRegistryKey = number; type HttpServerRegistryEntry = any; type WsServerRegistryKey = number; type WsServerRegistryEntry = any[]; -type WsMessagePreprocessor = ( - message: any, -) => { event: string; data: any } | void; +type WsData = string | Buffer | ArrayBuffer | Buffer[]; +type WsMessageParser = (data: WsData) => { event: string; data: any } | void; const UNDERLYING_HTTP_SERVER_PORT = 0; @@ -44,7 +43,9 @@ export class WsAdapter extends AbstractWsAdapter { WsServerRegistryKey, WsServerRegistryEntry >(); - protected messagePreprocessor: WsMessagePreprocessor = message => message; + protected messageParser: WsMessageParser = data => { + return JSON.parse(data.toString()); + }; constructor(appOrHttpServer?: INestApplicationContext | any) { super(appOrHttpServer); @@ -142,7 +143,7 @@ export class WsAdapter extends AbstractWsAdapter { transform: (data: any) => Observable, ): Observable { try { - const message = this.messagePreprocessor(JSON.parse(buffer.data)); + const message = this.messageParser(buffer.data); if (!message) { return EMPTY; } @@ -186,8 +187,8 @@ export class WsAdapter extends AbstractWsAdapter { this.wsServersRegistry.clear(); } - public setMessagePreprocessor(preprocessor: WsMessagePreprocessor) { - this.messagePreprocessor = preprocessor; + public setMessageParser(parser: WsMessageParser) { + this.messageParser = parser; } protected ensureHttpServerExists( From 33e32d9d5d1c3da9304917635cd747e2da158d37 Mon Sep 17 00:00:00 2001 From: codytseng Date: Wed, 13 Nov 2024 09:58:32 +0800 Subject: [PATCH 056/122] feat(ws): allow setting message parser in constructor --- integration/websockets/e2e/ws-gateway.spec.ts | 28 +++++++++++++++++++ packages/platform-ws/adapters/ws-adapter.ts | 12 +++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/integration/websockets/e2e/ws-gateway.spec.ts b/integration/websockets/e2e/ws-gateway.spec.ts index c3645c0885c..94f56d7e914 100644 --- a/integration/websockets/e2e/ws-gateway.spec.ts +++ b/integration/websockets/e2e/ws-gateway.spec.ts @@ -245,6 +245,34 @@ describe('WebSocketGateway (WsAdapter)', () => { ); }); + it('should set messageParser by using constructor options', async () => { + const testingModule = await Test.createTestingModule({ + providers: [ApplicationGateway], + }).compile(); + app = testingModule.createNestApplication(); + + const wsAdapter = new WsAdapter(app, { + messageParser: data => { + const [event, payload] = JSON.parse(data.toString()); + return { event, data: payload }; + }, + }); + app.useWebSocketAdapter(wsAdapter); + await app.listen(3000); + + ws = new WebSocket('ws://localhost:8080'); + await new Promise(resolve => ws.on('open', resolve)); + + 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'); + ws.close(); + resolve(); + }), + ); + }); + afterEach(async function () { await app.close(); }); diff --git a/packages/platform-ws/adapters/ws-adapter.ts b/packages/platform-ws/adapters/ws-adapter.ts index b77b8dfc3f7..f2fbcd4d309 100644 --- a/packages/platform-ws/adapters/ws-adapter.ts +++ b/packages/platform-ws/adapters/ws-adapter.ts @@ -27,6 +27,9 @@ type WsServerRegistryKey = number; type WsServerRegistryEntry = any[]; type WsData = string | Buffer | ArrayBuffer | Buffer[]; type WsMessageParser = (data: WsData) => { event: string; data: any } | void; +type WsAdapterOptions = { + messageParser?: WsMessageParser; +}; const UNDERLYING_HTTP_SERVER_PORT = 0; @@ -47,9 +50,16 @@ export class WsAdapter extends AbstractWsAdapter { return JSON.parse(data.toString()); }; - constructor(appOrHttpServer?: INestApplicationContext | any) { + constructor( + appOrHttpServer?: INestApplicationContext | any, + options?: WsAdapterOptions, + ) { super(appOrHttpServer); wsPackage = loadPackage('ws', 'WsAdapter', () => require('ws')); + + if (options?.messageParser) { + this.messageParser = options.messageParser; + } } public create( From 3dfc7fc68eaa161aae712024e712eb292797b2db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Fri, 15 Nov 2024 10:03:05 +0100 Subject: [PATCH 057/122] feat(microservices): add status, unwrap, on, and other features --- .../interfaces/nest-microservice.interface.ts | 42 ++++- packages/microservices/client/client-grpc.ts | 44 ++++- packages/microservices/client/client-kafka.ts | 137 +++++++++++---- packages/microservices/client/client-mqtt.ts | 138 ++++++++++++--- packages/microservices/client/client-nats.ts | 97 ++++++++++- .../client/client-proxy-factory.ts | 29 ++-- packages/microservices/client/client-proxy.ts | 68 +++++++- packages/microservices/client/client-redis.ts | 161 +++++++++++++++--- packages/microservices/client/client-rmq.ts | 144 +++++++++++----- packages/microservices/client/client-tcp.ts | 105 ++++++++---- packages/microservices/client/constants.ts | 2 - packages/microservices/constants.ts | 47 ++--- packages/microservices/container.ts | 9 +- packages/microservices/events/index.ts | 6 + packages/microservices/events/kafka.events.ts | 7 + packages/microservices/events/mqtt.events.ts | 39 +++++ packages/microservices/events/nats.events.ts | 29 ++++ packages/microservices/events/redis.events.ts | 34 ++++ packages/microservices/events/rmq.events.ts | 24 +++ packages/microservices/events/tcp.events.ts | 39 +++++ .../external/mqtt-client.interface.ts | 141 --------------- .../external/nats-client.interface.ts | 93 ---------- .../external/nats-codec.interface.ts | 9 + packages/microservices/helpers/tcp-socket.ts | 29 ++-- packages/microservices/index.ts | 1 + .../interfaces/client-grpc.interface.ts | 10 ++ .../client-kafka-proxy.interface.ts | 33 ++++ .../interfaces/closeable.interface.ts | 3 - .../custom-transport-strategy.interface.ts | 10 ++ packages/microservices/interfaces/index.ts | 2 +- .../microservice-configuration.interface.ts | 4 +- .../microservices/listeners-controller.ts | 33 ++-- .../microservices/microservices-module.ts | 12 +- .../microservices/module/clients.module.ts | 3 +- packages/microservices/nest-microservice.ts | 120 +++++++++++-- .../record-builders/mqtt.record-builder.ts | 4 +- .../microservices/server/server-factory.ts | 32 ++-- packages/microservices/server/server-grpc.ts | 55 ++++-- packages/microservices/server/server-kafka.ts | 58 ++++++- packages/microservices/server/server-mqtt.ts | 89 ++++++++-- packages/microservices/server/server-nats.ts | 75 +++++++- packages/microservices/server/server-redis.ts | 133 ++++++++++++--- packages/microservices/server/server-rmq.ts | 124 ++++++++++---- packages/microservices/server/server-tcp.ts | 96 ++++++++--- packages/microservices/server/server.ts | 52 +++++- .../test/client/client-kafka.spec.ts | 86 +++++++--- .../test/client/client-mqtt.spec.ts | 65 +++++-- .../test/client/client-nats.spec.ts | 4 +- .../test/client/client-proxy.spec.ts | 6 + .../test/client/client-redis.spec.ts | 79 ++++++--- .../test/client/client-rmq.spec.ts | 25 +-- .../test/client/client-tcp.spec.ts | 78 ++++++--- .../test/json-socket/connection.spec.ts | 6 +- .../microservices/test/json-socket/helpers.ts | 6 +- .../json-socket/listener-chaining.spec.ts | 8 +- .../test/json-socket/message-parsing.spec.ts | 20 ++- .../test/server/server-grpc.spec.ts | 11 +- .../test/server/server-kafka.spec.ts | 73 +++++--- .../test/server/server-mqtt.spec.ts | 18 +- .../test/server/server-redis.spec.ts | 4 +- .../test/server/server-rmq.spec.ts | 44 ++--- .../microservices/test/server/server.spec.ts | 9 +- 62 files changed, 2113 insertions(+), 851 deletions(-) delete mode 100644 packages/microservices/client/constants.ts create mode 100644 packages/microservices/events/index.ts create mode 100644 packages/microservices/events/kafka.events.ts create mode 100644 packages/microservices/events/mqtt.events.ts create mode 100644 packages/microservices/events/nats.events.ts create mode 100644 packages/microservices/events/redis.events.ts create mode 100644 packages/microservices/events/rmq.events.ts create mode 100644 packages/microservices/events/tcp.events.ts delete mode 100644 packages/microservices/external/mqtt-client.interface.ts delete mode 100644 packages/microservices/external/nats-client.interface.ts create mode 100644 packages/microservices/external/nats-codec.interface.ts create mode 100644 packages/microservices/interfaces/client-kafka-proxy.interface.ts delete mode 100644 packages/microservices/interfaces/closeable.interface.ts diff --git a/packages/common/interfaces/nest-microservice.interface.ts b/packages/common/interfaces/nest-microservice.interface.ts index 025c331bc33..efcaa0761f5 100644 --- a/packages/common/interfaces/nest-microservice.interface.ts +++ b/packages/common/interfaces/nest-microservice.interface.ts @@ -1,3 +1,4 @@ +import { Observable } from 'rxjs'; import { ExceptionFilter } from './exceptions/exception-filter.interface'; import { CanActivate } from './features/can-activate.interface'; import { NestInterceptor } from './features/nest-interceptor.interface'; @@ -19,8 +20,8 @@ export interface INestMicroservice extends INestApplicationContext { listen(): Promise; /** - * Register Ws Adapter which will be used inside Gateways. - * Use when you want to override default `socket.io` library. + * Registers a web socket adapter that will be used for Gateways. + * Use to override the default `socket.io` library. * * @param {WebSocketAdapter} adapter * @returns {this} @@ -28,37 +29,64 @@ export interface INestMicroservice extends INestApplicationContext { useWebSocketAdapter(adapter: WebSocketAdapter): this; /** - * Registers exception filters as global filters (will be used within every message pattern handler) + * Registers global exception filters (will be used for every pattern handler). * * @param {...ExceptionFilter} filters */ useGlobalFilters(...filters: ExceptionFilter[]): this; /** - * Registers pipes as global pipes (will be used within every message pattern handler) + * Registers global pipes (will be used for every pattern handler). * * @param {...PipeTransform} pipes */ useGlobalPipes(...pipes: PipeTransform[]): this; /** - * Registers interceptors as global interceptors (will be used within every message pattern handler) + * Registers global interceptors (will be used for every pattern handler). * * @param {...NestInterceptor} interceptors */ useGlobalInterceptors(...interceptors: NestInterceptor[]): this; /** - * Registers guards as global guards (will be used within every message pattern handler) + * Registers global guards (will be used for every pattern handler). * * @param {...CanActivate} guards */ useGlobalGuards(...guards: CanActivate[]): this; /** - * Terminates the application + * Terminates the application. * * @returns {Promise} */ close(): Promise; + + /** + * Returns an observable that emits status changes. + * + * @returns {Observable} + */ + status: Observable; + + /** + * Registers an event listener for the given event. + * @param event Event name + * @param callback Callback to be executed when the event is emitted + */ + on< + EventsMap extends Record = Record, + EventKey extends keyof EventsMap = keyof EventsMap, + EventCallback extends EventsMap[EventKey] = EventsMap[EventKey], + >( + event: EventKey, + callback: EventCallback, + ): void; + + /** + * Returns an instance of the underlying server/broker instance, + * or a group of servers if there are more than one. + */ + unwrap(): T; } diff --git a/packages/microservices/client/client-grpc.ts b/packages/microservices/client/client-grpc.ts index d567f253b5d..8d502f21af4 100644 --- a/packages/microservices/client/client-grpc.ts +++ b/packages/microservices/client/client-grpc.ts @@ -6,23 +6,42 @@ import { GRPC_DEFAULT_PROTO_LOADER, GRPC_DEFAULT_URL } from '../constants'; import { InvalidGrpcPackageException } from '../errors/invalid-grpc-package.exception'; import { InvalidGrpcServiceException } from '../errors/invalid-grpc-service.exception'; import { InvalidProtoDefinitionException } from '../errors/invalid-proto-definition.exception'; -import { ClientGrpc, GrpcOptions } from '../interfaces'; -import { ClientProxy } from './client-proxy'; -import { GRPC_CANCELLED } from './constants'; import { ChannelOptions } from '../external/grpc-options.interface'; import { getGrpcPackageDefinition } from '../helpers'; +import { ClientGrpc, GrpcOptions } from '../interfaces'; +import { ClientProxy } from './client-proxy'; -let grpcPackage: any = {}; -let grpcProtoLoaderPackage: any = {}; +const GRPC_CANCELLED = 'Cancelled'; + +// To enable type safety for gRPC. This cant be uncommented by default +// because it would require the user to install the @grpc/grpc-js package even if they dont use gRPC +// Otherwise, TypeScript would fail to compile the code. +// +// type GrpcClient = import('@grpc/grpc-js').Client; +// let grpcPackage = {} as typeof import('@grpc/grpc-js'); +// let grpcProtoLoaderPackage = {} as typeof import('@grpc/proto-loader'); + +type GrpcClient = any; +let grpcPackage = {} as any; +let grpcProtoLoaderPackage = {} as any; /** * @publicApi */ -export class ClientGrpcProxy extends ClientProxy implements ClientGrpc { +export class ClientGrpcProxy + extends ClientProxy + implements ClientGrpc +{ protected readonly logger = new Logger(ClientProxy.name); protected readonly clients = new Map(); protected readonly url: string; - protected grpcClients = []; + protected grpcClients: GrpcClient[] = []; + + get status(): never { + throw new Error( + 'The "status" attribute is not supported by the gRPC transport', + ); + } constructor(protected readonly options: GrpcOptions['options']) { super(); @@ -367,4 +386,15 @@ export class ClientGrpcProxy extends ClientProxy implements ClientGrpc { 'Method is not supported in gRPC mode. Use ClientGrpc instead (learn more in the documentation).', ); } + + public on( + event: EventKey, + callback: EventCallback, + ) { + throw new Error('Method is not supported in gRPC mode.'); + } + + public unwrap(): T { + throw new Error('Method is not supported in gRPC mode.'); + } } diff --git a/packages/microservices/client/client-kafka.ts b/packages/microservices/client/client-kafka.ts index e9969ff1a7e..7fe912f13f9 100644 --- a/packages/microservices/client/client-kafka.ts +++ b/packages/microservices/client/client-kafka.ts @@ -9,6 +9,7 @@ import { import { KafkaResponseDeserializer } from '../deserializers/kafka-response.deserializer'; import { KafkaHeaders } from '../enums'; import { InvalidKafkaClientTopicException } from '../errors/invalid-kafka-client-topic.exception'; +import { KafkaStatus } from '../events'; import { BrokersFunction, Consumer, @@ -27,7 +28,9 @@ import { KafkaReplyPartitionAssigner, } from '../helpers'; import { + ClientKafkaProxy, KafkaOptions, + MsPattern, OutgoingEvent, ReadPacket, WritePacket, @@ -43,11 +46,12 @@ let kafkaPackage: any = {}; /** * @publicApi */ -export class ClientKafka extends ClientProxy { +export class ClientKafka + extends ClientProxy + implements ClientKafkaProxy +{ protected logger = new Logger(ClientKafka.name); protected client: Kafka | null = null; - protected consumer: Consumer | null = null; - protected producer: Producer | null = null; protected parser: KafkaParser | null = null; protected initialized: Promise | null = null; protected responsePatterns: string[] = []; @@ -56,6 +60,26 @@ export class ClientKafka extends ClientProxy { protected clientId: string; protected groupId: string; protected producerOnlyMode: boolean; + protected _consumer: Consumer | null = null; + protected _producer: Producer | null = null; + + get consumer(): Consumer { + if (!this._consumer) { + throw new Error( + 'No consumer initialized. Please, call the "connect" method first.', + ); + } + return this._consumer; + } + + get producer(): Producer { + if (!this._consumer) { + throw new Error( + 'No producer initialized. Please, call the "connect" method first.', + ); + } + return this._producer; + } constructor(protected readonly options: KafkaOptions['options']) { super(); @@ -95,28 +119,27 @@ export class ClientKafka extends ClientProxy { this.initializeDeserializer(options); } - public subscribeToResponseOf(pattern: any): void { - const request = this.normalizePattern(pattern); + public subscribeToResponseOf(pattern: unknown): void { + const request = this.normalizePattern(pattern as MsPattern); this.responsePatterns.push(this.getResponsePatternName(request)); } public async close(): Promise { - this.producer && (await this.producer.disconnect()); - this.consumer && (await this.consumer.disconnect()); - this.producer = null; - this.consumer = null; + this._producer && (await this._producer.disconnect()); + this._consumer && (await this._consumer.disconnect()); + this._producer = null; + this._consumer = null; this.initialized = null; this.client = null; } public async connect(): Promise { if (this.initialized) { - return this.initialized.then(() => this.producer); + return this.initialized.then(() => this._producer); } this.initialized = new Promise(async (resolve, reject) => { try { this.client = this.createClient(); - if (!this.producerOnlyMode) { const partitionAssigners = [ ( @@ -136,42 +159,45 @@ export class ClientKafka extends ClientProxy { }, ); - this.consumer = this.client.consumer(consumerOptions); - // set member assignments on join and rebalance - this.consumer.on( - this.consumer.events.GROUP_JOIN, + this._consumer = this.client.consumer(consumerOptions); + this.registerConsumerEventListeners(); + + // Set member assignments on join and rebalance + this._consumer.on( + this._consumer.events.GROUP_JOIN, this.setConsumerAssignments.bind(this), ); - await this.consumer.connect(); + await this._consumer.connect(); await this.bindTopics(); } - this.producer = this.client.producer(this.options.producer || {}); - await this.producer.connect(); + this._producer = this.client.producer(this.options.producer || {}); + this.registerProducerEventListeners(); + await this._producer.connect(); resolve(); } catch (err) { reject(err); } }); - return this.initialized.then(() => this.producer); + return this.initialized.then(() => this._producer); } public async bindTopics(): Promise { - if (!this.consumer) { + if (!this._consumer) { throw Error('No consumer initialized'); } const consumerSubscribeOptions = this.options.subscribe || {}; if (this.responsePatterns.length > 0) { - await this.consumer.subscribe({ + await this._consumer.subscribe({ ...consumerSubscribeOptions, topics: this.responsePatterns, }); } - await this.consumer.run( + await this._consumer.run( Object.assign(this.options.run || {}, { eachMessage: this.createResponseCallback(), }), @@ -223,6 +249,52 @@ export class ClientKafka extends ClientProxy { return this.consumerAssignments; } + public commitOffsets( + topicPartitions: TopicPartitionOffsetAndMetadata[], + ): Promise { + if (this._consumer) { + return this._consumer.commitOffsets(topicPartitions); + } else { + throw new Error('No consumer initialized'); + } + } + + public unwrap(): T { + if (!this.client) { + throw new Error( + 'Not initialized. Please call the "connect" method first.', + ); + } + return this.client as T; + } + + protected registerConsumerEventListeners() { + this._consumer.on(this._consumer.events.CONNECT, () => + this._status$.next(KafkaStatus.CONNECTED), + ); + this._consumer.on(this._consumer.events.DISCONNECT, () => + this._status$.next(KafkaStatus.DISCONNECTED), + ); + this._consumer.on(this._consumer.events.REBALANCING, () => + this._status$.next(KafkaStatus.REBALANCING), + ); + this._consumer.on(this._consumer.events.STOP, () => + this._status$.next(KafkaStatus.STOPPED), + ); + this.consumer.on(this._consumer.events.CRASH, () => + this._status$.next(KafkaStatus.CRASHED), + ); + } + + protected registerProducerEventListeners() { + this._producer.on(this._producer.events.CONNECT, () => + this._status$.next(KafkaStatus.CONNECTED), + ); + this._producer.on(this._producer.events.DISCONNECT, () => + this._status$.next(KafkaStatus.DISCONNECTED), + ); + } + protected async dispatchEvent(packet: OutgoingEvent): Promise { const pattern = this.normalizePattern(packet.pattern); const outgoingEvent = await this.serializer.serialize(packet.data, { @@ -236,7 +308,7 @@ export class ClientKafka extends ClientProxy { this.options.send || {}, ); - return this.producer.send(message); + return this._producer.send(message); } protected getReplyTopicPartition(topic: string): string { @@ -245,7 +317,7 @@ export class ClientKafka extends ClientProxy { throw new InvalidKafkaClientTopicException(topic); } - // get the minimum partition + // Get the minimum partition return minimumPartition.toString(); } @@ -282,7 +354,7 @@ export class ClientKafka extends ClientProxy { this.options.send || {}, ); - return this.producer.send(message); + return this._producer.send(message); }) .catch(err => errorCallback(err)); @@ -299,7 +371,7 @@ export class ClientKafka extends ClientProxy { protected setConsumerAssignments(data: ConsumerGroupJoinEvent): void { const consumerAssignments: { [key: string]: number } = {}; - // only need to set the minimum + // Only need to set the minimum Object.keys(data.payload.memberAssignment).forEach(topic => { const memberPartitions = data.payload.memberAssignment[topic]; @@ -321,13 +393,10 @@ export class ClientKafka extends ClientProxy { (options && options.deserializer) || new KafkaResponseDeserializer(); } - public commitOffsets( - topicPartitions: TopicPartitionOffsetAndMetadata[], - ): Promise { - if (this.consumer) { - return this.consumer.commitOffsets(topicPartitions); - } else { - throw new Error('No consumer initialized'); - } + public on< + EventKey extends string | number | symbol = string | number | symbol, + EventCallback = any, + >(event: EventKey, callback: EventCallback) { + throw new Error('Method is not supported for Kafka client'); } } diff --git a/packages/microservices/client/client-mqtt.ts b/packages/microservices/client/client-mqtt.ts index c2e7c6cf394..8ed3a75103a 100644 --- a/packages/microservices/client/client-mqtt.ts +++ b/packages/microservices/client/client-mqtt.ts @@ -2,14 +2,8 @@ import { Logger } from '@nestjs/common/services/logger.service'; import { loadPackage } from '@nestjs/common/utils/load-package.util'; import { EmptyError, fromEvent, lastValueFrom, merge, Observable } from 'rxjs'; import { first, map, share, tap } from 'rxjs/operators'; -import { - CLOSE_EVENT, - ECONNREFUSED, - ERROR_EVENT, - MESSAGE_EVENT, - MQTT_DEFAULT_URL, -} from '../constants'; -import { MqttClient } from '../external/mqtt-client.interface'; +import { ECONNREFUSED, MQTT_DEFAULT_URL } from '../constants'; +import { MqttEvents, MqttEventsMap, MqttStatus } from '../events/mqtt.events'; import { MqttOptions, ReadPacket, WritePacket } from '../interfaces'; import { MqttRecord, @@ -20,19 +14,32 @@ import { ClientProxy } from './client-proxy'; let mqttPackage: any = {}; +// To enable type safety for MQTT. This cant be uncommented by default +// because it would require the user to install the mqtt package even if they dont use MQTT +// Otherwise, TypeScript would fail to compile the code. +// +type MqttClient = import('mqtt').MqttClient; +// type MqttClient = any; + /** * @publicApi */ -export class ClientMqtt extends ClientProxy { +export class ClientMqtt extends ClientProxy { protected readonly logger = new Logger(ClientProxy.name); protected readonly subscriptionsCount = new Map(); protected readonly url: string; protected mqttClient: MqttClient; - protected connection: Promise; + protected connectionPromise: Promise; + protected isInitialConnection = false; + protected isReconnecting = false; + protected pendingEventListeners: Array<{ + event: keyof MqttEvents; + callback: MqttEvents[keyof MqttEvents]; + }> = []; constructor(protected readonly options: MqttOptions['options']) { super(); - this.url = this.getOptionsProp(this.options, 'url') || MQTT_DEFAULT_URL; + this.url = this.getOptionsProp(this.options, 'url') ?? MQTT_DEFAULT_URL; mqttPackage = loadPackage('mqtt', ClientMqtt.name, () => require('mqtt')); @@ -51,38 +58,49 @@ export class ClientMqtt extends ClientProxy { public close() { this.mqttClient && this.mqttClient.end(); this.mqttClient = null; - this.connection = null; + this.connectionPromise = null; + this.pendingEventListeners = []; } public connect(): Promise { if (this.mqttClient) { - return this.connection; + return this.connectionPromise; } this.mqttClient = this.createClient(); - this.handleError(this.mqttClient); + this.registerErrorListener(this.mqttClient); + this.registerOfflineListener(this.mqttClient); + this.registerReconnectListener(this.mqttClient); + this.registerConnectListener(this.mqttClient); + this.registerDisconnectListener(this.mqttClient); + this.registerCloseListener(this.mqttClient); + + this.pendingEventListeners.forEach(({ event, callback }) => + this.mqttClient.on(event, callback), + ); + this.pendingEventListeners = []; const connect$ = this.connect$(this.mqttClient); - this.connection = lastValueFrom( - this.mergeCloseEvent(this.mqttClient, connect$).pipe( - tap(() => - this.mqttClient.on(MESSAGE_EVENT, this.createResponseCallback()), - ), - share(), - ), + this.connectionPromise = lastValueFrom( + this.mergeCloseEvent(this.mqttClient, connect$).pipe(share()), ).catch(err => { if (err instanceof EmptyError) { return; } throw err; }); - return this.connection; + return this.connectionPromise; } public mergeCloseEvent( instance: MqttClient, source$: Observable, ): Observable { - const close$ = fromEvent(instance, CLOSE_EVENT).pipe( + const close$ = fromEvent(instance, MqttEventsMap.CLOSE).pipe( + tap({ + next: () => { + this._status$.next(MqttStatus.CLOSED); + }, + }), map((err: any) => { throw err; }), @@ -94,13 +112,81 @@ export class ClientMqtt extends ClientProxy { return mqttPackage.connect(this.url, this.options as MqttOptions); } - public handleError(client: MqttClient) { - client.addListener( - ERROR_EVENT, + public registerErrorListener(client: MqttClient) { + client.on( + MqttEventsMap.ERROR, (err: any) => err.code !== ECONNREFUSED && this.logger.error(err), ); } + public registerOfflineListener(client: MqttClient) { + client.on(MqttEventsMap.OFFLINE, () => { + this.connectionPromise = Promise.reject( + 'Error: Connection lost. Trying to reconnect...', + ); + + // Prevent unhandled rejections + this.connectionPromise.catch(() => {}); + this.logger.error('MQTT broker went offline.'); + }); + } + + public registerReconnectListener(client: MqttClient) { + client.on(MqttEventsMap.RECONNECT, () => { + this.isReconnecting = true; + this._status$.next(MqttStatus.RECONNECTING); + + this.logger.log('MQTT connection lost. Trying to reconnect...'); + }); + } + + public registerDisconnectListener(client: MqttClient) { + client.on(MqttEventsMap.DISCONNECT, () => { + this._status$.next(MqttStatus.DISCONNECTED); + }); + } + + public registerCloseListener(client: MqttClient) { + client.on(MqttEventsMap.CLOSE, () => { + this._status$.next(MqttStatus.CLOSED); + }); + } + + public registerConnectListener(client: MqttClient) { + client.on(MqttEventsMap.CONNECT, () => { + this.isReconnecting = false; + this._status$.next(MqttStatus.CONNECTED); + + this.logger.log('Connected to MQTT broker'); + this.connectionPromise = Promise.resolve(); + + if (!this.isInitialConnection) { + this.isInitialConnection = true; + client.on('message', this.createResponseCallback()); + } + }); + } + + public on< + EventKey extends keyof MqttEvents = keyof MqttEvents, + EventCallback extends MqttEvents[EventKey] = MqttEvents[EventKey], + >(event: EventKey, callback: EventCallback) { + if (this.mqttClient) { + this.mqttClient.on(event, callback as any); + } else { + this.pendingEventListeners.push({ event, callback }); + } + } + + public unwrap(): T { + if (!this.mqttClient) { + throw new Error( + 'Not initialized. Please call the "connect" method first.', + ); + } + return this.mqttClient as T; + } + public createResponseCallback(): (channel: string, buffer: Buffer) => any { return async (channel: string, buffer: Buffer) => { const packet = JSON.parse(buffer.toString()); diff --git a/packages/microservices/client/client-nats.ts b/packages/microservices/client/client-nats.ts index 384fa4e8ed4..2a9696e8a4e 100644 --- a/packages/microservices/client/client-nats.ts +++ b/packages/microservices/client/client-nats.ts @@ -1,10 +1,11 @@ import { Logger } from '@nestjs/common/services/logger.service'; import { loadPackage } from '@nestjs/common/utils/load-package.util'; import { isObject } from '@nestjs/common/utils/shared.utils'; +import { EventEmitter } from 'stream'; import { NATS_DEFAULT_URL } from '../constants'; import { NatsResponseJSONDeserializer } from '../deserializers/nats-response-json.deserializer'; import { EmptyResponseException } from '../errors/empty-response.exception'; -import { Client, NatsMsg } from '../external/nats-client.interface'; +import { NatsEvents, NatsEventsMap, NatsStatus } from '../events/nats.events'; import { NatsOptions, PacketId, ReadPacket, WritePacket } from '../interfaces'; import { NatsRecord } from '../record-builders'; import { NatsRecordSerializer } from '../serializers/nats-record.serializer'; @@ -12,13 +13,27 @@ import { ClientProxy } from './client-proxy'; let natsPackage = {} as any; +// To enable type safety for Nats. This cant be uncommented by default +// because it would require the user to install the nats package even if they dont use Nats +// Otherwise, TypeScript would fail to compile the code. +// +// type Client = import('nats').NatsConnection; +// type NatsMsg = import('nats').Msg; + +type Client = any; +type NatsMsg = any; + /** * @publicApi */ -export class ClientNats extends ClientProxy { +export class ClientNats extends ClientProxy { protected readonly logger = new Logger(ClientNats.name); + protected natsClient: Client; - protected clientConnectionPromise: Promise; + protected connectionPromise: Promise; + protected statusEventEmitter = new EventEmitter<{ + [key in keyof NatsEvents]: Parameters; + }>(); constructor(protected readonly options: NatsOptions['options']) { super(); @@ -30,22 +45,29 @@ export class ClientNats extends ClientProxy { public async close() { await this.natsClient?.close(); + this.statusEventEmitter.removeAllListeners(); + this.natsClient = null; - this.clientConnectionPromise = null; + this.connectionPromise = null; } public async connect(): Promise { - if (this.clientConnectionPromise) { - return this.clientConnectionPromise; + if (this.connectionPromise) { + return this.connectionPromise; } - this.clientConnectionPromise = this.createClient(); - this.natsClient = await this.clientConnectionPromise; + this.connectionPromise = this.createClient(); + this.natsClient = await this.connectionPromise.catch(err => { + this.connectionPromise = null; + throw err; + }); + + this._status$.next(NatsStatus.CONNECTED); this.handleStatusUpdates(this.natsClient); return this.natsClient; } public createClient(): Promise { - const options: any = this.options || ({} as NatsOptions); + const options = this.options || ({} as NatsOptions); return natsPackage.connect({ servers: NATS_DEFAULT_URL, ...options, @@ -61,10 +83,44 @@ export class ClientNats extends ClientProxy { switch (status.type) { case 'error': + this.logger.error( + `NatsError: type: "${status.type}", data: "${data}".`, + ); + break; + case 'disconnect': + this.connectionPromise = Promise.reject( + 'Error: Connection lost. Trying to reconnect...', + ); + // Prevent unhandled promise rejection + this.connectionPromise.catch(() => {}); + this.logger.error( `NatsError: type: "${status.type}", data: "${data}".`, ); + + this._status$.next(NatsStatus.DISCONNECTED); + this.statusEventEmitter.emit( + NatsEventsMap.DISCONNECT, + status.data as string, + ); + break; + + case 'reconnecting': + this._status$.next(NatsStatus.RECONNECTING); + break; + + case 'reconnect': + this.connectionPromise = Promise.resolve(client); + this.logger.log( + `NatsStatus: type: "${status.type}", data: "${data}".`, + ); + + this._status$.next(NatsStatus.CONNECTED); + this.statusEventEmitter.emit( + NatsEventsMap.RECONNECT, + status.data as string, + ); break; case 'pingTimer': @@ -75,6 +131,13 @@ export class ClientNats extends ClientProxy { } break; + case 'update': + this.logger.log( + `NatsStatus: type: "${status.type}", data: "${data}".`, + ); + this.statusEventEmitter.emit(NatsEventsMap.UPDATE, status.data); + break; + default: this.logger.log( `NatsStatus: type: "${status.type}", data: "${data}".`, @@ -84,6 +147,22 @@ export class ClientNats extends ClientProxy { } } + public on< + EventKey extends keyof NatsEvents = keyof NatsEvents, + EventCallback extends NatsEvents[EventKey] = NatsEvents[EventKey], + >(event: EventKey, callback: EventCallback) { + this.statusEventEmitter.on(event, callback as any); + } + + public unwrap(): T { + if (!this.natsClient) { + throw new Error( + 'Not initialized. Please call the "connect" method first.', + ); + } + return this.natsClient as T; + } + public createSubscriptionHandler( packet: ReadPacket & PacketId, callback: (packet: WritePacket) => any, diff --git a/packages/microservices/client/client-proxy-factory.ts b/packages/microservices/client/client-proxy-factory.ts index a1920099058..9d17ab83c5d 100644 --- a/packages/microservices/client/client-proxy-factory.ts +++ b/packages/microservices/client/client-proxy-factory.ts @@ -1,10 +1,10 @@ import { Transport } from '../enums/transport.enum'; +import { ClientKafkaProxy } from '../interfaces'; import { ClientOptions, CustomClientOptions, TcpClientOptions, } from '../interfaces/client-metadata.interface'; -import { Closeable } from '../interfaces/closeable.interface'; import { GrpcOptions, KafkaOptions, @@ -23,7 +23,7 @@ import { ClientRMQ } from './client-rmq'; import { ClientTCP } from './client-tcp'; export interface IClientProxyFactory { - create(clientOptions: ClientOptions): ClientProxy & Closeable; + create(clientOptions: ClientOptions): ClientProxy; } /** @@ -33,33 +33,38 @@ export class ClientProxyFactory { public static create( clientOptions: { transport: Transport.GRPC } & ClientOptions, ): ClientGrpcProxy; - public static create(clientOptions: ClientOptions): ClientProxy & Closeable; public static create( - clientOptions: CustomClientOptions, - ): ClientProxy & Closeable; + clientOptions: { transport: Transport.KAFKA } & ClientOptions, + ): ClientKafkaProxy; + public static create(clientOptions: ClientOptions): ClientProxy; + public static create(clientOptions: CustomClientOptions): ClientProxy; public static create( clientOptions: ClientOptions | CustomClientOptions, - ): ClientProxy & Closeable { + ): ClientProxy | ClientGrpcProxy | ClientKafkaProxy { if (this.isCustomClientOptions(clientOptions)) { const { customClass, options } = clientOptions; return new customClass(options); } - const { transport, options } = clientOptions || {}; + const { transport, options = {} } = clientOptions ?? { options: {} }; switch (transport) { case Transport.REDIS: - return new ClientRedis(options as RedisOptions['options']); + return new ClientRedis( + options as RedisOptions['options'], + ) as ClientProxy; case Transport.NATS: - return new ClientNats(options as NatsOptions['options']); + return new ClientNats(options as NatsOptions['options']) as ClientProxy; case Transport.MQTT: - return new ClientMqtt(options as MqttOptions['options']); + return new ClientMqtt(options as MqttOptions['options']) as ClientProxy; case Transport.GRPC: return new ClientGrpcProxy(options as GrpcOptions['options']); case Transport.RMQ: - return new ClientRMQ(options as RmqOptions['options']); + return new ClientRMQ(options as RmqOptions['options']) as ClientProxy; case Transport.KAFKA: return new ClientKafka(options as KafkaOptions['options']); default: - return new ClientTCP(options as TcpClientOptions['options']); + return new ClientTCP( + options as TcpClientOptions['options'], + ) as ClientProxy; } } diff --git a/packages/microservices/client/client-proxy.ts b/packages/microservices/client/client-proxy.ts index 3950cf3dbf2..b937fe98329 100644 --- a/packages/microservices/client/client-proxy.ts +++ b/packages/microservices/client/client-proxy.ts @@ -1,17 +1,17 @@ import { randomStringGenerator } from '@nestjs/common/utils/random-string-generator.util'; import { isNil } from '@nestjs/common/utils/shared.utils'; import { + throwError as _throw, connectable, defer, fromEvent, merge, Observable, Observer, + ReplaySubject, Subject, - throwError as _throw, } from 'rxjs'; -import { map, mergeMap, take } from 'rxjs/operators'; -import { CONNECT_EVENT, ERROR_EVENT } from '../constants'; +import { distinctUntilChanged, map, mergeMap, take } from 'rxjs/operators'; import { IncomingResponseDeserializer } from '../deserializers/incoming-response.deserializer'; import { InvalidMessageException } from '../errors/invalid-message.exception'; import { @@ -32,14 +32,57 @@ import { ProducerSerializer } from '../interfaces/serializer.interface'; import { IdentitySerializer } from '../serializers/identity.serializer'; import { transformPatternToRoute } from '../utils'; -export abstract class ClientProxy { - public abstract connect(): Promise; - public abstract close(): any; - +/** + * @publicApi + */ +export abstract class ClientProxy< + EventsMap extends Record = Record, + Status extends string = string, +> { protected routingMap = new Map(); protected serializer: ProducerSerializer; protected deserializer: ProducerDeserializer; + protected _status$ = new ReplaySubject(1); + + /** + * Returns an observable that emits status changes. + */ + public get status(): Observable { + return this._status$.asObservable().pipe(distinctUntilChanged()); + } + + /** + * Establishes the connection to the underlying server/broker. + */ + public abstract connect(): Promise; + /** + * Closes the underlying connection to the server/broker. + */ + public abstract close(): any; + /** + * Registers an event listener for the given event. + * @param event Event name + * @param callback Callback to be executed when the event is emitted + */ + public on< + EventKey extends keyof EventsMap = keyof EventsMap, + EventCallback extends EventsMap[EventKey] = EventsMap[EventKey], + >(event: EventKey, callback: EventCallback) { + throw new Error('Method not implemented.'); + } + /** + * Returns an instance of the underlying server/broker instance, + * or a group of servers if there are more than one. + */ + public abstract unwrap(): T; + /** + * Send a message to the server/broker. + * Used for message-driven communication style between microservices. + * @param pattern Pattern to identify the message + * @param data Data to be sent + * @returns Observable with the result + */ public send( pattern: any, data: TInput, @@ -58,6 +101,13 @@ export abstract class ClientProxy { ); } + /** + * Emits an event to the server/broker. + * Used for event-driven communication style between microservices. + * @param pattern Pattern to identify the event + * @param data Data to be sent + * @returns Observable that completes when the event is successfully emitted + */ public emit( pattern: any, data: TInput, @@ -114,8 +164,8 @@ export abstract class ClientProxy { protected connect$( instance: any, - errorEvent = ERROR_EVENT, - connectEvent = CONNECT_EVENT, + errorEvent = 'error', + connectEvent = 'connect', ): Observable { const error$ = fromEvent(instance, errorEvent).pipe( map((err: any) => { diff --git a/packages/microservices/client/client-redis.ts b/packages/microservices/client/client-redis.ts index 9148a450ff1..00542d05120 100644 --- a/packages/microservices/client/client-redis.ts +++ b/packages/microservices/client/client-redis.ts @@ -1,14 +1,19 @@ import { Logger } from '@nestjs/common/services/logger.service'; import { loadPackage } from '@nestjs/common/utils/load-package.util'; +import { REDIS_DEFAULT_HOST, REDIS_DEFAULT_PORT } from '../constants'; import { - ERROR_EVENT, - MESSAGE_EVENT, - REDIS_DEFAULT_HOST, - REDIS_DEFAULT_PORT, -} from '../constants'; + RedisEvents, + RedisEventsMap, + RedisStatus, +} from '../events/redis.events'; import { ReadPacket, RedisOptions, WritePacket } from '../interfaces'; import { ClientProxy } from './client-proxy'; +// To enable type safety for Redis. This cant be uncommented by default +// because it would require the user to install the ioredis package even if they dont use Redis +// Otherwise, TypeScript would fail to compile the code. +// +// type Redis = import('ioredis').Redis; type Redis = any; let redisPackage = {} as any; @@ -16,13 +21,18 @@ let redisPackage = {} as any; /** * @publicApi */ -export class ClientRedis extends ClientProxy { +export class ClientRedis extends ClientProxy { protected readonly logger = new Logger(ClientProxy.name); protected readonly subscriptionsCount = new Map(); protected pubClient: Redis; protected subClient: Redis; - protected connection: Promise; - protected isExplicitlyTerminated = false; + protected connectionPromise: Promise; + protected isManuallyClosed = false; + protected wasInitialConnectionSuccessful = false; + protected pendingEventListeners: Array<{ + event: keyof RedisEvents; + callback: RedisEvents[keyof RedisEvents]; + }> = []; constructor(protected readonly options: RedisOptions['options']) { super(); @@ -47,26 +57,37 @@ export class ClientRedis extends ClientProxy { this.pubClient && this.pubClient.quit(); this.subClient && this.subClient.quit(); this.pubClient = this.subClient = null; - this.isExplicitlyTerminated = true; + this.isManuallyClosed = true; + this.pendingEventListeners = []; } public async connect(): Promise { if (this.pubClient && this.subClient) { - return this.connection; + return this.connectionPromise; } this.pubClient = this.createClient(); this.subClient = this.createClient(); - this.handleError(this.pubClient); - this.handleError(this.subClient); - this.connection = Promise.all([ + [this.pubClient, this.subClient].forEach((client, index) => { + const type = index === 0 ? 'pub' : 'sub'; + this.registerErrorListener(client); + this.registerReconnectListener(client); + this.registerReadyListener(client); + this.registerEndListener(client); + this.pendingEventListeners.forEach(({ event, callback }) => + client.on(event, (...args: [any]) => callback(type, ...args)), + ); + }); + this.pendingEventListeners = []; + + this.connectionPromise = Promise.all([ this.subClient.connect(), this.pubClient.connect(), ]); - await this.connection; + await this.connectionPromise; - this.subClient.on(MESSAGE_EVENT, this.createResponseCallback()); - return this.connection; + this.subClient.on('message', this.createResponseCallback()); + return this.connectionPromise; } public createClient(): Redis { @@ -78,8 +99,76 @@ export class ClientRedis extends ClientProxy { }); } - public handleError(client: Redis) { - client.addListener(ERROR_EVENT, (err: any) => this.logger.error(err)); + public registerErrorListener(client: Redis) { + client.addListener(RedisEventsMap.ERROR, (err: any) => + this.logger.error(err), + ); + } + + public registerReconnectListener(client: { + on: (event: string, fn: () => void) => void; + }) { + client.on(RedisEventsMap.RECONNECTING, () => { + if (this.isManuallyClosed) { + return; + } + + this.connectionPromise = Promise.reject( + 'Error: Connection lost. Trying to reconnect...', + ); + + // Prevent unhandled rejections + this.connectionPromise.catch(() => {}); + + this._status$.next(RedisStatus.RECONNECTING); + + if (this.wasInitialConnectionSuccessful) { + this.logger.log('Reconnecting to Redis...'); + } + }); + } + + public registerReadyListener(client: { + on: (event: string, fn: () => void) => void; + }) { + client.on(RedisEventsMap.READY, () => { + this.connectionPromise = Promise.resolve(); + this._status$.next(RedisStatus.CONNECTED); + + this.logger.log('Connected to Redis. Subscribing to channels...'); + + if (!this.wasInitialConnectionSuccessful) { + this.wasInitialConnectionSuccessful = true; + this.subClient.on('message', this.createResponseCallback()); + } + }); + } + + public registerEndListener(client: { + on: (event: string, fn: () => void) => void; + }) { + client.on('end', () => { + if (this.isManuallyClosed) { + return; + } + this._status$.next(RedisStatus.DISCONNECTED); + + if (this.getOptionsProp(this.options, 'retryAttempts') === undefined) { + // When retryAttempts is not specified, the connection will not be re-established + this.logger.error('Disconnected from Redis.'); + + // Clean up client instances and just recreate them when connect is called + this.pubClient = this.subClient = null; + } else { + this.logger.error('Disconnected from Redis.'); + this.connectionPromise = Promise.reject( + 'Error: Connection lost. Trying to reconnect...', + ); + + // Prevent unhandled rejections + this.connectionPromise.catch(() => {}); + } + }); } public getClientOptions(): Partial { @@ -91,18 +180,42 @@ export class ClientRedis extends ClientProxy { }; } + public on< + EventKey extends keyof RedisEvents = keyof RedisEvents, + EventCallback extends RedisEvents[EventKey] = RedisEvents[EventKey], + >(event: EventKey, callback: EventCallback) { + if (this.subClient && this.pubClient) { + this.subClient.on(event, (...args: [any]) => callback('sub', ...args)); + this.pubClient.on(event, (...args: [any]) => callback('pub', ...args)); + } else { + this.pendingEventListeners.push({ event, callback }); + } + } + + public unwrap(): T { + if (!this.pubClient || !this.subClient) { + throw new Error( + 'Not initialized. Please call the "connect" method first.', + ); + } + return [this.pubClient, this.subClient] as T; + } + public createRetryStrategy(times: number): undefined | number { - if (this.isExplicitlyTerminated) { + if (this.isManuallyClosed) { return undefined; } - if ( - !this.getOptionsProp(this.options, 'retryAttempts') || - times > this.getOptionsProp(this.options, 'retryAttempts') - ) { + if (!this.getOptionsProp(this.options, 'retryAttempts')) { + this.logger.error( + 'Redis connection closed and retry attempts not specified', + ); + return; + } + if (times > this.getOptionsProp(this.options, 'retryAttempts')) { this.logger.error('Retry time exhausted'); return; } - return this.getOptionsProp(this.options, 'retryDelay') || 0; + return this.getOptionsProp(this.options, 'retryDelay') ?? 5000; } public createResponseCallback(): ( diff --git a/packages/microservices/client/client-rmq.ts b/packages/microservices/client/client-rmq.ts index 5c8824f57af..4e0b0401039 100644 --- a/packages/microservices/client/client-rmq.ts +++ b/packages/microservices/client/client-rmq.ts @@ -13,11 +13,7 @@ import { } from 'rxjs'; import { first, map, retryWhen, scan, skip, switchMap } from 'rxjs/operators'; import { - CONNECT_EVENT, - CONNECT_FAILED_EVENT, - DISCONNECT_EVENT, DISCONNECTED_RMQ_MESSAGE, - ERROR_EVENT, RQM_DEFAULT_IS_GLOBAL_PREFETCH_COUNT, RQM_DEFAULT_NO_ASSERT, RQM_DEFAULT_NOACK, @@ -27,47 +23,53 @@ import { RQM_DEFAULT_QUEUE_OPTIONS, RQM_DEFAULT_URL, } from '../constants'; -import { RmqUrl } from '../external/rmq-url.interface'; +import { RmqEvents, RmqEventsMap, RmqStatus } from '../events/rmq.events'; import { ReadPacket, RmqOptions, WritePacket } from '../interfaces'; import { RmqRecord } from '../record-builders'; import { RmqRecordSerializer } from '../serializers/rmq-record.serializer'; import { ClientProxy } from './client-proxy'; -// import type { -// AmqpConnectionManager, -// ChannelWrapper, -// } from 'amqp-connection-manager'; -// import type { Channel, ConsumeMessage } from 'amqplib'; +// To enable type safety for RMQ. This cant be uncommented by default +// because it would require the user to install the amqplib package even if they dont use RabbitMQ +// Otherwise, TypeScript would fail to compile the code. +// +// type AmqpConnectionManager = +// import('amqp-connection-manager').AmqpConnectionManager; +// type ChannelWrapper = import('amqp-connection-manager').ChannelWrapper; +// type Channel = import('amqplib').Channel; +// type ConsumeMessage = import('amqplib').ConsumeMessage; type Channel = any; type ChannelWrapper = any; type ConsumeMessage = any; type AmqpConnectionManager = any; -let rmqPackage: any = {}; +let rmqPackage = {} as any; // typeof import('amqp-connection-manager'); const REPLY_QUEUE = 'amq.rabbitmq.reply-to'; /** * @publicApi */ -export class ClientRMQ extends ClientProxy { +export class ClientRMQ extends ClientProxy { protected readonly logger = new Logger(ClientProxy.name); protected connection$: ReplaySubject; - protected connection: Promise; + protected connectionPromise: Promise; protected client: AmqpConnectionManager = null; protected channel: ChannelWrapper = null; - protected urls: string[] | RmqUrl[]; + protected pendingEventListeners: Array<{ + event: keyof RmqEvents; + callback: RmqEvents[keyof RmqEvents]; + }> = []; + protected isInitialConnect = true; + protected responseEmitter: EventEmitter; protected queue: string; protected queueOptions: Record; - protected responseEmitter: EventEmitter; protected replyQueue: string; - protected persistent: boolean; protected noAssert: boolean; constructor(protected readonly options: RmqOptions['options']) { super(); - this.urls = this.getOptionsProp(this.options, 'urls') || [RQM_DEFAULT_URL]; this.queue = this.getOptionsProp(this.options, 'queue') || RQM_DEFAULT_QUEUE; this.queueOptions = @@ -75,8 +77,6 @@ export class ClientRMQ extends ClientProxy { RQM_DEFAULT_QUEUE_OPTIONS; this.replyQueue = this.getOptionsProp(this.options, 'replyQueue') || REPLY_QUEUE; - this.persistent = - this.getOptionsProp(this.options, 'persistent') || RQM_DEFAULT_PERSISTENT; this.noAssert = this.getOptionsProp(this.options, 'noAssert') ?? this.queueOptions.noAssert ?? @@ -96,15 +96,22 @@ export class ClientRMQ extends ClientProxy { this.client && this.client.close(); this.channel = null; this.client = null; + this.pendingEventListeners = []; } public connect(): Promise { if (this.client) { - return this.convertConnectionToPromise(); + return this.connectionPromise; } this.client = this.createClient(); - this.handleError(this.client); - this.handleDisconnectError(this.client); + + this.registerErrorListener(this.client); + this.registerDisconnectListener(this.client); + this.registerConnectListener(this.client); + this.pendingEventListeners.forEach(({ event, callback }) => + this.client.on(event, callback), + ); + this.pendingEventListeners = []; this.responseEmitter = new EventEmitter(); this.responseEmitter.setMaxListeners(0); @@ -115,13 +122,16 @@ export class ClientRMQ extends ClientProxy { connect$, ).pipe(switchMap(() => this.createChannel())); - const withReconnect$ = fromEvent(this.client, CONNECT_EVENT).pipe(skip(1)); + const withReconnect$ = fromEvent(this.client, RmqEventsMap.CONNECT).pipe( + skip(1), + ); const source$ = merge(withDisconnect$, withReconnect$); this.connection$ = new ReplaySubject(1); source$.subscribe(this.connection$); + this.connectionPromise = this.convertConnectionToPromise(); - return this.convertConnectionToPromise(); + return this.connectionPromise; } public createChannel(): Promise { @@ -135,9 +145,8 @@ export class ClientRMQ extends ClientProxy { public createClient(): AmqpConnectionManager { const socketOptions = this.getOptionsProp(this.options, 'socketOptions'); - return rmqPackage.connect(this.urls, { - connectionOptions: socketOptions?.connectionOptions, - }); + const urls = this.getOptionsProp(this.options, 'urls') || [RQM_DEFAULT_URL]; + return rmqPackage.connect(urls, socketOptions); } public mergeDisconnectEvent( @@ -150,10 +159,11 @@ export class ClientRMQ extends ClientProxy { throw err; }), ); - const disconnect$ = eventToError(DISCONNECT_EVENT); + const disconnect$ = eventToError(RmqEventsMap.DISCONNECT); const urls = this.getOptionsProp(this.options, 'urls', []); - const connectFailed$ = eventToError(CONNECT_FAILED_EVENT).pipe( + const connectFailedEventKey = 'connectFailed'; + const connectFailed$ = eventToError(connectFailedEventKey).pipe( retryWhen(e => e.pipe( scan((errorCount, error: any) => { @@ -209,31 +219,81 @@ export class ClientRMQ extends ClientProxy { ); } - public handleError(client: AmqpConnectionManager): void { - client.addListener(ERROR_EVENT, (err: any) => this.logger.error(err)); + public registerErrorListener(client: AmqpConnectionManager): void { + client.addListener(RmqEventsMap.ERROR, (err: any) => + this.logger.error(err), + ); } - public handleDisconnectError(client: AmqpConnectionManager): void { - client.addListener(DISCONNECT_EVENT, (err: any) => { + public registerDisconnectListener(client: AmqpConnectionManager): void { + client.addListener(RmqEventsMap.DISCONNECT, (err: any) => { + this._status$.next(RmqStatus.DISCONNECTED); + + if (!this.isInitialConnect) { + this.connectionPromise = Promise.reject( + 'Error: Connection lost. Trying to reconnect...', + ); + + // Prevent unhandled promise rejection + this.connectionPromise.catch(() => {}); + } + this.logger.error(DISCONNECTED_RMQ_MESSAGE); this.logger.error(err); }); } + private registerConnectListener(client: AmqpConnectionManager): void { + client.addListener(RmqEventsMap.CONNECT, () => { + this._status$.next(RmqStatus.CONNECTED); + this.logger.log('Successfully connected to RMQ broker'); + + if (this.isInitialConnect) { + this.isInitialConnect = false; + + if (!this.channel) { + this.connectionPromise = this.createChannel(); + } + } else { + this.connectionPromise = Promise.resolve(); + } + }); + } + + public on< + EventKey extends keyof RmqEvents = keyof RmqEvents, + EventCallback extends RmqEvents[EventKey] = RmqEvents[EventKey], + >(event: EventKey, callback: EventCallback) { + if (this.client) { + this.client.addListener(event, callback); + } else { + this.pendingEventListeners.push({ event, callback }); + } + } + + public unwrap(): T { + if (!this.client) { + throw new Error( + 'Not initialized. Please call the "connect" method first.', + ); + } + return this.client as T; + } + public async handleMessage( packet: unknown, callback: (packet: WritePacket) => any, - ); + ): Promise; public async handleMessage( packet: unknown, options: Record, callback: (packet: WritePacket) => any, - ); + ): Promise; public async handleMessage( packet: unknown, options: Record | ((packet: WritePacket) => any), callback?: (packet: WritePacket) => any, - ) { + ): Promise { if (isFunction(options)) { callback = options as (packet: WritePacket) => any; options = undefined; @@ -289,7 +349,11 @@ export class ClientRMQ extends ClientProxy { Buffer.from(JSON.stringify(serializedPacket)), { replyTo: this.replyQueue, - persistent: this.persistent, + persistent: this.getOptionsProp( + this.options, + 'persistent', + RQM_DEFAULT_PERSISTENT, + ), ...options, headers: this.mergeHeaders(options?.headers), correlationId, @@ -314,7 +378,11 @@ export class ClientRMQ extends ClientProxy { this.queue, Buffer.from(JSON.stringify(serializedPacket)), { - persistent: this.persistent, + persistent: this.getOptionsProp( + this.options, + 'persistent', + RQM_DEFAULT_PERSISTENT, + ), ...options, headers: this.mergeHeaders(options?.headers), }, diff --git a/packages/microservices/client/client-tcp.ts b/packages/microservices/client/client-tcp.ts index e0b1ddb91cb..c410d03d65d 100644 --- a/packages/microservices/client/client-tcp.ts +++ b/packages/microservices/client/client-tcp.ts @@ -2,17 +2,10 @@ import { Logger, Type } from '@nestjs/common'; import * as net from 'net'; import { EmptyError, lastValueFrom } from 'rxjs'; import { share, tap } from 'rxjs/operators'; -import { ConnectionOptions } from 'tls'; -import { - CLOSE_EVENT, - ECONNREFUSED, - ERROR_EVENT, - MESSAGE_EVENT, - TCP_DEFAULT_HOST, - TCP_DEFAULT_PORT, -} from '../constants'; +import { ConnectionOptions, connect as tlsConnect, TLSSocket } from 'tls'; +import { ECONNREFUSED, TCP_DEFAULT_HOST, TCP_DEFAULT_PORT } from '../constants'; +import { TcpEvents, TcpEventsMap, TcpStatus } from '../events/tcp.events'; import { JsonSocket, TcpSocket } from '../helpers'; -import { connect as tlsConnect, TLSSocket } from 'tls'; import { PacketId, ReadPacket, WritePacket } from '../interfaces'; import { TcpClientOptions } from '../interfaces/client-metadata.interface'; import { ClientProxy } from './client-proxy'; @@ -20,15 +13,18 @@ import { ClientProxy } from './client-proxy'; /** * @publicApi */ -export class ClientTCP extends ClientProxy { - protected connection: Promise; - private readonly logger = new Logger(ClientTCP.name); - private readonly port: number; - private readonly host: string; - private readonly socketClass: Type; - private isConnected = false; - private socket: TcpSocket; - public tlsOptions?: ConnectionOptions; +export class ClientTCP extends ClientProxy { + protected readonly logger = new Logger(ClientTCP.name); + protected readonly port: number; + protected readonly host: string; + protected readonly socketClass: Type; + protected readonly tlsOptions?: ConnectionOptions; + protected socket: TcpSocket; + protected connectionPromise: Promise; + protected pendingEventListeners: Array<{ + event: keyof TcpEvents; + callback: TcpEvents[keyof TcpEvents]; + }> = []; constructor(options: TcpClientOptions['options']) { super(); @@ -43,16 +39,22 @@ export class ClientTCP extends ClientProxy { } public connect(): Promise { - if (this.connection) { - return this.connection; + if (this.connectionPromise) { + return this.connectionPromise; } this.socket = this.createSocket(); - this.bindEvents(this.socket); + this.registerConnectListener(this.socket); + this.registerCloseListener(this.socket); + this.registerErrorListener(this.socket); + + this.pendingEventListeners.forEach(({ event, callback }) => + this.socket.on(event, callback as any), + ); + this.pendingEventListeners = []; const source$ = this.connect$(this.socket.netSocket).pipe( tap(() => { - this.isConnected = true; - this.socket.on(MESSAGE_EVENT, (buffer: WritePacket & PacketId) => + this.socket.on('message', (buffer: WritePacket & PacketId) => this.handleResponse(buffer), ); }), @@ -63,14 +65,14 @@ export class ClientTCP extends ClientProxy { if (!this.tlsOptions) { this.socket.connect(this.port, this.host); } - this.connection = lastValueFrom(source$).catch(err => { + this.connectionPromise = lastValueFrom(source$).catch(err => { if (err instanceof EmptyError) { return; } throw err; }); - return this.connection; + return this.connectionPromise; } public async handleResponse(buffer: unknown): Promise { @@ -114,14 +116,30 @@ export class ClientTCP extends ClientProxy { public close() { this.socket && this.socket.end(); this.handleClose(); + this.pendingEventListeners = []; } - public bindEvents(socket: TcpSocket) { - socket.on( - ERROR_EVENT, - (err: any) => err.code !== ECONNREFUSED && this.handleError(err), - ); - socket.on(CLOSE_EVENT, () => this.handleClose()); + public registerConnectListener(socket: TcpSocket) { + socket.on(TcpEventsMap.CONNECT, () => { + this._status$.next(TcpStatus.CONNECTED); + }); + } + + public registerErrorListener(socket: TcpSocket) { + socket.on(TcpEventsMap.ERROR, err => { + if (err.code !== ECONNREFUSED) { + this.handleError(err); + } else { + this._status$.next(TcpStatus.DISCONNECTED); + } + }); + } + + public registerCloseListener(socket: TcpSocket) { + socket.on(TcpEventsMap.CLOSE, () => { + this._status$.next(TcpStatus.DISCONNECTED); + this.handleClose(); + }); } public handleError(err: any) { @@ -129,9 +147,8 @@ export class ClientTCP extends ClientProxy { } public handleClose() { - this.isConnected = false; this.socket = null; - this.connection = undefined; + this.connectionPromise = undefined; if (this.routingMap.size > 0) { const err = new Error('Connection closed'); @@ -142,6 +159,26 @@ export class ClientTCP extends ClientProxy { } } + public on< + EventKey extends keyof TcpEvents = keyof TcpEvents, + EventCallback extends TcpEvents[EventKey] = TcpEvents[EventKey], + >(event: EventKey, callback: EventCallback) { + if (this.socket) { + this.socket.on(event, callback as any); + } else { + this.pendingEventListeners.push({ event, callback }); + } + } + + public unwrap(): T { + if (!this.socket) { + throw new Error( + 'Not initialized. Please call the "connect" method first.', + ); + } + return this.socket.netSocket as T; + } + protected publish( partialPacket: ReadPacket, callback: (packet: WritePacket) => any, diff --git a/packages/microservices/client/constants.ts b/packages/microservices/client/constants.ts deleted file mode 100644 index 4975f18d89c..00000000000 --- a/packages/microservices/client/constants.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const GRPC_CANCELLED = 'Cancelled'; -export const RABBITMQ_REPLY_QUEUE = 'amq.rabbitmq.reply-to'; diff --git a/packages/microservices/constants.ts b/packages/microservices/constants.ts index c358776dd20..502933289eb 100644 --- a/packages/microservices/constants.ts +++ b/packages/microservices/constants.ts @@ -2,25 +2,29 @@ import { ROUTE_ARGS_METADATA } from '@nestjs/common/constants'; export const TCP_DEFAULT_PORT = 3000; export const TCP_DEFAULT_HOST = 'localhost'; - export const REDIS_DEFAULT_PORT = 6379; export const REDIS_DEFAULT_HOST = 'localhost'; - export const NATS_DEFAULT_URL = 'nats://localhost:4222'; export const MQTT_DEFAULT_URL = 'mqtt://localhost:1883'; export const GRPC_DEFAULT_URL = 'localhost:5000'; export const RQM_DEFAULT_URL = 'amqp://localhost'; export const KAFKA_DEFAULT_BROKER = 'localhost:9092'; +export const KAFKA_DEFAULT_CLIENT = 'nestjs-consumer'; +export const KAFKA_DEFAULT_GROUP = 'nestjs-group'; +export const MQTT_SEPARATOR = '/'; +export const MQTT_WILDCARD_SINGLE = '+'; +export const MQTT_WILDCARD_ALL = '#'; +export const RQM_DEFAULT_QUEUE = 'default'; +export const RQM_DEFAULT_PREFETCH_COUNT = 0; +export const RQM_DEFAULT_IS_GLOBAL_PREFETCH_COUNT = false; +export const RQM_DEFAULT_QUEUE_OPTIONS = {}; +export const RQM_DEFAULT_NOACK = true; +export const RQM_DEFAULT_PERSISTENT = false; +export const RQM_DEFAULT_NO_ASSERT = false; -export const CONNECT_EVENT = 'connect'; -export const DISCONNECT_EVENT = 'disconnect'; -export const CONNECT_FAILED_EVENT = 'connectFailed'; -export const MESSAGE_EVENT = 'message'; -export const DATA_EVENT = 'data'; -export const ERROR_EVENT = 'error'; -export const CLOSE_EVENT = 'close'; -export const SUBSCRIBE = 'subscribe'; -export const CANCEL_EVENT = 'cancelled'; +export const ECONNREFUSED = 'ECONNREFUSED'; +export const CONN_ERR = 'CONN_ERR'; +export const EADDRINUSE = 'EADDRINUSE'; export const PATTERN_METADATA = 'microservices:pattern'; export const PATTERN_EXTRAS_METADATA = 'microservices:pattern_extras'; @@ -29,17 +33,9 @@ export const CLIENT_CONFIGURATION_METADATA = 'microservices:client'; export const PATTERN_HANDLER_METADATA = 'microservices:handler_type'; export const CLIENT_METADATA = 'microservices:is_client_instance'; export const PARAM_ARGS_METADATA = ROUTE_ARGS_METADATA; - export const REQUEST_PATTERN_METADATA = 'microservices:request_pattern'; export const REPLY_PATTERN_METADATA = 'microservices:reply_pattern'; -export const RQM_DEFAULT_QUEUE = 'default'; -export const RQM_DEFAULT_PREFETCH_COUNT = 0; -export const RQM_DEFAULT_IS_GLOBAL_PREFETCH_COUNT = false; -export const RQM_DEFAULT_QUEUE_OPTIONS = {}; -export const RQM_DEFAULT_NOACK = true; -export const RQM_DEFAULT_PERSISTENT = false; -export const RQM_DEFAULT_NO_ASSERT = false; export const RQM_NO_EVENT_HANDLER = ( text: TemplateStringsArray, pattern: string, @@ -55,19 +51,6 @@ export const GRPC_DEFAULT_PROTO_LOADER = '@grpc/proto-loader'; export const NO_EVENT_HANDLER = (text: TemplateStringsArray, pattern: string) => `There is no matching event handler defined in the remote service. Event pattern: ${pattern}`; export const NO_MESSAGE_HANDLER = `There is no matching message handler defined in the remote service.`; - export const DISCONNECTED_RMQ_MESSAGE = `Disconnected from RMQ. Trying to reconnect.`; - -export const KAFKA_DEFAULT_CLIENT = 'nestjs-consumer'; -export const KAFKA_DEFAULT_GROUP = 'nestjs-group'; - -export const MQTT_SEPARATOR = '/'; -export const MQTT_WILDCARD_SINGLE = '+'; -export const MQTT_WILDCARD_ALL = '#'; - -export const ECONNREFUSED = 'ECONNREFUSED'; -export const CONN_ERR = 'CONN_ERR'; -export const EADDRINUSE = 'EADDRINUSE'; - export const CONNECTION_FAILED_MESSAGE = 'Connection to transport failed. Trying to reconnect...'; diff --git a/packages/microservices/container.ts b/packages/microservices/container.ts index 8ab9cb325f2..87812833d94 100644 --- a/packages/microservices/container.ts +++ b/packages/microservices/container.ts @@ -1,16 +1,13 @@ import { ClientProxy } from './client/client-proxy'; -import { Closeable } from './interfaces/closeable.interface'; - -export type CloseableClient = Closeable & ClientProxy; export class ClientsContainer { - private clients: CloseableClient[] = []; + private clients: ClientProxy[] = []; - public getAllClients(): CloseableClient[] { + public getAllClients(): ClientProxy[] { return this.clients; } - public addClient(client: CloseableClient) { + public addClient(client: ClientProxy) { this.clients.push(client); } diff --git a/packages/microservices/events/index.ts b/packages/microservices/events/index.ts new file mode 100644 index 00000000000..df8d4959f07 --- /dev/null +++ b/packages/microservices/events/index.ts @@ -0,0 +1,6 @@ +export { KafkaStatus } from './kafka.events'; +export { MqttEvents, MqttStatus } from './mqtt.events'; +export { NatsEvents, NatsStatus } from './nats.events'; +export { RedisEvents, RedisStatus } from './redis.events'; +export { RmqEvents, RmqStatus } from './rmq.events'; +export { TcpEvents, TcpStatus } from './tcp.events'; diff --git a/packages/microservices/events/kafka.events.ts b/packages/microservices/events/kafka.events.ts new file mode 100644 index 00000000000..614964f8752 --- /dev/null +++ b/packages/microservices/events/kafka.events.ts @@ -0,0 +1,7 @@ +export const enum KafkaStatus { + DISCONNECTED = 'disconnected', + CONNECTED = 'connected', + CRASHED = 'crashed', + STOPPED = 'stopped', + REBALANCING = 'rebalancing', +} diff --git a/packages/microservices/events/mqtt.events.ts b/packages/microservices/events/mqtt.events.ts new file mode 100644 index 00000000000..f1d935e3fb4 --- /dev/null +++ b/packages/microservices/events/mqtt.events.ts @@ -0,0 +1,39 @@ +type VoidCallback = () => void; +type OnPacketCallback = (packet: any) => void; +type OnErrorCallback = (error: Error) => void; + +export const enum MqttStatus { + DISCONNECTED = 'disconnected', + RECONNECTING = 'reconnecting', + CONNECTED = 'connected', + CLOSED = 'closed', +} + +export const enum MqttEventsMap { + CONNECT = 'connect', + RECONNECT = 'reconnect', + DISCONNECT = 'disconnect', + CLOSE = 'close', + OFFLINE = 'offline', + END = 'end', + ERROR = 'error', + PACKETRECEIVE = 'packetreceive', + PACKETSEND = 'packetsend', +} + +/** + * MQTT events map for the MQTT client. + * Key is the event name and value is the corresponding callback function. + * @publicApi + */ +export type MqttEvents = { + connect: OnPacketCallback; + reconnect: VoidCallback; + disconnect: OnPacketCallback; + close: VoidCallback; + offline: VoidCallback; + end: VoidCallback; + error: OnErrorCallback; + packetreceive: OnPacketCallback; + packetsend: OnPacketCallback; +}; diff --git a/packages/microservices/events/nats.events.ts b/packages/microservices/events/nats.events.ts new file mode 100644 index 00000000000..30cc734e8bb --- /dev/null +++ b/packages/microservices/events/nats.events.ts @@ -0,0 +1,29 @@ +type DefaultCallback = (data?: string | number) => any; + +export type ServersChangedEvent = { + added: string[]; + deleted: string[]; +}; + +export const enum NatsStatus { + DISCONNECTED = 'disconnected', + RECONNECTING = 'reconnecting', + CONNECTED = 'connected', +} + +export const enum NatsEventsMap { + DISCONNECT = 'disconnect', + RECONNECT = 'reconnect', + UPDATE = 'update', +} + +/** + * Nats events map for the Nats client. + * Key is the event name and value is the corresponding callback function. + * @publicApi + */ +export type NatsEvents = { + disconnect: DefaultCallback; + reconnect: DefaultCallback; + update: (data?: string | number | ServersChangedEvent) => any; +}; diff --git a/packages/microservices/events/redis.events.ts b/packages/microservices/events/redis.events.ts new file mode 100644 index 00000000000..c89b46955ab --- /dev/null +++ b/packages/microservices/events/redis.events.ts @@ -0,0 +1,34 @@ +type VoidCallback = (client: 'pub' | 'sub') => void; +type OnErrorCallback = (client: 'pub' | 'sub', error: Error) => void; +type OnWarningCallback = (client: 'pub' | 'sub', warning: any) => void; + +export const enum RedisStatus { + DISCONNECTED = 'disconnected', + RECONNECTING = 'reconnecting', + CONNECTED = 'connected', +} + +export const enum RedisEventsMap { + CONNECT = 'connect', + READY = 'ready', + ERROR = 'error', + CLOSE = 'close', + RECONNECTING = 'reconnecting', + END = 'end', + WARNING = 'warning', +} + +/** + * Redis events map for the Redis client. + * Key is the event name and value is the corresponding callback function. + * @publicApi + */ +export type RedisEvents = { + connect: VoidCallback; + ready: VoidCallback; + error: OnErrorCallback; + close: VoidCallback; + reconnecting: VoidCallback; + end: VoidCallback; + warning: OnWarningCallback; +}; diff --git a/packages/microservices/events/rmq.events.ts b/packages/microservices/events/rmq.events.ts new file mode 100644 index 00000000000..aba888901a6 --- /dev/null +++ b/packages/microservices/events/rmq.events.ts @@ -0,0 +1,24 @@ +type VoidCallback = () => void; +type OnErrorCallback = (error: Error) => void; + +export const enum RmqStatus { + DISCONNECTED = 'disconnected', + CONNECTED = 'connected', +} + +export const enum RmqEventsMap { + ERROR = 'error', + DISCONNECT = 'disconnect', + CONNECT = 'connect', +} + +/** + * RabbitMQ events map for the ampqlip client. + * Key is the event name and value is the corresponding callback function. + * @publicApi + */ +export type RmqEvents = { + error: OnErrorCallback; + disconnect: VoidCallback; + connect: VoidCallback; +}; diff --git a/packages/microservices/events/tcp.events.ts b/packages/microservices/events/tcp.events.ts new file mode 100644 index 00000000000..3ba328855a2 --- /dev/null +++ b/packages/microservices/events/tcp.events.ts @@ -0,0 +1,39 @@ +type VoidCallback = () => void; +type OnErrorCallback = (error: Error) => void; +type OnLookupCallback = ( + err: Error, + address: string, + family: string, + host: string, +) => void; + +export const enum TcpStatus { + DISCONNECTED = 'disconnected', + CONNECTED = 'connected', +} + +export const enum TcpEventsMap { + ERROR = 'error', + CONNECT = 'connect', + END = 'end', + CLOSE = 'close', + TIMEOUT = 'timeout', + DRAIN = 'drain', + LOOKUP = 'lookup', + LISTENING = 'listening', +} + +/** + * TCP events map for the net TCP socket. + * Key is the event name and value is the corresponding callback function. + * @publicApi + */ +export type TcpEvents = { + error: OnErrorCallback; + connect: VoidCallback; + end: VoidCallback; + close: VoidCallback; + timeout: VoidCallback; + drain: VoidCallback; + lookup: OnLookupCallback; +}; diff --git a/packages/microservices/external/mqtt-client.interface.ts b/packages/microservices/external/mqtt-client.interface.ts deleted file mode 100644 index 0429c850df4..00000000000 --- a/packages/microservices/external/mqtt-client.interface.ts +++ /dev/null @@ -1,141 +0,0 @@ -import { EventEmitter } from 'events'; - -/** - * @see https://github.com/mqttjs/MQTT.js/ - * - * @publicApi - * - */ -export declare class MqttClient extends EventEmitter { - public connected: boolean; - public disconnecting: boolean; - public disconnected: boolean; - public reconnecting: boolean; - public incomingStore: any; - public outgoingStore: any; - public options: any; - public queueQoSZero: boolean; - - constructor(streamBuilder: (client: MqttClient) => any, options: any); - - public on(event: 'message', cb: any): this; - public on(event: 'packetsend' | 'packetreceive', cb: any): this; - public on(event: 'error', cb: any): this; - public on(event: string, cb: Function): this; - - public once(event: 'message', cb: any): this; - public once(event: 'packetsend' | 'packetreceive', cb: any): this; - public once(event: 'error', cb: any): this; - public once(event: string, cb: Function): this; - - /** - * publish - publish to - * - * @param {String} topic - topic to publish to - * @param {(String|Buffer)} message - message to publish - * - * @param {Object} [opts] - publish options, includes: - * @param {Number} [opts.qos] - qos level to publish on - * @param {Boolean} [opts.retain] - whether or not to retain the message - * - * @param {Function} [callback] - function(err){} - * called when publish succeeds or fails - * @returns {Client} this - for chaining - * @api public - * - * @example client.publish('topic', 'message') - * @example - * client.publish('topic', 'message', {qos: 1, retain: true}) - * @example client.publish('topic', 'message', console.log) - */ - public publish( - topic: string, - message: string | Buffer, - opts: any, - callback?: any, - ): this; - public publish(topic: string, message: string | Buffer, callback?: any): this; - - /** - * subscribe - subscribe to - * - * @param {String, Array, Object} topic - topic(s) to subscribe to, supports objects in the form {'topic': qos} - * @param {Object} [opts] - optional subscription options, includes: - * @param {Number} [opts.qos] - subscribe qos level - * @param {Function} [callback] - function(err, granted){} where: - * {Error} err - subscription error (none at the moment!) - * {Array} granted - array of {topic: 't', qos: 0} - * @returns {MqttClient} this - for chaining - * @api public - * @example client.subscribe('topic') - * @example client.subscribe('topic', {qos: 1}) - * @example client.subscribe({'topic': 0, 'topic2': 1}, console.log) - * @example client.subscribe('topic', console.log) - */ - public subscribe(topic: string | string[], opts: any, callback?: any): this; - public subscribe(topic: string | string[] | any, callback?: any): this; - - /** - * unsubscribe - unsubscribe from topic(s) - * - * @param {string|Array} topic - topics to unsubscribe from - * @param {Function} [callback] - callback fired on unsuback - * @returns {MqttClient} this - for chaining - * @api public - * @example client.unsubscribe('topic') - * @example client.unsubscribe('topic', console.log) - */ - public unsubscribe(topic: string | string[], callback?: any): this; - - /** - * end - close connection - * - * @returns {MqttClient} this - for chaining - * @param {Boolean} force - do not wait for all in-flight messages to be acked - * @param {Function} cb - called when the client has been closed - * - * @api public - */ - public end(force?: boolean, cb?: any): this; - - /** - * removeOutgoingMessage - remove a message in outgoing store - * the outgoing callback will be called withe Error('Message removed') if the message is removed - * - * @param {Number} mid - messageId to remove message - * @returns {MqttClient} this - for chaining - * @api public - * - * @example client.removeOutgoingMessage(client.getLastMessageId()); - */ - public removeOutgoingMessage(mid: number): this; - - /** - * reconnect - connect again using the same options as connect() - * - * @param {Object} [opts] - optional reconnect options, includes: - * {any} incomingStore - a store for the incoming packets - * {any} outgoingStore - a store for the outgoing packets - * if opts is not given, current stores are used - * - * @returns {MqttClient} this - for chaining - * - * @api public - */ - public reconnect(opts?: any): this; - - /** - * Handle messages with backpressure support, one at a time. - * Override at will. - * - * @param packet packet the packet - * @param callback callback call when finished - * @api public - */ - public handleMessage(packet: any, callback: any): void; - - /** - * getLastMessageId - */ - public getLastMessageId(): number; -} diff --git a/packages/microservices/external/nats-client.interface.ts b/packages/microservices/external/nats-client.interface.ts deleted file mode 100644 index 637883a42f8..00000000000 --- a/packages/microservices/external/nats-client.interface.ts +++ /dev/null @@ -1,93 +0,0 @@ -/** - * @see https://github.com/nats-io/nats.js - * - * @publicApi - */ -export interface NatsCodec { - encode(d: T): Uint8Array; - decode(a: Uint8Array): T; -} - -interface RequestOptions { - timeout: number; - headers?: any; - noMux?: boolean; - reply?: string; -} -interface PublishOptions { - reply?: string; - headers?: any; -} -interface SubOpts { - queue?: string; - max?: number; - timeout?: number; - callback?: (err: object | null, msg: T) => void; -} - -declare type SubscriptionOptions = SubOpts; - -export interface NatsMsg { - subject: string; - sid: number; - reply?: string; - data: Uint8Array; - headers?: any; - respond(data?: Uint8Array, opts?: PublishOptions): boolean; -} - -interface Sub extends AsyncIterable { - unsubscribe(max?: number): void; - drain(): Promise; - isDraining(): boolean; - isClosed(): boolean; - callback(err: object | null, msg: NatsMsg): void; - getSubject(): string; - getReceived(): number; - getProcessed(): number; - getPending(): number; - getID(): number; - getMax(): number | undefined; -} - -declare type Subscription = Sub; - -declare enum Events { - Disconnect = 'disconnect', - Reconnect = 'reconnect', - Update = 'update', - LDM = 'ldm', - Error = 'error', -} -interface Status { - type: Events | DebugEvents; - data: string | number; -} - -declare enum DebugEvents { - Reconnecting = 'reconnecting', - PingTimer = 'pingTimer', - StaleConnection = 'staleConnection', -} - -export declare class Client { - info?: Record; - closed(): Promise; - close(): Promise; - publish(subject: string, data?: Uint8Array, options?: PublishOptions): void; - subscribe(subject: string, opts?: SubscriptionOptions): Subscription; - request( - subject: string, - data?: Uint8Array, - opts?: RequestOptions, - ): Promise; - flush(): Promise; - drain(): Promise; - isClosed(): boolean; - isDraining(): boolean; - getServer(): string; - status(): AsyncIterable; - stats(): Record; - jetstreamManager(opts?: Record): Promise; - jetstream(opts?: Record): any; -} diff --git a/packages/microservices/external/nats-codec.interface.ts b/packages/microservices/external/nats-codec.interface.ts new file mode 100644 index 00000000000..76a3b8d55e8 --- /dev/null +++ b/packages/microservices/external/nats-codec.interface.ts @@ -0,0 +1,9 @@ +/** + * @see https://github.com/nats-io/nats.js + * + * @publicApi + */ +export interface NatsCodec { + encode(d: T): Uint8Array; + decode(a: Uint8Array): T; +} diff --git a/packages/microservices/helpers/tcp-socket.ts b/packages/microservices/helpers/tcp-socket.ts index cca8fe94dfb..cd4988fc1ce 100644 --- a/packages/microservices/helpers/tcp-socket.ts +++ b/packages/microservices/helpers/tcp-socket.ts @@ -1,14 +1,8 @@ import { Buffer } from 'buffer'; import { Socket } from 'net'; -import { - CLOSE_EVENT, - CONNECT_EVENT, - DATA_EVENT, - ERROR_EVENT, - MESSAGE_EVENT, -} from '../constants'; -import { NetSocketClosedException } from '../errors/net-socket-closed.exception'; import { InvalidJSONFormatException } from '../errors/invalid-json-format.exception'; +import { NetSocketClosedException } from '../errors/net-socket-closed.exception'; +import { TcpEventsMap } from '../events/tcp.events'; export abstract class TcpSocket { private isClosed = false; @@ -18,10 +12,10 @@ export abstract class TcpSocket { } constructor(public readonly socket: Socket) { - this.socket.on(DATA_EVENT, this.onData.bind(this)); - this.socket.on(CONNECT_EVENT, () => (this.isClosed = false)); - this.socket.on(CLOSE_EVENT, () => (this.isClosed = true)); - this.socket.on(ERROR_EVENT, () => (this.isClosed = true)); + this.socket.on('data', this.onData.bind(this)); + this.socket.on(TcpEventsMap.CONNECT, () => (this.isClosed = false)); + this.socket.on(TcpEventsMap.CLOSE, () => (this.isClosed = true)); + this.socket.on(TcpEventsMap.ERROR, () => (this.isClosed = true)); } public connect(port: number, host: string) { @@ -52,18 +46,21 @@ export abstract class TcpSocket { this.handleSend(message, callback); } - protected abstract handleSend(message: any, callback?: (err?: any) => void); + protected abstract handleSend( + message: any, + callback?: (err?: any) => void, + ): any; private onData(data: Buffer) { try { this.handleData(data); } catch (e) { - this.socket.emit(ERROR_EVENT, e.message); + this.socket.emit(TcpEventsMap.ERROR, e.message); this.socket.end(); } } - protected abstract handleData(data: Buffer | string); + protected abstract handleData(data: Buffer | string): any; protected emitMessage(data: string) { let message: Record; @@ -73,6 +70,6 @@ export abstract class TcpSocket { throw new InvalidJSONFormatException(e, data); } message = message || {}; - this.socket.emit(MESSAGE_EVENT, message); + this.socket.emit('message', message); } } diff --git a/packages/microservices/index.ts b/packages/microservices/index.ts index bf44f34f71c..02bbed3f6d0 100644 --- a/packages/microservices/index.ts +++ b/packages/microservices/index.ts @@ -10,6 +10,7 @@ export * from './client'; export * from './ctx-host'; export * from './decorators'; export * from './enums'; +export * from './events'; export * from './exceptions'; export * from './helpers'; export * from './interfaces'; diff --git a/packages/microservices/interfaces/client-grpc.interface.ts b/packages/microservices/interfaces/client-grpc.interface.ts index 95815ef0fc0..2f8bf6509e8 100644 --- a/packages/microservices/interfaces/client-grpc.interface.ts +++ b/packages/microservices/interfaces/client-grpc.interface.ts @@ -2,6 +2,16 @@ * @publicApi */ export interface ClientGrpc { + /** + * Returns an instance of the given gRPC service. + * @param name Service name + * @returns gRPC service + */ getService(name: string): T; + /** + * Returns an instance of the given gRPC client. + * @param name Service name + * @returns gRPC client + */ getClientByServiceName(name: string): T; } diff --git a/packages/microservices/interfaces/client-kafka-proxy.interface.ts b/packages/microservices/interfaces/client-kafka-proxy.interface.ts new file mode 100644 index 00000000000..6047ecf2deb --- /dev/null +++ b/packages/microservices/interfaces/client-kafka-proxy.interface.ts @@ -0,0 +1,33 @@ +import { ClientProxy } from '../client'; +import { KafkaStatus } from '../events'; +import { + Consumer, + Producer, + TopicPartitionOffsetAndMetadata, +} from '../external/kafka.interface'; + +export interface ClientKafkaProxy + extends Omit, 'on'> { + /** + * Reference to the Kafka consumer instance. + */ + consumer: Consumer | null; + /** + * Reference to the Kafka producer instance. + */ + producer: Producer | null; + /** + * Subscribes to messages that match the pattern. + * Required for message-driven communication style between microservices. + * You can't use `send` without subscribing to the message pattern first. + * @param pattern Pattern to subscribe to + */ + subscribeToResponseOf(pattern: unknown): void; + /** + * Commits the given offsets. + * @param topicPartitions Array of topic partitions with their offsets and metadata + */ + commitOffsets( + topicPartitions: TopicPartitionOffsetAndMetadata[], + ): Promise; +} diff --git a/packages/microservices/interfaces/closeable.interface.ts b/packages/microservices/interfaces/closeable.interface.ts deleted file mode 100644 index a5cc2c694db..00000000000 --- a/packages/microservices/interfaces/closeable.interface.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface Closeable { - close(): void; -} diff --git a/packages/microservices/interfaces/custom-transport-strategy.interface.ts b/packages/microservices/interfaces/custom-transport-strategy.interface.ts index c7b4e9e44f8..56886df414e 100644 --- a/packages/microservices/interfaces/custom-transport-strategy.interface.ts +++ b/packages/microservices/interfaces/custom-transport-strategy.interface.ts @@ -4,7 +4,17 @@ import { Transport } from '../enums'; * @publicApi */ export interface CustomTransportStrategy { + /** + * Unique transport identifier. + */ readonly transportId?: Transport | symbol; + /** + * Method called when the transport is being initialized. + * @param callback Function to be called upon initialization + */ listen(callback: (...optionalParams: unknown[]) => any): any; + /** + * Method called when the transport is being terminated. + */ close(): any; } diff --git a/packages/microservices/interfaces/index.ts b/packages/microservices/interfaces/index.ts index 6916a6c10e2..71718b8e1b1 100644 --- a/packages/microservices/interfaces/index.ts +++ b/packages/microservices/interfaces/index.ts @@ -1,6 +1,6 @@ export * from './client-grpc.interface'; +export * from './client-kafka-proxy.interface'; export * from './client-metadata.interface'; -export * from './closeable.interface'; export * from './custom-transport-strategy.interface'; export * from './deserializer.interface'; export * from './message-handler.interface'; diff --git a/packages/microservices/interfaces/microservice-configuration.interface.ts b/packages/microservices/interfaces/microservice-configuration.interface.ts index b5850e1b236..2c7b76255ce 100644 --- a/packages/microservices/interfaces/microservice-configuration.interface.ts +++ b/packages/microservices/interfaces/microservice-configuration.interface.ts @@ -1,5 +1,5 @@ import { Type } from '@nestjs/common'; -import { ConnectionOptions } from 'tls'; +import { TlsOptions } from 'tls'; import { Transport } from '../enums/transport.enum'; import { ChannelOptions } from '../external/grpc-options.interface'; import { @@ -94,7 +94,7 @@ export interface TcpOptions { retryAttempts?: number; retryDelay?: number; serializer?: Serializer; - tlsOptions?: ConnectionOptions; + tlsOptions?: TlsOptions; deserializer?: Deserializer; socketClass?: Type; }; diff --git a/packages/microservices/listeners-controller.ts b/packages/microservices/listeners-controller.ts index cba398269c4..aa277d4ea94 100644 --- a/packages/microservices/listeners-controller.ts +++ b/packages/microservices/listeners-controller.ts @@ -34,12 +34,7 @@ import { } from './context/rpc-metadata-constants'; import { BaseRpcContext } from './ctx-host/base-rpc.context'; import { Transport } from './enums'; -import { - CustomTransportStrategy, - MessageHandler, - PatternMetadata, - RequestContext, -} from './interfaces'; +import { MessageHandler, PatternMetadata, RequestContext } from './interfaces'; import { MicroserviceEntrypointMetadata } from './interfaces/microservice-entrypoint-metadata.interface'; import { EventOrMessageListenerDefinition, @@ -66,7 +61,7 @@ export class ListenersController { public registerPatternHandlers( instanceWrapper: InstanceWrapper, - server: Server & CustomTransportStrategy, + serverInstance: Server, moduleKey: string, ) { const { instance } = instanceWrapper; @@ -75,7 +70,7 @@ export class ListenersController { const patternHandlers = this.metadataExplorer.explore(instance as object); const moduleRef = this.container.getModuleByKey(moduleKey); const defaultCallMetadata = - server instanceof ServerGrpc + serverInstance instanceof ServerGrpc ? DEFAULT_GRPC_CALLBACK_METADATA : DEFAULT_CALLBACK_METADATA; @@ -83,8 +78,8 @@ export class ListenersController { .filter( ({ transport }) => isUndefined(transport) || - isUndefined(server.transportId) || - transport === server.transportId, + isUndefined(serverInstance.transportId) || + transport === serverInstance.transportId, ) .reduce((acc, handler) => { handler.patterns.forEach(pattern => @@ -104,7 +99,7 @@ export class ListenersController { this.insertEntrypointDefinition( instanceWrapper, definition, - server.transportId, + serverInstance.transportId, ); if (isStatic) { @@ -131,14 +126,19 @@ export class ListenersController { eventHandler, ); }; - return server.addHandler( + return serverInstance.addHandler( pattern, eventHandler, isEventHandler, extras, ); } else { - return server.addHandler(pattern, proxy, isEventHandler, extras); + return serverInstance.addHandler( + pattern, + proxy, + isEventHandler, + extras, + ); } } const asyncHandler = this.createRequestScopedHandler( @@ -150,7 +150,12 @@ export class ListenersController { defaultCallMetadata, isEventHandler, ); - server.addHandler(pattern, asyncHandler, isEventHandler, extras); + serverInstance.addHandler( + pattern, + asyncHandler, + isEventHandler, + extras, + ); }); } diff --git a/packages/microservices/microservices-module.ts b/packages/microservices/microservices-module.ts index c99e404109e..65f1855feb6 100644 --- a/packages/microservices/microservices-module.ts +++ b/packages/microservices/microservices-module.ts @@ -17,7 +17,6 @@ import { ClientsContainer } from './container'; import { ExceptionFiltersContext } from './context/exception-filters-context'; import { RpcContextCreator } from './context/rpc-context-creator'; import { RpcProxy } from './context/rpc-proxy'; -import { CustomTransportStrategy } from './interfaces'; import { ListenersController } from './listeners-controller'; import { Server } from './server/server'; @@ -63,16 +62,13 @@ export class MicroservicesModule< ); } - public setupListeners( - container: NestContainer, - server: Server & CustomTransportStrategy, - ) { + public setupListeners(container: NestContainer, serverInstance: Server) { if (!this.listenersController) { throw new RuntimeException(); } const modules = container.getModules(); modules.forEach(({ controllers }, moduleRef) => - this.bindListeners(controllers, server, moduleRef), + this.bindListeners(controllers, serverInstance, moduleRef), ); } @@ -92,13 +88,13 @@ export class MicroservicesModule< public bindListeners( controllers: Map>, - server: Server & CustomTransportStrategy, + serverInstance: Server, moduleName: string, ) { controllers.forEach(wrapper => this.listenersController.registerPatternHandlers( wrapper, - server, + serverInstance, moduleName, ), ); diff --git a/packages/microservices/module/clients.module.ts b/packages/microservices/module/clients.module.ts index 4026bbab308..f6ca14b589e 100644 --- a/packages/microservices/module/clients.module.ts +++ b/packages/microservices/module/clients.module.ts @@ -5,7 +5,6 @@ import { Provider, } from '@nestjs/common'; import { ClientProxy, ClientProxyFactory } from '../client'; -import { Closeable } from '../interfaces'; import { ClientsModuleAsyncOptions, ClientsModuleOptions, @@ -101,7 +100,7 @@ export class ClientsModule { }; } - private static assignOnAppShutdownHook(client: ClientProxy & Closeable) { + private static assignOnAppShutdownHook(client: ClientProxy) { (client as unknown as OnApplicationShutdown).onApplicationShutdown = client.close; return client; diff --git a/packages/microservices/nest-microservice.ts b/packages/microservices/nest-microservice.ts index 7b0930e69dd..ab287a099d8 100644 --- a/packages/microservices/nest-microservice.ts +++ b/packages/microservices/nest-microservice.ts @@ -16,7 +16,6 @@ import { Injector } from '@nestjs/core/injector/injector'; import { GraphInspector } from '@nestjs/core/inspector/graph-inspector'; import { NestApplicationContext } from '@nestjs/core/nest-application-context'; import { Transport } from './enums/transport.enum'; -import { CustomTransportStrategy } from './interfaces/custom-transport-strategy.interface'; import { MicroserviceOptions } from './interfaces/microservice-configuration.interface'; import { MicroservicesModule } from './microservices-module'; import { Server } from './server/server'; @@ -27,6 +26,9 @@ const { SocketModule } = optionalRequire( () => require('@nestjs/websockets/socket-module'), ); +type CompleteMicroserviceOptions = NestMicroserviceOptions & + MicroserviceOptions; + export class NestMicroservice extends NestApplicationContext implements INestMicroservice @@ -36,14 +38,21 @@ export class NestMicroservice }); private readonly microservicesModule = new MicroservicesModule(); private readonly socketModule = SocketModule ? new SocketModule() : null; - private microserviceConfig: NestMicroserviceOptions & MicroserviceOptions; - private server: Server & CustomTransportStrategy; + private microserviceConfig: CompleteMicroserviceOptions; + private serverInstance: Server; private isTerminated = false; - private isInitHookCalled = false; + private wasInitHookCalled = false; + + /** + * Returns an observable that emits status changes. + */ + get status() { + return this.serverInstance.status; + } constructor( container: NestContainer, - config: NestMicroserviceOptions & MicroserviceOptions = {}, + config: CompleteMicroserviceOptions = {}, private readonly graphInspector: GraphInspector, private readonly applicationConfig: ApplicationConfig, ) { @@ -60,16 +69,21 @@ export class NestMicroservice this.selectContextModule(); } - public createServer(config: NestMicroserviceOptions & MicroserviceOptions) { + public createServer(config: CompleteMicroserviceOptions) { try { this.microserviceConfig = { transport: Transport.TCP, ...config, - } as any; - const { strategy } = config as any; - this.server = strategy - ? strategy - : ServerFactory.create(this.microserviceConfig); + } as CompleteMicroserviceOptions; + + if ('strategy' in config) { + this.serverInstance = config.strategy as Server; + return; + } else { + this.serverInstance = ServerFactory.create( + this.microserviceConfig, + ) as Server; + } } catch (e) { this.logger.error(e); throw e; @@ -92,21 +106,36 @@ export class NestMicroservice this.setIsInitialized(true); - if (!this.isInitHookCalled) { + if (!this.wasInitHookCalled) { await this.callInitHook(); await this.callBootstrapHook(); } } public registerListeners() { - this.microservicesModule.setupListeners(this.container, this.server); + this.microservicesModule.setupListeners( + this.container, + this.serverInstance, + ); } + /** + * Registers a web socket adapter that will be used for Gateways. + * Use to override the default `socket.io` library. + * + * @param {WebSocketAdapter} adapter + * @returns {this} + */ public useWebSocketAdapter(adapter: WebSocketAdapter): this { this.applicationConfig.setIoAdapter(adapter); return this; } + /** + * Registers global exception filters (will be used for every pattern handler). + * + * @param {...ExceptionFilter} filters + */ public useGlobalFilters(...filters: ExceptionFilter[]): this { this.applicationConfig.useGlobalFilters(...filters); filters.forEach(item => @@ -118,6 +147,11 @@ export class NestMicroservice return this; } + /** + * Registers global pipes (will be used for every pattern handler). + * + * @param {...PipeTransform} pipes + */ public useGlobalPipes(...pipes: PipeTransform[]): this { this.applicationConfig.useGlobalPipes(...pipes); pipes.forEach(item => @@ -129,6 +163,11 @@ export class NestMicroservice return this; } + /** + * Registers global interceptors (will be used for every pattern handler). + * + * @param {...NestInterceptor} interceptors + */ public useGlobalInterceptors(...interceptors: NestInterceptor[]): this { this.applicationConfig.useGlobalInterceptors(...interceptors); interceptors.forEach(item => @@ -160,12 +199,17 @@ export class NestMicroservice return this; } - public async listen() { + /** + * Starts the microservice. + * + * @returns {void} + */ + public async listen(): Promise { this.assertNotInPreviewMode('listen'); !this.isInitialized && (await this.registerModules()); return new Promise((resolve, reject) => { - this.server.listen((err, info) => { + this.serverInstance.listen((err, info) => { if (this.microserviceConfig?.autoFlushLogs ?? true) { this.flushLogs(); } @@ -178,8 +222,13 @@ export class NestMicroservice }); } + /** + * Terminates the application. + * + * @returns {Promise} + */ public async close(): Promise { - await this.server.close(); + await this.serverInstance.close(); if (this.isTerminated) { return; } @@ -187,16 +236,51 @@ export class NestMicroservice await this.closeApplication(); } + /** + * Sets the flag indicating that the application is initialized. + * @param isInitialized Value to set + */ public setIsInitialized(isInitialized: boolean) { this.isInitialized = isInitialized; } + /** + * Sets the flag indicating that the application is terminated. + * @param isTerminated Value to set + */ public setIsTerminated(isTerminated: boolean) { this.isTerminated = isTerminated; } + /** + * Sets the flag indicating that the init hook was called. + * @param isInitHookCalled Value to set + */ public setIsInitHookCalled(isInitHookCalled: boolean) { - this.isInitHookCalled = isInitHookCalled; + this.wasInitHookCalled = isInitHookCalled; + } + + /** + * Registers an event listener for the given event. + * @param event Event name + * @param callback Callback to be executed when the event is emitted + */ + public on(event: string | number | symbol, callback: Function) { + if ('on' in this.serverInstance) { + return this.serverInstance.on(event as string, callback); + } + throw new Error('"on" method not supported by the underlying server'); + } + + /** + * Returns an instance of the underlying server/broker instance, + * or a group of servers if there are more than one. + */ + public unwrap(): T { + if ('unwrap' in this.serverInstance) { + return this.serverInstance.unwrap(); + } + throw new Error('"unwrap" method not supported by the underlying server'); } protected async closeApplication(): Promise { @@ -211,7 +295,7 @@ export class NestMicroservice if (this.isTerminated) { return; } - await this.server.close(); + await this.serverInstance.close(); this.socketModule && (await this.socketModule.close()); this.microservicesModule && (await this.microservicesModule.close()); } diff --git a/packages/microservices/record-builders/mqtt.record-builder.ts b/packages/microservices/record-builders/mqtt.record-builder.ts index 41c0f25a21f..5754d8a108b 100644 --- a/packages/microservices/record-builders/mqtt.record-builder.ts +++ b/packages/microservices/record-builders/mqtt.record-builder.ts @@ -18,9 +18,9 @@ export interface MqttRecordOptions { * MQTT 5.0 properties object */ properties?: { - payloadFormatIndicator?: number; + payloadFormatIndicator?: boolean; messageExpiryInterval?: number; - topicAlias?: string; + topicAlias?: number; responseTopic?: string; correlationData?: Buffer; userProperties?: Record; diff --git a/packages/microservices/server/server-factory.ts b/packages/microservices/server/server-factory.ts index 6429a36e613..ac77a688791 100644 --- a/packages/microservices/server/server-factory.ts +++ b/packages/microservices/server/server-factory.ts @@ -1,34 +1,38 @@ import { Transport } from '../enums/transport.enum'; -import { CustomTransportStrategy, MicroserviceOptions } from '../interfaces'; -import { Server } from './server'; +import { + CustomStrategy, + MicroserviceOptions, + MqttOptions, +} from '../interfaces'; import { ServerGrpc } from './server-grpc'; import { ServerKafka } from './server-kafka'; import { ServerMqtt } from './server-mqtt'; import { ServerNats } from './server-nats'; import { ServerRedis } from './server-redis'; -import { ServerTCP } from './server-tcp'; import { ServerRMQ } from './server-rmq'; +import { ServerTCP } from './server-tcp'; export class ServerFactory { - public static create( - microserviceOptions: MicroserviceOptions, - ): Server & CustomTransportStrategy { - const { transport, options } = microserviceOptions as any; + public static create(microserviceOptions: MicroserviceOptions) { + const { transport, options } = microserviceOptions as Exclude< + MicroserviceOptions, + CustomStrategy + >; switch (transport) { case Transport.REDIS: - return new ServerRedis(options); + return new ServerRedis(options as ServerRedis['options']); case Transport.NATS: - return new ServerNats(options); + return new ServerNats(options as ServerNats['options']); case Transport.MQTT: - return new ServerMqtt(options); + return new ServerMqtt(options as MqttOptions['options']); case Transport.GRPC: - return new ServerGrpc(options); + return new ServerGrpc(options as ServerGrpc['options']); case Transport.KAFKA: - return new ServerKafka(options); + return new ServerKafka(options as ServerKafka['options']); case Transport.RMQ: - return new ServerRMQ(options); + return new ServerRMQ(options as ServerRMQ['options']); default: - return new ServerTCP(options); + return new ServerTCP(options as ServerTCP['options']); } } } diff --git a/packages/microservices/server/server-grpc.ts b/packages/microservices/server/server-grpc.ts index f27e0e7217e..966b76d8fd2 100644 --- a/packages/microservices/server/server-grpc.ts +++ b/packages/microservices/server/server-grpc.ts @@ -13,23 +13,30 @@ import { lastValueFrom, } from 'rxjs'; import { catchError, takeUntil } from 'rxjs/operators'; -import { - CANCEL_EVENT, - GRPC_DEFAULT_PROTO_LOADER, - GRPC_DEFAULT_URL, -} from '../constants'; +import { GRPC_DEFAULT_PROTO_LOADER, GRPC_DEFAULT_URL } from '../constants'; import { GrpcMethodStreamingType } from '../decorators'; import { Transport } from '../enums'; import { InvalidGrpcPackageException } from '../errors/invalid-grpc-package.exception'; import { InvalidProtoDefinitionException } from '../errors/invalid-proto-definition.exception'; import { ChannelOptions } from '../external/grpc-options.interface'; import { getGrpcPackageDefinition } from '../helpers'; -import { CustomTransportStrategy, MessageHandler } from '../interfaces'; +import { MessageHandler } from '../interfaces'; import { GrpcOptions } from '../interfaces/microservice-configuration.interface'; import { Server } from './server'; -let grpcPackage: any = {}; -let grpcProtoLoaderPackage: any = {}; +const CANCELLED_EVENT = 'cancelled'; + +// To enable type safety for gRPC. This cant be uncommented by default +// because it would require the user to install the @grpc/grpc-js package even if they dont use gRPC +// Otherwise, TypeScript would fail to compile the code. +// +// type GrpcServer = import('@grpc/grpc-js').Server; +// let grpcPackage = {} as typeof import('@grpc/grpc-js'); +// let grpcProtoLoaderPackage = {} as typeof import('@grpc/proto-loader'); + +type GrpcServer = any; +let grpcPackage = {} as any; +let grpcProtoLoaderPackage = {} as any; interface GrpcCall { request: TRequest; @@ -45,11 +52,16 @@ interface GrpcCall { /** * @publicApi */ -export class ServerGrpc extends Server implements CustomTransportStrategy { +export class ServerGrpc extends Server { public readonly transportId = Transport.GRPC; + protected readonly url: string; + protected grpcClient: GrpcServer; - private readonly url: string; - private grpcClient: any; + get status(): never { + throw new Error( + 'The "status" attribute is not supported by the gRPC transport', + ); + } constructor(private readonly options: GrpcOptions['options']) { super(); @@ -174,7 +186,7 @@ export class ServerGrpc extends Server implements CustomTransportStrategy { return service; } - getMessageHandler( + public getMessageHandler( serviceName: string, methodName: string, streaming: GrpcMethodStreamingType, @@ -264,6 +276,17 @@ export class ServerGrpc extends Server implements CustomTransportStrategy { }; } + public unwrap(): T { + throw new Error('Method is not supported for gRPC transport'); + } + + public on< + EventKey extends string | number | symbol = string | number | symbol, + EventCallback = any, + >(event: EventKey, callback: EventCallback) { + throw new Error('Method is not supported in gRPC mode.'); + } + /** * Writes an observable to a GRPC call. * @@ -296,8 +319,8 @@ export class ServerGrpc extends Server implements CustomTransportStrategy { // Calls that are cancelled by the client should be successfully resolved here resolve(); }; - call.on(CANCEL_EVENT, cancelHandler); - subscription.add(() => call.off(CANCEL_EVENT, cancelHandler)); + call.on(CANCELLED_EVENT, cancelHandler); + subscription.add(() => call.off(CANCELLED_EVENT, cancelHandler)); // In all cases, when we finalize, end the writable stream // being careful that errors and writes must be emitted _before_ this call is ended @@ -402,7 +425,7 @@ export class ServerGrpc extends Server implements CustomTransportStrategy { } else { const response = await lastValueFrom( res.pipe( - takeUntil(fromEvent(call as any, CANCEL_EVENT)), + takeUntil(fromEvent(call as any, CANCELLED_EVENT)), catchError(err => { callback(err, null); return EMPTY; @@ -469,7 +492,7 @@ export class ServerGrpc extends Server implements CustomTransportStrategy { this.messageHandlers.set(route, callback); } - public async createClient(): Promise { + public async createClient() { const channelOptions: ChannelOptions = this.options && this.options.channelOptions ? this.options.channelOptions diff --git a/packages/microservices/server/server-kafka.ts b/packages/microservices/server/server-kafka.ts index 8fcbb0e446b..4bc0a66d9c8 100644 --- a/packages/microservices/server/server-kafka.ts +++ b/packages/microservices/server/server-kafka.ts @@ -11,6 +11,7 @@ import { import { KafkaContext } from '../ctx-host'; import { KafkaRequestDeserializer } from '../deserializers/kafka-request.deserializer'; import { KafkaHeaders, Transport } from '../enums'; +import { KafkaStatus } from '../events'; import { KafkaRetriableException } from '../exceptions'; import { BrokersFunction, @@ -25,12 +26,7 @@ import { RecordMetadata, } from '../external/kafka.interface'; import { KafkaLogger, KafkaParser } from '../helpers'; -import { - CustomTransportStrategy, - KafkaOptions, - OutgoingResponse, - ReadPacket, -} from '../interfaces'; +import { KafkaOptions, OutgoingResponse, ReadPacket } from '../interfaces'; import { KafkaRequestSerializer } from '../serializers/kafka-request.serializer'; import { Server } from './server'; @@ -39,7 +35,7 @@ let kafkaPackage: any = {}; /** * @publicApi */ -export class ServerKafka extends Server implements CustomTransportStrategy { +export class ServerKafka extends Server { public readonly transportId = Transport.KAFKA; protected logger = new Logger(ServerKafka.name); @@ -47,7 +43,6 @@ export class ServerKafka extends Server implements CustomTransportStrategy { protected consumer: Consumer = null; protected producer: Producer = null; protected parser: KafkaParser = null; - protected brokers: string[] | BrokersFunction; protected clientId: string; protected groupId: string; @@ -64,7 +59,7 @@ export class ServerKafka extends Server implements CustomTransportStrategy { this.brokers = clientOptions.brokers || [KAFKA_DEFAULT_BROKER]; - // append a unique id to the clientId and groupId + // Append a unique id to the clientId and groupId // so they don't collide with a microservices client this.clientId = (clientOptions.clientId || KAFKA_DEFAULT_CLIENT) + postfixId; @@ -105,6 +100,8 @@ export class ServerKafka extends Server implements CustomTransportStrategy { }); this.consumer = this.client.consumer(consumerOptions); this.producer = this.client.producer(this.options.producer); + this.registerConsumerEventListeners(); + this.registerProducerEventListeners(); await this.consumer.connect(); await this.producer.connect(); @@ -112,6 +109,33 @@ export class ServerKafka extends Server implements CustomTransportStrategy { callback(); } + protected registerConsumerEventListeners() { + this.consumer.on(this.consumer.events.CONNECT, () => + this._status$.next(KafkaStatus.CONNECTED), + ); + this.consumer.on(this.consumer.events.DISCONNECT, () => + this._status$.next(KafkaStatus.DISCONNECTED), + ); + this.consumer.on(this.consumer.events.REBALANCING, () => + this._status$.next(KafkaStatus.REBALANCING), + ); + this.consumer.on(this.consumer.events.STOP, () => + this._status$.next(KafkaStatus.STOPPED), + ); + this.consumer.on(this.consumer.events.CRASH, () => + this._status$.next(KafkaStatus.CRASHED), + ); + } + + protected registerProducerEventListeners() { + this.producer.on(this.producer.events.CONNECT, () => + this._status$.next(KafkaStatus.CONNECTED), + ); + this.producer.on(this.producer.events.DISCONNECT, () => + this._status$.next(KafkaStatus.DISCONNECTED), + ); + } + public createClient(): T { return new kafkaPackage.Kafka( Object.assign( @@ -204,6 +228,22 @@ export class ServerKafka extends Server implements CustomTransportStrategy { this.send(replayStream$, publish); } + public unwrap(): T { + if (!this.client) { + throw new Error( + 'Not initialized. Please call the "listen"/"startAllMicroservices" method before accessing the server.', + ); + } + return this.client as T; + } + + public on< + EventKey extends string | number | symbol = string | number | symbol, + EventCallback = any, + >(event: EventKey, callback: EventCallback) { + throw new Error('Method is not supported for Kafka server'); + } + private combineStreamsAndThrowIfRetriable( response$: Observable, replayStream$: ReplaySubject, diff --git a/packages/microservices/server/server-mqtt.ts b/packages/microservices/server/server-mqtt.ts index a7818a37f28..36bf74b4f6d 100644 --- a/packages/microservices/server/server-mqtt.ts +++ b/packages/microservices/server/server-mqtt.ts @@ -1,8 +1,5 @@ import { isUndefined } from '@nestjs/common/utils/shared.utils'; import { - CONNECT_EVENT, - ERROR_EVENT, - MESSAGE_EVENT, MQTT_DEFAULT_URL, MQTT_SEPARATOR, MQTT_WILDCARD_ALL, @@ -11,9 +8,8 @@ import { } from '../constants'; import { MqttContext } from '../ctx-host/mqtt.context'; import { Transport } from '../enums'; -import { MqttClient } from '../external/mqtt-client.interface'; +import { MqttEvents, MqttEventsMap, MqttStatus } from '../events/mqtt.events'; import { - CustomTransportStrategy, IncomingRequest, MessageHandler, PacketId, @@ -26,15 +22,24 @@ import { Server } from './server'; let mqttPackage: any = {}; +// To enable type safety for MQTT. This cant be uncommented by default +// because it would require the user to install the mqtt package even if they dont use MQTT +// Otherwise, TypeScript would fail to compile the code. +// +// type MqttClient = import('mqtt').MqttClient; +type MqttClient = any; + /** * @publicApi */ -export class ServerMqtt extends Server implements CustomTransportStrategy { +export class ServerMqtt extends Server { public readonly transportId = Transport.MQTT; - + protected readonly url: string; protected mqttClient: MqttClient; - - private readonly url: string; + protected pendingEventListeners: Array<{ + event: keyof MqttEvents; + callback: MqttEvents[keyof MqttEvents]; + }> = []; constructor(private readonly options: MqttOptions['options']) { super(); @@ -62,14 +67,23 @@ export class ServerMqtt extends Server implements CustomTransportStrategy { public start( callback: (err?: unknown, ...optionalParams: unknown[]) => void, ) { - this.handleError(this.mqttClient); + this.registerErrorListener(this.mqttClient); + this.registerReconnectListener(this.mqttClient); + this.registerDisconnectListener(this.mqttClient); + this.registerCloseListener(this.mqttClient); + this.registerConnectListener(this.mqttClient); + + this.pendingEventListeners.forEach(({ event, callback }) => + this.mqttClient.on(event, callback), + ); + this.pendingEventListeners = []; this.bindEvents(this.mqttClient); - this.mqttClient.on(CONNECT_EVENT, () => callback()); + this.mqttClient.on(MqttEventsMap.CONNECT, () => callback()); } public bindEvents(mqttClient: MqttClient) { - mqttClient.on(MESSAGE_EVENT, this.getMessageHandler(mqttClient).bind(this)); + mqttClient.on('message', this.getMessageHandler(mqttClient).bind(this)); const registeredPatterns = [...this.messageHandlers.keys()]; registeredPatterns.forEach(pattern => { @@ -83,6 +97,7 @@ export class ServerMqtt extends Server implements CustomTransportStrategy { public close() { this.mqttClient && this.mqttClient.end(); + this.pendingEventListeners = []; } public createMqttClient(): MqttClient { @@ -216,8 +231,54 @@ export class ServerMqtt extends Server implements CustomTransportStrategy { return `${pattern}/reply`; } - public handleError(stream: any) { - stream.on(ERROR_EVENT, (err: any) => this.logger.error(err)); + public registerErrorListener(client: MqttClient) { + client.on(MqttEventsMap.ERROR, (err: unknown) => this.logger.error(err)); + } + + public registerReconnectListener(client: MqttClient) { + client.on(MqttEventsMap.RECONNECT, () => { + this._status$.next(MqttStatus.RECONNECTING); + + this.logger.log('MQTT connection lost. Trying to reconnect...'); + }); + } + + public registerDisconnectListener(client: MqttClient) { + client.on(MqttEventsMap.DISCONNECT, () => { + this._status$.next(MqttStatus.DISCONNECTED); + }); + } + + public registerCloseListener(client: MqttClient) { + client.on(MqttEventsMap.CLOSE, () => { + this._status$.next(MqttStatus.CLOSED); + }); + } + + public registerConnectListener(client: MqttClient) { + client.on(MqttEventsMap.CONNECT, () => { + this._status$.next(MqttStatus.CONNECTED); + }); + } + + public unwrap(): T { + if (!this.mqttClient) { + throw new Error( + 'Not initialized. Please call the "listen"/"startAllMicroservices" method before accessing the server.', + ); + } + return this.mqttClient as T; + } + + public on< + EventKey extends keyof MqttEvents = keyof MqttEvents, + EventCallback extends MqttEvents[EventKey] = MqttEvents[EventKey], + >(event: EventKey, callback: EventCallback) { + if (this.mqttClient) { + this.mqttClient.on(event, callback as any); + } else { + this.pendingEventListeners.push({ event, callback }); + } } protected initializeSerializer(options: MqttOptions['options']) { diff --git a/packages/microservices/server/server-nats.ts b/packages/microservices/server/server-nats.ts index e9c376b1292..241931afe83 100644 --- a/packages/microservices/server/server-nats.ts +++ b/packages/microservices/server/server-nats.ts @@ -1,10 +1,10 @@ -import { isUndefined, isObject } from '@nestjs/common/utils/shared.utils'; +import { isObject, isUndefined } from '@nestjs/common/utils/shared.utils'; +import { EventEmitter } from 'events'; import { NATS_DEFAULT_URL, NO_MESSAGE_HANDLER } from '../constants'; import { NatsContext } from '../ctx-host/nats.context'; import { NatsRequestJSONDeserializer } from '../deserializers/nats-request-json.deserializer'; import { Transport } from '../enums'; -import { Client, NatsMsg } from '../external/nats-client.interface'; -import { CustomTransportStrategy } from '../interfaces'; +import { NatsEvents, NatsEventsMap, NatsStatus } from '../events/nats.events'; import { NatsOptions } from '../interfaces/microservice-configuration.interface'; import { IncomingRequest } from '../interfaces/packet.interface'; import { NatsRecord } from '../record-builders'; @@ -13,13 +13,26 @@ import { Server } from './server'; let natsPackage = {} as any; +// To enable type safety for Nats. This cant be uncommented by default +// because it would require the user to install the nats package even if they dont use Nats +// Otherwise, TypeScript would fail to compile the code. +// +// type Client = import('nats').NatsConnection; +// type NatsMsg = import('nats').Msg; + +type Client = any; +type NatsMsg = any; + /** * @publicApi */ -export class ServerNats extends Server implements CustomTransportStrategy { +export class ServerNats extends Server { public readonly transportId = Transport.NATS; private natsClient: Client; + protected statusEventEmitter = new EventEmitter<{ + [key in keyof NatsEvents]: Parameters; + }>(); constructor(private readonly options: NatsOptions['options']) { super(); @@ -37,6 +50,8 @@ export class ServerNats extends Server implements CustomTransportStrategy { ) { try { this.natsClient = await this.createNatsClient(); + + this._status$.next(NatsStatus.CONNECTED); this.handleStatusUpdates(this.natsClient); this.start(callback); } catch (err) { @@ -65,6 +80,8 @@ export class ServerNats extends Server implements CustomTransportStrategy { public async close() { await this.natsClient?.close(); + this.statusEventEmitter.removeAllListeners(); + this.natsClient = null; } @@ -142,10 +159,21 @@ export class ServerNats extends Server implements CustomTransportStrategy { switch (status.type) { case 'error': + this.logger.error( + `NatsError: type: "${status.type}", data: "${data}".`, + ); + break; + case 'disconnect': this.logger.error( `NatsError: type: "${status.type}", data: "${data}".`, ); + + this._status$.next(NatsStatus.DISCONNECTED); + this.statusEventEmitter.emit( + NatsEventsMap.DISCONNECT, + status.data as string, + ); break; case 'pingTimer': @@ -156,6 +184,29 @@ export class ServerNats extends Server implements CustomTransportStrategy { } break; + case 'reconnecting': + this._status$.next(NatsStatus.RECONNECTING); + break; + + case 'reconnect': + this.logger.log( + `NatsStatus: type: "${status.type}", data: "${data}".`, + ); + + this._status$.next(NatsStatus.CONNECTED); + this.statusEventEmitter.emit( + NatsEventsMap.RECONNECT, + status.data as string, + ); + break; + + case 'update': + this.logger.log( + `NatsStatus: type: "${status.type}", data: "${data}".`, + ); + this.statusEventEmitter.emit(NatsEventsMap.UPDATE, status.data); + break; + default: this.logger.log( `NatsStatus: type: "${status.type}", data: "${data}".`, @@ -165,6 +216,22 @@ export class ServerNats extends Server implements CustomTransportStrategy { } } + public unwrap(): T { + if (!this.natsClient) { + throw new Error( + 'Not initialized. Please call the "listen"/"startAllMicroservices" method before accessing the server.', + ); + } + return this.natsClient as T; + } + + public on< + EventKey extends keyof NatsEvents = keyof NatsEvents, + EventCallback extends NatsEvents[EventKey] = NatsEvents[EventKey], + >(event: EventKey, callback: EventCallback) { + this.statusEventEmitter.on(event, callback as any); + } + protected initializeSerializer(options: NatsOptions['options']) { this.serializer = options?.serializer ?? new NatsRecordSerializer(); } diff --git a/packages/microservices/server/server-redis.ts b/packages/microservices/server/server-redis.ts index cc6f53d69af..a9ed45c753b 100644 --- a/packages/microservices/server/server-redis.ts +++ b/packages/microservices/server/server-redis.ts @@ -1,7 +1,5 @@ import { isUndefined } from '@nestjs/common/utils/shared.utils'; import { - ERROR_EVENT, - MESSAGE_EVENT, NO_MESSAGE_HANDLER, REDIS_DEFAULT_HOST, REDIS_DEFAULT_PORT, @@ -9,12 +7,18 @@ import { import { RedisContext } from '../ctx-host'; import { Transport } from '../enums'; import { - CustomTransportStrategy, - IncomingRequest, - RedisOptions, -} from '../interfaces'; + RedisEvents, + RedisEventsMap, + RedisStatus, +} from '../events/redis.events'; +import { IncomingRequest, RedisOptions } from '../interfaces'; import { Server } from './server'; +// To enable type safety for Redis. This cant be uncommented by default +// because it would require the user to install the ioredis package even if they dont use Redis +// Otherwise, TypeScript would fail to compile the code. +// +// type Redis = import('ioredis').Redis; type Redis = any; let redisPackage = {} as any; @@ -22,14 +26,19 @@ let redisPackage = {} as any; /** * @publicApi */ -export class ServerRedis extends Server implements CustomTransportStrategy { +export class ServerRedis extends Server { public readonly transportId = Transport.REDIS; - private subClient: Redis; - private pubClient: Redis; - private isExplicitlyTerminated = false; + protected subClient: Redis; + protected pubClient: Redis; + protected isManuallyClosed = false; + protected wasInitialConnectionSuccessful = false; + protected pendingEventListeners: Array<{ + event: keyof RedisEvents; + callback: RedisEvents[keyof RedisEvents]; + }> = []; - constructor(private readonly options: RedisOptions['options']) { + constructor(protected readonly options: RedisOptions['options']) { super(); redisPackage = this.loadPackage('ioredis', ServerRedis.name, () => @@ -47,8 +56,17 @@ export class ServerRedis extends Server implements CustomTransportStrategy { this.subClient = this.createRedisClient(); this.pubClient = this.createRedisClient(); - this.handleError(this.pubClient); - this.handleError(this.subClient); + [this.subClient, this.pubClient].forEach((client, index) => { + const type = index === 0 ? 'pub' : 'sub'; + this.registerErrorListener(client); + this.registerReconnectListener(client); + this.registerReadyListener(client); + this.registerEndListener(client); + this.pendingEventListeners.forEach(({ event, callback }) => + client.on(event, (...args: [any]) => callback(type, ...args)), + ); + }); + this.pendingEventListeners = []; this.start(callback); } catch (err) { @@ -67,7 +85,7 @@ export class ServerRedis extends Server implements CustomTransportStrategy { public bindEvents(subClient: Redis, pubClient: Redis) { subClient.on( - this.options?.wildcards ? 'pmessage' : MESSAGE_EVENT, + this.options?.wildcards ? 'pmessage' : 'message', this.getMessageHandler(pubClient).bind(this), ); const subscribePatterns = [...this.messageHandlers.keys()]; @@ -87,9 +105,10 @@ export class ServerRedis extends Server implements CustomTransportStrategy { } public close() { - this.isExplicitlyTerminated = true; + this.isManuallyClosed = true; this.pubClient && this.pubClient.quit(); this.subClient && this.subClient.quit(); + this.pendingEventListeners = []; } public createRedisClient(): Redis { @@ -172,8 +191,52 @@ export class ServerRedis extends Server implements CustomTransportStrategy { return `${pattern}.reply`; } - public handleError(stream: any) { - stream.on(ERROR_EVENT, (err: any) => this.logger.error(err)); + public registerErrorListener(client: any) { + client.on(RedisEventsMap.ERROR, (err: any) => this.logger.error(err)); + } + + public registerReconnectListener(client: { + on: (event: string, fn: () => void) => void; + }) { + client.on(RedisEventsMap.RECONNECTING, () => { + if (this.isManuallyClosed) { + return; + } + this._status$.next(RedisStatus.RECONNECTING); + + if (this.wasInitialConnectionSuccessful) { + this.logger.log('Reconnecting to Redis...'); + } + }); + } + + public registerReadyListener(client: { + on: (event: string, fn: () => void) => void; + }) { + client.on(RedisEventsMap.READY, () => { + this._status$.next(RedisStatus.CONNECTED); + + this.logger.log('Connected to Redis. Subscribing to channels...'); + + if (!this.wasInitialConnectionSuccessful) { + this.wasInitialConnectionSuccessful = true; + } + }); + } + + public registerEndListener(client: { + on: (event: string, fn: () => void) => void; + }) { + client.on('end', () => { + if (this.isManuallyClosed) { + return; + } + this._status$.next(RedisStatus.DISCONNECTED); + + this.logger.error( + 'Disconnected from Redis. No further reconnection attempts will be made.', + ); + }); } public getClientOptions(): Partial { @@ -186,16 +249,40 @@ export class ServerRedis extends Server implements CustomTransportStrategy { } public createRetryStrategy(times: number): undefined | number | void { - if (this.isExplicitlyTerminated) { + if (this.isManuallyClosed) { return undefined; } - if ( - !this.getOptionsProp(this.options, 'retryAttempts') || - times > this.getOptionsProp(this.options, 'retryAttempts') - ) { + if (!this.getOptionsProp(this.options, 'retryAttempts')) { + this.logger.error( + 'Redis connection closed and retry attempts not specified', + ); + return; + } + if (times > this.getOptionsProp(this.options, 'retryAttempts')) { this.logger.error(`Retry time exhausted`); return; } - return this.getOptionsProp(this.options, 'retryDelay') || 0; + return this.getOptionsProp(this.options, 'retryDelay') ?? 5000; + } + + public unwrap(): T { + if (!this.pubClient || !this.subClient) { + throw new Error( + 'Not initialized. Please call the "listen"/"startAllMicroservices" method before accessing the server.', + ); + } + return [this.pubClient, this.subClient] as T; + } + + public on< + EventKey extends keyof RedisEvents = keyof RedisEvents, + EventCallback extends RedisEvents[EventKey] = RedisEvents[EventKey], + >(event: EventKey, callback: EventCallback) { + if (this.subClient && this.pubClient) { + this.subClient.on(event, (...args: [any]) => callback('sub', ...args)); + this.pubClient.on(event, (...args: [any]) => callback('pub', ...args)); + } else { + this.pendingEventListeners.push({ event, callback }); + } } } diff --git a/packages/microservices/server/server-rmq.ts b/packages/microservices/server/server-rmq.ts index c0ea0bd8ff4..418c06e297c 100644 --- a/packages/microservices/server/server-rmq.ts +++ b/packages/microservices/server/server-rmq.ts @@ -5,10 +5,7 @@ import { } from '@nestjs/common/utils/shared.utils'; import { CONNECTION_FAILED_MESSAGE, - CONNECT_EVENT, - CONNECT_FAILED_EVENT, DISCONNECTED_RMQ_MESSAGE, - DISCONNECT_EVENT, NO_MESSAGE_HANDLER, RQM_DEFAULT_IS_GLOBAL_PREFETCH_COUNT, RQM_DEFAULT_NOACK, @@ -22,8 +19,9 @@ import { } from '../constants'; import { RmqContext } from '../ctx-host'; import { Transport } from '../enums'; +import { RmqEvents, RmqEventsMap, RmqStatus } from '../events/rmq.events'; import { RmqUrl } from '../external/rmq-url.interface'; -import { CustomTransportStrategy, RmqOptions } from '../interfaces'; +import { RmqOptions } from '../interfaces'; import { IncomingRequest, OutgoingResponse, @@ -32,45 +30,50 @@ import { import { RmqRecordSerializer } from '../serializers/rmq-record.serializer'; import { Server } from './server'; -let rmqPackage: any = {}; +// To enable type safety for RMQ. This cant be uncommented by default +// because it would require the user to install the amqplib package even if they dont use RabbitMQ +// Otherwise, TypeScript would fail to compile the code. +// +type AmqpConnectionManager = + import('amqp-connection-manager').AmqpConnectionManager; +type ChannelWrapper = import('amqp-connection-manager').ChannelWrapper; +type Message = import('amqplib').Message; + +// type AmqpConnectionManager = any; +// type ChannelWrapper = any; +// type Message = any; + +let rmqPackage = {} as any; // as typeof import('amqp-connection-manager'); const INFINITE_CONNECTION_ATTEMPTS = -1; /** * @publicApi */ -export class ServerRMQ extends Server implements CustomTransportStrategy { +export class ServerRMQ extends Server { public readonly transportId = Transport.RMQ; - protected server: any = null; - protected channel: any = null; + protected server: AmqpConnectionManager = null; + protected channel: ChannelWrapper = null; protected connectionAttempts = 0; protected readonly urls: string[] | RmqUrl[]; protected readonly queue: string; - protected readonly prefetchCount: number; protected readonly noAck: boolean; protected readonly queueOptions: any; - protected readonly isGlobalPrefetchCount: boolean; - protected readonly noAssert: boolean; + protected pendingEventListeners: Array<{ + event: keyof RmqEvents; + callback: RmqEvents[keyof RmqEvents]; + }> = []; + constructor(protected readonly options: RmqOptions['options']) { super(); this.urls = this.getOptionsProp(this.options, 'urls') || [RQM_DEFAULT_URL]; this.queue = this.getOptionsProp(this.options, 'queue') || RQM_DEFAULT_QUEUE; - this.prefetchCount = - this.getOptionsProp(this.options, 'prefetchCount') || - RQM_DEFAULT_PREFETCH_COUNT; this.noAck = this.getOptionsProp(this.options, 'noAck', RQM_DEFAULT_NOACK); - this.isGlobalPrefetchCount = - this.getOptionsProp(this.options, 'isGlobalPrefetchCount') || - RQM_DEFAULT_IS_GLOBAL_PREFETCH_COUNT; this.queueOptions = this.getOptionsProp(this.options, 'queueOptions') || RQM_DEFAULT_QUEUE_OPTIONS; - this.noAssert = - this.getOptionsProp(this.options, 'noAssert') ?? - this.queueOptions.noAssert ?? - RQM_DEFAULT_NO_ASSERT; this.loadPackage('amqplib', ServerRMQ.name, () => require('amqplib')); rmqPackage = this.loadPackage( @@ -96,16 +99,18 @@ export class ServerRMQ extends Server implements CustomTransportStrategy { public close(): void { this.channel && this.channel.close(); this.server && this.server.close(); + this.pendingEventListeners = []; } public async start( callback?: (err?: unknown, ...optionalParams: unknown[]) => void, ) { this.server = this.createClient(); - this.server.on(CONNECT_EVENT, () => { + this.server.once(RmqEventsMap.CONNECT, () => { if (this.channel) { return; } + this._status$.next(RmqStatus.CONNECTED); this.channel = this.server.createChannel({ json: false, setup: (channel: any) => this.setupChannel(channel, callback), @@ -117,11 +122,18 @@ export class ServerRMQ extends Server implements CustomTransportStrategy { 'maxConnectionAttempts', INFINITE_CONNECTION_ATTEMPTS, ); - this.server.on(DISCONNECT_EVENT, (err: any) => { - this.logger.error(DISCONNECTED_RMQ_MESSAGE); - this.logger.error(err); - }); - this.server.on(CONNECT_FAILED_EVENT, (error: Record) => { + + this.registerConnectListener(); + this.registerDisconnectListener(); + this.pendingEventListeners.forEach(({ event, callback }) => + this.server.on(event, callback), + ); + this.pendingEventListeners = []; + + const connectFailedEvent = 'connectFailed'; + this.server.once(connectFailedEvent, (error: Record) => { + this._status$.next(RmqStatus.DISCONNECTED); + this.logger.error(CONNECTION_FAILED_MESSAGE); if (error?.err) { this.logger.error(error.err); @@ -149,11 +161,41 @@ export class ServerRMQ extends Server implements CustomTransportStrategy { }); } + private registerConnectListener() { + this.server.on(RmqEventsMap.CONNECT, (err: any) => { + this._status$.next(RmqStatus.CONNECTED); + }); + } + + private registerDisconnectListener() { + this.server.on(RmqEventsMap.DISCONNECT, (err: any) => { + this._status$.next(RmqStatus.DISCONNECTED); + this.logger.error(DISCONNECTED_RMQ_MESSAGE); + this.logger.error(err); + }); + } + public async setupChannel(channel: any, callback: Function) { - if (!this.noAssert) { + const noAssert = + this.getOptionsProp(this.options, 'noAssert') ?? + this.queueOptions.noAssert ?? + RQM_DEFAULT_NO_ASSERT; + + if (!noAssert) { await channel.assertQueue(this.queue, this.queueOptions); } - await channel.prefetch(this.prefetchCount, this.isGlobalPrefetchCount); + + const isGlobalPrefetchCount = this.getOptionsProp( + this.options, + 'isGlobalPrefetchCount', + RQM_DEFAULT_IS_GLOBAL_PREFETCH_COUNT, + ); + const prefetchCount = this.getOptionsProp( + this.options, + 'prefetchCount', + RQM_DEFAULT_PREFETCH_COUNT, + ); + await channel.prefetch(prefetchCount, isGlobalPrefetchCount); channel.consume( this.queue, (msg: Record) => this.handleMessage(msg, channel), @@ -192,7 +234,7 @@ export class ServerRMQ extends Server implements CustomTransportStrategy { if (!handler) { if (!this.noAck) { this.logger.warn(RQM_NO_MESSAGE_HANDLER`${pattern}`); - this.channel.nack(rmqContext.getMessage(), false, false); + this.channel.nack(rmqContext.getMessage() as Message, false, false); } const status = 'error'; const noHandlerPacket = { @@ -223,7 +265,7 @@ export class ServerRMQ extends Server implements CustomTransportStrategy { ): Promise { const handler = this.getHandlerByPattern(pattern); if (!handler && !this.noAck) { - this.channel.nack(context.getMessage(), false, false); + this.channel.nack(context.getMessage() as Message, false, false); return this.logger.warn(RQM_NO_EVENT_HANDLER`${pattern}`); } return super.handleEvent(pattern, packet, context); @@ -244,6 +286,26 @@ export class ServerRMQ extends Server implements CustomTransportStrategy { this.channel.sendToQueue(replyTo, buffer, { correlationId, ...options }); } + public unwrap(): T { + if (!this.server) { + throw new Error( + 'Not initialized. Please call the "listen"/"startAllMicroservices" method before accessing the server.', + ); + } + return this.server as T; + } + + public on< + EventKey extends keyof RmqEvents = keyof RmqEvents, + EventCallback extends RmqEvents[EventKey] = RmqEvents[EventKey], + >(event: EventKey, callback: EventCallback) { + if (this.server) { + this.server.addListener(event, callback); + } else { + this.pendingEventListeners.push({ event, callback }); + } + } + protected initializeSerializer(options: RmqOptions['options']) { this.serializer = options?.serializer ?? new RmqRecordSerializer(); } diff --git a/packages/microservices/server/server-tcp.ts b/packages/microservices/server/server-tcp.ts index b76a21c11f5..56c9c3b64f0 100644 --- a/packages/microservices/server/server-tcp.ts +++ b/packages/microservices/server/server-tcp.ts @@ -2,22 +2,19 @@ import { Type } from '@nestjs/common'; import { isString, isUndefined } from '@nestjs/common/utils/shared.utils'; import * as net from 'net'; import { Server as NetSocket, Socket } from 'net'; +import { createServer as tlsCreateServer, TlsOptions } from 'tls'; import { - CLOSE_EVENT, EADDRINUSE, ECONNREFUSED, - ERROR_EVENT, - MESSAGE_EVENT, NO_MESSAGE_HANDLER, TCP_DEFAULT_HOST, TCP_DEFAULT_PORT, } from '../constants'; import { TcpContext } from '../ctx-host/tcp.context'; import { Transport } from '../enums'; +import { TcpEvents, TcpEventsMap, TcpStatus } from '../events/tcp.events'; import { JsonSocket, TcpSocket } from '../helpers'; -import { createServer as tlsCreateServer } from 'tls'; import { - CustomTransportStrategy, IncomingRequest, PacketId, ReadPacket, @@ -29,17 +26,20 @@ import { Server } from './server'; /** * @publicApi */ -export class ServerTCP extends Server implements CustomTransportStrategy { +export class ServerTCP extends Server { public readonly transportId = Transport.TCP; protected server: NetSocket; - - private readonly port: number; - private readonly host: string; - private readonly socketClass: Type; - private isExplicitlyTerminated = false; - private retryAttemptsCount = 0; - private tlsOptions?; + protected readonly port: number; + protected readonly host: string; + protected readonly socketClass: Type; + protected isManuallyTerminated = false; + protected retryAttemptsCount = 0; + protected tlsOptions?: TlsOptions; + protected pendingEventListeners: Array<{ + event: keyof TcpEvents; + callback: TcpEvents[keyof TcpEvents]; + }> = []; constructor(private readonly options: TcpOptions['options']) { super(); @@ -57,8 +57,10 @@ export class ServerTCP extends Server implements CustomTransportStrategy { public listen( callback: (err?: unknown, ...optionalParams: unknown[]) => void, ) { - this.server.once(ERROR_EVENT, (err: Record) => { + this.server.once(TcpEventsMap.ERROR, (err: Record) => { if (err?.code === EADDRINUSE || err?.code === ECONNREFUSED) { + this._status$.next(TcpStatus.DISCONNECTED); + return callback(err); } }); @@ -66,17 +68,18 @@ export class ServerTCP extends Server implements CustomTransportStrategy { } public close() { - this.isExplicitlyTerminated = true; + this.isManuallyTerminated = true; this.server.close(); + this.pendingEventListeners = []; } public bindHandler(socket: Socket) { const readSocket = this.getSocketInstance(socket); - readSocket.on(MESSAGE_EVENT, async (msg: ReadPacket & PacketId) => + readSocket.on('message', async (msg: ReadPacket & PacketId) => this.handleMessage(readSocket, msg), ); - readSocket.on(ERROR_EVENT, this.handleError.bind(this)); + readSocket.on(TcpEventsMap.ERROR, this.handleError.bind(this)); } public async handleMessage(socket: TcpSocket, rawMessage: unknown) { @@ -89,6 +92,7 @@ export class ServerTCP extends Server implements CustomTransportStrategy { if (isUndefined((packet as IncomingRequest).id)) { return this.handleEvent(pattern, packet, tcpContext); } + const handler = this.getHandlerByPattern(pattern); if (!handler) { const status = 'error'; @@ -115,7 +119,7 @@ export class ServerTCP extends Server implements CustomTransportStrategy { public handleClose(): undefined | number | NodeJS.Timer { if ( - this.isExplicitlyTerminated || + this.isManuallyTerminated || !this.getOptionsProp(this.options, 'retryAttempts') || this.retryAttemptsCount >= this.getOptionsProp(this.options, 'retryAttempts') @@ -129,7 +133,27 @@ export class ServerTCP extends Server implements CustomTransportStrategy { ); } - private init() { + public unwrap(): T { + if (!this.server) { + throw new Error( + 'Not initialized. Please call the "listen"/"startAllMicroservices" method before accessing the server.', + ); + } + return this.server as T; + } + + public on< + EventKey extends keyof TcpEvents = keyof TcpEvents, + EventCallback extends TcpEvents[EventKey] = TcpEvents[EventKey], + >(event: EventKey, callback: EventCallback) { + if (this.server) { + this.server.on(event, callback as any); + } else { + this.pendingEventListeners.push({ event, callback }); + } + } + + protected init() { if (this.tlsOptions) { // TLS enabled, use tls server this.server = tlsCreateServer( @@ -140,11 +164,39 @@ export class ServerTCP extends Server implements CustomTransportStrategy { // TLS disabled, use net server this.server = net.createServer(this.bindHandler.bind(this)); } - this.server.on(ERROR_EVENT, this.handleError.bind(this)); - this.server.on(CLOSE_EVENT, this.handleClose.bind(this)); + this.registerListeningListener(this.server); + this.registerErrorListener(this.server); + this.registerCloseListener(this.server); + + this.pendingEventListeners.forEach(({ event, callback }) => + this.server.on(event, callback), + ); + this.pendingEventListeners = []; + } + + protected registerListeningListener(socket: net.Server) { + socket.on(TcpEventsMap.LISTENING, () => { + this._status$.next(TcpStatus.CONNECTED); + }); + } + + protected registerErrorListener(socket: net.Server) { + socket.on(TcpEventsMap.ERROR, err => { + if ('code' in err && err.code === ECONNREFUSED) { + this._status$.next(TcpStatus.DISCONNECTED); + } + this.handleError(err as any); + }); + } + + protected registerCloseListener(socket: net.Server) { + socket.on(TcpEventsMap.CLOSE, () => { + this._status$.next(TcpStatus.DISCONNECTED); + this.handleClose(); + }); } - private getSocketInstance(socket: Socket): TcpSocket { + protected getSocketInstance(socket: Socket): TcpSocket { return new this.socketClass(socket); } } diff --git a/packages/microservices/server/server.ts b/packages/microservices/server/server.ts index 076900054f3..4e86e1ee51d 100644 --- a/packages/microservices/server/server.ts +++ b/packages/microservices/server/server.ts @@ -8,13 +8,20 @@ import { Observable, ObservedValueOf, of, + ReplaySubject, Subject, Subscription, } from 'rxjs'; -import { catchError, finalize, mergeMap } from 'rxjs/operators'; +import { + catchError, + distinctUntilChanged, + finalize, + mergeMap, +} from 'rxjs/operators'; import { NO_EVENT_HANDLER } from '../constants'; import { BaseRpcContext } from '../ctx-host/base-rpc.context'; import { IncomingRequestDeserializer } from '../deserializers/incoming-request.deserializer'; +import { Transport } from '../enums'; import { ClientOptions, KafkaOptions, @@ -37,11 +44,52 @@ import { transformPatternToRoute } from '../utils'; /** * @publicApi */ -export abstract class Server { +export abstract class Server< + EventsMap extends Record = Record, + Status extends string = string, +> { + /** + * Unique transport identifier. + */ + readonly transportId?: Transport | symbol; + protected readonly messageHandlers = new Map(); protected readonly logger: LoggerService = new Logger(Server.name); protected serializer: ConsumerSerializer; protected deserializer: ConsumerDeserializer; + protected _status$ = new ReplaySubject(1); + + /** + * Returns an observable that emits status changes. + */ + public get status(): Observable { + return this._status$.asObservable().pipe(distinctUntilChanged()); + } + + /** + * Registers an event listener for the given event. + * @param event Event name + * @param callback Callback to be executed when the event is emitted + */ + public abstract on< + EventKey extends keyof EventsMap = keyof EventsMap, + EventCallback extends EventsMap[EventKey] = EventsMap[EventKey], + >(event: EventKey, callback: EventCallback): any; + /** + * Returns an instance of the underlying server/broker instance, + * or a group of servers if there are more than one. + */ + public abstract unwrap(): T; + + /** + * Method called when server is being initialized. + * @param callback Function to be called upon initialization + */ + public abstract listen(callback: (...optionalParams: unknown[]) => any): any; + /** + * Method called when server is being terminated. + */ + public abstract close(): any; public addHandler( pattern: any, diff --git a/packages/microservices/test/client/client-kafka.spec.ts b/packages/microservices/test/client/client-kafka.spec.ts index c6c030ee616..0d404817b8f 100644 --- a/packages/microservices/test/client/client-kafka.spec.ts +++ b/packages/microservices/test/client/client-kafka.spec.ts @@ -176,6 +176,21 @@ describe('ClientKafka', () => { run, events: { GROUP_JOIN: 'consumer.group_join', + HEARTBEAT: 'consumer.heartbeat', + COMMIT_OFFSETS: 'consumer.commit_offsets', + FETCH_START: 'consumer.fetch_start', + FETCH: 'consumer.fetch', + START_BATCH_PROCESS: 'consumer.start_batch_process', + END_BATCH_PROCESS: 'consumer.end_batch_process', + CONNECT: 'consumer.connect', + DISCONNECT: 'consumer.disconnect', + STOP: 'consumer.stop', + CRASH: 'consumer.crash', + REBALANCING: 'consumer.rebalancing', + RECEIVED_UNSUBSCRIBED_TOPICS: 'consumer.received_unsubscribed_topics', + REQUEST: 'consumer.network.request', + REQUEST_TIMEOUT: 'consumer.network.request_timeout', + REQUEST_QUEUE_SIZE: 'consumer.network.request_queue_size', }, on, }; @@ -184,6 +199,14 @@ describe('ClientKafka', () => { return { connect, send, + events: { + CONNECT: 'producer.connect', + DISCONNECT: 'producer.disconnect', + REQUEST: 'producer.network.request', + REQUEST_TIMEOUT: 'producer.network.request_timeout', + REQUEST_QUEUE_SIZE: 'producer.network.request_queue_size', + }, + on, }; }); kafkaClient = { @@ -250,16 +273,16 @@ describe('ClientKafka', () => { const consumer = { disconnect: sinon.stub().resolves() }; const producer = { disconnect: sinon.stub().resolves() }; beforeEach(() => { - (client as any).consumer = consumer; - (client as any).producer = producer; + (client as any)._consumer = consumer; + (client as any)._producer = producer; }); it('should close server', async () => { await client.close(); expect(consumer.disconnect.calledOnce).to.be.true; expect(producer.disconnect.calledOnce).to.be.true; - expect((client as any).consumer).to.be.null; - expect((client as any).producer).to.be.null; + expect((client as any)._consumer).to.be.null; + expect((client as any)._producer).to.be.null; expect((client as any).client).to.be.null; }); }); @@ -267,7 +290,6 @@ describe('ClientKafka', () => { describe('connect', () => { let consumerAssignmentsStub: sinon.SinonStub; let bindTopicsStub: sinon.SinonStub; - // let handleErrorsSpy: sinon.SinonSpy; describe('consumer and producer', () => { beforeEach(() => { @@ -285,14 +307,10 @@ describe('ClientKafka', () => { expect(createClientStub.calledOnce).to.be.true; expect(producerStub.calledOnce).to.be.true; - expect(consumerStub.calledOnce).to.be.true; - - expect(on.calledOnce).to.be.true; + expect(on.called).to.be.true; expect(client['consumerAssignments']).to.be.empty; - expect(connect.calledTwice).to.be.true; - expect(bindTopicsStub.calledOnce).to.be.true; expect(connection).to.deep.equal(producerStub()); }); @@ -428,7 +446,7 @@ describe('ClientKafka', () => { describe('bindTopics', () => { it('should bind topics from response patterns', async () => { (client as any).responsePatterns = [replyTopic]; - (client as any).consumer = kafkaClient.consumer(); + (client as any)._consumer = kafkaClient.consumer(); await client.bindTopics(); @@ -443,7 +461,7 @@ describe('ClientKafka', () => { it('should bind topics from response patterns with options', async () => { (client as any).responsePatterns = [replyTopic]; - (client as any).consumer = kafkaClient.consumer(); + (client as any)._consumer = kafkaClient.consumer(); (client as any).options.subscribe = {}; (client as any).options.subscribe.fromBeginning = true; @@ -567,7 +585,7 @@ describe('ClientKafka', () => { }); it('should publish packet', async () => { - sinon.stub(client as any, 'producer').value({ + sinon.stub(client as any, '_producer').value({ send: sendSpy, }); @@ -636,13 +654,14 @@ describe('ClientKafka', () => { }); describe('publish', () => { + const waitForNextTick = async () => + await new Promise(resolve => process.nextTick(resolve)); const readPacket = { pattern: topic, data: messageValue, }; let assignPacketIdStub: sinon.SinonStub; - let normalizePatternSpy: sinon.SinonSpy; let getResponsePatternNameSpy: sinon.SinonSpy; let getReplyTopicPartitionSpy: sinon.SinonSpy; @@ -650,7 +669,6 @@ describe('ClientKafka', () => { let sendSpy: sinon.SinonSpy; beforeEach(() => { - // spy normalizePatternSpy = sinon.spy(client as any, 'normalizePattern'); getResponsePatternNameSpy = sinon.spy( client as any, @@ -663,7 +681,6 @@ describe('ClientKafka', () => { routingMapSetSpy = sinon.spy((client as any).routingMap, 'set'); sendSpy = sinon.spy(() => Promise.resolve()); - // stub assignPacketIdStub = sinon .stub(client as any, 'assignPacketId') .callsFake(packet => @@ -672,45 +689,61 @@ describe('ClientKafka', () => { }), ); - sinon.stub(client as any, 'producer').value({ + sinon.stub(client as any, '_producer').value({ send: sendSpy, }); - // set client['consumerAssignments'] = { [replyTopic]: parseFloat(replyPartition), }; }); it('should assign a packet id', async () => { - await client['publish'](readPacket, callback); + client['publish'](readPacket, callback); + + await waitForNextTick(); + expect(assignPacketIdStub.calledWith(readPacket)).to.be.true; }); it('should normalize the pattern', async () => { - await client['publish'](readPacket, callback); + client['publish'](readPacket, callback); + + await waitForNextTick(); + expect(normalizePatternSpy.calledWith(topic)).to.be.true; }); it('should get the reply pattern', async () => { - await client['publish'](readPacket, callback); + client['publish'](readPacket, callback); + + await waitForNextTick(); + expect(getResponsePatternNameSpy.calledWith(topic)).to.be.true; }); it('should get the reply partition', async () => { - await client['publish'](readPacket, callback); + client['publish'](readPacket, callback); + + await waitForNextTick(); + expect(getReplyTopicPartitionSpy.calledWith(replyTopic)).to.be.true; }); it('should add the callback to the routing map', async () => { - await client['publish'](readPacket, callback); + client['publish'](readPacket, callback); + + await waitForNextTick(); + expect(routingMapSetSpy.calledOnce).to.be.true; expect(routingMapSetSpy.args[0][0]).to.eq(correlationId); expect(routingMapSetSpy.args[0][1]).to.eq(callback); }); it('should send the message with headers', async () => { - await client['publish'](readPacket, callback); + client['publish'](readPacket, callback); + + await waitForNextTick(); expect(sendSpy.calledOnce).to.be.true; expect(sendSpy.args[0][0].topic).to.eq(topic); @@ -731,6 +764,9 @@ describe('ClientKafka', () => { it('should remove callback from routing map when unsubscribe', async () => { client['publish'](readPacket, callback)(); + + await waitForNextTick(); + expect(client['routingMap'].has(correlationId)).to.be.false; expect(client['routingMap'].size).to.eq(0); }); @@ -744,7 +780,7 @@ describe('ClientKafka', () => { throw new Error(); }); - clientProducerStub = sinon.stub(client as any, 'producer').value({ + clientProducerStub = sinon.stub(client as any, '_producer').value({ send: sendStub, }); }); diff --git a/packages/microservices/test/client/client-mqtt.spec.ts b/packages/microservices/test/client/client-mqtt.spec.ts index cab94c152a3..fa484d210be 100644 --- a/packages/microservices/test/client/client-mqtt.spec.ts +++ b/packages/microservices/test/client/client-mqtt.spec.ts @@ -2,7 +2,7 @@ import { expect } from 'chai'; import { EMPTY } from 'rxjs'; import * as sinon from 'sinon'; import { ClientMqtt } from '../../client/client-mqtt'; -import { ERROR_EVENT } from '../../constants'; +import { MqttEventsMap } from '../../events/mqtt.events'; import { ReadPacket } from '../../interfaces'; import { MqttRecord } from '../../record-builders'; @@ -245,7 +245,7 @@ describe('ClientMqtt', () => { }); describe('connect', () => { let createClientStub: sinon.SinonStub; - let handleErrorsSpy: sinon.SinonSpy; + let registerErrorListenerSpy: sinon.SinonSpy; let connect$Stub: sinon.SinonStub; let mergeCloseEvent: sinon.SinonStub; @@ -255,9 +255,10 @@ describe('ClientMqtt', () => { ({ addListener: () => ({}), removeListener: () => ({}), + on: () => ({}), }) as any, ); - handleErrorsSpy = sinon.spy(client, 'handleError'); + registerErrorListenerSpy = sinon.spy(client, 'registerErrorListener'); connect$Stub = sinon.stub(client, 'connect$' as any).callsFake(() => ({ subscribe: ({ complete }) => complete(), pipe() { @@ -270,7 +271,7 @@ describe('ClientMqtt', () => { }); afterEach(() => { createClientStub.restore(); - handleErrorsSpy.restore(); + registerErrorListenerSpy.restore(); connect$Stub.restore(); mergeCloseEvent.restore(); }); @@ -279,8 +280,8 @@ describe('ClientMqtt', () => { client['mqttClient'] = null; await client.connect(); }); - it('should call "handleError" once', async () => { - expect(handleErrorsSpy.called).to.be.true; + it('should call "registerErrorListener" once', async () => { + expect(registerErrorListenerSpy.called).to.be.true; }); it('should call "createClient" once', async () => { expect(createClientStub.called).to.be.true; @@ -296,8 +297,8 @@ describe('ClientMqtt', () => { it('should not call "createClient"', () => { expect(createClientStub.called).to.be.false; }); - it('should not call "handleError"', () => { - expect(handleErrorsSpy.called).to.be.false; + it('should not call "registerErrorListener"', () => { + expect(registerErrorListenerSpy.called).to.be.false; }); it('should not call "connect$"', () => { expect(connect$Stub.called).to.be.false; @@ -316,14 +317,54 @@ describe('ClientMqtt', () => { }); }); }); - describe('handleError', () => { + describe('registerErrorListener', () => { it('should bind error event handler', () => { const callback = sinon.stub().callsFake((_, fn) => fn({ code: 'test' })); const emitter = { - addListener: callback, + on: callback, }; - client.handleError(emitter as any); - expect(callback.getCall(0).args[0]).to.be.eql(ERROR_EVENT); + client.registerErrorListener(emitter as any); + expect(callback.getCall(0).args[0]).to.be.eql(MqttEventsMap.ERROR); + }); + }); + describe('registerConnectListener', () => { + it('should bind connect event handler', () => { + const callback = sinon.stub().callsFake((_, fn) => fn({ code: 'test' })); + const emitter = { + on: callback, + }; + client.registerConnectListener(emitter as any); + expect(callback.getCall(0).args[0]).to.be.eql(MqttEventsMap.CONNECT); + }); + }); + describe('registerDisconnectListener', () => { + it('should bind disconnect event handler', () => { + const callback = sinon.stub().callsFake((_, fn) => fn({ code: 'test' })); + const emitter = { + on: callback, + }; + client.registerDisconnectListener(emitter as any); + expect(callback.getCall(0).args[0]).to.be.eql(MqttEventsMap.DISCONNECT); + }); + }); + describe('registerOfflineListener', () => { + it('should bind offline event handler', () => { + const callback = sinon.stub().callsFake((_, fn) => fn({ code: 'test' })); + const emitter = { + on: callback, + }; + client.registerOfflineListener(emitter as any); + expect(callback.getCall(0).args[0]).to.be.eql(MqttEventsMap.OFFLINE); + }); + }); + describe('registerCloseListener', () => { + it('should bind close event handler', () => { + const callback = sinon.stub().callsFake((_, fn) => fn({ code: 'test' })); + const emitter = { + on: callback, + }; + client.registerCloseListener(emitter as any); + expect(callback.getCall(0).args[0]).to.be.eql(MqttEventsMap.CLOSE); }); }); describe('dispatchEvent', () => { diff --git a/packages/microservices/test/client/client-nats.spec.ts b/packages/microservices/test/client/client-nats.spec.ts index d9f93bc2170..cfb701abf13 100644 --- a/packages/microservices/test/client/client-nats.spec.ts +++ b/packages/microservices/test/client/client-nats.spec.ts @@ -241,7 +241,7 @@ describe('ClientNats', () => { beforeEach(async () => { createClientSpy = sinon .stub(client, 'createClient') - .callsFake(() => ({}) as any); + .callsFake(() => Promise.resolve({})); handleStatusUpdatesSpy = sinon.spy(client, 'handleStatusUpdates'); await client.connect(); @@ -253,7 +253,7 @@ describe('ClientNats', () => { describe('when is not connected', () => { beforeEach(async () => { client['natsClient'] = null; - client['clientConnectionPromise'] = null; + client['connectionPromise'] = null; await client.connect(); }); it('should call "handleStatusUpdatesSpy" once', async () => { diff --git a/packages/microservices/test/client/client-proxy.spec.ts b/packages/microservices/test/client/client-proxy.spec.ts index ea1a912dc10..e0afccdb036 100644 --- a/packages/microservices/test/client/client-proxy.spec.ts +++ b/packages/microservices/test/client/client-proxy.spec.ts @@ -8,9 +8,15 @@ class TestClientProxy extends ClientProxy { protected async dispatchEvent( packet: ReadPacket, ): Promise {} + public async connect() { return Promise.resolve(); } + + public unwrap(): T { + throw new Error('Method not implemented.'); + } + public publish(pattern, callback): any {} public async close() {} } diff --git a/packages/microservices/test/client/client-redis.spec.ts b/packages/microservices/test/client/client-redis.spec.ts index 6cae9da8565..eaadb6cac08 100644 --- a/packages/microservices/test/client/client-redis.spec.ts +++ b/packages/microservices/test/client/client-redis.spec.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; import * as sinon from 'sinon'; import { ClientRedis } from '../../client/client-redis'; -import { ERROR_EVENT } from '../../constants'; +import { RedisEventsMap } from '../../events/redis.events'; describe('ClientRedis', () => { const test = 'test'; @@ -28,8 +28,8 @@ describe('ClientRedis', () => { removeListenerSpy: sinon.SinonSpy, unsubscribeSpy: sinon.SinonSpy, connectSpy: sinon.SinonSpy, - sub, - pub; + sub: any, + pub: any; beforeEach(() => { subscribeSpy = sinon.spy((name, fn) => fn()); @@ -43,7 +43,6 @@ describe('ClientRedis', () => { on: (type, handler) => (type === 'subscribe' ? handler() : onSpy()), removeListener: removeListenerSpy, unsubscribe: unsubscribeSpy, - addListener: () => ({}), }; pub = { publish: publishSpy }; (client as any).subClient = sub; @@ -98,7 +97,7 @@ describe('ClientRedis', () => { getReplyPatternStub = sinon .stub(client, 'getReplyPattern') .callsFake(() => channel); - subscription = await client['publish'](msg, callback); + subscription = client['publish'](msg, callback); subscription(channel, JSON.stringify({ isDisposed: true, id })); }); afterEach(() => { @@ -181,23 +180,26 @@ describe('ClientRedis', () => { }); }); describe('close', () => { + const untypedClient = client as any; + let pubClose: sinon.SinonSpy; let subClose: sinon.SinonSpy; - let pub, sub; + let pub: any, sub: any; + beforeEach(() => { pubClose = sinon.spy(); subClose = sinon.spy(); pub = { quit: pubClose }; sub = { quit: subClose }; - (client as any).pubClient = pub; - (client as any).subClient = sub; + untypedClient.pubClient = pub; + untypedClient.subClient = sub; }); it('should close "pub" when it is not null', () => { client.close(); expect(pubClose.called).to.be.true; }); it('should not close "pub" when it is null', () => { - (client as any).pubClient = null; + untypedClient.pubClient = null; client.close(); expect(pubClose.called).to.be.false; }); @@ -206,47 +208,80 @@ describe('ClientRedis', () => { expect(subClose.called).to.be.true; }); it('should not close "sub" when it is null', () => { - (client as any).subClient = null; + untypedClient.subClient = null; client.close(); expect(subClose.called).to.be.false; }); }); describe('connect', () => { let createClientSpy: sinon.SinonSpy; - let handleErrorsSpy: sinon.SinonSpy; + let registerErrorListenerSpy: sinon.SinonSpy; beforeEach(() => { createClientSpy = sinon.stub(client, 'createClient').callsFake( () => ({ + on: () => null, addListener: () => null, removeListener: () => null, }) as any, ); - handleErrorsSpy = sinon.spy(client, 'handleError'); + registerErrorListenerSpy = sinon.spy(client, 'registerErrorListener'); client.connect(); client['pubClient'] = null; }); afterEach(() => { createClientSpy.restore(); - handleErrorsSpy.restore(); + registerErrorListenerSpy.restore(); }); it('should call "createClient" twice', () => { expect(createClientSpy.calledTwice).to.be.true; }); - it('should call "handleError" twice', () => { - expect(handleErrorsSpy.calledTwice).to.be.true; + it('should call "registerErrorListener" twice', () => { + expect(registerErrorListenerSpy.calledTwice).to.be.true; }); }); - describe('handleError', () => { + describe('registerErrorListener', () => { it('should bind error event handler', () => { const callback = sinon.stub().callsFake((_, fn) => fn({ code: 'test' })); const emitter = { addListener: callback, }; - client.handleError(emitter as any); - expect(callback.getCall(0).args[0]).to.be.eql(ERROR_EVENT); + client.registerErrorListener(emitter as any); + expect(callback.getCall(0).args[0]).to.be.eql(RedisEventsMap.ERROR); + }); + }); + describe('registerEndListener', () => { + it('should bind end event handler', () => { + const callback = sinon.stub().callsFake((_, fn) => fn({ code: 'test' })); + const emitter = { + on: callback, + }; + client.registerEndListener(emitter as any); + expect(callback.getCall(0).args[0]).to.be.eql(RedisEventsMap.END); + }); + }); + describe('registerReadyListener', () => { + it('should bind ready event handler', () => { + const callback = sinon.stub().callsFake((_, fn) => fn({ code: 'test' })); + const emitter = { + on: callback, + }; + client.registerReadyListener(emitter as any); + expect(callback.getCall(0).args[0]).to.be.eql(RedisEventsMap.READY); + }); + }); + describe('registerReconnectListener', () => { + it('should bind reconnect event handler', () => { + const callback = sinon.stub().callsFake((_, fn) => fn({ code: 'test' })); + const emitter = { + on: callback, + }; + client.registerReconnectListener(emitter as any); + expect(callback.getCall(0).args[0]).to.be.eql( + RedisEventsMap.RECONNECTING, + ); }); }); describe('getClientOptions', () => { @@ -262,14 +297,14 @@ describe('ClientRedis', () => { describe('createRetryStrategy', () => { describe('when is terminated', () => { it('should return undefined', () => { - (client as any).isExplicitlyTerminated = true; + (client as any).isManuallyClosed = true; const result = client.createRetryStrategy(0); expect(result).to.be.undefined; }); }); describe('when "retryAttempts" does not exist', () => { it('should return undefined', () => { - (client as any).isExplicitlyTerminated = false; + (client as any).isManuallyClosed = false; (client as any).options.options = {}; (client as any).options.options.retryAttempts = undefined; const result = client.createRetryStrategy(1); @@ -278,7 +313,7 @@ describe('ClientRedis', () => { }); describe('when "attempts" count is max', () => { it('should return undefined', () => { - (client as any).isExplicitlyTerminated = false; + (client as any).isManuallyClosed = false; (client as any).options.options = {}; (client as any).options.options.retryAttempts = 3; const result = client.createRetryStrategy(4); @@ -288,7 +323,7 @@ describe('ClientRedis', () => { describe('otherwise', () => { it('should return delay (ms)', () => { (client as any).options = {}; - (client as any).isExplicitlyTerminated = false; + (client as any).isManuallyClosed = false; (client as any).options.retryAttempts = 3; (client as any).options.retryDelay = 3; const result = client.createRetryStrategy(2); diff --git a/packages/microservices/test/client/client-rmq.spec.ts b/packages/microservices/test/client/client-rmq.spec.ts index b9083e1fa4c..3a3a29458ec 100644 --- a/packages/microservices/test/client/client-rmq.spec.ts +++ b/packages/microservices/test/client/client-rmq.spec.ts @@ -11,22 +11,9 @@ describe('ClientRMQ', function () { let client: ClientRMQ; - describe('constructor', () => { - it(`should fallback to queueOptions.noAssert when 'noAssert' is undefined`, () => { - const queueOptions = { - noAssert: true, - }; - const instance = new ClientRMQ({ - queueOptions, - }); - - expect(instance).property('noAssert').to.eq(queueOptions.noAssert); - }); - }); - describe('connect', () => { let createClientStub: sinon.SinonStub; - let handleErrorsSpy: sinon.SinonSpy; + let registerErrorListenerSpy: sinon.SinonSpy; let connect$Stub: sinon.SinonStub; beforeEach(async () => { @@ -35,7 +22,7 @@ describe('ClientRMQ', function () { addListener: () => ({}), removeListener: () => ({}), })); - handleErrorsSpy = sinon.spy(client, 'handleError'); + registerErrorListenerSpy = sinon.spy(client, 'registerErrorListener'); connect$Stub = sinon.stub(client, 'connect$' as any).callsFake(() => ({ subscribe: resolve => resolve(), toPromise() { @@ -56,8 +43,8 @@ describe('ClientRMQ', function () { await client.connect(); } catch {} }); - it('should call "handleError" once', async () => { - expect(handleErrorsSpy.called).to.be.true; + it('should call "registerErrorListener" once', async () => { + expect(registerErrorListenerSpy.called).to.be.true; }); it('should call "createClient" once', async () => { expect(createClientStub.called).to.be.true; @@ -74,8 +61,8 @@ describe('ClientRMQ', function () { it('should not call "createClient"', () => { expect(createClientStub.called).to.be.false; }); - it('should not call "handleError"', () => { - expect(handleErrorsSpy.called).to.be.false; + it('should not call "registerErrorListener"', () => { + expect(registerErrorListenerSpy.called).to.be.false; }); it('should not call "connect$"', () => { expect(connect$Stub.called).to.be.false; diff --git a/packages/microservices/test/client/client-tcp.spec.ts b/packages/microservices/test/client/client-tcp.spec.ts index b1b7941bb45..7a944970010 100644 --- a/packages/microservices/test/client/client-tcp.spec.ts +++ b/packages/microservices/test/client/client-tcp.spec.ts @@ -3,15 +3,18 @@ import { Socket as NetSocket } from 'net'; import * as sinon from 'sinon'; import { TLSSocket } from 'tls'; import { ClientTCP } from '../../client/client-tcp'; -import { ERROR_EVENT } from '../../constants'; +import { TcpEventsMap } from '../../events/tcp.events'; describe('ClientTCP', () => { let client: ClientTCP; - let socket; + let untypedClient: any; + let socket: any; let createSocketStub: sinon.SinonStub; beforeEach(() => { client = new ClientTCP({}); + untypedClient = client as any; + const onFakeCallback = (event, callback) => event !== 'error' && event !== 'close' && callback({}); @@ -63,7 +66,7 @@ describe('ClientTCP', () => { }); }); describe('handleResponse', () => { - let callback; + let callback: sinon.SinonSpy; const id = '1'; describe('when disposed', () => { @@ -106,14 +109,20 @@ describe('ClientTCP', () => { }); }); describe('connect', () => { - let bindEventsSpy: sinon.SinonSpy; + let registerConnectListenerSpy: sinon.SinonSpy; + let registerErrorListenerSpy: sinon.SinonSpy; + let registerCloseListenerSpy: sinon.SinonSpy; let connect$Stub: sinon.SinonStub; beforeEach(async () => { - bindEventsSpy = sinon.spy(client, 'bindEvents'); + registerConnectListenerSpy = sinon.spy(client, 'registerConnectListener'); + registerErrorListenerSpy = sinon.spy(client, 'registerErrorListener'); + registerCloseListenerSpy = sinon.spy(client, 'registerCloseListener'); }); afterEach(() => { - bindEventsSpy.restore(); + registerConnectListenerSpy.restore(); + registerErrorListenerSpy.restore(); + registerCloseListenerSpy.restore; }); describe('when is not connected', () => { beforeEach(async () => { @@ -130,8 +139,14 @@ describe('ClientTCP', () => { afterEach(() => { connect$Stub.restore(); }); - it('should call "bindEvents" once', async () => { - expect(bindEventsSpy.called).to.be.true; + it('should call "registerConnectListener" once', async () => { + expect(registerConnectListenerSpy.called).to.be.true; + }); + it('should call "registerErrorListener" once', async () => { + expect(registerErrorListenerSpy.called).to.be.true; + }); + it('should call "registerCloseListener" once', async () => { + expect(registerCloseListenerSpy.called).to.be.true; }); it('should call "createSocket" once', async () => { expect(createSocketStub.called).to.be.true; @@ -151,34 +166,31 @@ describe('ClientTCP', () => { expect(createSocketStub.called).to.be.false; }); it('should not call "bindEvents"', () => { - expect(bindEventsSpy.called).to.be.false; + expect(registerConnectListenerSpy.called).to.be.false; }); }); }); describe('close', () => { - let routingMap; - let callback; + let routingMap: Map; + let callback: sinon.SinonSpy; beforeEach(() => { routingMap = new Map(); callback = sinon.spy(); routingMap.set('some id', callback); - (client as any).socket = socket; - (client as any).isConnected = true; - (client as any).routingMap = routingMap; + + untypedClient.socket = socket; + untypedClient.routingMap = routingMap; client.close(); }); it('should end() socket', () => { expect(socket.end.called).to.be.true; }); - it('should set "isConnected" to false', () => { - expect((client as any).isConnected).to.be.false; - }); it('should set "socket" to null', () => { - expect((client as any).socket).to.be.null; + expect(untypedClient.socket).to.be.null; }); it('should clear out the routing map', () => { - expect((client as any).routingMap.size).to.be.eq(0); + expect(untypedClient.routingMap.size).to.be.eq(0); }); it('should call callbacks', () => { expect( @@ -188,14 +200,34 @@ describe('ClientTCP', () => { ).to.be.true; }); }); - describe('bindEvents', () => { + describe('registerErrorListener', () => { it('should bind error event handler', () => { const callback = sinon.stub().callsFake((_, fn) => fn({ code: 'test' })); const emitter = { on: callback, }; - client.bindEvents(emitter as any); - expect(callback.getCall(0).args[0]).to.be.eql(ERROR_EVENT); + client.registerErrorListener(emitter as any); + expect(callback.getCall(0).args[0]).to.be.eql(TcpEventsMap.ERROR); + }); + }); + describe('registerCloseListener', () => { + it('should bind close event handler', () => { + const callback = sinon.stub().callsFake((_, fn) => fn({ code: 'test' })); + const emitter = { + on: callback, + }; + client.registerCloseListener(emitter as any); + expect(callback.getCall(0).args[0]).to.be.eql(TcpEventsMap.CLOSE); + }); + }); + describe('registerConnectListener', () => { + it('should bind connect event handler', () => { + const callback = sinon.stub().callsFake((_, fn) => fn({ code: 'test' })); + const emitter = { + on: callback, + }; + client.registerConnectListener(emitter as any); + expect(callback.getCall(0).args[0]).to.be.eql(TcpEventsMap.CONNECT); }); }); describe('dispatchEvent', () => { @@ -207,7 +239,7 @@ describe('ClientTCP', () => { internalSocket = { sendMessage: sendMessageStub, }; - (client as any).socket = internalSocket; + untypedClient.socket = internalSocket; }); it('should publish packet', async () => { diff --git a/packages/microservices/test/json-socket/connection.spec.ts b/packages/microservices/test/json-socket/connection.spec.ts index df95cbbcc2b..8fb18f2e707 100644 --- a/packages/microservices/test/json-socket/connection.spec.ts +++ b/packages/microservices/test/json-socket/connection.spec.ts @@ -1,11 +1,13 @@ import { expect } from 'chai'; import { AddressInfo, createServer, Socket } from 'net'; -import { CONNECT_EVENT, MESSAGE_EVENT } from '../../constants'; +import { TcpEventsMap } from '../../events/tcp.events'; import { JsonSocket } from '../../helpers/json-socket'; import { longPayload } from './data/long-payload-with-special-chars'; import * as helpers from './helpers'; import { ip } from './helpers'; +const MESSAGE_EVENT = 'message'; + describe('JsonSocket connection', () => { it('should connect, send and receive message', done => { helpers.createServerAndClient( @@ -179,7 +181,7 @@ describe('JsonSocket connection', () => { expect(serverSocket['isClosed']).to.equal(true); expect(clientSocket['isClosed']).to.equal(true); - clientSocket.on(CONNECT_EVENT, () => { + clientSocket.on(TcpEventsMap.CONNECT, () => { setTimeout(() => { expect(clientSocket['isClosed']).to.equal(false); diff --git a/packages/microservices/test/json-socket/helpers.ts b/packages/microservices/test/json-socket/helpers.ts index acaf339d8c9..1e11859108a 100644 --- a/packages/microservices/test/json-socket/helpers.ts +++ b/packages/microservices/test/json-socket/helpers.ts @@ -4,7 +4,7 @@ import { Server, Socket, } from 'net'; -import { ERROR_EVENT } from '../../constants'; +import { TcpEventsMap } from '../../events/tcp.events'; import { JsonSocket } from '../../helpers/json-socket'; export const ip = '127.0.0.1'; @@ -17,7 +17,7 @@ export function createServer(callback: (err?: any, server?: Server) => void) { callback(null, server); }); - server.on(ERROR_EVENT, (err: any) => { + server.on(TcpEventsMap.ERROR, (err: any) => { callback(err); }); } @@ -40,7 +40,7 @@ export function createClient( clientSocket.connect(port, ip); - clientSocket.on(ERROR_EVENT, (err: any) => { + clientSocket.on(TcpEventsMap.ERROR, (err: any) => { callback(err); }); diff --git a/packages/microservices/test/json-socket/listener-chaining.spec.ts b/packages/microservices/test/json-socket/listener-chaining.spec.ts index fe07945478b..c1d41efa48b 100644 --- a/packages/microservices/test/json-socket/listener-chaining.spec.ts +++ b/packages/microservices/test/json-socket/listener-chaining.spec.ts @@ -1,7 +1,9 @@ -import { CONNECT_EVENT, MESSAGE_EVENT } from '../../constants'; +import { expect } from 'chai'; +import { TcpEventsMap } from '../../events/tcp.events'; import { JsonSocket } from '../../helpers/json-socket'; import * as helpers from './helpers'; -import { expect } from 'chai'; + +const MESSAGE_EVENT = 'message'; describe('JsonSocket chaining', () => { it('should return the instance when subscribing to event', done => { @@ -13,7 +15,7 @@ describe('JsonSocket chaining', () => { expect(clientSocket.on(MESSAGE_EVENT, () => {})).to.be.instanceof( JsonSocket, ); - expect(clientSocket.on(CONNECT_EVENT, () => {})).to.deep.equal( + expect(clientSocket.on(TcpEventsMap.CONNECT, () => {})).to.deep.equal( clientSocket, ); expect( diff --git a/packages/microservices/test/json-socket/message-parsing.spec.ts b/packages/microservices/test/json-socket/message-parsing.spec.ts index 9092bf8d2fa..6b08e03c62b 100644 --- a/packages/microservices/test/json-socket/message-parsing.spec.ts +++ b/packages/microservices/test/json-socket/message-parsing.spec.ts @@ -1,9 +1,11 @@ import { expect } from 'chai'; import { Socket } from 'net'; import * as sinon from 'sinon'; -import { ERROR_EVENT, MESSAGE_EVENT } from '../../constants'; +import { TcpEventsMap } from '../../events/tcp.events'; import { JsonSocket } from '../../helpers/json-socket'; +const MESSAGE_EVENT = 'message'; + describe('JsonSocket message parsing', () => { const socket = new JsonSocket(new Socket()); let messages: string[] = []; @@ -122,7 +124,7 @@ describe('JsonSocket message parsing', () => { expect(socket['buffer']).to.deep.equal(''); }); - it(`should emit ${ERROR_EVENT} event on socket`, () => { + it(`should emit ${TcpEventsMap.ERROR} event on socket`, () => { const socketEmitSpy: sinon.SinonSpy = sinon.spy( socket['socket'], 'emit', @@ -131,12 +133,13 @@ describe('JsonSocket message parsing', () => { socket['onData'](packet); try { - expect(socketEmitSpy.calledOnceWithExactly(ERROR_EVENT, errorMsg)).to - .be.true; + expect( + socketEmitSpy.calledOnceWithExactly(TcpEventsMap.ERROR, errorMsg), + ).to.be.true; } catch (err) { expect( socketEmitSpy.calledOnceWithExactly( - ERROR_EVENT, + TcpEventsMap.ERROR, errorMsgNodeBelowV20, ), ).to.be.true; @@ -169,7 +172,7 @@ describe('JsonSocket message parsing', () => { expect(socket['buffer']).to.deep.equal(''); }); - it(`should emit ${ERROR_EVENT} event on socket`, () => { + it(`should emit ${TcpEventsMap.ERROR} event on socket`, () => { const socketEmitSpy: sinon.SinonSpy = sinon.spy( socket['socket'], 'emit', @@ -177,8 +180,9 @@ describe('JsonSocket message parsing', () => { socket['onData'](packet); - expect(socketEmitSpy.calledOnceWithExactly(ERROR_EVENT, errorMsg)).to.be - .true; + expect( + socketEmitSpy.calledOnceWithExactly(TcpEventsMap.ERROR, errorMsg), + ).to.be.true; socketEmitSpy.restore(); }); diff --git a/packages/microservices/test/server/server-grpc.spec.ts b/packages/microservices/test/server/server-grpc.spec.ts index af683a23787..40c0299c06e 100644 --- a/packages/microservices/test/server/server-grpc.spec.ts +++ b/packages/microservices/test/server/server-grpc.spec.ts @@ -3,13 +3,14 @@ import { expect } from 'chai'; import { join } from 'path'; import { ReplaySubject, Subject, throwError } from 'rxjs'; import * as sinon from 'sinon'; -import { CANCEL_EVENT } from '../../constants'; import { InvalidGrpcPackageException } from '../../errors/invalid-grpc-package.exception'; import { InvalidProtoDefinitionException } from '../../errors/invalid-proto-definition.exception'; import * as grpcHelpers from '../../helpers/grpc-helpers'; import { GrpcMethodStreamingType } from '../../index'; import { ServerGrpc } from '../../server'; +const CANCELLED_EVENT = 'cancelled'; + class NoopLogger extends Logger { log(message: any, context?: string): void {} error(message: any, trace?: string, context?: string): void {} @@ -620,7 +621,7 @@ describe('ServerGrpc', () => { const fn = server.createRequestStreamMethod(handler, false); const call = { on: (event, callback) => { - if (event !== CANCEL_EVENT) { + if (event !== CANCELLED_EVENT) { callback(); } }, @@ -641,7 +642,7 @@ describe('ServerGrpc', () => { const fn = server.createRequestStreamMethod(handler, false); const call = { on: (event, callback) => { - if (event !== CANCEL_EVENT) { + if (event !== CANCELLED_EVENT) { callback(); } }, @@ -677,7 +678,7 @@ describe('ServerGrpc', () => { }; const cancel = () => { - emitter.dispatchEvent(new Event(CANCEL_EVENT)); + emitter.dispatchEvent(new Event(CANCELLED_EVENT)); }; const call = { @@ -732,7 +733,7 @@ describe('ServerGrpc', () => { const fn = server.createRequestStreamMethod(handler, true); const call = { on: (event, callback) => { - if (event !== CANCEL_EVENT) { + if (event !== CANCELLED_EVENT) { callback(); } }, diff --git a/packages/microservices/test/server/server-kafka.spec.ts b/packages/microservices/test/server/server-kafka.spec.ts index 5255b43107c..0112c292511 100644 --- a/packages/microservices/test/server/server-kafka.spec.ts +++ b/packages/microservices/test/server/server-kafka.spec.ts @@ -90,9 +90,11 @@ describe('ServerKafka', () => { let subscribe: sinon.SinonSpy; let run: sinon.SinonSpy; let send: sinon.SinonSpy; + let on: sinon.SinonSpy; let consumerStub: sinon.SinonStub; let producerStub: sinon.SinonStub; - let client; + let client: any; + let untypedServer: any; beforeEach(() => { server = new ServerKafka({}); @@ -101,18 +103,46 @@ describe('ServerKafka', () => { subscribe = sinon.spy(); run = sinon.spy(); send = sinon.spy(); + on = sinon.spy(); consumerStub = sinon.stub(server as any, 'consumer').callsFake(() => { return { connect, subscribe, run, + on, + events: { + GROUP_JOIN: 'consumer.group_join', + HEARTBEAT: 'consumer.heartbeat', + COMMIT_OFFSETS: 'consumer.commit_offsets', + FETCH_START: 'consumer.fetch_start', + FETCH: 'consumer.fetch', + START_BATCH_PROCESS: 'consumer.start_batch_process', + END_BATCH_PROCESS: 'consumer.end_batch_process', + CONNECT: 'consumer.connect', + DISCONNECT: 'consumer.disconnect', + STOP: 'consumer.stop', + CRASH: 'consumer.crash', + REBALANCING: 'consumer.rebalancing', + RECEIVED_UNSUBSCRIBED_TOPICS: 'consumer.received_unsubscribed_topics', + REQUEST: 'consumer.network.request', + REQUEST_TIMEOUT: 'consumer.network.request_timeout', + REQUEST_QUEUE_SIZE: 'consumer.network.request_queue_size', + }, }; }); producerStub = sinon.stub(server as any, 'producer').callsFake(() => { return { connect, send, + on, + events: { + CONNECT: 'producer.connect', + DISCONNECT: 'producer.disconnect', + REQUEST: 'producer.network.request', + REQUEST_TIMEOUT: 'producer.network.request_timeout', + REQUEST_QUEUE_SIZE: 'producer.network.request_queue_size', + }, }; }); client = { @@ -120,6 +150,8 @@ describe('ServerKafka', () => { producer: producerStub, }; sinon.stub(server, 'createClient').callsFake(() => client); + + untypedServer = server as any; }); describe('listen', () => { @@ -127,7 +159,8 @@ describe('ServerKafka', () => { bindEventsStub = sinon .stub(server, 'bindEvents') .callsFake(() => ({}) as any); - await server.listen(callback); + + await server.listen(err => console.log(err)); expect(bindEventsStub.called).to.be.true; }); it('should call callback', async () => { @@ -152,40 +185,40 @@ describe('ServerKafka', () => { const consumer = { disconnect: sinon.spy() }; const producer = { disconnect: sinon.spy() }; beforeEach(() => { - (server as any).consumer = consumer; - (server as any).producer = producer; + untypedServer.consumer = consumer; + untypedServer.producer = producer; }); it('should close server', async () => { await server.close(); expect(consumer.disconnect.calledOnce).to.be.true; expect(producer.disconnect.calledOnce).to.be.true; - expect((server as any).consumer).to.be.null; - expect((server as any).producer).to.be.null; - expect((server as any).client).to.be.null; + expect(untypedServer.consumer).to.be.null; + expect(untypedServer.producer).to.be.null; + expect(untypedServer.client).to.be.null; }); }); describe('bindEvents', () => { it('should not call subscribe nor run on consumer when there are no messageHandlers', async () => { - (server as any).logger = new NoopLogger(); + untypedServer.logger = new NoopLogger(); await server.listen(callback); - await server.bindEvents((server as any).consumer); + await server.bindEvents(untypedServer.consumer); expect(subscribe.called).to.be.false; expect(run.called).to.be.true; expect(connect.called).to.be.true; }); it('should call subscribe and run on consumer when there are messageHandlers', async () => { - (server as any).logger = new NoopLogger(); + untypedServer.logger = new NoopLogger(); await server.listen(callback); const pattern = 'test'; const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [pattern]: handler, }); - await server.bindEvents((server as any).consumer); + await server.bindEvents(untypedServer.consumer); expect(subscribe.called).to.be.true; expect( @@ -198,18 +231,18 @@ describe('ServerKafka', () => { expect(connect.called).to.be.true; }); it('should call subscribe with options and run on consumer when there are messageHandlers', async () => { - (server as any).logger = new NoopLogger(); - (server as any).options.subscribe = {}; - (server as any).options.subscribe.fromBeginning = true; + untypedServer.logger = new NoopLogger(); + untypedServer.options.subscribe = {}; + untypedServer.options.subscribe.fromBeginning = true; await server.listen(callback); const pattern = 'test'; const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [pattern]: handler, }); - await server.bindEvents((server as any).consumer); + await server.bindEvents(untypedServer.consumer); expect(subscribe.called).to.be.true; expect( @@ -337,7 +370,7 @@ describe('ServerKafka', () => { it('should call "handleEvent" if correlation identifier and reply topic are present but the handler is of type eventHandler', async () => { const handler = sinon.spy(); (handler as any).isEventHandler = true; - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [topic]: handler, }); const handleEventSpy = sinon.spy(server, 'handleEvent'); @@ -348,7 +381,7 @@ describe('ServerKafka', () => { it('should NOT call "handleEvent" if correlation identifier and reply topic are present but the handler is not of type eventHandler', async () => { const handler = sinon.spy(); (handler as any).isEventHandler = false; - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [topic]: handler, }); const handleEventSpy = sinon.spy(server, 'handleEvent'); @@ -368,7 +401,7 @@ describe('ServerKafka', () => { it(`should call handler with expected arguments`, async () => { const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [topic]: handler, }); diff --git a/packages/microservices/test/server/server-mqtt.spec.ts b/packages/microservices/test/server/server-mqtt.spec.ts index 8e63a016257..30893e8f452 100644 --- a/packages/microservices/test/server/server-mqtt.spec.ts +++ b/packages/microservices/test/server/server-mqtt.spec.ts @@ -30,13 +30,25 @@ describe('ServerMqtt', () => { server.listen(callbackSpy); expect(onSpy.getCall(0).args[0]).to.be.equal('error'); }); - it('should bind "message" event to handler', () => { + it('should bind "reconnect" event to handler', () => { + server.listen(callbackSpy); + expect(onSpy.getCall(1).args[0]).to.be.equal('reconnect'); + }); + it('should bind "disconnect" event to handler', () => { + server.listen(callbackSpy); + expect(onSpy.getCall(2).args[0]).to.be.equal('disconnect'); + }); + it('should bind "close" event to handler', () => { server.listen(callbackSpy); - expect(onSpy.getCall(1).args[0]).to.be.equal('message'); + expect(onSpy.getCall(3).args[0]).to.be.equal('close'); }); it('should bind "connect" event to handler', () => { server.listen(callbackSpy); - expect(onSpy.getCall(2).args[0]).to.be.equal('connect'); + expect(onSpy.getCall(4).args[0]).to.be.equal('connect'); + }); + it('should bind "message" event to handler', () => { + server.listen(callbackSpy); + expect(onSpy.getCall(5).args[0]).to.be.equal('message'); }); describe('when "start" throws an exception', () => { it('should call callback with a thrown error as an argument', () => { diff --git a/packages/microservices/test/server/server-redis.spec.ts b/packages/microservices/test/server/server-redis.spec.ts index dc2373c9193..3f5cde0480d 100644 --- a/packages/microservices/test/server/server-redis.spec.ts +++ b/packages/microservices/test/server/server-redis.spec.ts @@ -233,7 +233,7 @@ describe('ServerRedis', () => { describe('createRetryStrategy', () => { describe('when is terminated', () => { it('should return undefined', () => { - (server as any).isExplicitlyTerminated = true; + (server as any).isManuallyClosed = true; const result = server.createRetryStrategy(0); expect(result).to.be.undefined; }); @@ -257,7 +257,7 @@ describe('ServerRedis', () => { describe('otherwise', () => { it('should return delay (ms)', () => { (server as any).options = {}; - (server as any).isExplicitlyTerminated = false; + (server as any).isManuallyClosed = false; (server as any).options.retryAttempts = 3; (server as any).options.retryDelay = 3; const result = server.createRetryStrategy(2); diff --git a/packages/microservices/test/server/server-rmq.spec.ts b/packages/microservices/test/server/server-rmq.spec.ts index 365acd7a686..32f9c01d08f 100644 --- a/packages/microservices/test/server/server-rmq.spec.ts +++ b/packages/microservices/test/server/server-rmq.spec.ts @@ -1,9 +1,8 @@ import { assert, expect } from 'chai'; import * as sinon from 'sinon'; import { NO_MESSAGE_HANDLER } from '../../constants'; -import { BaseRpcContext } from '../../ctx-host/base-rpc.context'; -import { ServerRMQ } from '../../server/server-rmq'; import { RmqContext } from '../../ctx-host'; +import { ServerRMQ } from '../../server/server-rmq'; describe('ServerRMQ', () => { let server: ServerRMQ; @@ -15,19 +14,6 @@ describe('ServerRMQ', () => { server = new ServerRMQ({}); }); - describe('constructor', () => { - it(`should fallback to queueOptions.noAssert when 'noAssert' is undefined`, () => { - const queueOptions = { - noAssert: true, - }; - const instance = new ServerRMQ({ - queueOptions, - }); - - expect(instance).property('noAssert').to.eq(queueOptions.noAssert); - }); - }); - describe('listen', () => { let createClient: sinon.SinonStub; let onStub: sinon.SinonStub; @@ -47,6 +33,7 @@ describe('ServerRMQ', () => { client = { on: onStub, + once: onStub, createChannel: createChannelStub, }; createClient = sinon.stub(server, 'createClient').callsFake(() => client); @@ -59,17 +46,17 @@ describe('ServerRMQ', () => { server.listen(callbackSpy); expect(createClient.called).to.be.true; }); - it('should bind "connect" event to handler', () => { - server.listen(callbackSpy); + it('should bind "connect" event to handler', async () => { + await server.listen(callbackSpy); expect(onStub.getCall(0).args[0]).to.be.equal('connect'); }); - it('should bind "disconnect" event to handler', () => { - server.listen(callbackSpy); - expect(onStub.getCall(1).args[0]).to.be.equal('disconnect'); + it('should bind "disconnected" event to handler', async () => { + await server.listen(callbackSpy); + expect(onStub.getCall(2).args[0]).to.be.equal('disconnect'); }); - it('should bind "connectFailed" event to handler', () => { - server.listen(callbackSpy); - expect(onStub.getCall(2).args[0]).to.be.equal('connectFailed'); + it('should bind "connectFailed" event to handler', async () => { + await server.listen(callbackSpy); + expect(onStub.getCall(3).args[0]).to.be.equal('connectFailed'); }); describe('when "start" throws an exception', () => { it('should call callback with a thrown error as an argument', () => { @@ -201,8 +188,10 @@ describe('ServerRMQ', () => { beforeEach(() => { (server as any)['queue'] = queue; (server as any)['queueOptions'] = queueOptions; - (server as any)['isGlobalPrefetchCount'] = isGlobalPrefetchCount; - (server as any)['prefetchCount'] = prefetchCount; + (server as any)['options'] = { + isGlobalPrefetchCount, + prefetchCount, + }; channel = { assertQueue: sinon.spy(() => ({})), @@ -217,7 +206,10 @@ describe('ServerRMQ', () => { expect(channel.assertQueue.calledWith(queue, queueOptions)).to.be.true; }); it('should not call "assertQueue" when noAssert is true', async () => { - server['noAssert' as any] = true; + server['options' as any] = { + ...(server as any)['options'], + noAssert: true, + }; await server.setupChannel(channel, () => null); expect(channel.assertQueue.called).not.to.be.true; diff --git a/packages/microservices/test/server/server.spec.ts b/packages/microservices/test/server/server.spec.ts index ae62ca1083a..60dcecba213 100644 --- a/packages/microservices/test/server/server.spec.ts +++ b/packages/microservices/test/server/server.spec.ts @@ -1,9 +1,16 @@ import { expect } from 'chai'; -import { lastValueFrom, Observable, of, throwError as _throw } from 'rxjs'; +import { throwError as _throw, lastValueFrom, Observable, of } from 'rxjs'; import * as sinon from 'sinon'; import { Server } from '../../server/server'; class TestServer extends Server { + public on< + EventKey extends string = string, + EventCallback extends Function = Function, + >(event: EventKey, callback: EventCallback) {} + public unwrap(): T { + return null; + } public listen(callback: () => void) {} public close() {} } From f983f0366562f5bf311beeeecb4ae3a723e68c9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Fri, 15 Nov 2024 10:19:26 +0100 Subject: [PATCH 058/122] fix: update broken import paths --- .../deserializers/nats-request-json.deserializer.ts | 2 +- .../deserializers/nats-response-json.deserializer.ts | 2 +- packages/microservices/serializers/nats-record.serializer.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/microservices/deserializers/nats-request-json.deserializer.ts b/packages/microservices/deserializers/nats-request-json.deserializer.ts index 68763e17f60..e0311041ace 100644 --- a/packages/microservices/deserializers/nats-request-json.deserializer.ts +++ b/packages/microservices/deserializers/nats-request-json.deserializer.ts @@ -1,5 +1,5 @@ import { loadPackage } from '@nestjs/common/utils/load-package.util'; -import { NatsCodec } from '../external/nats-client.interface'; +import { NatsCodec } from '../external/nats-codec.interface'; import { IncomingEvent, IncomingRequest } from '../interfaces'; import { IncomingRequestDeserializer } from './incoming-request.deserializer'; diff --git a/packages/microservices/deserializers/nats-response-json.deserializer.ts b/packages/microservices/deserializers/nats-response-json.deserializer.ts index 51a80972676..5b81f7512ee 100644 --- a/packages/microservices/deserializers/nats-response-json.deserializer.ts +++ b/packages/microservices/deserializers/nats-response-json.deserializer.ts @@ -1,5 +1,5 @@ import { loadPackage } from '@nestjs/common/utils/load-package.util'; -import { NatsCodec } from '../external/nats-client.interface'; +import { NatsCodec } from '../external/nats-codec.interface'; import { IncomingResponse } from '../interfaces'; import { IncomingResponseDeserializer } from './incoming-response.deserializer'; import { NatsRequestJSONDeserializer } from './nats-request-json.deserializer'; diff --git a/packages/microservices/serializers/nats-record.serializer.ts b/packages/microservices/serializers/nats-record.serializer.ts index 77f9a4bab6e..c3e1caf115f 100644 --- a/packages/microservices/serializers/nats-record.serializer.ts +++ b/packages/microservices/serializers/nats-record.serializer.ts @@ -1,6 +1,6 @@ import { loadPackage } from '@nestjs/common/utils/load-package.util'; import { isObject } from '@nestjs/common/utils/shared.utils'; -import { NatsCodec } from '../external/nats-client.interface'; +import { NatsCodec } from '../external/nats-codec.interface'; import { ReadPacket } from '../interfaces'; import { Serializer } from '../interfaces/serializer.interface'; import { NatsRecord, NatsRecordBuilder } from '../record-builders'; From f2b6cc0e939ac95b1df5f1d4090a68e9d36b1c4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Fri, 15 Nov 2024 11:50:09 +0100 Subject: [PATCH 059/122] fix: fix minor type issues, broken imports --- integration/microservices/src/tcp-tls/app.module.ts | 8 ++++---- packages/microservices/client/client-proxy.ts | 2 +- .../microservices/interfaces/client-metadata.interface.ts | 4 ++-- packages/microservices/test/server/server-nats.spec.ts | 4 +++- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/integration/microservices/src/tcp-tls/app.module.ts b/integration/microservices/src/tcp-tls/app.module.ts index 79a167886d8..b3720d2a96d 100644 --- a/integration/microservices/src/tcp-tls/app.module.ts +++ b/integration/microservices/src/tcp-tls/app.module.ts @@ -1,13 +1,13 @@ -import { Module, Injectable } from '@nestjs/common'; -import { AppController } from './app.controller'; +import { Injectable, Module } from '@nestjs/common'; import { + ClientOptions, ClientsModule, - Transport, ClientsModuleOptionsFactory, - ClientOptions, ClientTCP, RpcException, + Transport, } from '@nestjs/microservices'; +import { AppController } from './app.controller'; import * as fs from 'fs'; import * as path from 'path'; diff --git a/packages/microservices/client/client-proxy.ts b/packages/microservices/client/client-proxy.ts index b937fe98329..ed25ad4d923 100644 --- a/packages/microservices/client/client-proxy.ts +++ b/packages/microservices/client/client-proxy.ts @@ -36,7 +36,7 @@ import { transformPatternToRoute } from '../utils'; * @publicApi */ export abstract class ClientProxy< - EventsMap extends Record = Record, + EventsMap extends Record = Record, Status extends string = string, > { protected routingMap = new Map(); diff --git a/packages/microservices/interfaces/client-metadata.interface.ts b/packages/microservices/interfaces/client-metadata.interface.ts index 53bb8b556c7..26b68e36c4c 100644 --- a/packages/microservices/interfaces/client-metadata.interface.ts +++ b/packages/microservices/interfaces/client-metadata.interface.ts @@ -1,7 +1,8 @@ import { Type } from '@nestjs/common'; +import { ConnectionOptions } from 'tls'; import { ClientProxy } from '../client'; -import { TcpSocket } from '../helpers'; import { Transport } from '../enums/transport.enum'; +import { TcpSocket } from '../helpers'; import { Deserializer } from './deserializer.interface'; import { GrpcOptions, @@ -12,7 +13,6 @@ import { RmqOptions, } from './microservice-configuration.interface'; import { Serializer } from './serializer.interface'; -import { ConnectionOptions } from 'tls'; export type ClientOptions = | RedisOptions diff --git a/packages/microservices/test/server/server-nats.spec.ts b/packages/microservices/test/server/server-nats.spec.ts index 1b98399038d..05911102ad6 100644 --- a/packages/microservices/test/server/server-nats.spec.ts +++ b/packages/microservices/test/server/server-nats.spec.ts @@ -4,9 +4,11 @@ import * as sinon from 'sinon'; import { NO_MESSAGE_HANDLER } from '../../constants'; import { NatsContext } from '../../ctx-host'; import { BaseRpcContext } from '../../ctx-host/base-rpc.context'; -import { NatsMsg } from '../../external/nats-client.interface'; import { ServerNats } from '../../server/server-nats'; +// type NatsMsg = import('nats').Msg; +type NatsMsg = any; + describe('ServerNats', () => { let server: ServerNats; From 66c3ab23eec9d8be9f387aa0a95eba0722c7c6c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Fri, 15 Nov 2024 12:48:22 +0100 Subject: [PATCH 060/122] sample: update grpc client options type --- sample/04-grpc/src/grpc-client.options.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sample/04-grpc/src/grpc-client.options.ts b/sample/04-grpc/src/grpc-client.options.ts index 4ade19b1918..abdae9a88bd 100644 --- a/sample/04-grpc/src/grpc-client.options.ts +++ b/sample/04-grpc/src/grpc-client.options.ts @@ -1,8 +1,8 @@ import { ReflectionService } from '@grpc/reflection'; -import { ClientOptions, Transport } from '@nestjs/microservices'; +import { GrpcOptions, Transport } from '@nestjs/microservices'; import { join } from 'path'; -export const grpcClientOptions: ClientOptions = { +export const grpcClientOptions: GrpcOptions = { transport: Transport.GRPC, options: { package: 'hero', // ['hero', 'hero2'] From 259b5dd8286628f625567567333078bd363127cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Fri, 15 Nov 2024 13:27:04 +0100 Subject: [PATCH 061/122] fix: remove duplicated client redis message handler --- packages/microservices/client/client-redis.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/microservices/client/client-redis.ts b/packages/microservices/client/client-redis.ts index 00542d05120..00d5596db10 100644 --- a/packages/microservices/client/client-redis.ts +++ b/packages/microservices/client/client-redis.ts @@ -85,8 +85,6 @@ export class ClientRedis extends ClientProxy { this.pubClient.connect(), ]); await this.connectionPromise; - - this.subClient.on('message', this.createResponseCallback()); return this.connectionPromise; } From 9ea618e0a81b8b31aefa66973b1ede34fc3ada0c Mon Sep 17 00:00:00 2001 From: Kamil Mysliwiec Date: Fri, 15 Nov 2024 13:29:35 +0100 Subject: [PATCH 062/122] Update packages/core/nest-factory.ts --- packages/core/nest-factory.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/core/nest-factory.ts b/packages/core/nest-factory.ts index 2c84cb06272..f3cb93bcdc7 100644 --- a/packages/core/nest-factory.ts +++ b/packages/core/nest-factory.ts @@ -30,9 +30,6 @@ import { NestApplication } from './nest-application'; import { NestApplicationContext } from './nest-application-context'; import { DependenciesScanner } from './scanner'; -/** - * A valid NestJS entry (or 'root') module reference. - */ type IEntryNestModule = | Type | DynamicModule From f37dafc13285a0492d0402fbb68ff676644ecec5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Mon, 18 Nov 2024 09:08:47 +0100 Subject: [PATCH 063/122] chore: pass error instance to logger error method --- packages/common/file-stream/streamable-file.ts | 4 ++-- packages/core/errors/exception-handler.ts | 9 ++------- packages/core/exceptions/base-exception-filter.ts | 5 +---- packages/core/exceptions/external-exception-filter.ts | 2 +- .../exceptions/base-rpc-exception-filter.ts | 5 +---- packages/microservices/server/server-grpc.ts | 2 +- .../websockets/exceptions/base-ws-exception-filter.ts | 5 +---- 7 files changed, 9 insertions(+), 23 deletions(-) diff --git a/packages/common/file-stream/streamable-file.ts b/packages/common/file-stream/streamable-file.ts index c41dbb388db..6323ca0656c 100644 --- a/packages/common/file-stream/streamable-file.ts +++ b/packages/common/file-stream/streamable-file.ts @@ -1,9 +1,9 @@ import { Readable } from 'stream'; import { types } from 'util'; import { HttpStatus } from '../enums'; +import { Logger } from '../services'; import { isFunction } from '../utils/shared.utils'; import { StreamableFileOptions, StreamableHandlerResponse } from './interfaces'; -import { Logger } from '../services'; /** * @see [Streaming files](https://docs.nestjs.com/techniques/streaming-files) @@ -31,7 +31,7 @@ export class StreamableFile { }; protected logError: (err: Error) => void = (err: Error) => { - this.logger.error(err.message, err.stack); + this.logger.error(err); }; constructor(buffer: Uint8Array, options?: StreamableFileOptions); diff --git a/packages/core/errors/exception-handler.ts b/packages/core/errors/exception-handler.ts index 3b1c47c003f..e34358bf2d0 100644 --- a/packages/core/errors/exception-handler.ts +++ b/packages/core/errors/exception-handler.ts @@ -1,14 +1,9 @@ -import { RuntimeException } from './exceptions/runtime.exception'; import { Logger } from '@nestjs/common/services/logger.service'; export class ExceptionHandler { private static readonly logger = new Logger(ExceptionHandler.name); - public handle(exception: RuntimeException | Error) { - if (!(exception instanceof RuntimeException)) { - ExceptionHandler.logger.error(exception.message, exception.stack); - return; - } - ExceptionHandler.logger.error(exception.what(), exception.stack); + public handle(exception: Error) { + ExceptionHandler.logger.error(exception); } } diff --git a/packages/core/exceptions/base-exception-filter.ts b/packages/core/exceptions/base-exception-filter.ts index bc378450120..96a61319be7 100644 --- a/packages/core/exceptions/base-exception-filter.ts +++ b/packages/core/exceptions/base-exception-filter.ts @@ -69,10 +69,7 @@ export class BaseExceptionFilter implements ExceptionFilter { } if (this.isExceptionObject(exception)) { - return BaseExceptionFilter.logger.error( - exception.message, - exception.stack, - ); + return BaseExceptionFilter.logger.error(exception); } return BaseExceptionFilter.logger.error(exception); } diff --git a/packages/core/exceptions/external-exception-filter.ts b/packages/core/exceptions/external-exception-filter.ts index 9c6b2563b9b..076b6a970a9 100644 --- a/packages/core/exceptions/external-exception-filter.ts +++ b/packages/core/exceptions/external-exception-filter.ts @@ -5,7 +5,7 @@ export class ExternalExceptionFilter { catch(exception: T, host: ArgumentsHost): R | Promise { if (exception instanceof Error && !(exception instanceof HttpException)) { - ExternalExceptionFilter.logger.error(exception.message, exception.stack); + ExternalExceptionFilter.logger.error(exception); } throw exception; } diff --git a/packages/microservices/exceptions/base-rpc-exception-filter.ts b/packages/microservices/exceptions/base-rpc-exception-filter.ts index 837330fac9c..849bc9ac2ff 100644 --- a/packages/microservices/exceptions/base-rpc-exception-filter.ts +++ b/packages/microservices/exceptions/base-rpc-exception-filter.ts @@ -26,11 +26,8 @@ export class BaseRpcExceptionFilter public handleUnknownError(exception: T, status: string) { const errorMessage = MESSAGES.UNKNOWN_EXCEPTION_MESSAGE; - const loggerArgs = this.isError(exception) - ? [exception.message, exception.stack] - : [exception]; const logger = BaseRpcExceptionFilter.logger; - logger.error.apply(logger, loggerArgs as any); + logger.error.apply(logger, [exception]); return _throw(() => ({ status, message: errorMessage })); } diff --git a/packages/microservices/server/server-grpc.ts b/packages/microservices/server/server-grpc.ts index f27e0e7217e..7bcd16f1cc9 100644 --- a/packages/microservices/server/server-grpc.ts +++ b/packages/microservices/server/server-grpc.ts @@ -597,7 +597,7 @@ export class ServerGrpc extends Server implements CustomTransportStrategy { private async createServices(grpcPkg: any, packageName: string) { if (!grpcPkg) { const invalidPackageError = new InvalidGrpcPackageException(packageName); - this.logger.error(invalidPackageError.message, invalidPackageError.stack); + this.logger.error(invalidPackageError); throw invalidPackageError; } diff --git a/packages/websockets/exceptions/base-ws-exception-filter.ts b/packages/websockets/exceptions/base-ws-exception-filter.ts index bcc48b0a68b..6f983c9baf3 100644 --- a/packages/websockets/exceptions/base-ws-exception-filter.ts +++ b/packages/websockets/exceptions/base-ws-exception-filter.ts @@ -47,10 +47,7 @@ export class BaseWsExceptionFilter }); if (this.isExceptionObject(exception)) { - return BaseWsExceptionFilter.logger.error( - exception.message, - exception.stack, - ); + return BaseWsExceptionFilter.logger.error(exception); } return BaseWsExceptionFilter.logger.error(exception); } From 9129e4f858b7b9667a11810cb952aed5a20aab40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Mon, 18 Nov 2024 09:10:34 +0100 Subject: [PATCH 064/122] refactor: remove redundant conditions --- packages/core/exceptions/base-exception-filter.ts | 3 --- packages/websockets/exceptions/base-ws-exception-filter.ts | 3 --- 2 files changed, 6 deletions(-) diff --git a/packages/core/exceptions/base-exception-filter.ts b/packages/core/exceptions/base-exception-filter.ts index 96a61319be7..12735f13666 100644 --- a/packages/core/exceptions/base-exception-filter.ts +++ b/packages/core/exceptions/base-exception-filter.ts @@ -68,9 +68,6 @@ export class BaseExceptionFilter implements ExceptionFilter { applicationRef.end(response); } - if (this.isExceptionObject(exception)) { - return BaseExceptionFilter.logger.error(exception); - } return BaseExceptionFilter.logger.error(exception); } diff --git a/packages/websockets/exceptions/base-ws-exception-filter.ts b/packages/websockets/exceptions/base-ws-exception-filter.ts index 6f983c9baf3..6f1b74dee36 100644 --- a/packages/websockets/exceptions/base-ws-exception-filter.ts +++ b/packages/websockets/exceptions/base-ws-exception-filter.ts @@ -46,9 +46,6 @@ export class BaseWsExceptionFilter message: MESSAGES.UNKNOWN_EXCEPTION_MESSAGE, }); - if (this.isExceptionObject(exception)) { - return BaseWsExceptionFilter.logger.error(exception); - } return BaseWsExceptionFilter.logger.error(exception); } From 47941ba4d98ce3abdc1ae1d9f7c9b5088f9ae8b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Mon, 18 Nov 2024 09:56:13 +0100 Subject: [PATCH 065/122] test: update outdated unit test --- .../test/errors/test/exception-handler.spec.ts | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/packages/core/test/errors/test/exception-handler.spec.ts b/packages/core/test/errors/test/exception-handler.spec.ts index ca3703a139e..3fda223a9f6 100644 --- a/packages/core/test/errors/test/exception-handler.spec.ts +++ b/packages/core/test/errors/test/exception-handler.spec.ts @@ -1,8 +1,7 @@ -import * as sinon from 'sinon'; import { expect } from 'chai'; +import * as sinon from 'sinon'; import { ExceptionHandler } from '../../../errors/exception-handler'; import { RuntimeException } from '../../../errors/exceptions/runtime.exception'; -import { InvalidMiddlewareException } from '../../../errors/exceptions/invalid-middleware.exception'; describe('ExceptionHandler', () => { let instance: ExceptionHandler; @@ -10,7 +9,7 @@ describe('ExceptionHandler', () => { instance = new ExceptionHandler(); }); describe('handle', () => { - let logger; + let logger: { error: Function }; let errorSpy: sinon.SinonSpy; beforeEach(() => { logger = { @@ -19,16 +18,10 @@ describe('ExceptionHandler', () => { (ExceptionHandler as any).logger = logger; errorSpy = sinon.spy(logger, 'error'); }); - it('when exception is instanceof RuntimeException', () => { + it('should call the logger.error method with the thrown exception passed as an argument', () => { const exception = new RuntimeException('msg'); instance.handle(exception); - expect(errorSpy.calledWith(exception.message, exception.stack)).to.be - .true; - }); - it('when exception is not instanceof RuntimeException', () => { - const exception = new InvalidMiddlewareException('msg'); - instance.handle(exception); - expect(errorSpy.calledWith(exception.what(), exception.stack)).to.be.true; + expect(errorSpy.calledWith(exception)).to.be.true; }); }); }); From c239f9a03785cbee1eaef633abfc3742bd15f79f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Mon, 18 Nov 2024 10:33:51 +0100 Subject: [PATCH 066/122] refactor: replace inline as any calls with untyped vars --- packages/core/test/injector/container.spec.ts | 16 +- packages/core/test/injector/module.spec.ts | 183 +++++++++--------- .../test/router/route-params-factory.spec.ts | 41 ++-- .../core/test/router/routes-resolver.spec.ts | 15 +- packages/core/test/scanner.spec.ts | 54 +++--- .../test/client/client-grpc.spec.ts | 18 +- .../test/client/client-kafka.spec.ts | 31 +-- .../test/client/client-mqtt.spec.ts | 21 +- .../test/client/client-nats.spec.ts | 30 +-- .../test/client/client-redis.spec.ts | 43 ++-- .../test/client/client-rmq.spec.ts | 23 ++- .../test/client/client-tcp.spec.ts | 19 +- .../test/server/server-grpc.spec.ts | 36 ++-- .../test/server/server-kafka.spec.ts | 45 ++--- .../test/server/server-mqtt.spec.ts | 18 +- .../test/server/server-nats.spec.ts | 18 +- .../test/server/server-redis.spec.ts | 46 ++--- .../test/server/server-rmq.spec.ts | 39 ++-- .../test/server/server-tcp.spec.ts | 37 ++-- .../microservices/test/server/server.spec.ts | 18 +- .../test/server/utils/object-to-map.ts | 2 + .../test/web-sockets-controller.spec.ts | 32 +-- 22 files changed, 412 insertions(+), 373 deletions(-) create mode 100644 packages/microservices/test/server/utils/object-to-map.ts diff --git a/packages/core/test/injector/container.spec.ts b/packages/core/test/injector/container.spec.ts index e9916a4aa40..05bd4782162 100644 --- a/packages/core/test/injector/container.spec.ts +++ b/packages/core/test/injector/container.spec.ts @@ -9,6 +9,7 @@ import { NoopHttpAdapter } from '../utils/noop-adapter.spec'; describe('NestContainer', () => { let container: NestContainer; + let untypedContainer: any; @Module({}) class TestModule {} @@ -19,6 +20,7 @@ describe('NestContainer', () => { beforeEach(() => { container = new NestContainer(); + untypedContainer = container as any; }); it('should "addProvider" throw "UnknownModuleException" when module is not stored in collection', () => { @@ -53,7 +55,7 @@ describe('NestContainer', () => { describe('clear', () => { it('should call `clear` on modules collection', () => { - const clearSpy = sinon.spy((container as any).modules, 'clear'); + const clearSpy = sinon.spy(untypedContainer.modules, 'clear'); container.clear(); expect(clearSpy.called).to.be.true; }); @@ -63,7 +65,7 @@ describe('NestContainer', () => { it('should not add module if already exists in collection', async () => { const modules = new Map(); const setSpy = sinon.spy(modules, 'set'); - (container as any).modules = modules; + untypedContainer.modules = modules; await container.addModule(TestModule as any, []); await container.addModule(TestModule as any, []); @@ -89,7 +91,7 @@ describe('NestContainer', () => { const modules = new Map(); const setSpy = sinon.spy(modules, 'set'); - (container as any).modules = modules; + untypedContainer.modules = modules; await container.addModule(TestModule as any, []); await container.replaceModule( @@ -174,7 +176,7 @@ describe('NestContainer', () => { beforeEach(() => { token = 'token'; collection = new Map(); - (container as any).dynamicModulesMetadata = collection; + untypedContainer.dynamicModulesMetadata = collection; }); describe('when dynamic metadata exists', () => { it('should add to the dynamic metadata collection', () => { @@ -215,7 +217,7 @@ describe('NestContainer', () => { describe('get applicationConfig', () => { it('should return ApplicationConfig instance', () => { expect(container.applicationConfig).to.be.eql( - (container as any)._applicationConfig, + untypedContainer._applicationConfig, ); }); }); @@ -225,7 +227,7 @@ describe('NestContainer', () => { const httpAdapter = new NoopHttpAdapter({}); container.setHttpAdapter(httpAdapter); - const internalStorage = (container as any).internalProvidersStorage; + const internalStorage = untypedContainer.internalProvidersStorage; expect(internalStorage.httpAdapter).to.be.eql(httpAdapter); }); }); @@ -244,7 +246,7 @@ describe('NestContainer', () => { it('should register core module ref', () => { const ref = {} as any; container.registerCoreModuleRef(ref); - expect((container as any).internalCoreModule).to.be.eql(ref); + expect(untypedContainer.internalCoreModule).to.be.eql(ref); }); }); }); diff --git a/packages/core/test/injector/module.spec.ts b/packages/core/test/injector/module.spec.ts index 26202cf45ec..53d3acc9fba 100644 --- a/packages/core/test/injector/module.spec.ts +++ b/packages/core/test/injector/module.spec.ts @@ -11,7 +11,8 @@ import { InstanceWrapper } from '../../injector/instance-wrapper'; import { Module } from '../../injector/module'; describe('Module', () => { - let module: Module; + let moduleRef: Module; + let untypedModuleRef: any; let container: NestContainer; @ModuleDecorator({}) @@ -22,23 +23,24 @@ describe('Module', () => { beforeEach(() => { container = new NestContainer(); - module = new Module(TestModule, container); + moduleRef = new Module(TestModule, container); + untypedModuleRef = moduleRef as any; }); it('should add controller', () => { const collection = new Map(); const setSpy = sinon.spy(collection, 'set'); - (module as any)._controllers = collection; + untypedModuleRef._controllers = collection; @Controller({ scope: Scope.REQUEST, durable: true }) class Test {} - module.addController(Test); + moduleRef.addController(Test); expect( setSpy.calledWith( Test, new InstanceWrapper({ - host: module, + host: moduleRef, token: Test, name: 'Test', scope: Scope.REQUEST, @@ -54,14 +56,14 @@ describe('Module', () => { it('should add injectable', () => { const collection = new Map(); const setSpy = sinon.spy(collection, 'set'); - (module as any)._injectables = collection; + untypedModuleRef._injectables = collection; - module.addInjectable(TestProvider, 'interceptor', TestModule); + moduleRef.addInjectable(TestProvider, 'interceptor', TestModule); expect( setSpy.calledWith( TestProvider, new InstanceWrapper({ - host: module, + host: moduleRef, name: 'TestProvider', token: TestProvider, scope: undefined, @@ -77,9 +79,9 @@ describe('Module', () => { describe('when injectable is custom provided', () => { it('should call `addCustomProvider`', () => { - const addCustomProviderSpy = sinon.spy(module, 'addCustomProvider'); + const addCustomProviderSpy = sinon.spy(moduleRef, 'addCustomProvider'); - module.addInjectable({ provide: 'test' } as any, 'guard'); + moduleRef.addInjectable({ provide: 'test' } as any, 'guard'); expect(addCustomProviderSpy.called).to.be.true; }); }); @@ -87,14 +89,14 @@ describe('Module', () => { it('should add provider', () => { const collection = new Map(); const setSpy = sinon.spy(collection, 'set'); - (module as any)._providers = collection; + untypedModuleRef._providers = collection; - module.addProvider(TestProvider); + moduleRef.addProvider(TestProvider); expect( setSpy.calledWith( TestProvider, new InstanceWrapper({ - host: module, + host: moduleRef, name: 'TestProvider', token: TestProvider, scope: undefined, @@ -109,81 +111,81 @@ describe('Module', () => { it('should call "addCustomProvider" when "provide" property exists', () => { const addCustomProvider = sinon.spy(); - module.addCustomProvider = addCustomProvider; + moduleRef.addCustomProvider = addCustomProvider; const provider = { provide: 'test', useValue: 'test' }; - module.addProvider(provider as any); + moduleRef.addProvider(provider as any); expect((addCustomProvider as sinon.SinonSpy).called).to.be.true; }); it('should call "addCustomClass" when "useClass" property exists', () => { const addCustomClass = sinon.spy(); - module.addCustomClass = addCustomClass; + moduleRef.addCustomClass = addCustomClass; const provider = { provide: 'test', useClass: () => null }; - module.addCustomProvider(provider as any, new Map()); + moduleRef.addCustomProvider(provider as any, new Map()); expect((addCustomClass as sinon.SinonSpy).called).to.be.true; }); it('should call "addCustomValue" when "useValue" property exists', () => { const addCustomValue = sinon.spy(); - module.addCustomValue = addCustomValue; + moduleRef.addCustomValue = addCustomValue; const provider = { provide: 'test', useValue: () => null }; - module.addCustomProvider(provider as any, new Map()); + moduleRef.addCustomProvider(provider as any, new Map()); expect((addCustomValue as sinon.SinonSpy).called).to.be.true; }); it('should call "addCustomValue" when "useValue" property exists but its value is `undefined`', () => { const addCustomValue = sinon.spy(); - module.addCustomValue = addCustomValue; + moduleRef.addCustomValue = addCustomValue; const provider = { provide: 'test', useValue: undefined }; - module.addCustomProvider(provider as any, new Map()); + moduleRef.addCustomProvider(provider as any, new Map()); expect((addCustomValue as sinon.SinonSpy).called).to.be.true; }); it('should call "addCustomFactory" when "useFactory" property exists', () => { const addCustomFactory = sinon.spy(); - module.addCustomFactory = addCustomFactory; + moduleRef.addCustomFactory = addCustomFactory; const provider = { provide: 'test', useFactory: () => null }; - module.addCustomProvider(provider as any, new Map()); + moduleRef.addCustomProvider(provider as any, new Map()); expect((addCustomFactory as sinon.SinonSpy).called).to.be.true; }); it('should call "addCustomUseExisting" when "useExisting" property exists', () => { const addCustomUseExisting = sinon.spy(); - module.addCustomUseExisting = addCustomUseExisting; + moduleRef.addCustomUseExisting = addCustomUseExisting; const provider = { provide: 'test', useExisting: () => null }; - module.addCustomUseExisting(provider as any, new Map()); + moduleRef.addCustomUseExisting(provider as any, new Map()); expect((addCustomUseExisting as sinon.SinonSpy).called).to.be.true; }); describe('addCustomClass', () => { const type = { name: 'TypeTest' }; const provider = { provide: type, useClass: type, durable: true }; - let setSpy; + let setSpy: sinon.SinonSpy; beforeEach(() => { const collection = new Map(); setSpy = sinon.spy(collection, 'set'); - (module as any)._providers = collection; + untypedModuleRef._providers = collection; }); it('should store provider', () => { - module.addCustomClass(provider as any, (module as any)._providers); + moduleRef.addCustomClass(provider as any, untypedModuleRef._providers); expect( setSpy.calledWith( provider.provide, new InstanceWrapper({ - host: module, + host: moduleRef, token: type as any, name: provider.provide.name, scope: undefined, @@ -199,23 +201,23 @@ describe('Module', () => { }); describe('addCustomValue', () => { - let setSpy; + let setSpy: sinon.SinonSpy; const value = () => ({}); const provider = { provide: value, useValue: value }; beforeEach(() => { const collection = new Map(); setSpy = sinon.spy(collection, 'set'); - (module as any)._providers = collection; + untypedModuleRef._providers = collection; }); it('should store provider', () => { - module.addCustomValue(provider as any, (module as any)._providers); + moduleRef.addCustomValue(provider as any, untypedModuleRef._providers); expect( setSpy.calledWith( provider.provide, new InstanceWrapper({ - host: module, + host: moduleRef, token: provider.provide, name: provider.provide.name, scope: Scope.DEFAULT, @@ -235,20 +237,20 @@ describe('Module', () => { const inject = [1, 2, 3]; const provider = { provide: type, useFactory: type, inject, durable: true }; - let setSpy; + let setSpy: sinon.SinonSpy; beforeEach(() => { const collection = new Map(); setSpy = sinon.spy(collection, 'set'); - (module as any)._providers = collection; + untypedModuleRef._providers = collection; }); it('should store provider', () => { - module.addCustomFactory(provider as any, (module as any)._providers); + moduleRef.addCustomFactory(provider as any, untypedModuleRef._providers); expect( setSpy.calledWith( provider.provide, new InstanceWrapper({ - host: module, + host: moduleRef, token: provider.provide as any, name: provider.provide.name, scope: undefined, @@ -268,15 +270,18 @@ describe('Module', () => { const type = { name: 'TypeTest' }; const provider = { provide: type, useExisting: type }; - let setSpy; + let setSpy: sinon.SinonSpy; beforeEach(() => { const collection = new Map(); setSpy = sinon.spy(collection, 'set'); - (module as any)._providers = collection; + untypedModuleRef._providers = collection; }); it('should store provider', () => { - module.addCustomUseExisting(provider as any, (module as any)._providers); - const factoryFn = (module as any)._providers.get( + moduleRef.addCustomUseExisting( + provider as any, + untypedModuleRef._providers, + ); + const factoryFn = untypedModuleRef._providers.get( provider.provide, ).metatype; @@ -285,7 +290,7 @@ describe('Module', () => { setSpy.calledWith( token, new InstanceWrapper({ - host: module, + host: moduleRef, token, name: provider.provide.name, metatype: factoryFn, @@ -304,41 +309,41 @@ describe('Module', () => { describe('when get instance', () => { describe('when metatype does not exists in providers collection', () => { beforeEach(() => { - sinon.stub((module as any)._providers, 'has').returns(false); + sinon.stub(untypedModuleRef._providers, 'has').returns(false); }); it('should throw RuntimeException', () => { - expect(() => module.instance).to.throws(RuntimeException); + expect(() => moduleRef.instance).to.throws(RuntimeException); }); }); describe('when metatype exists in providers collection', () => { it('should return null', () => { - expect(module.instance).to.be.eql(null); + expect(moduleRef.instance).to.be.eql(null); }); }); }); describe('when exported provider is custom provided', () => { beforeEach(() => { - sinon.stub(module, 'validateExportedProvider').callsFake(o => o); + sinon.stub(moduleRef, 'validateExportedProvider').callsFake(o => o); }); it('should call `addCustomExportedProvider`', () => { const addCustomExportedProviderSpy = sinon.spy( - module, + moduleRef, 'addCustomExportedProvider', ); - module.addExportedProvider({ provide: 'test' } as any); + moduleRef.addExportedProvider({ provide: 'test' } as any); expect(addCustomExportedProviderSpy.called).to.be.true; }); it('should support symbols', () => { const addCustomExportedProviderSpy = sinon.spy( - module, + moduleRef, 'addCustomExportedProvider', ); const symb = Symbol('test'); - module.addExportedProvider({ provide: symb } as any); + moduleRef.addExportedProvider({ provide: symb } as any); expect(addCustomExportedProviderSpy.called).to.be.true; - expect((module as any)._exports.has(symb)).to.be.true; + expect(untypedModuleRef._exports.has(symb)).to.be.true; }); }); @@ -348,10 +353,10 @@ describe('Module', () => { const wrapper = { mergeWith: sinon.spy(), }; - sinon.stub(module, 'hasProvider').callsFake(() => true); - sinon.stub(module.providers, 'get').callsFake(() => wrapper as any); + sinon.stub(moduleRef, 'hasProvider').callsFake(() => true); + sinon.stub(moduleRef.providers, 'get').callsFake(() => wrapper as any); - module.replace(null, { isProvider: true }); + moduleRef.replace(null, { isProvider: true }); expect(wrapper.mergeWith.called).to.be.true; }); }); @@ -361,10 +366,12 @@ describe('Module', () => { mergeWith: sinon.spy(), isProvider: true, }; - sinon.stub(module, 'hasInjectable').callsFake(() => true); - sinon.stub(module.injectables, 'get').callsFake(() => wrapper as any); + sinon.stub(moduleRef, 'hasInjectable').callsFake(() => true); + sinon + .stub(moduleRef.injectables, 'get') + .callsFake(() => wrapper as any); - module.replace(null, {}); + moduleRef.replace(null, {}); expect(wrapper.mergeWith.called).to.be.true; }); }); @@ -373,61 +380,63 @@ describe('Module', () => { describe('imports', () => { it('should return relatedModules', () => { const test = ['test']; - (module as any)._imports = test; + untypedModuleRef._imports = test; - expect(module.imports).to.be.eql(test); + expect(moduleRef.imports).to.be.eql(test); }); }); describe('injectables', () => { it('should return injectables', () => { const test = ['test']; - (module as any)._injectables = test; - expect(module.injectables).to.be.eql(test); + untypedModuleRef._injectables = test; + expect(moduleRef.injectables).to.be.eql(test); }); }); describe('controllers', () => { it('should return controllers', () => { const test = ['test']; - (module as any)._controllers = test; + untypedModuleRef._controllers = test; - expect(module.controllers).to.be.eql(test); + expect(moduleRef.controllers).to.be.eql(test); }); }); describe('exports', () => { it('should return exports', () => { const test = ['test']; - (module as any)._exports = test; + untypedModuleRef._exports = test; - expect(module.exports).to.be.eql(test); + expect(moduleRef.exports).to.be.eql(test); }); }); describe('providers', () => { it('should return providers', () => { const test = ['test']; - (module as any)._providers = test; + untypedModuleRef._providers = test; - expect(module.providers).to.be.eql(test); + expect(moduleRef.providers).to.be.eql(test); }); }); describe('createModuleReferenceType', () => { - let moduleRef: any; + let customModuleRef: any; beforeEach(() => { - const Class = module.createModuleReferenceType(); - moduleRef = new Class(); + const Class = moduleRef.createModuleReferenceType(); + customModuleRef = new Class(); }); it('should return metatype with "get" method', () => { - expect(!!moduleRef.get).to.be.true; + expect(!!customModuleRef.get).to.be.true; }); describe('get', () => { it('should throw exception if not exists', () => { - expect(() => moduleRef.get('fail')).to.throws(UnknownElementException); + expect(() => customModuleRef.get('fail')).to.throws( + UnknownElementException, + ); }); }); }); @@ -436,22 +445,22 @@ describe('Module', () => { describe('when unit exists in provider collection', () => { it('should behave as identity', () => { - (module as any)._providers = new Map([[token, true]]); - expect(module.validateExportedProvider(token)).to.be.eql(token); + untypedModuleRef._providers = new Map([[token, true]]); + expect(moduleRef.validateExportedProvider(token)).to.be.eql(token); }); }); describe('when unit exists in related modules collection', () => { it('should behave as identity', () => { class Random {} - (module as any)._imports = new Set([ + untypedModuleRef._imports = new Set([ new Module(Random, new NestContainer()), ]); - expect(module.validateExportedProvider(Random)).to.be.eql(Random); + expect(moduleRef.validateExportedProvider(Random)).to.be.eql(Random); }); }); describe('when unit does not exist in both provider and related modules collections', () => { it('should throw UnknownExportException', () => { - expect(() => module.validateExportedProvider(token)).to.throws( + expect(() => moduleRef.validateExportedProvider(token)).to.throws( UnknownExportException, ); }); @@ -462,13 +471,13 @@ describe('Module', () => { describe('when module has provider', () => { it('should return true', () => { const token = 'test'; - module.providers.set(token, new InstanceWrapper()); - expect(module.hasProvider(token)).to.be.true; + moduleRef.providers.set(token, new InstanceWrapper()); + expect(moduleRef.hasProvider(token)).to.be.true; }); }); describe('otherwise', () => { it('should return false', () => { - expect(module.hasProvider('_')).to.be.false; + expect(moduleRef.hasProvider('_')).to.be.false; }); }); }); @@ -477,33 +486,33 @@ describe('Module', () => { describe('when module has injectable', () => { it('should return true', () => { const token = 'test'; - module.injectables.set(token, new InstanceWrapper()); - expect(module.hasInjectable(token)).to.be.true; + moduleRef.injectables.set(token, new InstanceWrapper()); + expect(moduleRef.hasInjectable(token)).to.be.true; }); }); describe('otherwise', () => { it('should return false', () => { - expect(module.hasInjectable('_')).to.be.false; + expect(moduleRef.hasInjectable('_')).to.be.false; }); }); }); describe('getter "id"', () => { it('should return module id', () => { - expect(module.id).to.be.equal(module['_id']); + expect(moduleRef.id).to.be.equal(moduleRef['_id']); }); }); describe('getProviderByKey', () => { describe('when does not exist', () => { it('should return undefined', () => { - expect(module.getProviderByKey('test')).to.be.undefined; + expect(moduleRef.getProviderByKey('test')).to.be.undefined; }); }); describe('otherwise', () => { it('should return instance wrapper', () => { - module.addProvider(TestProvider); - expect(module.getProviderByKey(TestProvider)).to.not.be.undefined; + moduleRef.addProvider(TestProvider); + expect(moduleRef.getProviderByKey(TestProvider)).to.not.be.undefined; }); }); }); diff --git a/packages/core/test/router/route-params-factory.spec.ts b/packages/core/test/router/route-params-factory.spec.ts index be4075abf1a..3768dc9abb8 100644 --- a/packages/core/test/router/route-params-factory.spec.ts +++ b/packages/core/test/router/route-params-factory.spec.ts @@ -4,9 +4,13 @@ import { RouteParamsFactory } from '../../router/route-params-factory'; describe('RouteParamsFactory', () => { let factory: RouteParamsFactory; + let untypedFactory: any; + beforeEach(() => { factory = new RouteParamsFactory(); + untypedFactory = factory as any; }); + describe('exchangeKeyForValue', () => { const res = {}; const next = () => ({}); @@ -37,14 +41,14 @@ describe('RouteParamsFactory', () => { describe(`RouteParamtypes.NEXT`, () => { it('should return next object', () => { expect( - (factory as any).exchangeKeyForValue(RouteParamtypes.NEXT, ...args), + untypedFactory.exchangeKeyForValue(RouteParamtypes.NEXT, ...args), ).to.be.eql(next); }); }); describe(`RouteParamtypes.RESPONSE`, () => { it('should return response object', () => { expect( - (factory as any).exchangeKeyForValue( + untypedFactory.exchangeKeyForValue( RouteParamtypes.RESPONSE, ...args, ), @@ -54,7 +58,7 @@ describe('RouteParamsFactory', () => { describe(`RouteParamtypes.REQUEST`, () => { it('should return request object', () => { expect( - (factory as any).exchangeKeyForValue( + untypedFactory.exchangeKeyForValue( RouteParamtypes.REQUEST, ...args, ), @@ -64,14 +68,14 @@ describe('RouteParamsFactory', () => { describe(`RouteParamtypes.BODY`, () => { it('should return body object', () => { expect( - (factory as any).exchangeKeyForValue(RouteParamtypes.BODY, ...args), + untypedFactory.exchangeKeyForValue(RouteParamtypes.BODY, ...args), ).to.be.eql(req.body); }); }); describe(`RouteParamtypes.RAW_BODY`, () => { it('should return rawBody buffer', () => { expect( - (factory as any).exchangeKeyForValue( + untypedFactory.exchangeKeyForValue( RouteParamtypes.RAW_BODY, ...args, ), @@ -81,7 +85,7 @@ describe('RouteParamsFactory', () => { describe(`RouteParamtypes.HEADERS`, () => { it('should return headers object', () => { expect( - (factory as any).exchangeKeyForValue( + untypedFactory.exchangeKeyForValue( RouteParamtypes.HEADERS, ...args, ), @@ -91,14 +95,14 @@ describe('RouteParamsFactory', () => { describe(`RouteParamtypes.IP`, () => { it('should return ip property', () => { expect( - (factory as any).exchangeKeyForValue(RouteParamtypes.IP, ...args), + untypedFactory.exchangeKeyForValue(RouteParamtypes.IP, ...args), ).to.be.equal(req.ip); }); }); describe(`RouteParamtypes.SESSION`, () => { it('should return session object', () => { expect( - (factory as any).exchangeKeyForValue( + untypedFactory.exchangeKeyForValue( RouteParamtypes.SESSION, ...args, ), @@ -108,50 +112,41 @@ describe('RouteParamsFactory', () => { describe(`RouteParamtypes.QUERY`, () => { it('should return query object', () => { expect( - (factory as any).exchangeKeyForValue( - RouteParamtypes.QUERY, - ...args, - ), + untypedFactory.exchangeKeyForValue(RouteParamtypes.QUERY, ...args), ).to.be.eql(req.query); }); }); describe(`RouteParamtypes.PARAM`, () => { it('should return params object', () => { expect( - (factory as any).exchangeKeyForValue( - RouteParamtypes.PARAM, - ...args, - ), + untypedFactory.exchangeKeyForValue(RouteParamtypes.PARAM, ...args), ).to.be.eql(req.params); }); }); describe(`RouteParamtypes.HOST`, () => { it('should return hosts object', () => { expect( - (factory as any).exchangeKeyForValue(RouteParamtypes.HOST, ...args), + untypedFactory.exchangeKeyForValue(RouteParamtypes.HOST, ...args), ).to.be.eql(req.hosts); }); }); describe(`RouteParamtypes.FILE`, () => { it('should return file object', () => { expect( - (factory as any).exchangeKeyForValue(RouteParamtypes.FILE, ...args), + untypedFactory.exchangeKeyForValue(RouteParamtypes.FILE, ...args), ).to.be.eql(req.file); }); }); describe(`RouteParamtypes.FILES`, () => { it('should return files object', () => { expect( - (factory as any).exchangeKeyForValue( - RouteParamtypes.FILES, - ...args, - ), + untypedFactory.exchangeKeyForValue(RouteParamtypes.FILES, ...args), ).to.be.eql(req.files); }); }); describe('not available', () => { it('should return null', () => { - expect((factory as any).exchangeKeyForValue(-1, ...args)).to.be.eql( + expect(untypedFactory.exchangeKeyForValue(-1, ...args)).to.be.eql( null, ); }); diff --git a/packages/core/test/router/routes-resolver.spec.ts b/packages/core/test/router/routes-resolver.spec.ts index 9819f4aaee0..a4a1cc86697 100644 --- a/packages/core/test/router/routes-resolver.spec.ts +++ b/packages/core/test/router/routes-resolver.spec.ts @@ -52,6 +52,7 @@ describe('RoutesResolver', () => { let router: any; let routesResolver: RoutesResolver; + let untypedRoutesResolver: any; let container: NestContainer; let modules: Map; let applicationRef: any; @@ -82,6 +83,7 @@ describe('RoutesResolver', () => { new Injector(), new GraphInspector(container), ); + untypedRoutesResolver = routesResolver as any; }); describe('registerRouters', () => { @@ -95,14 +97,14 @@ describe('RoutesResolver', () => { const appInstance = new NoopHttpAdapter(router); const exploreSpy = sinon.spy( - (routesResolver as any).routerExplorer, + untypedRoutesResolver.routerExplorer, 'explore', ); const moduleName = ''; modules.set(moduleName, {}); sinon - .stub((routesResolver as any).routerExplorer, 'extractRouterPath') + .stub(untypedRoutesResolver.routerExplorer, 'extractRouterPath') .callsFake(() => ['']); routesResolver.registerRouters(routes, moduleName, '', '', appInstance); @@ -137,14 +139,14 @@ describe('RoutesResolver', () => { const appInstance = new NoopHttpAdapter(router); const exploreSpy = sinon.spy( - (routesResolver as any).routerExplorer, + untypedRoutesResolver.routerExplorer, 'explore', ); const moduleName = ''; modules.set(moduleName, {}); sinon - .stub((routesResolver as any).routerExplorer, 'extractRouterPath') + .stub(untypedRoutesResolver.routerExplorer, 'extractRouterPath') .callsFake(() => ['']); routesResolver.registerRouters(routes, moduleName, '', '', appInstance); @@ -181,6 +183,7 @@ describe('RoutesResolver', () => { new Injector(), new GraphInspector(container), ); + untypedRoutesResolver = routesResolver as any; const routes = new Map(); const routeWrapper = new InstanceWrapper({ @@ -191,14 +194,14 @@ describe('RoutesResolver', () => { const appInstance = new NoopHttpAdapter(router); const exploreSpy = sinon.spy( - (routesResolver as any).routerExplorer, + untypedRoutesResolver.routerExplorer, 'explore', ); const moduleName = ''; modules.set(moduleName, {}); sinon - .stub((routesResolver as any).routerExplorer, 'extractRouterPath') + .stub(untypedRoutesResolver.routerExplorer, 'extractRouterPath') .callsFake(() => ['']); routesResolver.registerRouters(routes, moduleName, '', '', appInstance); diff --git a/packages/core/test/scanner.spec.ts b/packages/core/test/scanner.spec.ts index c7cae333b47..94f137aa30d 100644 --- a/packages/core/test/scanner.spec.ts +++ b/packages/core/test/scanner.spec.ts @@ -56,6 +56,7 @@ describe('DependenciesScanner', () => { class InvalidModule {} let scanner: DependenciesScanner; + let untypedScanner: any; let mockContainer: sinon.SinonMock; let container: NestContainer; let graphInspector: GraphInspector; @@ -71,6 +72,7 @@ describe('DependenciesScanner', () => { graphInspector, new ApplicationConfig(), ); + untypedScanner = scanner as any; sinon.stub(scanner, 'registerCoreModule').callsFake(async () => {}); }); @@ -86,7 +88,7 @@ describe('DependenciesScanner', () => { .expects('replaceModule') .never(); - await scanner.scan(TestModule as any); + await scanner.scan(TestModule); expectationCountAddModule.verify(); expectationCountReplaceModule.verify(); }); @@ -95,20 +97,20 @@ describe('DependenciesScanner', () => { const expectation = mockContainer.expects('addProvider').twice(); const stub = sinon.stub(scanner, 'insertExportedProvider'); - await scanner.scan(TestModule as any); + await scanner.scan(TestModule); expectation.verify(); stub.restore(); }); it('should "insertController" call twice (2 components) container method "addController"', async () => { const expectation = mockContainer.expects('addController').twice(); - await scanner.scan(TestModule as any); + await scanner.scan(TestModule); expectation.verify(); }); it('should "insertExportedProvider" call once (1 component) container method "addExportedProvider"', async () => { const expectation = mockContainer.expects('addExportedProvider').once(); - await scanner.scan(TestModule as any); + await scanner.scan(TestModule); expectation.verify(); }); @@ -176,7 +178,7 @@ describe('DependenciesScanner', () => { .expects('addModule') .once(); - await scanner.scan(OverrideTestModule as any, { + await scanner.scan(OverrideTestModule, { overrides: modulesToOverride, }); @@ -188,13 +190,13 @@ describe('DependenciesScanner', () => { it('should "insertProvider" call once container method "addProvider"', async () => { const expectation = mockContainer.expects('addProvider').once(); - await scanner.scan(OverrideTestModule as any); + await scanner.scan(OverrideTestModule); expectation.verify(); }); it('should "insertController" call twice (2 components) container method "addController"', async () => { const expectation = mockContainer.expects('addController').twice(); - await scanner.scan(OverrideTestModule as any); + await scanner.scan(OverrideTestModule); expectation.verify(); }); @@ -230,7 +232,7 @@ describe('DependenciesScanner', () => { }) class OverrideForwardRefTestModule {} - await scanner.scan(OverrideForwardRefTestModule as any, { + await scanner.scan(OverrideForwardRefTestModule, { overrides: [ { moduleToReplace: Overwritten, @@ -290,7 +292,7 @@ describe('DependenciesScanner', () => { beforeEach(() => { addInjectableStub = sinon - .stub((scanner as any).container, 'addInjectable') + .stub(untypedScanner.container, 'addInjectable') .callsFake(() => instanceWrapper); insertEnhancerMetadataCacheStub = sinon .stub(graphInspector, 'insertEnhancerMetadataCache') @@ -427,7 +429,7 @@ describe('DependenciesScanner', () => { const module = { forwardRef: sinon.stub().returns({}) }; sinon.stub(container, 'addImport').returns({} as any); - await scanner.insertImport(module as any, [] as any, 'test'); + await scanner.insertImport(module, [] as any, 'test'); expect(module.forwardRef.called).to.be.true; }); describe('when "related" is nil', () => { @@ -477,7 +479,7 @@ describe('DependenciesScanner', () => { it('should push new object to "applicationProvidersApplyMap" array', () => { mockContainer.expects('addProvider').callsFake(() => false); scanner.insertProvider(provider, token); - const applyMap = (scanner as any).applicationProvidersApplyMap; + const applyMap = untypedScanner.applicationProvidersApplyMap; expect(applyMap).to.have.length(1); expect(applyMap[0].moduleKey).to.be.eql(token); @@ -514,15 +516,11 @@ describe('DependenciesScanner', () => { expectation.verify(); }); it('should not push new object to "applicationProvidersApplyMap" array', () => { - expect((scanner as any).applicationProvidersApplyMap).to.have.length( - 0, - ); + expect(untypedScanner.applicationProvidersApplyMap).to.have.length(0); mockContainer.expects('addProvider').callsFake(() => false); scanner.insertProvider(component, token); - expect((scanner as any).applicationProvidersApplyMap).to.have.length( - 0, - ); + expect(untypedScanner.applicationProvidersApplyMap).to.have.length(0); }); }); }); @@ -534,7 +532,7 @@ describe('DependenciesScanner', () => { providerKey: 'providerToken', type: APP_GUARD, }; - (scanner as any).applicationProvidersApplyMap = [provider]; + untypedScanner.applicationProvidersApplyMap = [provider]; const expectedInstance = {}; const instanceWrapper = { @@ -569,7 +567,7 @@ describe('DependenciesScanner', () => { type: APP_GUARD, scope: Scope.REQUEST, }; - (scanner as any).applicationProvidersApplyMap = [provider]; + untypedScanner.applicationProvidersApplyMap = [provider]; const expectedInstanceWrapper = new InstanceWrapper(); mockContainer.expects('getModules').callsFake(() => ({ @@ -606,7 +604,7 @@ describe('DependenciesScanner', () => { }; it('should add enhancers metadata to every controller and every entry provider', () => { - (scanner as any).applicationProvidersApplyMap = [provider]; + untypedScanner.applicationProvidersApplyMap = [provider]; const instance = new InstanceWrapper({ name: 'test' }); const controllers = new Map(); @@ -651,7 +649,7 @@ describe('DependenciesScanner', () => { describe(`when token is ${APP_INTERCEPTOR}`, () => { it('call "addGlobalInterceptor"', () => { const addSpy = sinon.spy( - (scanner as any).applicationConfig, + untypedScanner.applicationConfig, 'addGlobalInterceptor', ); scanner.getApplyProvidersMap()[APP_INTERCEPTOR](null); @@ -661,7 +659,7 @@ describe('DependenciesScanner', () => { describe(`when token is ${APP_GUARD}`, () => { it('call "addGlobalGuard"', () => { const addSpy = sinon.spy( - (scanner as any).applicationConfig, + untypedScanner.applicationConfig, 'addGlobalGuard', ); scanner.getApplyProvidersMap()[APP_GUARD](null); @@ -671,7 +669,7 @@ describe('DependenciesScanner', () => { describe(`when token is ${APP_PIPE}`, () => { it('call "addGlobalPipe"', () => { const addSpy = sinon.spy( - (scanner as any).applicationConfig, + untypedScanner.applicationConfig, 'addGlobalPipe', ); scanner.getApplyProvidersMap()[APP_PIPE](null); @@ -681,7 +679,7 @@ describe('DependenciesScanner', () => { describe(`when token is ${APP_FILTER}`, () => { it('call "addGlobalFilter"', () => { const addSpy = sinon.spy( - (scanner as any).applicationConfig, + untypedScanner.applicationConfig, 'addGlobalFilter', ); scanner.getApplyProvidersMap()[APP_FILTER](null); @@ -693,7 +691,7 @@ describe('DependenciesScanner', () => { describe(`when token is ${APP_INTERCEPTOR}`, () => { it('call "addGlobalRequestInterceptor"', () => { const addSpy = sinon.spy( - (scanner as any).applicationConfig, + untypedScanner.applicationConfig, 'addGlobalRequestInterceptor', ); scanner.getApplyRequestProvidersMap()[APP_INTERCEPTOR](null); @@ -703,7 +701,7 @@ describe('DependenciesScanner', () => { describe(`when token is ${APP_GUARD}`, () => { it('call "addGlobalRequestGuard"', () => { const addSpy = sinon.spy( - (scanner as any).applicationConfig, + untypedScanner.applicationConfig, 'addGlobalRequestGuard', ); scanner.getApplyRequestProvidersMap()[APP_GUARD](null); @@ -713,7 +711,7 @@ describe('DependenciesScanner', () => { describe(`when token is ${APP_PIPE}`, () => { it('call "addGlobalRequestPipe"', () => { const addSpy = sinon.spy( - (scanner as any).applicationConfig, + untypedScanner.applicationConfig, 'addGlobalRequestPipe', ); scanner.getApplyRequestProvidersMap()[APP_PIPE](null); @@ -723,7 +721,7 @@ describe('DependenciesScanner', () => { describe(`when token is ${APP_FILTER}`, () => { it('call "addGlobalRequestFilter"', () => { const addSpy = sinon.spy( - (scanner as any).applicationConfig, + untypedScanner.applicationConfig, 'addGlobalRequestFilter', ); scanner.getApplyRequestProvidersMap()[APP_FILTER](null); diff --git a/packages/microservices/test/client/client-grpc.spec.ts b/packages/microservices/test/client/client-grpc.spec.ts index a6fb314be12..2b17ec88060 100644 --- a/packages/microservices/test/client/client-grpc.spec.ts +++ b/packages/microservices/test/client/client-grpc.spec.ts @@ -22,6 +22,7 @@ class GrpcService { describe('ClientGrpcProxy', () => { let client: ClientGrpcProxy; + let untypedClient: any; let clientMulti: ClientGrpcProxy; beforeEach(() => { @@ -29,6 +30,7 @@ describe('ClientGrpcProxy', () => { protoPath: join(__dirname, './test.proto'), package: 'test', }); + untypedClient = client as any; clientMulti = new ClientGrpcProxy({ protoPath: ['test.proto', 'test2.proto'], @@ -42,7 +44,7 @@ describe('ClientGrpcProxy', () => { describe('getService', () => { describe('when "grpcClient[name]" is nil', () => { it('should throw "InvalidGrpcServiceException"', () => { - (client as any).grpcClient = {}; + untypedClient.grpcClient = {}; expect(() => client.getService('test')).to.throw( InvalidGrpcServiceException, ); @@ -62,7 +64,7 @@ describe('ClientGrpcProxy', () => { }); describe('when "grpcClient[name]" is not nil', () => { it('should create grpcService', () => { - (client as any).grpcClients[0] = { + untypedClient.grpcClients[0] = { test: GrpcService, }; expect(() => client.getService('test')).to.not.throw( @@ -430,7 +432,7 @@ describe('ClientGrpcProxy', () => { describe('when package does not exist', () => { it('should throw "InvalidGrpcPackageException"', () => { sinon.stub(client, 'lookupPackage').callsFake(() => null); - (client as any).logger = new NoopLogger(); + untypedClient.logger = new NoopLogger(); try { client.createClients(); @@ -451,7 +453,7 @@ describe('ClientGrpcProxy', () => { getPackageDefinitionStub.callsFake(() => { throw new Error(); }); - (client as any).logger = new NoopLogger(); + untypedClient.logger = new NoopLogger(); expect(() => client.loadProto()).to.throws( InvalidProtoDefinitionException, ); @@ -462,13 +464,13 @@ describe('ClientGrpcProxy', () => { describe('close', () => { it('should call "close" method', () => { const grpcClient = { close: sinon.spy() }; - (client as any).clients.set('test', grpcClient); - (client as any).grpcClients[0] = {}; + untypedClient.clients.set('test', grpcClient); + untypedClient.grpcClients[0] = {}; client.close(); expect(grpcClient.close.called).to.be.true; - expect((client as any).clients.size).to.be.eq(0); - expect((client as any).grpcClients.length).to.be.eq(0); + expect(untypedClient.clients.size).to.be.eq(0); + expect(untypedClient.grpcClients.length).to.be.eq(0); }); }); diff --git a/packages/microservices/test/client/client-kafka.spec.ts b/packages/microservices/test/client/client-kafka.spec.ts index c6c030ee616..50a4e37e60c 100644 --- a/packages/microservices/test/client/client-kafka.spec.ts +++ b/packages/microservices/test/client/client-kafka.spec.ts @@ -149,6 +149,7 @@ describe('ClientKafka', () => { }; let client: ClientKafka; + let untypedClient: any; let callback: sinon.SinonSpy; let connect: sinon.SinonSpy; let subscribe: sinon.SinonSpy; @@ -162,6 +163,8 @@ describe('ClientKafka', () => { beforeEach(() => { client = new ClientKafka({}); + untypedClient = client as any; + callback = sinon.spy(); connect = sinon.spy(); subscribe = sinon.spy(); @@ -250,17 +253,17 @@ describe('ClientKafka', () => { const consumer = { disconnect: sinon.stub().resolves() }; const producer = { disconnect: sinon.stub().resolves() }; beforeEach(() => { - (client as any).consumer = consumer; - (client as any).producer = producer; + untypedClient.consumer = consumer; + untypedClient.producer = producer; }); it('should close server', async () => { await client.close(); expect(consumer.disconnect.calledOnce).to.be.true; expect(producer.disconnect.calledOnce).to.be.true; - expect((client as any).consumer).to.be.null; - expect((client as any).producer).to.be.null; - expect((client as any).client).to.be.null; + expect(untypedClient.consumer).to.be.null; + expect(untypedClient.producer).to.be.null; + expect(untypedClient.client).to.be.null; }); }); @@ -298,7 +301,7 @@ describe('ClientKafka', () => { }); it('should expect the connection to be reused', async () => { - (client as any).initialized = Promise.resolve({}); + untypedClient.initialized = Promise.resolve({}); await client.connect(); @@ -345,7 +348,7 @@ describe('ClientKafka', () => { }); it('should expect the connection to be reused', async () => { - (client as any).initialized = Promise.resolve({}); + untypedClient.initialized = Promise.resolve({}); await client.connect(); @@ -427,8 +430,8 @@ describe('ClientKafka', () => { describe('bindTopics', () => { it('should bind topics from response patterns', async () => { - (client as any).responsePatterns = [replyTopic]; - (client as any).consumer = kafkaClient.consumer(); + untypedClient.responsePatterns = [replyTopic]; + untypedClient.consumer = kafkaClient.consumer(); await client.bindTopics(); @@ -442,10 +445,10 @@ describe('ClientKafka', () => { }); it('should bind topics from response patterns with options', async () => { - (client as any).responsePatterns = [replyTopic]; - (client as any).consumer = kafkaClient.consumer(); - (client as any).options.subscribe = {}; - (client as any).options.subscribe.fromBeginning = true; + untypedClient.responsePatterns = [replyTopic]; + untypedClient.consumer = kafkaClient.consumer(); + untypedClient.options.subscribe = {}; + untypedClient.options.subscribe.fromBeginning = true; await client.bindTopics(); @@ -660,7 +663,7 @@ describe('ClientKafka', () => { client as any, 'getReplyTopicPartition', ); - routingMapSetSpy = sinon.spy((client as any).routingMap, 'set'); + routingMapSetSpy = sinon.spy(untypedClient.routingMap, 'set'); sendSpy = sinon.spy(() => Promise.resolve()); // stub diff --git a/packages/microservices/test/client/client-mqtt.spec.ts b/packages/microservices/test/client/client-mqtt.spec.ts index cab94c152a3..ef1768d66c3 100644 --- a/packages/microservices/test/client/client-mqtt.spec.ts +++ b/packages/microservices/test/client/client-mqtt.spec.ts @@ -9,6 +9,7 @@ import { MqttRecord } from '../../record-builders'; describe('ClientMqtt', () => { const test = 'test'; let client: ClientMqtt = new ClientMqtt({}); + let untypedClient = client as any; describe('getRequestPattern', () => { it(`should leave pattern as it is`, () => { @@ -36,6 +37,8 @@ describe('ClientMqtt', () => { const id = '1'; beforeEach(() => { client = new ClientMqtt({}); + untypedClient = client as any; + msg = { pattern, data: 'data' }; subscribeSpy = sinon.spy((name, fn) => fn()); publishSpy = sinon.spy(); @@ -51,7 +54,7 @@ describe('ClientMqtt', () => { publish: publishSpy, addListener: () => ({}), }; - (client as any).mqttClient = mqttClient; + untypedClient.mqttClient = mqttClient; connectSpy = sinon.stub(client, 'connect'); assignStub = sinon .stub(client, 'assignPacketId' as any) @@ -132,7 +135,7 @@ describe('ClientMqtt', () => { }); it('should combine packet and static headers', async () => { const staticHeaders = { 'client-id': 'some-client-id' }; - (client as any).options.userProperties = staticHeaders; + untypedClient.options.userProperties = staticHeaders; const requestHeaders = { '1': '123' }; msg.data = new MqttRecord('data', { @@ -147,7 +150,7 @@ describe('ClientMqtt', () => { }); it('should prefer packet headers over static headers', async () => { const staticHeaders = { 'client-id': 'some-client-id' }; - (client as any).options.headers = staticHeaders; + untypedClient.options.headers = staticHeaders; const requestHeaders = { 'client-id': 'override-client-id' }; msg.data = new MqttRecord('data', { @@ -231,14 +234,14 @@ describe('ClientMqtt', () => { let endSpy: sinon.SinonSpy; beforeEach(() => { endSpy = sinon.spy(); - (client as any).mqttClient = { end: endSpy }; + untypedClient.mqttClient = { end: endSpy }; }); it('should close "pub" when it is not null', () => { client.close(); expect(endSpy.called).to.be.true; }); it('should not close "pub" when it is null', () => { - (client as any).mqttClient = null; + untypedClient.mqttClient = null; client.close(); expect(endSpy.called).to.be.false; }); @@ -332,12 +335,14 @@ describe('ClientMqtt', () => { beforeEach(() => { client = new ClientMqtt({}); + untypedClient = client as any; + msg = { pattern: 'pattern', data: 'data' }; publishStub = sinon.stub(); mqttClient = { publish: publishStub, }; - (client as any).mqttClient = mqttClient; + untypedClient.mqttClient = mqttClient; }); it('should publish packet', async () => { @@ -373,7 +378,7 @@ describe('ClientMqtt', () => { it('should combine packet and static headers', async () => { publishStub.callsFake((a, b, c, d) => d()); const staticHeaders = { 'client-id': 'some-client-id' }; - (client as any).options.userProperties = staticHeaders; + untypedClient.options.userProperties = staticHeaders; const requestHeaders = { '1': '123' }; msg.data = new MqttRecord('data', { @@ -391,7 +396,7 @@ describe('ClientMqtt', () => { it('should prefer packet headers over static headers', async () => { publishStub.callsFake((a, b, c, d) => d()); const staticHeaders = { 'client-id': 'some-client-id' }; - (client as any).options.headers = staticHeaders; + untypedClient.options.headers = staticHeaders; const requestHeaders = { 'client-id': 'override-client-id' }; msg.data = new MqttRecord('data', { diff --git a/packages/microservices/test/client/client-nats.spec.ts b/packages/microservices/test/client/client-nats.spec.ts index d9f93bc2170..aa14af84e14 100644 --- a/packages/microservices/test/client/client-nats.spec.ts +++ b/packages/microservices/test/client/client-nats.spec.ts @@ -7,6 +7,7 @@ import { NatsRecord } from '../../record-builders'; describe('ClientNats', () => { let client: ClientNats; + let untypedClient: any; describe('publish', () => { let msg: ReadPacket; @@ -24,6 +25,8 @@ describe('ClientNats', () => { beforeEach(() => { client = new ClientNats({}); + untypedClient = client as any; + msg = { pattern, data: 'data' }; unsubscribeSpy = sinon.spy(); subscription = { @@ -39,14 +42,14 @@ describe('ClientNats', () => { addListener: () => ({}), publish: publishSpy, }; - (client as any).natsClient = natsClient; + untypedClient.natsClient = natsClient; connectSpy = sinon.stub(client, 'connect').callsFake(async () => { - (client as any).natsClient = natsClient; + untypedClient.natsClient = natsClient; }); createClient = sinon .stub(client, 'createClient') - .callsFake(() => client as any); + .callsFake(() => untypedClient); }); afterEach(() => { connectSpy.restore(); @@ -117,7 +120,7 @@ describe('ClientNats', () => { }); it('should combine packet and static headers', () => { const staticHeaders = { 'client-id': 'some-client-id' }; - (client as any).options.headers = staticHeaders; + untypedClient.options.headers = staticHeaders; const requestHeaders = createHeaders(); requestHeaders.set('1', '123'); @@ -132,7 +135,7 @@ describe('ClientNats', () => { it('should prefer packet headers over static headers', () => { const staticHeaders = { 'client-id': 'some-client-id' }; - (client as any).options.headers = staticHeaders; + untypedClient.options.headers = staticHeaders; const requestHeaders = createHeaders(); requestHeaders.set('client-id', 'override-client-id'); @@ -223,11 +226,12 @@ describe('ClientNats', () => { }); describe('close', () => { let natsClose: sinon.SinonSpy; - let natsClient; + let natsClient: any; + beforeEach(() => { natsClose = sinon.spy(); natsClient = { close: natsClose }; - (client as any).natsClient = natsClient; + untypedClient.natsClient = natsClient; }); it('should close "natsClient" when it is not null', () => { client.close(); @@ -288,7 +292,7 @@ describe('ClientNats', () => { }); it('should log "disconnect" and "error" statuses as "errors"', async () => { - const logErrorSpy = sinon.spy((client as any).logger, 'error'); + const logErrorSpy = sinon.spy(untypedClient.logger, 'error'); const clientMock = { status: sinon.stub().returns({ async *[Symbol.asyncIterator]() { @@ -309,7 +313,7 @@ describe('ClientNats', () => { ); }); it('should log other statuses as "logs"', async () => { - const logSpy = sinon.spy((client as any).logger, 'log'); + const logSpy = sinon.spy(untypedClient.logger, 'log'); const clientMock = { status: sinon.stub().returns({ async *[Symbol.asyncIterator]() { @@ -334,6 +338,8 @@ describe('ClientNats', () => { beforeEach(() => { client = new ClientNats({}); + untypedClient = client as any; + msg = { pattern: 'pattern', data: 'data' }; subscribeStub = sinon .stub() @@ -342,7 +348,7 @@ describe('ClientNats', () => { publish: sinon.spy(), subscribe: subscribeStub, }; - (client as any).natsClient = natsClient; + untypedClient.natsClient = natsClient; }); it('should publish packet', async () => { @@ -379,7 +385,7 @@ describe('ClientNats', () => { it('should combine packet and static headers', () => { const staticHeaders = { 'client-id': 'some-client-id' }; - (client as any).options.headers = staticHeaders; + untypedClient.options.headers = staticHeaders; const requestHeaders = createHeaders(); requestHeaders.set('1', '123'); @@ -396,7 +402,7 @@ describe('ClientNats', () => { it('should prefer packet headers over static headers', () => { const staticHeaders = { 'client-id': 'some-client-id' }; - (client as any).options.headers = staticHeaders; + untypedClient.options.headers = staticHeaders; const requestHeaders = createHeaders(); requestHeaders.set('client-id', 'override-client-id'); diff --git a/packages/microservices/test/client/client-redis.spec.ts b/packages/microservices/test/client/client-redis.spec.ts index 6cae9da8565..a341176734f 100644 --- a/packages/microservices/test/client/client-redis.spec.ts +++ b/packages/microservices/test/client/client-redis.spec.ts @@ -6,6 +6,7 @@ import { ERROR_EVENT } from '../../constants'; describe('ClientRedis', () => { const test = 'test'; const client = new ClientRedis({}); + const untypedClient = client as any; describe('getRequestPattern', () => { it(`should leave pattern as it is`, () => { @@ -28,8 +29,8 @@ describe('ClientRedis', () => { removeListenerSpy: sinon.SinonSpy, unsubscribeSpy: sinon.SinonSpy, connectSpy: sinon.SinonSpy, - sub, - pub; + sub: Record, + pub: Record; beforeEach(() => { subscribeSpy = sinon.spy((name, fn) => fn()); @@ -46,8 +47,8 @@ describe('ClientRedis', () => { addListener: () => ({}), }; pub = { publish: publishSpy }; - (client as any).subClient = sub; - (client as any).pubClient = pub; + untypedClient.subClient = sub; + untypedClient.pubClient = pub; connectSpy = sinon.spy(client, 'connect'); }); afterEach(() => { @@ -189,15 +190,15 @@ describe('ClientRedis', () => { subClose = sinon.spy(); pub = { quit: pubClose }; sub = { quit: subClose }; - (client as any).pubClient = pub; - (client as any).subClient = sub; + untypedClient.pubClient = pub; + untypedClient.subClient = sub; }); it('should close "pub" when it is not null', () => { client.close(); expect(pubClose.called).to.be.true; }); it('should not close "pub" when it is null', () => { - (client as any).pubClient = null; + untypedClient.pubClient = null; client.close(); expect(pubClose.called).to.be.false; }); @@ -206,7 +207,7 @@ describe('ClientRedis', () => { expect(subClose.called).to.be.true; }); it('should not close "sub" when it is null', () => { - (client as any).subClient = null; + untypedClient.subClient = null; client.close(); expect(subClose.called).to.be.false; }); @@ -262,37 +263,37 @@ describe('ClientRedis', () => { describe('createRetryStrategy', () => { describe('when is terminated', () => { it('should return undefined', () => { - (client as any).isExplicitlyTerminated = true; + untypedClient.isExplicitlyTerminated = true; const result = client.createRetryStrategy(0); expect(result).to.be.undefined; }); }); describe('when "retryAttempts" does not exist', () => { it('should return undefined', () => { - (client as any).isExplicitlyTerminated = false; - (client as any).options.options = {}; - (client as any).options.options.retryAttempts = undefined; + untypedClient.isExplicitlyTerminated = false; + untypedClient.options.options = {}; + untypedClient.options.options.retryAttempts = undefined; const result = client.createRetryStrategy(1); expect(result).to.be.undefined; }); }); describe('when "attempts" count is max', () => { it('should return undefined', () => { - (client as any).isExplicitlyTerminated = false; - (client as any).options.options = {}; - (client as any).options.options.retryAttempts = 3; + untypedClient.isExplicitlyTerminated = false; + untypedClient.options.options = {}; + untypedClient.options.options.retryAttempts = 3; const result = client.createRetryStrategy(4); expect(result).to.be.undefined; }); }); describe('otherwise', () => { it('should return delay (ms)', () => { - (client as any).options = {}; - (client as any).isExplicitlyTerminated = false; - (client as any).options.retryAttempts = 3; - (client as any).options.retryDelay = 3; + untypedClient.options = {}; + untypedClient.isExplicitlyTerminated = false; + untypedClient.options.retryAttempts = 3; + untypedClient.options.retryDelay = 3; const result = client.createRetryStrategy(2); - expect(result).to.be.eql((client as any).options.retryDelay); + expect(result).to.be.eql(untypedClient.options.retryDelay); }); }); }); @@ -305,7 +306,7 @@ describe('ClientRedis', () => { pubClient = { publish: publishStub, }; - (client as any).pubClient = pubClient; + untypedClient.pubClient = pubClient; }); it('should publish packet', async () => { diff --git a/packages/microservices/test/client/client-rmq.spec.ts b/packages/microservices/test/client/client-rmq.spec.ts index b9083e1fa4c..12b0209ce6a 100644 --- a/packages/microservices/test/client/client-rmq.spec.ts +++ b/packages/microservices/test/client/client-rmq.spec.ts @@ -10,6 +10,7 @@ describe('ClientRMQ', function () { this.retries(10); let client: ClientRMQ; + let untypedClient: any; describe('constructor', () => { it(`should fallback to queueOptions.noAssert when 'noAssert' is undefined`, () => { @@ -31,6 +32,8 @@ describe('ClientRMQ', function () { beforeEach(async () => { client = new ClientRMQ({}); + untypedClient = client as any; + createClientStub = sinon.stub(client, 'createClient').callsFake(() => ({ addListener: () => ({}), removeListener: () => ({}), @@ -137,7 +140,7 @@ describe('ClientRMQ', function () { beforeEach(() => { client['queue'] = queue; client['queueOptions'] = queueOptions; - (client as any)['options'] = { isGlobalPrefetchCount, prefetchCount }; + untypedClient['options'] = { isGlobalPrefetchCount, prefetchCount }; channel = { assertQueue: sinon.spy(() => ({})), @@ -198,6 +201,8 @@ describe('ClientRMQ', function () { beforeEach(() => { client = new ClientRMQ({}); + untypedClient = client as any; + msg = { pattern, data: 'data' }; connectSpy = sinon.spy(client, 'connect'); eventSpy = sinon.spy(); @@ -268,7 +273,7 @@ describe('ClientRMQ', function () { it('should combine packet and static headers', () => { const staticHeaders = { 'client-id': 'some-client-id' }; - (client as any).options.headers = staticHeaders; + untypedClient.options.headers = staticHeaders; const requestHeaders = { '1': '123' }; msg.data = new RmqRecord('data', { headers: requestHeaders }); @@ -283,7 +288,7 @@ describe('ClientRMQ', function () { it('should prefer packet headers over static headers', () => { const staticHeaders = { 'client-id': 'some-client-id' }; - (client as any).options.headers = staticHeaders; + untypedClient.options.headers = staticHeaders; const requestHeaders = { 'client-id': 'override-client-id' }; msg.data = new RmqRecord('data', { headers: requestHeaders }); @@ -370,8 +375,8 @@ describe('ClientRMQ', function () { beforeEach(() => { channelCloseSpy = sinon.spy(); clientCloseSpy = sinon.spy(); - (client as any).channel = { close: channelCloseSpy }; - (client as any).client = { close: clientCloseSpy }; + untypedClient.channel = { close: channelCloseSpy }; + untypedClient.client = { close: clientCloseSpy }; }); it('should close channel when it is not null', () => { @@ -390,12 +395,14 @@ describe('ClientRMQ', function () { beforeEach(() => { client = new ClientRMQ({}); + untypedClient = client as any; + msg = { pattern: 'pattern', data: 'data' }; sendToQueueStub = sinon.stub(); channel = { sendToQueue: sendToQueueStub, }; - (client as any).channel = channel; + untypedClient.channel = channel; }); it('should publish packet', async () => { @@ -432,7 +439,7 @@ describe('ClientRMQ', function () { it('should combine packet and static headers', async () => { sendToQueueStub.callsFake((a, b, c, d) => d()); const staticHeaders = { 'client-id': 'some-client-id' }; - (client as any).options.headers = staticHeaders; + untypedClient.options.headers = staticHeaders; const requestHeaders = { '1': '123' }; msg.data = new RmqRecord('data', { headers: requestHeaders }); @@ -447,7 +454,7 @@ describe('ClientRMQ', function () { it('should prefer packet headers over static headers', async () => { sendToQueueStub.callsFake((a, b, c, d) => d()); const staticHeaders = { 'client-id': 'some-client-id' }; - (client as any).options.headers = staticHeaders; + untypedClient.options.headers = staticHeaders; const requestHeaders = { 'client-id': 'override-client-id' }; msg.data = new RmqRecord('data', { headers: requestHeaders }); diff --git a/packages/microservices/test/client/client-tcp.spec.ts b/packages/microservices/test/client/client-tcp.spec.ts index b1b7941bb45..2f4f4247c79 100644 --- a/packages/microservices/test/client/client-tcp.spec.ts +++ b/packages/microservices/test/client/client-tcp.spec.ts @@ -7,11 +7,14 @@ import { ERROR_EVENT } from '../../constants'; describe('ClientTCP', () => { let client: ClientTCP; - let socket; + let untypedClient: any; + let socket: any; let createSocketStub: sinon.SinonStub; beforeEach(() => { client = new ClientTCP({}); + untypedClient = client as any; + const onFakeCallback = (event, callback) => event !== 'error' && event !== 'close' && callback({}); @@ -163,22 +166,22 @@ describe('ClientTCP', () => { routingMap = new Map(); callback = sinon.spy(); routingMap.set('some id', callback); - (client as any).socket = socket; - (client as any).isConnected = true; - (client as any).routingMap = routingMap; + untypedClient.socket = socket; + untypedClient.isConnected = true; + untypedClient.routingMap = routingMap; client.close(); }); it('should end() socket', () => { expect(socket.end.called).to.be.true; }); it('should set "isConnected" to false', () => { - expect((client as any).isConnected).to.be.false; + expect(untypedClient.isConnected).to.be.false; }); it('should set "socket" to null', () => { - expect((client as any).socket).to.be.null; + expect(untypedClient.socket).to.be.null; }); it('should clear out the routing map', () => { - expect((client as any).routingMap.size).to.be.eq(0); + expect(untypedClient.routingMap.size).to.be.eq(0); }); it('should call callbacks', () => { expect( @@ -207,7 +210,7 @@ describe('ClientTCP', () => { internalSocket = { sendMessage: sendMessageStub, }; - (client as any).socket = internalSocket; + untypedClient.socket = internalSocket; }); it('should publish packet', async () => { diff --git a/packages/microservices/test/server/server-grpc.spec.ts b/packages/microservices/test/server/server-grpc.spec.ts index c4c1e9ec4be..3c57ccbd39a 100644 --- a/packages/microservices/test/server/server-grpc.spec.ts +++ b/packages/microservices/test/server/server-grpc.spec.ts @@ -18,13 +18,15 @@ class NoopLogger extends Logger { describe('ServerGrpc', () => { let server: ServerGrpc; + let untypedServer: any; let serverMulti: ServerGrpc; beforeEach(() => { server = new ServerGrpc({ protoPath: join(__dirname, './test.proto'), package: 'test', - } as any); + }); + untypedServer = server as any; serverMulti = new ServerGrpc({ protoPath: ['test.proto', 'test2.proto'], @@ -102,7 +104,7 @@ describe('ServerGrpc', () => { describe('when package does not exist', () => { it('should throw "InvalidGrpcPackageException"', async () => { sinon.stub(server, 'lookupPackage').callsFake(() => null); - (server as any).logger = new NoopLogger(); + untypedServer.logger = new NoopLogger(); try { await server.bindEvents(); } catch (err) { @@ -127,10 +129,10 @@ describe('ServerGrpc', () => { test2: { service: true }, })); sinon.stub(server, 'getServiceNames').callsFake(() => serviceNames); - (server as any).grpcClient = { addService: sinon.spy() }; + untypedServer.grpcClient = { addService: sinon.spy() }; await server.bindEvents(); - expect((server as any).grpcClient.addService.calledTwice).to.be.true; + expect(untypedServer.grpcClient.addService.calledTwice).to.be.true; }); }); }); @@ -214,7 +216,7 @@ describe('ServerGrpc', () => { const spy = sinon .stub(server, 'createServiceMethod') .callsFake(() => ({}) as any); - (server as any).messageHandlers = handlers; + untypedServer.messageHandlers = handlers; await server.createService( { prototype: { test: true, test2: true }, @@ -236,7 +238,7 @@ describe('ServerGrpc', () => { .returns('test2'); sinon.stub(server, 'createServiceMethod').callsFake(() => ({}) as any); - (server as any).messageHandlers = handlers; + untypedServer.messageHandlers = handlers; await server.createService( { prototype: { @@ -273,7 +275,7 @@ describe('ServerGrpc', () => { .returns('test2'); sinon.stub(server, 'createServiceMethod').callsFake(() => ({}) as any); - (server as any).messageHandlers = handlers; + untypedServer.messageHandlers = handlers; await server.createService( { prototype: { @@ -304,7 +306,7 @@ describe('ServerGrpc', () => { ); const handlers = new Map([[testPattern, () => ({})]]); console.log(handlers.entries()); - (server as any).messageHandlers = handlers; + untypedServer.messageHandlers = handlers; expect( server.getMessageHandler( @@ -322,7 +324,7 @@ describe('ServerGrpc', () => { GrpcMethodStreamingType.NO_STREAMING, ); const handlers = new Map([[testPattern, () => ({})]]); - (server as any).messageHandlers = handlers; + untypedServer.messageHandlers = handlers; expect( server.getMessageHandler( @@ -343,7 +345,7 @@ describe('ServerGrpc', () => { GrpcMethodStreamingType.NO_STREAMING, ); const handlers = new Map([[testPattern, () => ({})]]); - (server as any).messageHandlers = handlers; + untypedServer.messageHandlers = handlers; expect( server.getMessageHandler( @@ -855,7 +857,7 @@ describe('ServerGrpc', () => { getPackageDefinitionStub.callsFake(() => { throw new Error(); }); - (server as any).logger = new NoopLogger(); + untypedServer.logger = new NoopLogger(); expect(() => server.loadProto()).to.throws( InvalidProtoDefinitionException, ); @@ -870,7 +872,7 @@ describe('ServerGrpc', () => { forceShutdown: sinon.spy(), tryShutdown: sinon.stub().yields(), }; - (server as any).grpcClient = grpcClient; + untypedServer.grpcClient = grpcClient; await server.close(); expect(grpcClient.forceShutdown.called).to.be.true; expect(grpcClient.tryShutdown.called).to.be.false; @@ -881,8 +883,8 @@ describe('ServerGrpc', () => { forceShutdown: sinon.spy(), tryShutdown: sinon.stub().yields(), }; - (server as any).grpcClient = grpcClient; - (server as any).options.gracefulShutdown = false; + untypedServer.grpcClient = grpcClient; + untypedServer.options.gracefulShutdown = false; await server.close(); expect(grpcClient.forceShutdown.called).to.be.true; expect(grpcClient.tryShutdown.called).to.be.false; @@ -893,8 +895,8 @@ describe('ServerGrpc', () => { forceShutdown: sinon.spy(), tryShutdown: sinon.stub().yields(), }; - (server as any).grpcClient = grpcClient; - (server as any).options.gracefulShutdown = true; + untypedServer.grpcClient = grpcClient; + untypedServer.options.gracefulShutdown = true; await server.close(); expect(grpcClient.forceShutdown.called).to.be.false; expect(grpcClient.tryShutdown.called).to.be.true; @@ -973,7 +975,7 @@ describe('ServerGrpc', () => { sinon.stub(server as any, 'messageHandlers').value({ set() {} }); const messageHandlersSetSpy = sinon.spy( - (server as any).messageHandlers, + untypedServer.messageHandlers, 'set', ); server.addHandler(pattern, callback as any); diff --git a/packages/microservices/test/server/server-kafka.spec.ts b/packages/microservices/test/server/server-kafka.spec.ts index 5255b43107c..f517b0eba4b 100644 --- a/packages/microservices/test/server/server-kafka.spec.ts +++ b/packages/microservices/test/server/server-kafka.spec.ts @@ -8,6 +8,7 @@ import { KafkaMessage, } from '../../external/kafka.interface'; import { ServerKafka } from '../../server'; +import { objectToMap } from './utils/object-to-map'; class NoopLogger extends Logger { log(message: any, context?: string): void {} @@ -16,9 +17,6 @@ class NoopLogger extends Logger { } describe('ServerKafka', () => { - const objectToMap = obj => - new Map(Object.keys(obj).map(i => [i, obj[i]]) as any); - const topic = 'test.topic'; const replyTopic = 'test.topic.reply'; const replyPartition = '0'; @@ -84,6 +82,7 @@ describe('ServerKafka', () => { }; let server: ServerKafka; + let untypedServer: any; let callback: sinon.SinonSpy; let bindEventsStub: sinon.SinonStub; let connect: sinon.SinonSpy; @@ -92,10 +91,12 @@ describe('ServerKafka', () => { let send: sinon.SinonSpy; let consumerStub: sinon.SinonStub; let producerStub: sinon.SinonStub; - let client; + let client: any; beforeEach(() => { server = new ServerKafka({}); + untypedServer = server as any; + callback = sinon.spy(); connect = sinon.spy(); subscribe = sinon.spy(); @@ -152,40 +153,40 @@ describe('ServerKafka', () => { const consumer = { disconnect: sinon.spy() }; const producer = { disconnect: sinon.spy() }; beforeEach(() => { - (server as any).consumer = consumer; - (server as any).producer = producer; + untypedServer.consumer = consumer; + untypedServer.producer = producer; }); it('should close server', async () => { await server.close(); expect(consumer.disconnect.calledOnce).to.be.true; expect(producer.disconnect.calledOnce).to.be.true; - expect((server as any).consumer).to.be.null; - expect((server as any).producer).to.be.null; - expect((server as any).client).to.be.null; + expect(untypedServer.consumer).to.be.null; + expect(untypedServer.producer).to.be.null; + expect(untypedServer.client).to.be.null; }); }); describe('bindEvents', () => { it('should not call subscribe nor run on consumer when there are no messageHandlers', async () => { - (server as any).logger = new NoopLogger(); + untypedServer.logger = new NoopLogger(); await server.listen(callback); - await server.bindEvents((server as any).consumer); + await server.bindEvents(untypedServer.consumer); expect(subscribe.called).to.be.false; expect(run.called).to.be.true; expect(connect.called).to.be.true; }); it('should call subscribe and run on consumer when there are messageHandlers', async () => { - (server as any).logger = new NoopLogger(); + untypedServer.logger = new NoopLogger(); await server.listen(callback); const pattern = 'test'; const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [pattern]: handler, }); - await server.bindEvents((server as any).consumer); + await server.bindEvents(untypedServer.consumer); expect(subscribe.called).to.be.true; expect( @@ -198,18 +199,18 @@ describe('ServerKafka', () => { expect(connect.called).to.be.true; }); it('should call subscribe with options and run on consumer when there are messageHandlers', async () => { - (server as any).logger = new NoopLogger(); - (server as any).options.subscribe = {}; - (server as any).options.subscribe.fromBeginning = true; + untypedServer.logger = new NoopLogger(); + untypedServer.options.subscribe = {}; + untypedServer.options.subscribe.fromBeginning = true; await server.listen(callback); const pattern = 'test'; const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [pattern]: handler, }); - await server.bindEvents((server as any).consumer); + await server.bindEvents(untypedServer.consumer); expect(subscribe.called).to.be.true; expect( @@ -337,7 +338,7 @@ describe('ServerKafka', () => { it('should call "handleEvent" if correlation identifier and reply topic are present but the handler is of type eventHandler', async () => { const handler = sinon.spy(); (handler as any).isEventHandler = true; - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [topic]: handler, }); const handleEventSpy = sinon.spy(server, 'handleEvent'); @@ -348,7 +349,7 @@ describe('ServerKafka', () => { it('should NOT call "handleEvent" if correlation identifier and reply topic are present but the handler is not of type eventHandler', async () => { const handler = sinon.spy(); (handler as any).isEventHandler = false; - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [topic]: handler, }); const handleEventSpy = sinon.spy(server, 'handleEvent'); @@ -368,7 +369,7 @@ describe('ServerKafka', () => { it(`should call handler with expected arguments`, async () => { const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [topic]: handler, }); diff --git a/packages/microservices/test/server/server-mqtt.spec.ts b/packages/microservices/test/server/server-mqtt.spec.ts index 8e63a016257..4634d006654 100644 --- a/packages/microservices/test/server/server-mqtt.spec.ts +++ b/packages/microservices/test/server/server-mqtt.spec.ts @@ -3,15 +3,15 @@ import * as sinon from 'sinon'; import { NO_MESSAGE_HANDLER } from '../../constants'; import { BaseRpcContext } from '../../ctx-host/base-rpc.context'; import { ServerMqtt } from '../../server/server-mqtt'; +import { objectToMap } from './utils/object-to-map'; describe('ServerMqtt', () => { let server: ServerMqtt; - - const objectToMap = obj => - new Map(Object.keys(obj).map(key => [key, obj[key]]) as any); + let untypedServer: any; beforeEach(() => { server = new ServerMqtt({}); + untypedServer = server as any; }); describe('listen', () => { let onSpy: sinon.SinonSpy; @@ -53,7 +53,7 @@ describe('ServerMqtt', () => { describe('close', () => { const mqttClient = { end: sinon.spy() }; beforeEach(() => { - (server as any).mqttClient = mqttClient; + untypedServer.mqttClient = mqttClient; }); it('should end mqttClient', () => { server.close(); @@ -74,7 +74,7 @@ describe('ServerMqtt', () => { it('should subscribe to each pattern', () => { const pattern = 'test'; const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [pattern]: handler, }); server.bindEvents(mqttClient); @@ -84,7 +84,7 @@ describe('ServerMqtt', () => { describe('getMessageHandler', () => { it(`should return function`, () => { expect( - typeof server.getMessageHandler((server as any).mqttClient), + typeof server.getMessageHandler(untypedServer.mqttClient), ).to.be.eql('function'); }); describe('handler', () => { @@ -92,7 +92,7 @@ describe('ServerMqtt', () => { const handleMessageStub = sinon .stub(server, 'handleMessage') .callsFake(() => null); - (await server.getMessageHandler((server as any).mqttClient))(null); + (await server.getMessageHandler(untypedServer.mqttClient))(null); expect(handleMessageStub.called).to.be.true; }); }); @@ -133,7 +133,7 @@ describe('ServerMqtt', () => { }); it(`should call handler with expected arguments`, async () => { const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [channel]: handler, }); @@ -204,7 +204,7 @@ describe('ServerMqtt', () => { it('should call handler with expected arguments', () => { const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [channel]: handler, }); diff --git a/packages/microservices/test/server/server-nats.spec.ts b/packages/microservices/test/server/server-nats.spec.ts index 1b98399038d..c919752107e 100644 --- a/packages/microservices/test/server/server-nats.spec.ts +++ b/packages/microservices/test/server/server-nats.spec.ts @@ -6,15 +6,15 @@ import { NatsContext } from '../../ctx-host'; import { BaseRpcContext } from '../../ctx-host/base-rpc.context'; import { NatsMsg } from '../../external/nats-client.interface'; import { ServerNats } from '../../server/server-nats'; +import { objectToMap } from './utils/object-to-map'; describe('ServerNats', () => { let server: ServerNats; - - const objectToMap = obj => - new Map(Object.keys(obj).map(key => [key, obj[key]]) as any); + let untypedServer: any; beforeEach(() => { server = new ServerNats({}); + untypedServer = server as any; }); describe('listen', () => { let client: any; @@ -39,7 +39,7 @@ describe('ServerNats', () => { describe('close', () => { const natsClient = { close: sinon.spy() }; beforeEach(() => { - (server as any).natsClient = natsClient; + untypedServer.natsClient = natsClient; }); it('should close natsClient', () => { server.close(); @@ -60,7 +60,7 @@ describe('ServerNats', () => { it('should subscribe to each acknowledge patterns', () => { const pattern = 'test'; const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [pattern]: handler, }); server.bindEvents(natsClient); @@ -127,7 +127,7 @@ describe('ServerNats', () => { }); it(`should call handler with expected arguments`, async () => { const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [channel]: handler, }); @@ -200,7 +200,7 @@ describe('ServerNats', () => { it('should call handler with expected arguments', () => { const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [channel]: handler, }); @@ -224,7 +224,7 @@ describe('ServerNats', () => { }); it('should log "disconnect" and "error" statuses as "errors"', async () => { - const logErrorSpy = sinon.spy((server as any).logger, 'error'); + const logErrorSpy = sinon.spy(untypedServer.logger, 'error'); const serverMock = { status: sinon.stub().returns({ async *[Symbol.asyncIterator]() { @@ -245,7 +245,7 @@ describe('ServerNats', () => { ); }); it('should log other statuses as "logs"', async () => { - const logSpy = sinon.spy((server as any).logger, 'log'); + const logSpy = sinon.spy(untypedServer.logger, 'log'); const serverMock = { status: sinon.stub().returns({ async *[Symbol.asyncIterator]() { diff --git a/packages/microservices/test/server/server-redis.spec.ts b/packages/microservices/test/server/server-redis.spec.ts index dc2373c9193..15645fd286b 100644 --- a/packages/microservices/test/server/server-redis.spec.ts +++ b/packages/microservices/test/server/server-redis.spec.ts @@ -3,15 +3,15 @@ import * as sinon from 'sinon'; import { NO_MESSAGE_HANDLER } from '../../constants'; import { BaseRpcContext } from '../../ctx-host/base-rpc.context'; import { ServerRedis } from '../../server/server-redis'; +import { objectToMap } from './utils/object-to-map'; describe('ServerRedis', () => { let server: ServerRedis; - - const objectToMap = obj => - new Map(Object.keys(obj).map(key => [key, obj[key]]) as any); + let untypedServer: any; beforeEach(() => { server = new ServerRedis({}); + untypedServer = server as any; }); describe('listen', () => { let onSpy: sinon.SinonSpy; @@ -56,8 +56,8 @@ describe('ServerRedis', () => { const pub = { quit: sinon.spy() }; const sub = { quit: sinon.spy() }; beforeEach(() => { - (server as any).pubClient = pub; - (server as any).subClient = sub; + untypedServer.pubClient = pub; + untypedServer.subClient = sub; }); it('should close pub & sub server', () => { server.close(); @@ -86,8 +86,8 @@ describe('ServerRedis', () => { expect(onSpy.getCall(0).args[0]).to.be.equal('message'); }); it('should bind "pmessage" event to handler if wildcards are enabled', () => { - (server as any).options = {}; - (server as any).options.wildcards = true; + untypedServer.options = {}; + untypedServer.options.wildcards = true; server.bindEvents(psub, null); expect(onSpy.getCall(0).args[0]).to.be.equal('pmessage'); @@ -96,7 +96,7 @@ describe('ServerRedis', () => { it('should "subscribe" to each pattern if wildcards are disabled', () => { const pattern = 'test'; const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [pattern]: handler, }); server.bindEvents(sub, null); @@ -104,12 +104,12 @@ describe('ServerRedis', () => { }); it('should "psubscribe" to each pattern if wildcards are enabled', () => { - (server as any).options = {}; - (server as any).options.wildcards = true; + untypedServer.options = {}; + untypedServer.options.wildcards = true; const pattern = 'test'; const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [pattern]: handler, }); server.bindEvents(psub, null); @@ -157,7 +157,7 @@ describe('ServerRedis', () => { }); it(`should call handler with expected arguments`, async () => { const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [channel]: handler, }); sinon.stub(server, 'parseMessage').callsFake(() => ({ id, data }) as any); @@ -233,35 +233,35 @@ describe('ServerRedis', () => { describe('createRetryStrategy', () => { describe('when is terminated', () => { it('should return undefined', () => { - (server as any).isExplicitlyTerminated = true; + untypedServer.isExplicitlyTerminated = true; const result = server.createRetryStrategy(0); expect(result).to.be.undefined; }); }); describe('when "retryAttempts" does not exist', () => { it('should return undefined', () => { - (server as any).options.options = {}; - (server as any).options.options.retryAttempts = undefined; + untypedServer.options.options = {}; + untypedServer.options.options.retryAttempts = undefined; expect(server.createRetryStrategy(4)).to.be.undefined; }); }); describe('when "attempts" count is max', () => { it('should return undefined', () => { - (server as any).options.options = {}; - (server as any).options.options.retryAttempts = 3; + untypedServer.options.options = {}; + untypedServer.options.options.retryAttempts = 3; expect(server.createRetryStrategy(4)).to.be.undefined; }); }); describe('otherwise', () => { it('should return delay (ms)', () => { - (server as any).options = {}; - (server as any).isExplicitlyTerminated = false; - (server as any).options.retryAttempts = 3; - (server as any).options.retryDelay = 3; + untypedServer.options = {}; + untypedServer.isExplicitlyTerminated = false; + untypedServer.options.retryAttempts = 3; + untypedServer.options.retryDelay = 3; const result = server.createRetryStrategy(2); - expect(result).to.be.eql((server as any).options.retryDelay); + expect(result).to.be.eql(untypedServer.options.retryDelay); }); }); }); @@ -271,7 +271,7 @@ describe('ServerRedis', () => { it('should call handler with expected arguments', () => { const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [channel]: handler, }); diff --git a/packages/microservices/test/server/server-rmq.spec.ts b/packages/microservices/test/server/server-rmq.spec.ts index 365acd7a686..3e0f51d8ca4 100644 --- a/packages/microservices/test/server/server-rmq.spec.ts +++ b/packages/microservices/test/server/server-rmq.spec.ts @@ -1,18 +1,17 @@ import { assert, expect } from 'chai'; import * as sinon from 'sinon'; import { NO_MESSAGE_HANDLER } from '../../constants'; -import { BaseRpcContext } from '../../ctx-host/base-rpc.context'; -import { ServerRMQ } from '../../server/server-rmq'; import { RmqContext } from '../../ctx-host'; +import { ServerRMQ } from '../../server/server-rmq'; +import { objectToMap } from './utils/object-to-map'; describe('ServerRMQ', () => { let server: ServerRMQ; - - const objectToMap = obj => - new Map(Object.keys(obj).map(key => [key, obj[key]]) as any); + let untypedServer: any; beforeEach(() => { server = new ServerRMQ({}); + untypedServer = server as any; }); describe('constructor', () => { @@ -88,8 +87,8 @@ describe('ServerRMQ', () => { const rmqChannel = { close: sinon.spy() }; beforeEach(() => { - (server as any).server = rmqServer; - (server as any).channel = rmqChannel; + untypedServer.server = rmqServer; + untypedServer.channel = rmqChannel; }); it('should close server', () => { server.close(); @@ -122,7 +121,7 @@ describe('ServerRMQ', () => { beforeEach(() => { sendMessageStub = sinon.stub(server, 'sendMessage').callsFake(() => ({})); - (server as any).channel = channel; + untypedServer.channel = channel; }); afterEach(() => { channel.nack.resetHistory(); @@ -144,7 +143,7 @@ describe('ServerRMQ', () => { }); it('should call handler if exists in handlers object', async () => { const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [pattern]: handler as any, }); await server.handleMessage(msg, ''); @@ -158,7 +157,7 @@ describe('ServerRMQ', () => { properties: { correlationId: 1 }, }; const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [pattern]: handler as any, }); @@ -167,7 +166,7 @@ describe('ServerRMQ', () => { }); }); it('should negative acknowledge if message does not exists in handlers object and noAck option is false', async () => { - (server as any).noAck = false; + untypedServer.noAck = false; await server.handleMessage(msg, ''); expect(channel.nack.calledWith(msg, false, false)).to.be.true; expect( @@ -199,10 +198,10 @@ describe('ServerRMQ', () => { let channel: any = {}; beforeEach(() => { - (server as any)['queue'] = queue; - (server as any)['queueOptions'] = queueOptions; - (server as any)['isGlobalPrefetchCount'] = isGlobalPrefetchCount; - (server as any)['prefetchCount'] = prefetchCount; + untypedServer['queue'] = queue; + untypedServer['queueOptions'] = queueOptions; + untypedServer['isGlobalPrefetchCount'] = isGlobalPrefetchCount; + untypedServer['prefetchCount'] = prefetchCount; channel = { assertQueue: sinon.spy(() => ({})), @@ -270,7 +269,7 @@ describe('ServerRMQ', () => { it('should call handler with expected arguments', () => { const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [channel]: handler, }); @@ -285,10 +284,10 @@ describe('ServerRMQ', () => { it('should negative acknowledge without retrying if key does not exists in handlers object and noAck option is false', () => { const nack = sinon.spy(); const message = { pattern: 'no-exists', data }; - (server as any).channel = { + untypedServer.channel = { nack, }; - (server as any).noAck = false; + untypedServer.noAck = false; server.handleEvent(channel, message, new RmqContext([message, '', ''])); expect(nack.calledWith(message, false, false)).to.be.true; @@ -297,10 +296,10 @@ describe('ServerRMQ', () => { it('should not negative acknowledge if key does not exists in handlers object but noAck option is true', () => { const nack = sinon.spy(); const message = { pattern: 'no-exists', data }; - (server as any).channel = { + untypedServer.channel = { nack, }; - (server as any).noAck = true; + untypedServer.noAck = true; server.handleEvent(channel, message, new RmqContext([message, '', ''])); expect(nack.calledWith(message, false, false)).not.to.be.true; diff --git a/packages/microservices/test/server/server-tcp.spec.ts b/packages/microservices/test/server/server-tcp.spec.ts index 01d01de9cde..72f0df73ce7 100644 --- a/packages/microservices/test/server/server-tcp.spec.ts +++ b/packages/microservices/test/server/server-tcp.spec.ts @@ -3,19 +3,20 @@ import * as sinon from 'sinon'; import { NO_MESSAGE_HANDLER } from '../../constants'; import { BaseRpcContext } from '../../ctx-host/base-rpc.context'; import { ServerTCP } from '../../server/server-tcp'; +import { objectToMap } from './utils/object-to-map'; describe('ServerTCP', () => { let server: ServerTCP; - - const objectToMap = obj => - new Map(Object.keys(obj).map(key => [key, obj[key]]) as any); + let untypedServer: any; beforeEach(() => { server = new ServerTCP({}); + untypedServer = server as any; }); describe('bindHandler', () => { const socket = { on: sinon.spy() }; + beforeEach(() => { sinon.stub(server, 'getSocketInstance' as any).callsFake(() => socket); }); @@ -27,7 +28,7 @@ describe('ServerTCP', () => { describe('close', () => { const tcpServer = { close: sinon.spy() }; beforeEach(() => { - (server as any).server = tcpServer; + untypedServer.server = tcpServer; }); it('should close server', () => { server.close(); @@ -37,15 +38,15 @@ describe('ServerTCP', () => { describe('listen', () => { const serverMock = { listen: sinon.spy(), once: sinon.spy() }; beforeEach(() => { - (server as any).server = serverMock; + untypedServer.server = serverMock; }); it('should call native listen method with expected arguments', () => { const callback = () => {}; server.listen(callback); expect( serverMock.listen.calledWith( - (server as any).port, - (server as any).host, + untypedServer.port, + untypedServer.host, callback, ), ).to.be.true; @@ -75,7 +76,7 @@ describe('ServerTCP', () => { }); it('should call handler if exists in handlers object', async () => { const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [msg.pattern]: handler as any, }); await server.handleMessage(socket, msg); @@ -85,33 +86,33 @@ describe('ServerTCP', () => { describe('handleClose', () => { describe('when is terminated', () => { it('should return undefined', () => { - (server as any).isExplicitlyTerminated = true; + untypedServer.isExplicitlyTerminated = true; const result = server.handleClose(); expect(result).to.be.undefined; }); }); describe('when "retryAttempts" does not exist', () => { it('should return undefined', () => { - (server as any).options.retryAttempts = undefined; + untypedServer.options.retryAttempts = undefined; const result = server.handleClose(); expect(result).to.be.undefined; }); }); describe('when "retryAttemptsCount" count is max', () => { it('should return undefined', () => { - (server as any).options.retryAttempts = 3; - (server as any).retryAttemptsCount = 3; + untypedServer.options.retryAttempts = 3; + untypedServer.retryAttemptsCount = 3; const result = server.handleClose(); expect(result).to.be.undefined; }); }); describe('otherwise', () => { it('should return delay (ms)', () => { - (server as any).options = {}; - (server as any).isExplicitlyTerminated = false; - (server as any).options.retryAttempts = 3; - (server as any).retryAttemptsCount = 2; - (server as any).options.retryDelay = 3; + untypedServer.options = {}; + untypedServer.isExplicitlyTerminated = false; + untypedServer.options.retryAttempts = 3; + untypedServer.retryAttemptsCount = 2; + untypedServer.options.retryDelay = 3; const result = server.handleClose(); expect(result).to.be.not.undefined; }); @@ -124,7 +125,7 @@ describe('ServerTCP', () => { it('should call handler with expected arguments', () => { const handler = sinon.spy(); - (server as any).messageHandlers = objectToMap({ + untypedServer.messageHandlers = objectToMap({ [channel]: handler, }); diff --git a/packages/microservices/test/server/server.spec.ts b/packages/microservices/test/server/server.spec.ts index ae62ca1083a..865d0e96eeb 100644 --- a/packages/microservices/test/server/server.spec.ts +++ b/packages/microservices/test/server/server.spec.ts @@ -1,5 +1,5 @@ import { expect } from 'chai'; -import { lastValueFrom, Observable, of, throwError as _throw } from 'rxjs'; +import { throwError as _throw, lastValueFrom, Observable, of } from 'rxjs'; import * as sinon from 'sinon'; import { Server } from '../../server/server'; @@ -10,6 +10,7 @@ class TestServer extends Server { describe('Server', () => { const server = new TestServer(); + const untypedServer = server as any; const sandbox = sinon.createSandbox(); const callback = () => {}, pattern = { test: 'test pattern' }; @@ -26,7 +27,7 @@ describe('Server', () => { .value({ set() {}, has() {} }); const messageHandlersSetSpy = sinon.spy( - (server as any).messageHandlers, + untypedServer.messageHandlers, 'set', ); const normalizePatternStub = sinon @@ -49,7 +50,7 @@ describe('Server', () => { const nextHandler: any = () => null; headHandler.next = nextHandler; - (server as any)['messageHandlers'] = new Map([ + untypedServer['messageHandlers'] = new Map([ [handlerRoute, headHandler], ]); const normalizePatternStub = sinon @@ -80,7 +81,7 @@ describe('Server', () => { it(`should call 'transformPatternToRoute' with 'string' argument`, () => { const inputServerPattern = 'hello'; const transformedServerPattern = inputServerPattern; - (server as any).getRouteFromPattern(inputServerPattern); + untypedServer.getRouteFromPattern(inputServerPattern); expect(normalizePatternStub.args[0][0]).to.be.equal( transformedServerPattern, @@ -95,7 +96,7 @@ describe('Server', () => { controller: 'app', use: 'getHello', }; - (server as any).getRouteFromPattern(inputServerPattern); + untypedServer.getRouteFromPattern(inputServerPattern); expect(normalizePatternStub.args[0][0]).to.be.deep.equal( transformedServerPattern, @@ -203,12 +204,9 @@ describe('Server', () => { .stub(server as any, 'messageHandlers') .value({ get() {}, has() {} }); messageHandlersGetSpy = sinon - .stub((server as any).messageHandlers, 'get') + .stub(untypedServer.messageHandlers, 'get') .returns(callback); - messageHandlersHasSpy = sinon.stub( - (server as any).messageHandlers, - 'has', - ); + messageHandlersHasSpy = sinon.stub(untypedServer.messageHandlers, 'has'); sandbox.stub(server as any, 'getRouteFromPattern').returns(handlerRoute); }); diff --git a/packages/microservices/test/server/utils/object-to-map.ts b/packages/microservices/test/server/utils/object-to-map.ts new file mode 100644 index 00000000000..a6a383f60db --- /dev/null +++ b/packages/microservices/test/server/utils/object-to-map.ts @@ -0,0 +1,2 @@ +export const objectToMap = (obj: Record) => + new Map(Object.keys(obj).map(key => [key, obj[key]]) as any); diff --git a/packages/websockets/test/web-sockets-controller.spec.ts b/packages/websockets/test/web-sockets-controller.spec.ts index 86c85d6b877..03d48b0f37a 100644 --- a/packages/websockets/test/web-sockets-controller.spec.ts +++ b/packages/websockets/test/web-sockets-controller.spec.ts @@ -33,6 +33,7 @@ class NoopAdapter extends AbstractWsAdapter { describe('WebSocketsController', () => { let instance: WebSocketsController; + let untypedInstance: any; let provider: SocketServerProvider, graphInspector: GraphInspector, config: ApplicationConfig, @@ -58,6 +59,7 @@ describe('WebSocketsController', () => { contextCreator as any, graphInspector, ); + untypedInstance = instance as any; }); describe('connectGatewayToServer', () => { let subscribeToServerEvents: sinon.SinonSpy; @@ -70,7 +72,7 @@ describe('WebSocketsController', () => { beforeEach(() => { subscribeToServerEvents = sinon.spy(); - (instance as any).subscribeToServerEvents = subscribeToServerEvents; + untypedInstance.subscribeToServerEvents = subscribeToServerEvents; }); it('should throw "InvalidSocketPortException" when port is not a number', () => { Reflect.defineMetadata(PORT_METADATA, 'test', InvalidGateway); @@ -126,7 +128,7 @@ describe('WebSocketsController', () => { gateway = new Test(); explorer = new GatewayMetadataExplorer(new MetadataScanner()); mockExplorer = sinon.mock(explorer); - (instance as any).metadataExplorer = explorer; + untypedInstance.metadataExplorer = explorer; handlers = [ { @@ -264,32 +266,32 @@ describe('WebSocketsController', () => { disconnect: {}, connection: {}, }; - (instance as any).subscribeInitEvent = subscribeInitEvent; - (instance as any).getConnectionHandler = getConnectionHandler; - (instance as any).subscribeConnectionEvent = subscribeConnectionEvent; - (instance as any).subscribeDisconnectEvent = subscribeDisconnectEvent; + untypedInstance.subscribeInitEvent = subscribeInitEvent; + untypedInstance.getConnectionHandler = getConnectionHandler; + untypedInstance.subscribeConnectionEvent = subscribeConnectionEvent; + untypedInstance.subscribeDisconnectEvent = subscribeDisconnectEvent; }); it('should call "subscribeConnectionEvent" with expected arguments', () => { - instance.subscribeEvents(gateway, handlers, server as any); + instance.subscribeEvents(gateway, handlers, server); expect(subscribeConnectionEvent.calledWith(gateway, server.connection)).to .be.true; }); it('should call "subscribeDisconnectEvent" with expected arguments', () => { - instance.subscribeEvents(gateway, handlers, server as any); + instance.subscribeEvents(gateway, handlers, server); expect(subscribeDisconnectEvent.calledWith(gateway, server.disconnect)).to .be.true; }); it('should call "subscribeInitEvent" with expected arguments', () => { - instance.subscribeEvents(gateway, handlers, server as any); + instance.subscribeEvents(gateway, handlers, server); expect(subscribeInitEvent.calledWith(gateway, server.init)).to.be.true; }); it('should bind connection handler to server', () => { - instance.subscribeEvents(gateway, handlers, server as any); + instance.subscribeEvents(gateway, handlers, server); expect(onSpy.calledWith('connection', getConnectionHandler())).to.be.true; }); it('should call "getConnectionHandler" with expected arguments', () => { - instance.subscribeEvents(gateway, handlers, server as any); + instance.subscribeEvents(gateway, handlers, server); expect( getConnectionHandler.calledWith( instance, @@ -327,9 +329,9 @@ describe('WebSocketsController', () => { client = { on: onSpy, }; - (instance as any).subscribeDisconnectEvent = subscribeDisconnectEvent; - (instance as any).subscribeConnectionEvent = subscribeConnectionEvent; - (instance as any).subscribeMessages = subscribeMessages; + untypedInstance.subscribeDisconnectEvent = subscribeDisconnectEvent; + untypedInstance.subscribeConnectionEvent = subscribeConnectionEvent; + untypedInstance.subscribeMessages = subscribeMessages; fn = instance.getConnectionHandler( instance, @@ -359,7 +361,7 @@ describe('WebSocketsController', () => { }); describe('subscribeInitEvent', () => { const gateway = new Test(); - let event, subscribe: sinon.SinonSpy; + let event: any, subscribe: sinon.SinonSpy; beforeEach(() => { subscribe = sinon.spy(); From bc31b5cff5910d591cae34a9d5d045101fef78ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Mon, 18 Nov 2024 13:14:59 +0100 Subject: [PATCH 067/122] test: update tcp config opts type --- integration/microservices/e2e/sum-rpc-async.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/integration/microservices/e2e/sum-rpc-async.spec.ts b/integration/microservices/e2e/sum-rpc-async.spec.ts index 45ed1e5ccdb..f6ead5b2485 100644 --- a/integration/microservices/e2e/sum-rpc-async.spec.ts +++ b/integration/microservices/e2e/sum-rpc-async.spec.ts @@ -4,6 +4,7 @@ import { Injectable, Module, } from '@nestjs/common'; +import { NestFactory } from '@nestjs/core'; import { AsyncOptions, ClientTCP, @@ -11,11 +12,10 @@ import { MessagePattern, MicroserviceOptions, Payload, - TcpClientOptions, + TcpOptions, Transport, } from '@nestjs/microservices'; import { expect } from 'chai'; -import { NestFactory } from '@nestjs/core'; let port: number; @@ -25,7 +25,7 @@ do { @Injectable() class RpcOptionsProvider { - getOptions(): TcpClientOptions { + getOptions(): TcpOptions { return { transport: Transport.TCP, options: { From 4f55f88bff52774f66266182977afc335b051927 Mon Sep 17 00:00:00 2001 From: Kamil Mysliwiec Date: Mon, 18 Nov 2024 15:26:07 +0100 Subject: [PATCH 068/122] Update packages/microservices/server/server-nats.ts Co-authored-by: Rick Dutour Geerling --- packages/microservices/server/server-nats.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/microservices/server/server-nats.ts b/packages/microservices/server/server-nats.ts index dafd441fb69..1ff94597633 100644 --- a/packages/microservices/server/server-nats.ts +++ b/packages/microservices/server/server-nats.ts @@ -23,11 +23,11 @@ let natsPackage = {} as any; // // type Client = import('nats').NatsConnection; // type NatsMsg = import('nats').Msg; -type Subscription = import('nats').Subscription; +// type Subscription = import('nats').Subscription; type Client = any; type NatsMsg = any; -// type Subscription = any; +type Subscription = any; /** * @publicApi From 129fe79f6bc9008661397db73467234bceb056e1 Mon Sep 17 00:00:00 2001 From: Kamil Mysliwiec Date: Mon, 18 Nov 2024 15:26:15 +0100 Subject: [PATCH 069/122] Update packages/microservices/server/server-rmq.ts Co-authored-by: Rick Dutour Geerling --- packages/microservices/server/server-rmq.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/microservices/server/server-rmq.ts b/packages/microservices/server/server-rmq.ts index eb9b9566bd3..5b9e28d79bf 100644 --- a/packages/microservices/server/server-rmq.ts +++ b/packages/microservices/server/server-rmq.ts @@ -34,14 +34,14 @@ import { Server } from './server'; // because it would require the user to install the amqplib package even if they dont use RabbitMQ // Otherwise, TypeScript would fail to compile the code. // -type AmqpConnectionManager = - import('amqp-connection-manager').AmqpConnectionManager; -type ChannelWrapper = import('amqp-connection-manager').ChannelWrapper; -type Message = import('amqplib').Message; - -// type AmqpConnectionManager = any; -// type ChannelWrapper = any; -// type Message = any; +// type AmqpConnectionManager = +// import('amqp-connection-manager').AmqpConnectionManager; +// type ChannelWrapper = import('amqp-connection-manager').ChannelWrapper; +// type Message = import('amqplib').Message; + +type AmqpConnectionManager = any; +type ChannelWrapper = any; +type Message = any; let rmqPackage = {} as any; // as typeof import('amqp-connection-manager'); From 935650927464b46a2166d4b5e39693ccfd8daedb Mon Sep 17 00:00:00 2001 From: Kamil Mysliwiec Date: Wed, 20 Nov 2024 10:22:02 +0100 Subject: [PATCH 070/122] Update packages/microservices/server/server-nats.ts Co-authored-by: Rick Dutour Geerling --- packages/microservices/server/server-nats.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/microservices/server/server-nats.ts b/packages/microservices/server/server-nats.ts index 1ff94597633..b2772e1762d 100644 --- a/packages/microservices/server/server-nats.ts +++ b/packages/microservices/server/server-nats.ts @@ -32,7 +32,7 @@ type Subscription = any; /** * @publicApi */ -export class ServerNats extends Server { +export class ServerNats extends Server { public readonly transportId = Transport.NATS; private natsClient: Client; From c66d1fb5f7ed842e609a4b0a9aba3da62625ddd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Wed, 20 Nov 2024 10:41:37 +0100 Subject: [PATCH 071/122] fix: add type constraints and assertions --- packages/microservices/server/server-nats.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/microservices/server/server-nats.ts b/packages/microservices/server/server-nats.ts index b2772e1762d..f3212fcb446 100644 --- a/packages/microservices/server/server-nats.ts +++ b/packages/microservices/server/server-nats.ts @@ -32,7 +32,10 @@ type Subscription = any; /** * @publicApi */ -export class ServerNats extends Server { +export class ServerNats< + E extends NatsEvents = NatsEvents, + S extends NatsStatus = NatsStatus, +> extends Server { public readonly transportId = Transport.NATS; private natsClient: Client; @@ -58,7 +61,7 @@ export class ServerNats extends Server { try { this.natsClient = await this.createNatsClient(); - this._status$.next(NatsStatus.CONNECTED); + this._status$.next(NatsStatus.CONNECTED as S); this.handleStatusUpdates(this.natsClient); this.start(callback); } catch (err) { @@ -199,7 +202,7 @@ export class ServerNats extends Server { `NatsError: type: "${status.type}", data: "${data}".`, ); - this._status$.next(NatsStatus.DISCONNECTED); + this._status$.next(NatsStatus.DISCONNECTED as S); this.statusEventEmitter.emit( NatsEventsMap.DISCONNECT, status.data as string, @@ -215,7 +218,7 @@ export class ServerNats extends Server { break; case 'reconnecting': - this._status$.next(NatsStatus.RECONNECTING); + this._status$.next(NatsStatus.RECONNECTING as S); break; case 'reconnect': @@ -223,7 +226,7 @@ export class ServerNats extends Server { `NatsStatus: type: "${status.type}", data: "${data}".`, ); - this._status$.next(NatsStatus.CONNECTED); + this._status$.next(NatsStatus.CONNECTED as S); this.statusEventEmitter.emit( NatsEventsMap.RECONNECT, status.data as string, @@ -256,8 +259,8 @@ export class ServerNats extends Server { } public on< - EventKey extends keyof NatsEvents = keyof NatsEvents, - EventCallback extends NatsEvents[EventKey] = NatsEvents[EventKey], + EventKey extends keyof E = keyof E, + EventCallback extends E[EventKey] = E[EventKey], >(event: EventKey, callback: EventCallback) { this.statusEventEmitter.on(event, callback as any); } From 212d07fcbf09c973270e21c6d4cea3c47f6265c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Wed, 20 Nov 2024 12:45:29 +0100 Subject: [PATCH 072/122] refactor(common): improve apply decorators types --- .../decorators/core/apply-decorators.ts | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/packages/common/decorators/core/apply-decorators.ts b/packages/common/decorators/core/apply-decorators.ts index 0d8a22219c9..97f12c44dc8 100644 --- a/packages/common/decorators/core/apply-decorators.ts +++ b/packages/common/decorators/core/apply-decorators.ts @@ -1,3 +1,39 @@ +/** + * Function that returns a new decorator that applies all decorators provided by param + * + * Useful to build new decorators (or a decorator factory) encapsulating multiple decorators related with the same feature + * + * @param decorators one or more decorators (e.g., `ApplyGuard(...)`) + * + * @publicApi + */ +export function applyDecorators( + ...decorators: Array +): ClassDecorator; +/** + * Function that returns a new decorator that applies all decorators provided by param + * + * Useful to build new decorators (or a decorator factory) encapsulating multiple decorators related with the same feature + * + * @param decorators one or more decorators (e.g., `ApplyGuard(...)`) + * + * @publicApi + */ +export function applyDecorators( + ...decorators: Array +): MethodDecorator; +/** + * Function that returns a new decorator that applies all decorators provided by param + * + * Useful to build new decorators (or a decorator factory) encapsulating multiple decorators related with the same feature + * + * @param decorators one or more decorators (e.g., `ApplyGuard(...)`) + * + * @publicApi + */ +export function applyDecorators( + ...decorators: Array +): PropertyDecorator; /** * Function that returns a new decorator that applies all decorators provided by param * From f99617dd6be4839cd8ce503b926f4adf7f42c027 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 21 Nov 2024 10:09:43 +0100 Subject: [PATCH 073/122] feat(common): introduce intrinsic exception --- packages/common/exceptions/http.exception.ts | 11 +++++-- packages/common/exceptions/index.ts | 33 ++++++++++--------- .../common/exceptions/intrinsic.exception.ts | 7 ++++ .../core/exceptions/base-exception-filter.ts | 5 ++- .../exceptions/external-exception-filter.ts | 7 ++-- .../exceptions/base-rpc-exception-filter.ts | 13 ++++++-- .../exceptions/base-ws-exception-filter.ts | 12 +++++-- 7 files changed, 61 insertions(+), 27 deletions(-) create mode 100644 packages/common/exceptions/intrinsic.exception.ts diff --git a/packages/common/exceptions/http.exception.ts b/packages/common/exceptions/http.exception.ts index 143df233eed..0ed8b8dd2af 100644 --- a/packages/common/exceptions/http.exception.ts +++ b/packages/common/exceptions/http.exception.ts @@ -3,6 +3,7 @@ import { HttpExceptionBodyMessage, } from '../interfaces/http/http-exception-body.interface'; import { isNumber, isObject, isString } from '../utils/shared.utils'; +import { IntrinsicException } from './intrinsic.exception'; export interface HttpExceptionOptions { /** original cause of the error */ @@ -23,7 +24,13 @@ export interface DescriptionAndOptions { * * @publicApi */ -export class HttpException extends Error { +export class HttpException extends IntrinsicException { + /** + * Exception cause. Indicates the specific original cause of the error. + * It is used when catching and re-throwing an error with a more-specific or useful error message in order to still have access to the original error. + */ + public cause: unknown; + /** * Instantiate a plain HTTP Exception. * @@ -68,8 +75,6 @@ export class HttpException extends Error { this.initCause(); } - public cause: unknown; - /** * Configures error chaining support * diff --git a/packages/common/exceptions/index.ts b/packages/common/exceptions/index.ts index ab2a948b17b..554218336df 100644 --- a/packages/common/exceptions/index.ts +++ b/packages/common/exceptions/index.ts @@ -1,22 +1,23 @@ +export * from './bad-gateway.exception'; export * from './bad-request.exception'; -export * from './http.exception'; -export * from './unauthorized.exception'; -export * from './method-not-allowed.exception'; -export * from './not-found.exception'; -export * from './forbidden.exception'; -export * from './not-acceptable.exception'; -export * from './request-timeout.exception'; export * from './conflict.exception'; +export * from './forbidden.exception'; +export * from './gateway-timeout.exception'; export * from './gone.exception'; -export * from './payload-too-large.exception'; -export * from './unsupported-media-type.exception'; -export * from './unprocessable-entity.exception'; -export * from './internal-server-error.exception'; -export * from './not-implemented.exception'; export * from './http-version-not-supported.exception'; -export * from './bad-gateway.exception'; -export * from './service-unavailable.exception'; -export * from './gateway-timeout.exception'; +export * from './http.exception'; export * from './im-a-teapot.exception'; -export * from './precondition-failed.exception'; +export * from './internal-server-error.exception'; +export * from './intrinsic.exception'; +export * from './method-not-allowed.exception'; export * from './misdirected.exception'; +export * from './not-acceptable.exception'; +export * from './not-found.exception'; +export * from './not-implemented.exception'; +export * from './payload-too-large.exception'; +export * from './precondition-failed.exception'; +export * from './request-timeout.exception'; +export * from './service-unavailable.exception'; +export * from './unauthorized.exception'; +export * from './unprocessable-entity.exception'; +export * from './unsupported-media-type.exception'; diff --git a/packages/common/exceptions/intrinsic.exception.ts b/packages/common/exceptions/intrinsic.exception.ts new file mode 100644 index 00000000000..cb09b8e61a8 --- /dev/null +++ b/packages/common/exceptions/intrinsic.exception.ts @@ -0,0 +1,7 @@ +/** + * Exception that represents an intrinsic error in the application. + * When thrown, the default exception filter will not log the error message. + * + * @publicApi + */ +export class IntrinsicException extends Error {} diff --git a/packages/core/exceptions/base-exception-filter.ts b/packages/core/exceptions/base-exception-filter.ts index 12735f13666..cc7c8611fcd 100644 --- a/packages/core/exceptions/base-exception-filter.ts +++ b/packages/core/exceptions/base-exception-filter.ts @@ -5,6 +5,7 @@ import { HttpServer, HttpStatus, Inject, + IntrinsicException, Logger, Optional, } from '@nestjs/common'; @@ -68,7 +69,9 @@ export class BaseExceptionFilter implements ExceptionFilter { applicationRef.end(response); } - return BaseExceptionFilter.logger.error(exception); + if (!(exception instanceof IntrinsicException)) { + BaseExceptionFilter.logger.error(exception); + } } public isExceptionObject(err: any): err is Error { diff --git a/packages/core/exceptions/external-exception-filter.ts b/packages/core/exceptions/external-exception-filter.ts index 076b6a970a9..3648613de5c 100644 --- a/packages/core/exceptions/external-exception-filter.ts +++ b/packages/core/exceptions/external-exception-filter.ts @@ -1,10 +1,13 @@ -import { ArgumentsHost, HttpException, Logger } from '@nestjs/common'; +import { ArgumentsHost, IntrinsicException, Logger } from '@nestjs/common'; export class ExternalExceptionFilter { private static readonly logger = new Logger('ExceptionsHandler'); catch(exception: T, host: ArgumentsHost): R | Promise { - if (exception instanceof Error && !(exception instanceof HttpException)) { + if ( + exception instanceof Error && + !(exception instanceof IntrinsicException) + ) { ExternalExceptionFilter.logger.error(exception); } throw exception; diff --git a/packages/microservices/exceptions/base-rpc-exception-filter.ts b/packages/microservices/exceptions/base-rpc-exception-filter.ts index 849bc9ac2ff..2c5d94ba612 100644 --- a/packages/microservices/exceptions/base-rpc-exception-filter.ts +++ b/packages/microservices/exceptions/base-rpc-exception-filter.ts @@ -1,5 +1,10 @@ /* eslint-disable prefer-spread */ -import { ArgumentsHost, Logger, RpcExceptionFilter } from '@nestjs/common'; +import { + ArgumentsHost, + IntrinsicException, + Logger, + RpcExceptionFilter, +} from '@nestjs/common'; import { isObject } from '@nestjs/common/utils/shared.utils'; import { MESSAGES } from '@nestjs/core/constants'; import { Observable, throwError as _throw } from 'rxjs'; @@ -26,8 +31,10 @@ export class BaseRpcExceptionFilter public handleUnknownError(exception: T, status: string) { const errorMessage = MESSAGES.UNKNOWN_EXCEPTION_MESSAGE; - const logger = BaseRpcExceptionFilter.logger; - logger.error.apply(logger, [exception]); + if (!(exception instanceof IntrinsicException)) { + const logger = BaseRpcExceptionFilter.logger; + logger.error(exception); + } return _throw(() => ({ status, message: errorMessage })); } diff --git a/packages/websockets/exceptions/base-ws-exception-filter.ts b/packages/websockets/exceptions/base-ws-exception-filter.ts index 6f1b74dee36..2b9961a7393 100644 --- a/packages/websockets/exceptions/base-ws-exception-filter.ts +++ b/packages/websockets/exceptions/base-ws-exception-filter.ts @@ -1,4 +1,9 @@ -import { ArgumentsHost, Logger, WsExceptionFilter } from '@nestjs/common'; +import { + ArgumentsHost, + IntrinsicException, + Logger, + WsExceptionFilter, +} from '@nestjs/common'; import { isObject } from '@nestjs/common/utils/shared.utils'; import { MESSAGES } from '@nestjs/core/constants'; import { WsException } from '../errors/ws-exception'; @@ -46,7 +51,10 @@ export class BaseWsExceptionFilter message: MESSAGES.UNKNOWN_EXCEPTION_MESSAGE, }); - return BaseWsExceptionFilter.logger.error(exception); + if (!(exception instanceof IntrinsicException)) { + const logger = BaseWsExceptionFilter.logger; + logger.error(exception); + } } public isExceptionObject(err: any): err is Error { From c5e5b9072c87ed6ef6cbc11ac356aa59e7245fa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 21 Nov 2024 10:30:26 +0100 Subject: [PATCH 074/122] feat(websockets): include exception cause to associate error with req --- .../exceptions/base-ws-exception-filter.ts | 71 +++++++++++++++---- 1 file changed, 58 insertions(+), 13 deletions(-) diff --git a/packages/websockets/exceptions/base-ws-exception-filter.ts b/packages/websockets/exceptions/base-ws-exception-filter.ts index 2b9961a7393..c013a859bfe 100644 --- a/packages/websockets/exceptions/base-ws-exception-filter.ts +++ b/packages/websockets/exceptions/base-ws-exception-filter.ts @@ -8,48 +8,93 @@ import { isObject } from '@nestjs/common/utils/shared.utils'; import { MESSAGES } from '@nestjs/core/constants'; import { WsException } from '../errors/ws-exception'; +interface ErrorPayload { + /** + * Error message identifier. + */ + status: 'error'; + /** + * Error message. + */ + message: string; + /** + * Data that caused the exception. + */ + cause?: unknown; +} + +interface BaseWsExceptionFilterOptions { + /** + * When true, the data that caused the exception will be included in the response. + * This is useful when you want to provide additional context to the client, or + * when you need to associate the error with a specific request. + * @default true + */ + includeCause?: boolean; +} + /** * @publicApi */ export class BaseWsExceptionFilter implements WsExceptionFilter { - private static readonly logger = new Logger('WsExceptionsHandler'); + protected static readonly logger = new Logger('WsExceptionsHandler'); + + constructor(protected readonly options: BaseWsExceptionFilterOptions = {}) { + this.options.includeCause = this.options.includeCause ?? true; + } public catch(exception: TError, host: ArgumentsHost) { const client = host.switchToWs().getClient(); - this.handleError(client, exception); + const data = host.switchToWs().getData(); + this.handleError(client, exception, data); } public handleError( client: TClient, exception: TError, + data: unknown, ) { if (!(exception instanceof WsException)) { - return this.handleUnknownError(exception, client); + return this.handleUnknownError(exception, client, data); } const status = 'error'; const result = exception.getError(); - const message = isObject(result) - ? result - : { - status, - message: result, - }; - - client.emit('exception', message); + + if (isObject(result)) { + return client.emit('exception', result); + } + + const payload: ErrorPayload = { + status, + message: result, + }; + + if (this.options?.includeCause) { + payload.cause = data; + } + + client.emit('exception', payload); } public handleUnknownError( exception: TError, client: TClient, + data: unknown, ) { const status = 'error'; - client.emit('exception', { + const payload: ErrorPayload = { status, message: MESSAGES.UNKNOWN_EXCEPTION_MESSAGE, - }); + }; + + if (this.options?.includeCause) { + payload.cause = data; + } + + client.emit('exception', payload); if (!(exception instanceof IntrinsicException)) { const logger = BaseWsExceptionFilter.logger; From 03a61e9728859f50396fd3dd41217359d74cc1ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 21 Nov 2024 10:41:37 +0100 Subject: [PATCH 075/122] chore: revert apply decorators signature (regression) --- .../decorators/core/apply-decorators.ts | 36 ------------------- .../test/decorators/apply-decorators.spec.ts | 2 +- 2 files changed, 1 insertion(+), 37 deletions(-) diff --git a/packages/common/decorators/core/apply-decorators.ts b/packages/common/decorators/core/apply-decorators.ts index 97f12c44dc8..0d8a22219c9 100644 --- a/packages/common/decorators/core/apply-decorators.ts +++ b/packages/common/decorators/core/apply-decorators.ts @@ -1,39 +1,3 @@ -/** - * Function that returns a new decorator that applies all decorators provided by param - * - * Useful to build new decorators (or a decorator factory) encapsulating multiple decorators related with the same feature - * - * @param decorators one or more decorators (e.g., `ApplyGuard(...)`) - * - * @publicApi - */ -export function applyDecorators( - ...decorators: Array -): ClassDecorator; -/** - * Function that returns a new decorator that applies all decorators provided by param - * - * Useful to build new decorators (or a decorator factory) encapsulating multiple decorators related with the same feature - * - * @param decorators one or more decorators (e.g., `ApplyGuard(...)`) - * - * @publicApi - */ -export function applyDecorators( - ...decorators: Array -): MethodDecorator; -/** - * Function that returns a new decorator that applies all decorators provided by param - * - * Useful to build new decorators (or a decorator factory) encapsulating multiple decorators related with the same feature - * - * @param decorators one or more decorators (e.g., `ApplyGuard(...)`) - * - * @publicApi - */ -export function applyDecorators( - ...decorators: Array -): PropertyDecorator; /** * Function that returns a new decorator that applies all decorators provided by param * diff --git a/packages/common/test/decorators/apply-decorators.spec.ts b/packages/common/test/decorators/apply-decorators.spec.ts index f91526ac408..d804206cc00 100644 --- a/packages/common/test/decorators/apply-decorators.spec.ts +++ b/packages/common/test/decorators/apply-decorators.spec.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; -import { applyDecorators, UseGuards } from '../../decorators'; import { GUARDS_METADATA } from '../../constants'; +import { applyDecorators, UseGuards } from '../../decorators'; import { CanActivate } from '../../interfaces'; describe('applyDecorators', () => { From 9a2b04947e247bde1d8e585ef52329ec902fda87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 21 Nov 2024 11:35:02 +0100 Subject: [PATCH 076/122] chore: include pattern too --- .../exceptions/base-ws-exception-filter.ts | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/websockets/exceptions/base-ws-exception-filter.ts b/packages/websockets/exceptions/base-ws-exception-filter.ts index c013a859bfe..cf238192a5b 100644 --- a/packages/websockets/exceptions/base-ws-exception-filter.ts +++ b/packages/websockets/exceptions/base-ws-exception-filter.ts @@ -18,9 +18,9 @@ interface ErrorPayload { */ message: string; /** - * Data that caused the exception. + * Message that caused the exception. */ - cause?: unknown; + cause?: { pattern: string; data: unknown }; } interface BaseWsExceptionFilterOptions { @@ -47,17 +47,21 @@ export class BaseWsExceptionFilter public catch(exception: TError, host: ArgumentsHost) { const client = host.switchToWs().getClient(); - const data = host.switchToWs().getData(); - this.handleError(client, exception, data); + const pattern = host.switchToWs().getPattern(); + const data = host.switchToWs().getPattern(); + this.handleError(client, exception, { + pattern, + data, + }); } public handleError( client: TClient, exception: TError, - data: unknown, + cause: ErrorPayload['cause'], ) { if (!(exception instanceof WsException)) { - return this.handleUnknownError(exception, client, data); + return this.handleUnknownError(exception, client, cause); } const status = 'error'; @@ -73,7 +77,7 @@ export class BaseWsExceptionFilter }; if (this.options?.includeCause) { - payload.cause = data; + payload.cause = cause; } client.emit('exception', payload); @@ -82,7 +86,7 @@ export class BaseWsExceptionFilter public handleUnknownError( exception: TError, client: TClient, - data: unknown, + data: ErrorPayload['cause'], ) { const status = 'error'; const payload: ErrorPayload = { From 9020d759ca51249d2b91ea8edf8c9662fa9705e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 21 Nov 2024 11:35:24 +0100 Subject: [PATCH 077/122] chore: export error payload interface --- packages/websockets/exceptions/base-ws-exception-filter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/websockets/exceptions/base-ws-exception-filter.ts b/packages/websockets/exceptions/base-ws-exception-filter.ts index cf238192a5b..73da2a40c3b 100644 --- a/packages/websockets/exceptions/base-ws-exception-filter.ts +++ b/packages/websockets/exceptions/base-ws-exception-filter.ts @@ -8,7 +8,7 @@ import { isObject } from '@nestjs/common/utils/shared.utils'; import { MESSAGES } from '@nestjs/core/constants'; import { WsException } from '../errors/ws-exception'; -interface ErrorPayload { +export interface ErrorPayload { /** * Error message identifier. */ From db95f2009d556bdfacad79230715292fb8790fd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 21 Nov 2024 12:06:35 +0100 Subject: [PATCH 078/122] test: add missing unit tests, update typo --- .../exceptions/base-ws-exception-filter.ts | 2 +- .../exceptions/ws-exceptions-handler.spec.ts | 108 +++++++++++++----- 2 files changed, 82 insertions(+), 28 deletions(-) diff --git a/packages/websockets/exceptions/base-ws-exception-filter.ts b/packages/websockets/exceptions/base-ws-exception-filter.ts index 73da2a40c3b..64da0c2b5b5 100644 --- a/packages/websockets/exceptions/base-ws-exception-filter.ts +++ b/packages/websockets/exceptions/base-ws-exception-filter.ts @@ -48,7 +48,7 @@ export class BaseWsExceptionFilter public catch(exception: TError, host: ArgumentsHost) { const client = host.switchToWs().getClient(); const pattern = host.switchToWs().getPattern(); - const data = host.switchToWs().getPattern(); + const data = host.switchToWs().getData(); this.handleError(client, exception, { pattern, data, diff --git a/packages/websockets/test/exceptions/ws-exceptions-handler.spec.ts b/packages/websockets/test/exceptions/ws-exceptions-handler.spec.ts index 9211c03ea62..b624e9478ae 100644 --- a/packages/websockets/test/exceptions/ws-exceptions-handler.spec.ts +++ b/packages/websockets/test/exceptions/ws-exceptions-handler.spec.ts @@ -7,7 +7,12 @@ import { WsExceptionsHandler } from '../../exceptions/ws-exceptions-handler'; describe('WsExceptionsHandler', () => { let handler: WsExceptionsHandler; let emitStub: sinon.SinonStub; - let client; + let client: { + emit: sinon.SinonStub; + }; + let pattern: string; + let data: unknown; + let executionContextHost: ExecutionContextHost; beforeEach(() => { handler = new WsExceptionsHandler(); @@ -15,47 +20,96 @@ describe('WsExceptionsHandler', () => { client = { emit: emitStub, }; + pattern = 'test'; + data = { foo: 'bar' }; + executionContextHost = new ExecutionContextHost([client, data, pattern]); + client.emit.returns(client); }); describe('handle', () => { - it('should method emit expected status code message when exception is unknown', () => { - handler.handle(new Error(), new ExecutionContextHost([client])); - expect( - emitStub.calledWith('exception', { - status: 'error', - message: 'Internal server error', - }), - ).to.be.true; + describe('when "includeCause" is set to true (default)', () => { + it('should method emit expected status code message when exception is unknown', () => { + handler.handle(new Error(), executionContextHost); + expect( + emitStub.calledWith('exception', { + status: 'error', + message: 'Internal server error', + cause: { + pattern, + data, + }, + }), + ).to.be.true; + }); + describe('when exception is instance of WsException', () => { + it('should method emit expected status and json object', () => { + const message = { + custom: 'Unauthorized', + }; + handler.handle(new WsException(message), executionContextHost); + expect(emitStub.calledWith('exception', message)).to.be.true; + }); + it('should method emit expected status and transform message to json', () => { + const message = 'Unauthorized'; + + handler.handle(new WsException(message), executionContextHost); + console.log(emitStub.getCall(0).args); + expect( + emitStub.calledWith('exception', { + message, + status: 'error', + cause: { + pattern, + data, + }, + }), + ).to.be.true; + }); + }); }); - describe('when exception is instance of WsException', () => { - it('should method emit expected status and json object', () => { - const message = { - custom: 'Unauthorized', - }; - handler.handle( - new WsException(message), - new ExecutionContextHost([client]), - ); - expect(emitStub.calledWith('exception', message)).to.be.true; + + describe('when "includeCause" is set to false', () => { + beforeEach(() => { + handler = new WsExceptionsHandler({ includeCause: false }); }); - it('should method emit expected status and transform message to json', () => { - const message = 'Unauthorized'; + it('should method emit expected status code message when exception is unknown', () => { handler.handle( - new WsException(message), - new ExecutionContextHost([client]), + new Error(), + new ExecutionContextHost([client, pattern, data]), ); - expect(emitStub.calledWith('exception', { message, status: 'error' })) - .to.be.true; + expect( + emitStub.calledWith('exception', { + status: 'error', + message: 'Internal server error', + }), + ).to.be.true; + }); + describe('when exception is instance of WsException', () => { + it('should method emit expected status and json object', () => { + const message = { + custom: 'Unauthorized', + }; + handler.handle(new WsException(message), executionContextHost); + expect(emitStub.calledWith('exception', message)).to.be.true; + }); + it('should method emit expected status and transform message to json', () => { + const message = 'Unauthorized'; + + handler.handle(new WsException(message), executionContextHost); + expect(emitStub.calledWith('exception', { message, status: 'error' })) + .to.be.true; + }); }); }); + describe('when "invokeCustomFilters" returns true', () => { beforeEach(() => { sinon.stub(handler, 'invokeCustomFilters').returns(true); }); it('should not call `emit`', () => { - handler.handle(new WsException(''), new ExecutionContextHost([client])); + handler.handle(new WsException(''), executionContextHost); expect(emitStub.notCalled).to.be.true; }); }); @@ -77,7 +131,7 @@ describe('WsExceptionsHandler', () => { }); }); describe('when filters array is not empty', () => { - let filters, funcSpy; + let filters: any[], funcSpy: sinon.SinonSpy; class TestException {} beforeEach(() => { From a3dbbecd61ed1bc5953fd4864ce4e5f2b4e6b582 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 21 Nov 2024 12:42:40 +0100 Subject: [PATCH 079/122] feat: add cause factory to allow controlling the cause shape --- .../exceptions/base-ws-exception-filter.ts | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/packages/websockets/exceptions/base-ws-exception-filter.ts b/packages/websockets/exceptions/base-ws-exception-filter.ts index 64da0c2b5b5..4b64c838352 100644 --- a/packages/websockets/exceptions/base-ws-exception-filter.ts +++ b/packages/websockets/exceptions/base-ws-exception-filter.ts @@ -8,7 +8,7 @@ import { isObject } from '@nestjs/common/utils/shared.utils'; import { MESSAGES } from '@nestjs/core/constants'; import { WsException } from '../errors/ws-exception'; -export interface ErrorPayload { +export interface ErrorPayload { /** * Error message identifier. */ @@ -20,7 +20,7 @@ export interface ErrorPayload { /** * Message that caused the exception. */ - cause?: { pattern: string; data: unknown }; + cause?: Cause; } interface BaseWsExceptionFilterOptions { @@ -31,6 +31,13 @@ interface BaseWsExceptionFilterOptions { * @default true */ includeCause?: boolean; + + /** + * A factory function that can be used to control the shape of the "cause" object. + * This is useful when you need a custom structure for the cause object. + * @default (pattern, data) => ({ pattern, data }) + */ + causeFactory?: (pattern: string, data: unknown) => Record; } /** @@ -43,6 +50,8 @@ export class BaseWsExceptionFilter constructor(protected readonly options: BaseWsExceptionFilterOptions = {}) { this.options.includeCause = this.options.includeCause ?? true; + this.options.causeFactory = + this.options.causeFactory ?? ((pattern, data) => ({ pattern, data })); } public catch(exception: TError, host: ArgumentsHost) { @@ -71,13 +80,13 @@ export class BaseWsExceptionFilter return client.emit('exception', result); } - const payload: ErrorPayload = { + const payload: ErrorPayload = { status, message: result, }; if (this.options?.includeCause) { - payload.cause = cause; + payload.cause = this.options.causeFactory(cause.pattern, cause.data); } client.emit('exception', payload); @@ -89,13 +98,13 @@ export class BaseWsExceptionFilter data: ErrorPayload['cause'], ) { const status = 'error'; - const payload: ErrorPayload = { + const payload: ErrorPayload = { status, message: MESSAGES.UNKNOWN_EXCEPTION_MESSAGE, }; if (this.options?.includeCause) { - payload.cause = data; + payload.cause = this.options.causeFactory(data.pattern, data.data); } client.emit('exception', payload); From 5c7724b6492b747025ff3efa090c058633e799ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 21 Nov 2024 12:46:20 +0100 Subject: [PATCH 080/122] test: update integration test --- integration/websockets/e2e/error-gateway.spec.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/integration/websockets/e2e/error-gateway.spec.ts b/integration/websockets/e2e/error-gateway.spec.ts index 95a7d4d2840..b1911bc4863 100644 --- a/integration/websockets/e2e/error-gateway.spec.ts +++ b/integration/websockets/e2e/error-gateway.spec.ts @@ -11,20 +11,27 @@ describe('ErrorGateway', () => { const testingModule = await Test.createTestingModule({ providers: [ErrorGateway], }).compile(); - app = await testingModule.createNestApplication(); + + app = testingModule.createNestApplication(); await app.listen(3000); }); it(`should handle error`, async () => { const ws = io('http://localhost:8080'); - ws.emit('push', { - test: 'test', - }); + const pattern = 'push'; + const data = { test: 'test' }; + + ws.emit(pattern, data); + await new Promise(resolve => ws.on('exception', data => { expect(data).to.be.eql({ status: 'error', message: 'test', + cause: { + pattern, + data, + }, }); resolve(); }), From f80984fb7816f83d948e3d4ccaaa697130b13416 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 21 Nov 2024 14:17:57 +0100 Subject: [PATCH 081/122] test: update integration test --- integration/websockets/e2e/error-gateway.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/integration/websockets/e2e/error-gateway.spec.ts b/integration/websockets/e2e/error-gateway.spec.ts index b1911bc4863..5e5335a00b3 100644 --- a/integration/websockets/e2e/error-gateway.spec.ts +++ b/integration/websockets/e2e/error-gateway.spec.ts @@ -24,8 +24,8 @@ describe('ErrorGateway', () => { ws.emit(pattern, data); await new Promise(resolve => - ws.on('exception', data => { - expect(data).to.be.eql({ + ws.on('exception', error => { + expect(error).to.be.eql({ status: 'error', message: 'test', cause: { From 21279a9c49487553c454a1916911b3cc02bd363f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Mon, 25 Nov 2024 13:42:24 +0100 Subject: [PATCH 082/122] feat(microservices): support nats queue per handler --- packages/microservices/server/server-nats.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/microservices/server/server-nats.ts b/packages/microservices/server/server-nats.ts index f3212fcb446..fffa37f659d 100644 --- a/packages/microservices/server/server-nats.ts +++ b/packages/microservices/server/server-nats.ts @@ -77,16 +77,18 @@ export class ServerNats< } public bindEvents(client: Client) { - const queue = this.getOptionsProp(this.options, 'queue'); - const subscribe = (channel: string) => + const subscribe = (channel: string, queue: string) => client.subscribe(channel, { queue, callback: this.getMessageHandler(channel).bind(this), }); + const defaultQueue = this.getOptionsProp(this.options, 'queue'); const registeredPatterns = [...this.messageHandlers.keys()]; for (const channel of registeredPatterns) { - const sub = subscribe(channel); + const handlerRef = this.messageHandlers.get(channel); + const queue = handlerRef.extras?.queue ?? defaultQueue; + const sub = subscribe(channel, queue); this.subscriptions.push(sub); } } From ab660c7edd3defba5be83d6ba6086a27746c948a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Mon, 25 Nov 2024 13:48:54 +0100 Subject: [PATCH 083/122] test: add unit test --- .../test/server/server-nats.spec.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/microservices/test/server/server-nats.spec.ts b/packages/microservices/test/server/server-nats.spec.ts index bcca66e736b..b42bd50d282 100644 --- a/packages/microservices/test/server/server-nats.spec.ts +++ b/packages/microservices/test/server/server-nats.spec.ts @@ -113,11 +113,26 @@ describe('ServerNats', () => { [pattern]: messageHandler, }); }); - it('should subscribe to each acknowledge patterns', () => { + + it('should subscribe to every pattern', () => { server.bindEvents(natsClient); expect(subscribeSpy.calledWith(pattern)).to.be.true; }); + it('should use a per pattern queue if provided', () => { + const queue = 'test'; + untypedServer.messageHandlers = objectToMap({ + [pattern]: Object.assign(messageHandler, { + extras: { + queue, + }, + }), + }); + server.bindEvents(natsClient); + const lastCall = subscribeSpy.lastCall; + expect(lastCall.args[1].queue).to.be.eql(queue); + }); + it('should fill the subscriptions array properly', () => { server.bindEvents(natsClient); expect(server['subscriptions'].length).to.be.equals(1); 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 084/122] 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 | 1235 ++++++++++------- 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, 1073 insertions(+), 817 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 07c71c90cc8..00000000000 --- 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 37bb3aefba1..00000000000 --- 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 00000000000..9b575c36e7f --- /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 5c83431676f..84845a67472 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 cef623d14c9..18d4bbcd669 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 5a5fd57ce0d..4561536fa34 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 8d77a22c9bd..068090d50de 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 5f2309689a5..125a55c8151 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 afccc560252..9d77423c002 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 13cad38cff9..23f3240c271 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 c9a0c3179dd..249eb9312aa 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 089cf51b3e8..8f6456bef18 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 60e9a5e6487..8501d59eb87 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 0d01722152d..565b2d59fc5 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 93f5910d034..7bb41fb4e54 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 13cad38cff9..23f3240c271 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 00000000000..cef623d14c9 --- /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 d280a82a451..8a80ced27d5 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 0ab86ec7351..d01e8d498b3 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 5cbce8a9cb9..b69c3c63116 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 7206d60bab5..32e80e07d8a 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 10a9e396ac8..197aead4ca1 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 0d23de554b8..9a389b94308 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 e32a726df34..eb097f9b4eb 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 648d7a11791..e776f0be125 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 11e635aeae3..8d435f18b36 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 afb93ba078e..cdecc1bb686 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 cef623d14c9..18d4bbcd669 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 5847364d60a..2699ee9d7a2 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 c3692649c05..5c1ce2f6ec2 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 c3692649c05..5c1ce2f6ec2 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 c3692649c05..5c1ce2f6ec2 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 98e7573683d..b209fa0c3f9 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 b779d3557e8..ba267c8ddbb 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 00000000000..5c1ce2f6ec2 --- /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 c3692649c05..5c1ce2f6ec2 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 c4da79df9a9..e740d542b0e 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 261e01453c3..23ca656104e 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 b239776ee12..8ddcc673d42 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 4676ccf584b..72489dc60ec 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 16310a8f332..acfaecbe4fe 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 7a6b6d649d5..6ce1a6a5ace 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 d7aea5896e9..0a7d54ada96 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 df58a5f0773..7b146972b4f 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 609574e90cc..8658f932d11 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 afb93ba078e..cdecc1bb686 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 7d06ff9d5fd..3e8274038ab 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 bc2f1f7b6da..ac29622b5c5 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 695a9edbdf0..6540ded32d4 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 6671d82a6af..2f4d5baf6ce 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 4db9fcd1055..234767e1824 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 d9c82ca9758..c43c3d1b1be 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 7d4c1629f4b..c7f4a18713e 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 a11bdf6dc83..d1b62e0ec37 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 01a86abd36b..1d316cac8f8 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 95a7d4d2840..c1963c030ff 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 94f56d7e914..f2a6ab80f46 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 9daca28da27..7bc2c19c12c 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 9a993281015..8563c11ebe7 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,29 +19614,63 @@ "semver": "bin/semver.js" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", + "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, - "license": "Apache-2.0", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "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/node_modules/ansi-regex": { - "version": "5.0.1", + "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": "MIT", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", "dev": true, - "license": "Python-2.0" + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", @@ -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 596d10e8403..70ef05554cc 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 cf730f84c1a..27bc387b9b6 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 0e2bde1b4ab..c3fb7cd2fd7 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 9923bc34cc4..474c47a6d13 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 03a7bc08de4..b9ead653f9e 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 143df233eed..a69e6490583 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 3887dfe23c0..91f3bb1cb87 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 4980882a412..c86ca3630be 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 79c967f17f7..2b6e54c0334 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 7ca8644090f..3126cb3b64f 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 876b41551e1..c2582dc0ff5 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 106e447ca41..d36fc2c122f 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 8925cb61a52..25652dd3176 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 10e14d099f3..583ad8fbcf2 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 7f58d0ee7cc..2496d588859 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 a631cbc85c7..41c9f435fdd 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 52a34cb6a13..7b821e89ac1 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 07ae0ecc48d..d4de2c7ebec 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 3f741802fe1..20a49d21782 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 5c5f729f985..020e9bf0c5a 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 f4a36ee0e74..ba48ce5d833 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 7a23e24d0ff..f9883a64c13 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 3334b7c93d5..308f79065e0 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 411d86efbda..52ae8410948 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 38b8f9dc793..aba25daca26 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 cad7ed3b56c..cae5fa05132 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 091600bfbd8..9314cfe9914 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 53d3acc9fba..345f7438ee7 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 0e093b2a2f2..81d74a2ff73 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 a1c91d77bde..927d40d27ea 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 f8e032d57cb..bf0af4271ad 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 a9f9a748cc5..32030fe8a5a 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 849bc9ac2ff..dbac62039b0 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 ac77a688791..b978d9f40b0 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 118764799e5..b46943ef4a7 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 f3212fcb446..2cc3a97bf2f 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 0c60dba6a1c..ffba44dda37 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 25a6a2dd2ab..f0329cdb20e 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 93ab12f7320..1004deb5c18 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 8e82bdf3dfc..a0faa82c350 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 37feba4fa0f..4b85be39a7f 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 c89ed92ab30..f7833ad68be 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 35a34f7a02d..7ac73e63d46 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 5345f3e3cec..10ced12905e 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 c18dd6ebed5..fc540462fb7 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 3e4b89bf80f..a1ca5d10727 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 b32be38b8d5..b5499b7aee9 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 bb29f373feb..d4103e79fe0 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 95af085082e..204fc267bb6 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 From 8829b8d1d7dfa71c33411f2b0a386f04e9566b88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 26 Nov 2024 10:38:31 +0100 Subject: [PATCH 085/122] style: address packages lint errors --- eslint.config.mjs | 9 ++++--- .../auto-mock/test/bar.service.spec.ts | 1 - integration/websockets/e2e/ws-gateway.spec.ts | 1 - .../decorators/http/route-params.decorator.ts | 2 +- .../decorators/modules/module.decorator.ts | 2 +- .../exceptions/bad-gateway.exception.ts | 2 +- .../exceptions/bad-request.exception.ts | 2 +- .../common/exceptions/conflict.exception.ts | 2 +- .../common/exceptions/forbidden.exception.ts | 2 +- .../exceptions/gateway-timeout.exception.ts | 2 +- packages/common/exceptions/gone.exception.ts | 2 +- .../http-version-not-supported.exception.ts | 2 +- .../exceptions/im-a-teapot.exception.ts | 2 +- .../internal-server-error.exception.ts | 2 +- .../method-not-allowed.exception.ts | 2 +- .../exceptions/misdirected.exception.ts | 2 +- .../exceptions/not-acceptable.exception.ts | 2 +- .../common/exceptions/not-found.exception.ts | 2 +- .../exceptions/not-implemented.exception.ts | 2 +- .../exceptions/payload-too-large.exception.ts | 2 +- .../precondition-failed.exception.ts | 2 +- .../exceptions/request-timeout.exception.ts | 2 +- .../service-unavailable.exception.ts | 2 +- .../exceptions/unauthorized.exception.ts | 2 +- .../unprocessable-entity.exception.ts | 2 +- .../unsupported-media-type.exception.ts | 2 +- .../middleware/nest-middleware.interface.ts | 2 +- .../configurable-module.builder.ts | 1 + .../configurable-module-cls.interface.ts | 1 + .../configurable-module-host.interface.ts | 1 + packages/common/pipes/parse-array.pipe.ts | 6 +++-- packages/common/pipes/validation.pipe.ts | 2 +- .../common/utils/merge-with-values.util.ts | 1 + packages/core/errors/messages.ts | 5 ++-- .../core/exceptions/exceptions-handler.ts | 8 +++--- .../exceptions/external-exception-filter.ts | 1 + .../exceptions/external-exceptions-handler.ts | 8 +++--- packages/core/injector/container.ts | 2 +- packages/core/injector/injector.ts | 25 +++++++++++-------- packages/core/injector/module-ref.ts | 2 ++ packages/core/middleware/builder.ts | 6 ++--- packages/core/middleware/middleware-module.ts | 1 + .../middleware/route-info-path-extractor.ts | 8 +++--- packages/core/router/route-params-factory.ts | 3 ++- packages/core/router/router-proxy.ts | 4 +-- packages/index.ts | 6 ----- packages/microservices/client/client-grpc.ts | 6 +++-- packages/microservices/client/client-kafka.ts | 1 + packages/microservices/client/client-nats.ts | 4 +-- packages/microservices/client/client-rmq.ts | 2 +- .../exceptions/rpc-exceptions-handler.ts | 10 ++++---- .../microservices/helpers/kafka-parser.ts | 6 +++-- .../interfaces/client-grpc.interface.ts | 2 +- .../microservice-configuration.interface.ts | 2 +- .../microservices/listeners-controller.ts | 17 ++++++------- packages/microservices/nest-microservice.ts | 2 +- .../serializers/mqtt-record.serializer.ts | 4 +-- .../serializers/nats-record.serializer.ts | 4 +-- .../serializers/rmq-record.serializer.ts | 4 +-- packages/microservices/server/server-grpc.ts | 2 +- packages/microservices/server/server-nats.ts | 2 +- packages/microservices/server/server-redis.ts | 6 ++--- packages/microservices/server/server.ts | 2 +- .../adapters/fastify-adapter.ts | 5 ++-- packages/platform-ws/adapters/ws-adapter.ts | 8 +++--- packages/websockets/adapters/ws-adapter.ts | 2 +- .../exceptions/ws-exceptions-handler.ts | 4 +-- .../websockets/gateway-metadata-explorer.ts | 2 +- .../interfaces/gateway-metadata.interface.ts | 2 +- packages/websockets/web-sockets-controller.ts | 1 + tsconfig.json | 1 + 71 files changed, 135 insertions(+), 116 deletions(-) delete mode 100644 packages/index.ts diff --git a/eslint.config.mjs b/eslint.config.mjs index 9b575c36e7f..244b8102c10 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -35,17 +35,20 @@ export default tseslint.config( '@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 + "checksVoidReturn": false, + "checksConditionals": false } ], - "@typescript-eslint/require-await": "off" + "@typescript-eslint/require-await": "off", + '@typescript-eslint/prefer-promise-reject-errors': 'off', + '@typescript-eslint/no-base-to-string': 'off', + '@typescript-eslint/unbound-method': '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 84845a67472..5c83431676f 100644 --- a/integration/auto-mock/test/bar.service.spec.ts +++ b/integration/auto-mock/test/bar.service.spec.ts @@ -48,7 +48,6 @@ 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/websockets/e2e/ws-gateway.spec.ts b/integration/websockets/e2e/ws-gateway.spec.ts index f2a6ab80f46..5a498ea9151 100644 --- a/integration/websockets/e2e/ws-gateway.spec.ts +++ b/integration/websockets/e2e/ws-gateway.spec.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-base-to-string */ import { INestApplication } from '@nestjs/common'; import { WsAdapter } from '@nestjs/platform-ws'; import { Test } from '@nestjs/testing'; diff --git a/packages/common/decorators/http/route-params.decorator.ts b/packages/common/decorators/http/route-params.decorator.ts index b14e63cee9d..dffb9d72c48 100644 --- a/packages/common/decorators/http/route-params.decorator.ts +++ b/packages/common/decorators/http/route-params.decorator.ts @@ -36,7 +36,7 @@ export function assignMetadata( ) { return { ...args, - [`${paramtype}:${index}`]: { + [`${paramtype as string}:${index}`]: { index, data, pipes, diff --git a/packages/common/decorators/modules/module.decorator.ts b/packages/common/decorators/modules/module.decorator.ts index b0547b6d393..9ab617a6435 100644 --- a/packages/common/decorators/modules/module.decorator.ts +++ b/packages/common/decorators/modules/module.decorator.ts @@ -21,7 +21,7 @@ export function Module(metadata: ModuleMetadata): ClassDecorator { return (target: Function) => { for (const property in metadata) { - if (metadata.hasOwnProperty(property)) { + if (Object.hasOwnProperty.call(metadata, property)) { Reflect.defineMetadata(property, (metadata as any)[property], target); } } diff --git a/packages/common/exceptions/bad-gateway.exception.ts b/packages/common/exceptions/bad-gateway.exception.ts index 2623d87271a..30d45a28646 100644 --- a/packages/common/exceptions/bad-gateway.exception.ts +++ b/packages/common/exceptions/bad-gateway.exception.ts @@ -34,7 +34,7 @@ export class BadGatewayException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: string | HttpExceptionOptions = 'Bad Gateway', ) { const { description, httpExceptionOptions } = diff --git a/packages/common/exceptions/bad-request.exception.ts b/packages/common/exceptions/bad-request.exception.ts index bedb7d0958a..004417a8c8a 100644 --- a/packages/common/exceptions/bad-request.exception.ts +++ b/packages/common/exceptions/bad-request.exception.ts @@ -34,7 +34,7 @@ export class BadRequestException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: string | HttpExceptionOptions = 'Bad Request', ) { const { description, httpExceptionOptions } = diff --git a/packages/common/exceptions/conflict.exception.ts b/packages/common/exceptions/conflict.exception.ts index f7810ffbed2..39342c34d1f 100644 --- a/packages/common/exceptions/conflict.exception.ts +++ b/packages/common/exceptions/conflict.exception.ts @@ -34,7 +34,7 @@ export class ConflictException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: string | HttpExceptionOptions = 'Conflict', ) { const { description, httpExceptionOptions } = diff --git a/packages/common/exceptions/forbidden.exception.ts b/packages/common/exceptions/forbidden.exception.ts index 8079823d867..ada4ca4fd7c 100644 --- a/packages/common/exceptions/forbidden.exception.ts +++ b/packages/common/exceptions/forbidden.exception.ts @@ -34,7 +34,7 @@ export class ForbiddenException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: string | HttpExceptionOptions = 'Forbidden', ) { const { description, httpExceptionOptions } = diff --git a/packages/common/exceptions/gateway-timeout.exception.ts b/packages/common/exceptions/gateway-timeout.exception.ts index 6953f0cb231..2a42838a11f 100644 --- a/packages/common/exceptions/gateway-timeout.exception.ts +++ b/packages/common/exceptions/gateway-timeout.exception.ts @@ -34,7 +34,7 @@ export class GatewayTimeoutException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: string | HttpExceptionOptions = 'Gateway Timeout', ) { const { description, httpExceptionOptions } = diff --git a/packages/common/exceptions/gone.exception.ts b/packages/common/exceptions/gone.exception.ts index 3e080906ab6..39a608369f2 100644 --- a/packages/common/exceptions/gone.exception.ts +++ b/packages/common/exceptions/gone.exception.ts @@ -34,7 +34,7 @@ export class GoneException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: string | HttpExceptionOptions = 'Gone', ) { const { description, httpExceptionOptions } = diff --git a/packages/common/exceptions/http-version-not-supported.exception.ts b/packages/common/exceptions/http-version-not-supported.exception.ts index 922d75ff08a..5a30438615b 100644 --- a/packages/common/exceptions/http-version-not-supported.exception.ts +++ b/packages/common/exceptions/http-version-not-supported.exception.ts @@ -34,7 +34,7 @@ export class HttpVersionNotSupportedException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: | string | HttpExceptionOptions = 'HTTP Version Not Supported', diff --git a/packages/common/exceptions/im-a-teapot.exception.ts b/packages/common/exceptions/im-a-teapot.exception.ts index 76c67861e23..6c063b17c8a 100644 --- a/packages/common/exceptions/im-a-teapot.exception.ts +++ b/packages/common/exceptions/im-a-teapot.exception.ts @@ -37,7 +37,7 @@ export class ImATeapotException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: string | HttpExceptionOptions = `I'm a teapot`, ) { const { description, httpExceptionOptions } = diff --git a/packages/common/exceptions/internal-server-error.exception.ts b/packages/common/exceptions/internal-server-error.exception.ts index c3393cf3782..a5f7c06b9ae 100644 --- a/packages/common/exceptions/internal-server-error.exception.ts +++ b/packages/common/exceptions/internal-server-error.exception.ts @@ -34,7 +34,7 @@ export class InternalServerErrorException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: | string | HttpExceptionOptions = 'Internal Server Error', diff --git a/packages/common/exceptions/method-not-allowed.exception.ts b/packages/common/exceptions/method-not-allowed.exception.ts index 9cf0d838140..19cf543093c 100644 --- a/packages/common/exceptions/method-not-allowed.exception.ts +++ b/packages/common/exceptions/method-not-allowed.exception.ts @@ -34,7 +34,7 @@ export class MethodNotAllowedException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: string | HttpExceptionOptions = 'Method Not Allowed', ) { const { description, httpExceptionOptions } = diff --git a/packages/common/exceptions/misdirected.exception.ts b/packages/common/exceptions/misdirected.exception.ts index 547ab443160..36413b2fb04 100644 --- a/packages/common/exceptions/misdirected.exception.ts +++ b/packages/common/exceptions/misdirected.exception.ts @@ -34,7 +34,7 @@ export class MisdirectedException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: string | HttpExceptionOptions = 'Misdirected', ) { const { description, httpExceptionOptions } = diff --git a/packages/common/exceptions/not-acceptable.exception.ts b/packages/common/exceptions/not-acceptable.exception.ts index 548b2dd7916..64b97abdd3a 100644 --- a/packages/common/exceptions/not-acceptable.exception.ts +++ b/packages/common/exceptions/not-acceptable.exception.ts @@ -34,7 +34,7 @@ export class NotAcceptableException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: string | HttpExceptionOptions = 'Not Acceptable', ) { const { description, httpExceptionOptions } = diff --git a/packages/common/exceptions/not-found.exception.ts b/packages/common/exceptions/not-found.exception.ts index b44a744e0ec..837ca780b94 100644 --- a/packages/common/exceptions/not-found.exception.ts +++ b/packages/common/exceptions/not-found.exception.ts @@ -34,7 +34,7 @@ export class NotFoundException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: string | HttpExceptionOptions = 'Not Found', ) { const { description, httpExceptionOptions } = diff --git a/packages/common/exceptions/not-implemented.exception.ts b/packages/common/exceptions/not-implemented.exception.ts index 6f691264955..d673f7f5a8a 100644 --- a/packages/common/exceptions/not-implemented.exception.ts +++ b/packages/common/exceptions/not-implemented.exception.ts @@ -34,7 +34,7 @@ export class NotImplementedException extends HttpException { * @param error a short description of the HTTP error. */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: string | HttpExceptionOptions = 'Not Implemented', ) { const { description, httpExceptionOptions } = diff --git a/packages/common/exceptions/payload-too-large.exception.ts b/packages/common/exceptions/payload-too-large.exception.ts index 73de7d1f2ac..3a9868fa786 100644 --- a/packages/common/exceptions/payload-too-large.exception.ts +++ b/packages/common/exceptions/payload-too-large.exception.ts @@ -34,7 +34,7 @@ export class PayloadTooLargeException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: string | HttpExceptionOptions = 'Payload Too Large', ) { const { description, httpExceptionOptions } = diff --git a/packages/common/exceptions/precondition-failed.exception.ts b/packages/common/exceptions/precondition-failed.exception.ts index d03da41d057..20963d964e7 100644 --- a/packages/common/exceptions/precondition-failed.exception.ts +++ b/packages/common/exceptions/precondition-failed.exception.ts @@ -34,7 +34,7 @@ export class PreconditionFailedException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: string | HttpExceptionOptions = 'Precondition Failed', ) { const { description, httpExceptionOptions } = diff --git a/packages/common/exceptions/request-timeout.exception.ts b/packages/common/exceptions/request-timeout.exception.ts index d91c3cfd1bb..0cc875ef8ef 100644 --- a/packages/common/exceptions/request-timeout.exception.ts +++ b/packages/common/exceptions/request-timeout.exception.ts @@ -34,7 +34,7 @@ export class RequestTimeoutException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: string | HttpExceptionOptions = 'Request Timeout', ) { const { description, httpExceptionOptions } = diff --git a/packages/common/exceptions/service-unavailable.exception.ts b/packages/common/exceptions/service-unavailable.exception.ts index 2d1c6bd0367..9cd734ba6c2 100644 --- a/packages/common/exceptions/service-unavailable.exception.ts +++ b/packages/common/exceptions/service-unavailable.exception.ts @@ -34,7 +34,7 @@ export class ServiceUnavailableException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: string | HttpExceptionOptions = 'Service Unavailable', ) { const { description, httpExceptionOptions } = diff --git a/packages/common/exceptions/unauthorized.exception.ts b/packages/common/exceptions/unauthorized.exception.ts index b85fa847e33..8d7d65578dd 100644 --- a/packages/common/exceptions/unauthorized.exception.ts +++ b/packages/common/exceptions/unauthorized.exception.ts @@ -34,7 +34,7 @@ export class UnauthorizedException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: string | HttpExceptionOptions = 'Unauthorized', ) { const { description, httpExceptionOptions } = diff --git a/packages/common/exceptions/unprocessable-entity.exception.ts b/packages/common/exceptions/unprocessable-entity.exception.ts index a4e012cacf0..077a2fa0dfb 100644 --- a/packages/common/exceptions/unprocessable-entity.exception.ts +++ b/packages/common/exceptions/unprocessable-entity.exception.ts @@ -34,7 +34,7 @@ export class UnprocessableEntityException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: | string | HttpExceptionOptions = 'Unprocessable Entity', diff --git a/packages/common/exceptions/unsupported-media-type.exception.ts b/packages/common/exceptions/unsupported-media-type.exception.ts index fb8a0e1df44..32957e5f6c1 100644 --- a/packages/common/exceptions/unsupported-media-type.exception.ts +++ b/packages/common/exceptions/unsupported-media-type.exception.ts @@ -34,7 +34,7 @@ export class UnsupportedMediaTypeException extends HttpException { * @param descriptionOrOptions either a short description of the HTTP error or an options object used to provide an underlying error cause */ constructor( - objectOrError?: string | object | any, + objectOrError?: any, descriptionOrOptions: | string | HttpExceptionOptions = 'Unsupported Media Type', diff --git a/packages/common/interfaces/middleware/nest-middleware.interface.ts b/packages/common/interfaces/middleware/nest-middleware.interface.ts index 88c27bc5c26..748b03a855a 100644 --- a/packages/common/interfaces/middleware/nest-middleware.interface.ts +++ b/packages/common/interfaces/middleware/nest-middleware.interface.ts @@ -4,5 +4,5 @@ * @publicApi */ export interface NestMiddleware { - use(req: TRequest, res: TResponse, next: (error?: Error | any) => void): any; + use(req: TRequest, res: TResponse, next: (error?: any) => void): any; } diff --git a/packages/common/module-utils/configurable-module.builder.ts b/packages/common/module-utils/configurable-module.builder.ts index 2c2c68a49f1..88bdec7446c 100644 --- a/packages/common/module-utils/configurable-module.builder.ts +++ b/packages/common/module-utils/configurable-module.builder.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-empty-object-type */ import { DynamicModule, Provider } from '../interfaces'; import { Logger } from '../services/logger.service'; import { randomStringGenerator } from '../utils/random-string-generator.util'; diff --git a/packages/common/module-utils/interfaces/configurable-module-cls.interface.ts b/packages/common/module-utils/interfaces/configurable-module-cls.interface.ts index d1e4bc4a98a..e88dba8d292 100644 --- a/packages/common/module-utils/interfaces/configurable-module-cls.interface.ts +++ b/packages/common/module-utils/interfaces/configurable-module-cls.interface.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-empty-object-type */ import { DynamicModule } from '../../interfaces'; import { DEFAULT_FACTORY_CLASS_METHOD_KEY, diff --git a/packages/common/module-utils/interfaces/configurable-module-host.interface.ts b/packages/common/module-utils/interfaces/configurable-module-host.interface.ts index c20654d73f3..fb23d2d2a93 100644 --- a/packages/common/module-utils/interfaces/configurable-module-host.interface.ts +++ b/packages/common/module-utils/interfaces/configurable-module-host.interface.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-empty-object-type */ import { ConfigurableModuleAsyncOptions } from './configurable-module-async-options.interface'; import { ConfigurableModuleCls } from './configurable-module-cls.interface'; diff --git a/packages/common/pipes/parse-array.pipe.ts b/packages/common/pipes/parse-array.pipe.ts index 91f3bb1cb87..ed396928c4f 100644 --- a/packages/common/pipes/parse-array.pipe.ts +++ b/packages/common/pipes/parse-array.pipe.ts @@ -108,7 +108,9 @@ export class ParseArrayPipe implements PipeTransform { if (this.options.items !== String) { try { item = JSON.parse(item); - } catch {} + } catch { + // Do nothing + } } if (isExpectedTypePrimitive) { return this.validatePrimitive(item, index); @@ -125,7 +127,7 @@ export class ParseArrayPipe implements PipeTransform { try { targetArray[i] = await toClassInstance(targetArray[i]); } catch (err) { - let message: string[] | unknown; + let message: string[] | string; if (err.getResponse) { const response = err.getResponse(); if (Array.isArray(response.message)) { diff --git a/packages/common/pipes/validation.pipe.ts b/packages/common/pipes/validation.pipe.ts index 951f73f43e7..e33d98b6ea4 100644 --- a/packages/common/pipes/validation.pipe.ts +++ b/packages/common/pipes/validation.pipe.ts @@ -214,7 +214,7 @@ export class ValidationPipe implements PipeTransform { return value; } - protected toEmptyIfNil(value: T): R | {} { + protected toEmptyIfNil(value: T): R | object { return isNil(value) ? {} : value; } diff --git a/packages/common/utils/merge-with-values.util.ts b/packages/common/utils/merge-with-values.util.ts index c9c59e27ffe..7b0d0aab19a 100644 --- a/packages/common/utils/merge-with-values.util.ts +++ b/packages/common/utils/merge-with-values.util.ts @@ -1,5 +1,6 @@ export type Constructor = new (...args: any[]) => T; +/* eslint-disable @typescript-eslint/no-empty-object-type */ export const MergeWithValues = >(data: { [param: string]: any; }) => { diff --git a/packages/core/errors/messages.ts b/packages/core/errors/messages.ts index 0791f2967ea..e163d67458e 100644 --- a/packages/core/errors/messages.ts +++ b/packages/core/errors/messages.ts @@ -1,4 +1,4 @@ -import type { ForwardReference, Type, DynamicModule } from '@nestjs/common'; +import type { DynamicModule, ForwardReference, Type } from '@nestjs/common'; import { isNil, isSymbol } from '@nestjs/common/utils/shared.utils'; import { InjectorDependency, @@ -139,8 +139,7 @@ export const USING_INVALID_CLASS_AS_A_MODULE_MESSAGE = ( metatypeUsedAsAModule: Type | ForwardReference, scope: any[], ) => { - const metatypeNameQuote = - `"${getInstanceName(metatypeUsedAsAModule)}"` || 'that class'; + const metatypeNameQuote = `"${getInstanceName(metatypeUsedAsAModule)}"`; return `Classes annotated with @Injectable(), @Catch(), and @Controller() decorators must not appear in the "imports" array of a module. Please remove ${metatypeNameQuote} (including forwarded occurrences, if any) from all of the "imports" arrays. diff --git a/packages/core/exceptions/exceptions-handler.ts b/packages/core/exceptions/exceptions-handler.ts index 14290bcd904..36d1b7f22da 100644 --- a/packages/core/exceptions/exceptions-handler.ts +++ b/packages/core/exceptions/exceptions-handler.ts @@ -1,15 +1,15 @@ -import { isEmpty } from '@nestjs/common/utils/shared.utils'; import { HttpException } from '@nestjs/common'; -import { ArgumentsHost } from '@nestjs/common/interfaces/features/arguments-host.interface'; import { ExceptionFilterMetadata } from '@nestjs/common/interfaces/exceptions/exception-filter-metadata.interface'; +import { ArgumentsHost } from '@nestjs/common/interfaces/features/arguments-host.interface'; import { selectExceptionFilterMetadata } from '@nestjs/common/utils/select-exception-filter-metadata.util'; -import { BaseExceptionFilter } from './base-exception-filter'; +import { isEmpty } from '@nestjs/common/utils/shared.utils'; import { InvalidExceptionFilterException } from '../errors/exceptions/invalid-exception-filter.exception'; +import { BaseExceptionFilter } from './base-exception-filter'; export class ExceptionsHandler extends BaseExceptionFilter { private filters: ExceptionFilterMetadata[] = []; - public next(exception: Error | HttpException | any, ctx: ArgumentsHost) { + public next(exception: Error | HttpException, ctx: ArgumentsHost) { if (this.invokeCustomFilters(exception, ctx)) { return; } diff --git a/packages/core/exceptions/external-exception-filter.ts b/packages/core/exceptions/external-exception-filter.ts index 076b6a970a9..043fb61ef5d 100644 --- a/packages/core/exceptions/external-exception-filter.ts +++ b/packages/core/exceptions/external-exception-filter.ts @@ -7,6 +7,7 @@ export class ExternalExceptionFilter { if (exception instanceof Error && !(exception instanceof HttpException)) { ExternalExceptionFilter.logger.error(exception); } + /* eslint-disable-next-line @typescript-eslint/only-throw-error */ throw exception; } } diff --git a/packages/core/exceptions/external-exceptions-handler.ts b/packages/core/exceptions/external-exceptions-handler.ts index 9e852ba3575..80cb9dd48a5 100644 --- a/packages/core/exceptions/external-exceptions-handler.ts +++ b/packages/core/exceptions/external-exceptions-handler.ts @@ -1,14 +1,14 @@ -import { isEmpty } from '@nestjs/common/utils/shared.utils'; -import { ArgumentsHost } from '@nestjs/common/interfaces/features/arguments-host.interface'; import { ExceptionFilterMetadata } from '@nestjs/common/interfaces/exceptions'; +import { ArgumentsHost } from '@nestjs/common/interfaces/features/arguments-host.interface'; import { selectExceptionFilterMetadata } from '@nestjs/common/utils/select-exception-filter-metadata.util'; -import { ExternalExceptionFilter } from './external-exception-filter'; +import { isEmpty } from '@nestjs/common/utils/shared.utils'; import { InvalidExceptionFilterException } from '../errors/exceptions/invalid-exception-filter.exception'; +import { ExternalExceptionFilter } from './external-exception-filter'; export class ExternalExceptionsHandler extends ExternalExceptionFilter { private filters: ExceptionFilterMetadata[] = []; - public next(exception: Error | any, host: ArgumentsHost): Promise { + public next(exception: Error, host: ArgumentsHost): Promise { const result = this.invokeCustomFilters(exception, host); if (result) { return result; diff --git a/packages/core/injector/container.ts b/packages/core/injector/container.ts index f2237ea6a0f..41cba231846 100644 --- a/packages/core/injector/container.ts +++ b/packages/core/injector/container.ts @@ -300,7 +300,7 @@ export class NestContainer { this.modules.clear(); } - public replace(toReplace: any, options: any & { scope: any[] | null }) { + public replace(toReplace: any, options: { scope: any[] | null }) { this.modules.forEach(moduleRef => moduleRef.replace(toReplace, options)); } diff --git a/packages/core/injector/injector.ts b/packages/core/injector/injector.ts index a731fb444f7..27d74d5c175 100644 --- a/packages/core/injector/injector.ts +++ b/packages/core/injector/injector.ts @@ -11,7 +11,12 @@ import { PROPERTY_DEPS_METADATA, SELF_DECLARED_DEPS_METADATA, } from '@nestjs/common/constants'; -import { Controller, Injectable, Type } from '@nestjs/common/interfaces'; +import { + Controller, + ForwardReference, + Injectable, + Type, +} from '@nestjs/common/interfaces'; import { clc } from '@nestjs/common/utils/cli-colors.util'; import { isFunction, @@ -297,7 +302,7 @@ export class Injector { } const paramWrapper = await this.resolveSingleParam( wrapper, - param, + param as Type | string | symbol, { index, dependencies }, moduleRef, contextId, @@ -385,7 +390,7 @@ export class Injector { public async resolveSingleParam( wrapper: InstanceWrapper, - param: Type | string | symbol | any, + param: Type | string | symbol, dependencyContext: InjectorDependencyContext, moduleRef: Module, contextId = STATIC_CONTEXT, @@ -416,13 +421,13 @@ export class Injector { public resolveParamToken( wrapper: InstanceWrapper, - param: Type | string | symbol | any, + param: Type | string | symbol | ForwardReference, ) { - if (!param.forwardRef) { - return param; + if (typeof param === 'object' && 'forwardRef' in param) { + wrapper.forwardRef = true; + return param.forwardRef(); } - wrapper.forwardRef = true; - return param.forwardRef(); + return param; } public async resolveComponentInstance( @@ -488,7 +493,7 @@ export class Injector { * instantiated beforehand. */ instanceHost.donePromise && - instanceHost.donePromise.then(() => + void instanceHost.donePromise.then(() => this.loadProvider(instanceWrapper, moduleRef, contextId, inquirer), ); } @@ -664,7 +669,7 @@ export class Injector { } const paramWrapper = await this.resolveSingleParam( wrapper, - item.name, + item.name as string, dependencyContext, moduleRef, contextId, diff --git a/packages/core/injector/module-ref.ts b/packages/core/injector/module-ref.ts index 2a0e4f465e8..85de4b47891 100644 --- a/packages/core/injector/module-ref.ts +++ b/packages/core/injector/module-ref.ts @@ -164,6 +164,8 @@ export abstract class ModuleRef extends AbstractInstanceResolver { durable: isDurable(type), host: moduleRef, }); + + /* eslint-disable-next-line no-async-promise-executor */ return new Promise(async (resolve, reject) => { try { const callback = async (instances: any[]) => { diff --git a/packages/core/middleware/builder.ts b/packages/core/middleware/builder.ts index 773d97f328d..c647bf34f32 100644 --- a/packages/core/middleware/builder.ts +++ b/packages/core/middleware/builder.ts @@ -25,7 +25,7 @@ export class MiddlewareBuilder implements MiddlewareConsumer { ) {} public apply( - ...middleware: Array | Function | any> + ...middleware: Array | Function> ): MiddlewareConfigProxy { return new MiddlewareBuilder.ConfigProxy( this, @@ -47,7 +47,7 @@ export class MiddlewareBuilder implements MiddlewareConsumer { constructor( private readonly builder: MiddlewareBuilder, - private readonly middleware: Array | Function | any>, + private readonly middleware: Array | Function>, private routeInfoPathExtractor: RouteInfoPathExtractor, ) {} @@ -108,7 +108,7 @@ export class MiddlewareBuilder implements MiddlewareConsumer { } private removeOverlappedRoutes(routes: RouteInfo[]) { - const regexMatchParams = /(:[^\/]*)/g; + const regexMatchParams = /(:[^/]*)/g; const wildcard = '([^/]*)'; const routesWithRegex = routes .filter(route => route.path.includes(':')) diff --git a/packages/core/middleware/middleware-module.ts b/packages/core/middleware/middleware-module.ts index b956a23850f..49468742ad3 100644 --- a/packages/core/middleware/middleware-module.ts +++ b/packages/core/middleware/middleware-module.ts @@ -240,6 +240,7 @@ export class MiddlewareModule< collection: Map, ) { const { instance, metatype } = wrapper; + if (isUndefined(instance?.use)) { throw new InvalidMiddlewareException(metatype.name); } diff --git a/packages/core/middleware/route-info-path-extractor.ts b/packages/core/middleware/route-info-path-extractor.ts index 263b12679db..08627017ca6 100644 --- a/packages/core/middleware/route-info-path-extractor.ts +++ b/packages/core/middleware/route-info-path-extractor.ts @@ -48,9 +48,11 @@ export class RouteInfoPathExtractor { return Array.isArray(this.excludedGlobalPrefixRoutes) ? [ ...entries, - ...this.excludedGlobalPrefixRoutes.map( - route => versionPaths + addLeadingSlash(route.path), - ), + ...this.excludedGlobalPrefixRoutes + .map(route => + versionPaths.map(v => v + addLeadingSlash(route.path)), + ) + .flat(), ] : entries; } diff --git a/packages/core/router/route-params-factory.ts b/packages/core/router/route-params-factory.ts index 688a26c7366..4fc8baf93a8 100644 --- a/packages/core/router/route-params-factory.ts +++ b/packages/core/router/route-params-factory.ts @@ -8,7 +8,7 @@ export class RouteParamsFactory implements IRouteParamsFactory { TResult = any, >( key: RouteParamtypes | string, - data: string | object | any, + data: string, { req, res, next }: { req: TRequest; res: TResponse; next: Function }, ): TResult { switch (key) { @@ -25,6 +25,7 @@ export class RouteParamsFactory implements IRouteParamsFactory { case RouteParamtypes.PARAM: return data ? req.params[data] : req.params; case RouteParamtypes.HOST: + /* eslint-disable-next-line no-case-declarations */ const hosts = req.hosts || {}; return data ? hosts[data] : hosts; case RouteParamtypes.QUERY: diff --git a/packages/core/router/router-proxy.ts b/packages/core/router/router-proxy.ts index 30087b0c154..b2f4db3313f 100644 --- a/packages/core/router/router-proxy.ts +++ b/packages/core/router/router-proxy.ts @@ -5,7 +5,7 @@ export type RouterProxyCallback = ( req?: TRequest, res?: TResponse, next?: () => void, -) => void; +) => void | Promise; export class RouterProxy { public createProxy( @@ -33,7 +33,7 @@ export class RouterProxy { req: TRequest, res: TResponse, next: () => void, - ) => void, + ) => void | Promise, exceptionsHandler: ExceptionsHandler, ) { return async ( diff --git a/packages/index.ts b/packages/index.ts deleted file mode 100644 index ec4fe0d28dc..00000000000 --- a/packages/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* - * Nest - * Copyright(c) 2017 - 2023 Kamil Mysliwiec - * https://nestjs.com - * MIT Licensed - */ diff --git a/packages/microservices/client/client-grpc.ts b/packages/microservices/client/client-grpc.ts index 8d502f21af4..22ea0d55961 100644 --- a/packages/microservices/client/client-grpc.ts +++ b/packages/microservices/client/client-grpc.ts @@ -65,7 +65,7 @@ export class ClientGrpcProxy this.grpcClients = this.createClients(); } - public getService(name: string): T { + public getService(name: string): T { const grpcClient = this.createClientByServiceName(name); const clientRef = this.getClient(name); if (!clientRef) { @@ -372,7 +372,9 @@ export class ClientGrpcProxy } protected getClient(name: string): any { - return this.grpcClients.find(client => client.hasOwnProperty(name)); + return this.grpcClients.find(client => + Object.hasOwnProperty.call(client, name), + ); } protected publish(packet: any, callback: (packet: any) => any): any { diff --git a/packages/microservices/client/client-kafka.ts b/packages/microservices/client/client-kafka.ts index 7fe912f13f9..42dac0d8c46 100644 --- a/packages/microservices/client/client-kafka.ts +++ b/packages/microservices/client/client-kafka.ts @@ -137,6 +137,7 @@ export class ClientKafka if (this.initialized) { return this.initialized.then(() => this._producer); } + /* eslint-disable-next-line no-async-promise-executor */ this.initialized = new Promise(async (resolve, reject) => { try { this.client = this.createClient(); diff --git a/packages/microservices/client/client-nats.ts b/packages/microservices/client/client-nats.ts index 2a9696e8a4e..c3b75cf2888 100644 --- a/packages/microservices/client/client-nats.ts +++ b/packages/microservices/client/client-nats.ts @@ -62,7 +62,7 @@ export class ClientNats extends ClientProxy { }); this._status$.next(NatsStatus.CONNECTED); - this.handleStatusUpdates(this.natsClient); + void this.handleStatusUpdates(this.natsClient); return this.natsClient; } @@ -167,7 +167,7 @@ export class ClientNats extends ClientProxy { packet: ReadPacket & PacketId, callback: (packet: WritePacket) => any, ) { - return async (error: unknown | undefined, natsMsg: NatsMsg) => { + return async (error: string | Error | undefined, natsMsg: NatsMsg) => { if (error) { return callback({ err: error, diff --git a/packages/microservices/client/client-rmq.ts b/packages/microservices/client/client-rmq.ts index 5ee461dfd70..e313072ecbf 100644 --- a/packages/microservices/client/client-rmq.ts +++ b/packages/microservices/client/client-rmq.ts @@ -395,7 +395,7 @@ export class ClientRMQ extends ClientProxy { ...options, headers: this.mergeHeaders(options?.headers), }, - (err: unknown) => (err ? reject(err) : resolve()), + (err: unknown) => (err ? reject(err as Error) : resolve()), ), ); } diff --git a/packages/microservices/exceptions/rpc-exceptions-handler.ts b/packages/microservices/exceptions/rpc-exceptions-handler.ts index 97ee23270ab..f551bd953fa 100644 --- a/packages/microservices/exceptions/rpc-exceptions-handler.ts +++ b/packages/microservices/exceptions/rpc-exceptions-handler.ts @@ -1,11 +1,11 @@ -import { isEmpty } from '@nestjs/common/utils/shared.utils'; -import { Observable } from 'rxjs'; -import { ArgumentsHost } from '@nestjs/common/interfaces/features/arguments-host.interface'; import { RpcExceptionFilterMetadata } from '@nestjs/common/interfaces/exceptions'; +import { ArgumentsHost } from '@nestjs/common/interfaces/features/arguments-host.interface'; import { selectExceptionFilterMetadata } from '@nestjs/common/utils/select-exception-filter-metadata.util'; +import { isEmpty } from '@nestjs/common/utils/shared.utils'; import { InvalidExceptionFilterException } from '@nestjs/core/errors/exceptions/invalid-exception-filter.exception'; -import { RpcException } from './rpc-exception'; +import { Observable } from 'rxjs'; import { BaseRpcExceptionFilter } from './base-rpc-exception-filter'; +import { RpcException } from './rpc-exception'; /** * @publicApi @@ -14,7 +14,7 @@ export class RpcExceptionsHandler extends BaseRpcExceptionFilter { private filters: RpcExceptionFilterMetadata[] = []; public handle( - exception: Error | RpcException | any, + exception: Error | RpcException, host: ArgumentsHost, ): Observable { const filterResult$ = this.invokeCustomFilters(exception, host); diff --git a/packages/microservices/helpers/kafka-parser.ts b/packages/microservices/helpers/kafka-parser.ts index 61056e7c117..1d40e94d1c1 100644 --- a/packages/microservices/helpers/kafka-parser.ts +++ b/packages/microservices/helpers/kafka-parser.ts @@ -50,11 +50,13 @@ export class KafkaParser { let result = value.toString(); const startChar = result.charAt(0); - // only try to parse objects and arrays + // Only try to parse objects and arrays if (startChar === '{' || startChar === '[') { try { result = JSON.parse(value.toString()); - } catch (e) {} + } catch (e) { + // Do nothing + } } return result; } diff --git a/packages/microservices/interfaces/client-grpc.interface.ts b/packages/microservices/interfaces/client-grpc.interface.ts index 2f8bf6509e8..2eefbac2ea2 100644 --- a/packages/microservices/interfaces/client-grpc.interface.ts +++ b/packages/microservices/interfaces/client-grpc.interface.ts @@ -7,7 +7,7 @@ export interface ClientGrpc { * @param name Service name * @returns gRPC service */ - getService(name: string): T; + getService(name: string): T; /** * Returns an instance of the given gRPC client. * @param name Service name diff --git a/packages/microservices/interfaces/microservice-configuration.interface.ts b/packages/microservices/interfaces/microservice-configuration.interface.ts index 64cc82049d7..0c371076bae 100644 --- a/packages/microservices/interfaces/microservice-configuration.interface.ts +++ b/packages/microservices/interfaces/microservice-configuration.interface.ts @@ -47,7 +47,7 @@ export type AsyncOptions = { */ export interface CustomStrategy { strategy: CustomTransportStrategy; - options?: {}; + options?: Record; } /** diff --git a/packages/microservices/listeners-controller.ts b/packages/microservices/listeners-controller.ts index aa277d4ea94..57797396bfc 100644 --- a/packages/microservices/listeners-controller.ts +++ b/packages/microservices/listeners-controller.ts @@ -1,4 +1,3 @@ -import { Injectable } from '@nestjs/common/interfaces'; import { Controller } from '@nestjs/common/interfaces/controllers/controller.interface'; import { isUndefined } from '@nestjs/common/utils/shared.utils'; import { ContextIdFactory } from '@nestjs/core/helpers/context-id-factory'; @@ -60,14 +59,14 @@ export class ListenersController { ) {} public registerPatternHandlers( - instanceWrapper: InstanceWrapper, + instanceWrapper: InstanceWrapper, serverInstance: Server, moduleKey: string, ) { const { instance } = instanceWrapper; const isStatic = instanceWrapper.isDependencyTreeStatic(); - const patternHandlers = this.metadataExplorer.explore(instance as object); + const patternHandlers = this.metadataExplorer.explore(instance); const moduleRef = this.container.getModuleByKey(moduleKey); const defaultCallMetadata = serverInstance instanceof ServerGrpc @@ -104,7 +103,7 @@ export class ListenersController { if (isStatic) { const proxy = this.contextCreator.create( - instance as object, + instance, targetCallback, moduleKey, methodKey, @@ -202,24 +201,24 @@ export class ListenersController { return currentReturnValue; } - public assignClientsToProperties(instance: Controller | Injectable) { + public assignClientsToProperties(instance: Controller) { for (const { property, metadata, - } of this.metadataExplorer.scanForClientHooks(instance as object)) { + } of this.metadataExplorer.scanForClientHooks(instance)) { const client = this.clientFactory.create(metadata); this.clientsContainer.addClient(client); - this.assignClientToInstance(instance as object, property, client); + this.assignClientToInstance(instance, property, client); } } public assignClientToInstance( - instance: Controller | Injectable, + instance: Controller, property: string, client: T, ) { - Reflect.set(instance as object, property, client); + Reflect.set(instance, property, client); } public createRequestScopedHandler( diff --git a/packages/microservices/nest-microservice.ts b/packages/microservices/nest-microservice.ts index 4bc5322f707..8a7bf6fb936 100644 --- a/packages/microservices/nest-microservice.ts +++ b/packages/microservices/nest-microservice.ts @@ -224,7 +224,7 @@ export class NestMicroservice this.flushLogs(); } if (err) { - return reject(err); + return reject(err as Error); } this.logger.log(MESSAGES.MICROSERVICE_READY); resolve(info); diff --git a/packages/microservices/serializers/mqtt-record.serializer.ts b/packages/microservices/serializers/mqtt-record.serializer.ts index be482b68edf..026ddca268c 100644 --- a/packages/microservices/serializers/mqtt-record.serializer.ts +++ b/packages/microservices/serializers/mqtt-record.serializer.ts @@ -5,13 +5,13 @@ import { MqttRecord } from '../record-builders'; export class MqttRecordSerializer implements Serializer> { - serialize(packet: ReadPacket | any): ReadPacket & Partial { + serialize(packet: ReadPacket): ReadPacket & Partial { if ( packet?.data && isObject(packet.data) && packet.data instanceof MqttRecord ) { - const record = packet.data as MqttRecord; + const record = packet.data; return { ...packet, data: record.data, diff --git a/packages/microservices/serializers/nats-record.serializer.ts b/packages/microservices/serializers/nats-record.serializer.ts index c3e1caf115f..3c2b76013c5 100644 --- a/packages/microservices/serializers/nats-record.serializer.ts +++ b/packages/microservices/serializers/nats-record.serializer.ts @@ -19,10 +19,10 @@ export class NatsRecordSerializer this.jsonCodec = natsPackage.JSONCodec(); } - serialize(packet: ReadPacket | any): NatsRecord { + serialize(packet: ReadPacket): NatsRecord { const natsMessage = packet?.data && isObject(packet.data) && packet.data instanceof NatsRecord - ? (packet.data as NatsRecord) + ? packet.data : new NatsRecordBuilder(packet?.data).build(); return { diff --git a/packages/microservices/serializers/rmq-record.serializer.ts b/packages/microservices/serializers/rmq-record.serializer.ts index 8039c2f1c54..767cdc7a27b 100644 --- a/packages/microservices/serializers/rmq-record.serializer.ts +++ b/packages/microservices/serializers/rmq-record.serializer.ts @@ -6,13 +6,13 @@ import { RmqRecord } from '../record-builders'; export class RmqRecordSerializer implements Serializer> { - serialize(packet: ReadPacket | any): ReadPacket & Partial { + serialize(packet: ReadPacket): ReadPacket & Partial { if ( packet?.data && isObject(packet.data) && packet.data instanceof RmqRecord ) { - const record = packet.data as RmqRecord; + const record = packet.data; return { ...packet, data: record.data, diff --git a/packages/microservices/server/server-grpc.ts b/packages/microservices/server/server-grpc.ts index b46943ef4a7..aca484d5f6a 100644 --- a/packages/microservices/server/server-grpc.ts +++ b/packages/microservices/server/server-grpc.ts @@ -176,7 +176,7 @@ export class ServerGrpc extends Server { if (!methodHandler) { continue; } - service[methodName] = await this.createServiceMethod( + service[methodName] = this.createServiceMethod( methodHandler, grpcService.prototype[methodName], streamingType, diff --git a/packages/microservices/server/server-nats.ts b/packages/microservices/server/server-nats.ts index 2cc3a97bf2f..6a7c26f66c5 100644 --- a/packages/microservices/server/server-nats.ts +++ b/packages/microservices/server/server-nats.ts @@ -62,7 +62,7 @@ export class ServerNats< this.natsClient = await this.createNatsClient(); this._status$.next(NatsStatus.CONNECTED as S); - this.handleStatusUpdates(this.natsClient); + void this.handleStatusUpdates(this.natsClient); this.start(callback); } catch (err) { callback(err); diff --git a/packages/microservices/server/server-redis.ts b/packages/microservices/server/server-redis.ts index a9ed45c753b..f3f91d5c71e 100644 --- a/packages/microservices/server/server-redis.ts +++ b/packages/microservices/server/server-redis.ts @@ -122,15 +122,15 @@ export class ServerRedis extends Server { public getMessageHandler(pub: Redis) { return this.options?.wildcards - ? (channel: string, pattern: string, buffer: string | any) => + ? (channel: string, pattern: string, buffer: string) => this.handleMessage(channel, buffer, pub, pattern) - : (channel: string, buffer: string | any) => + : (channel: string, buffer: string) => this.handleMessage(channel, buffer, pub, channel); } public async handleMessage( channel: string, - buffer: string | any, + buffer: string, pub: Redis, pattern: string, ) { diff --git a/packages/microservices/server/server.ts b/packages/microservices/server/server.ts index 4e86e1ee51d..7c3505f67d7 100644 --- a/packages/microservices/server/server.ts +++ b/packages/microservices/server/server.ts @@ -126,7 +126,7 @@ export abstract class Server< public send( stream$: Observable, - respond: (data: WritePacket) => unknown | Promise, + respond: (data: WritePacket) => Promise, ): Subscription { let dataBuffer: WritePacket[] = null; const scheduleOnNextTick = (data: WritePacket) => { diff --git a/packages/platform-fastify/adapters/fastify-adapter.ts b/packages/platform-fastify/adapters/fastify-adapter.ts index 10ced12905e..3a2ba937141 100644 --- a/packages/platform-fastify/adapters/fastify-adapter.ts +++ b/packages/platform-fastify/adapters/fastify-adapter.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-floating-promises */ import { HttpStatus, Logger, @@ -27,6 +28,7 @@ import { FastifyReply, FastifyRequest, FastifyServerOptions, + HTTPMethods, RawReplyDefaultExpression, RawRequestDefaultExpression, RawServerBase, @@ -34,14 +36,13 @@ import { RequestGenericInterface, RouteOptions, RouteShorthandOptions, - HTTPMethods, fastify, } from 'fastify'; import * as Reply from 'fastify/lib/reply'; import { kRouteContext } from 'fastify/lib/symbols'; +import * as http from 'http'; import * as http2 from 'http2'; import * as https from 'https'; -import * as http from 'http'; import { InjectOptions, Chain as LightMyRequestChain, diff --git a/packages/platform-ws/adapters/ws-adapter.ts b/packages/platform-ws/adapters/ws-adapter.ts index f2fbcd4d309..46f3494ed46 100644 --- a/packages/platform-ws/adapters/ws-adapter.ts +++ b/packages/platform-ws/adapters/ws-adapter.ts @@ -1,6 +1,6 @@ import { INestApplicationContext, Logger } from '@nestjs/common'; import { loadPackage } from '@nestjs/common/utils/load-package.util'; -import { normalizePath, isNil } from '@nestjs/common/utils/shared.utils'; +import { isNil, normalizePath } from '@nestjs/common/utils/shared.utils'; import { AbstractWsAdapter } from '@nestjs/websockets'; import { CLOSE_EVENT, @@ -46,12 +46,12 @@ export class WsAdapter extends AbstractWsAdapter { WsServerRegistryKey, WsServerRegistryEntry >(); - protected messageParser: WsMessageParser = data => { + protected messageParser: WsMessageParser = (data: WsData) => { return JSON.parse(data.toString()); }; constructor( - appOrHttpServer?: INestApplicationContext | any, + appOrHttpServer?: INestApplicationContext | object, options?: WsAdapterOptions, ) { super(appOrHttpServer); @@ -179,7 +179,7 @@ export class WsAdapter extends AbstractWsAdapter { public async close(server: any) { const closeEventSignal = new Promise((resolve, reject) => - server.close(err => (err ? reject(err) : resolve(undefined))), + server.close((err: Error) => (err ? reject(err) : resolve(undefined))), ); for (const ws of server.clients) { ws.terminate(); diff --git a/packages/websockets/adapters/ws-adapter.ts b/packages/websockets/adapters/ws-adapter.ts index b5499b7aee9..bbdea435d47 100644 --- a/packages/websockets/adapters/ws-adapter.ts +++ b/packages/websockets/adapters/ws-adapter.ts @@ -18,7 +18,7 @@ export abstract class AbstractWsAdapter< { protected readonly httpServer: any; - constructor(appOrHttpServer?: INestApplicationContext | any) { + constructor(appOrHttpServer?: INestApplicationContext | object) { if (appOrHttpServer && appOrHttpServer instanceof NestApplication) { this.httpServer = appOrHttpServer.getUnderlyingHttpServer(); } else { diff --git a/packages/websockets/exceptions/ws-exceptions-handler.ts b/packages/websockets/exceptions/ws-exceptions-handler.ts index feed7d3979c..3efbbbfad58 100644 --- a/packages/websockets/exceptions/ws-exceptions-handler.ts +++ b/packages/websockets/exceptions/ws-exceptions-handler.ts @@ -1,7 +1,7 @@ -import { isEmpty } from '@nestjs/common/utils/shared.utils'; import { ArgumentsHost } from '@nestjs/common'; import { ExceptionFilterMetadata } from '@nestjs/common/interfaces/exceptions/exception-filter-metadata.interface'; import { selectExceptionFilterMetadata } from '@nestjs/common/utils/select-exception-filter-metadata.util'; +import { isEmpty } from '@nestjs/common/utils/shared.utils'; import { InvalidExceptionFilterException } from '@nestjs/core/errors/exceptions/invalid-exception-filter.exception'; import { WsException } from '../errors/ws-exception'; import { BaseWsExceptionFilter } from './base-ws-exception-filter'; @@ -12,7 +12,7 @@ import { BaseWsExceptionFilter } from './base-ws-exception-filter'; export class WsExceptionsHandler extends BaseWsExceptionFilter { private filters: ExceptionFilterMetadata[] = []; - public handle(exception: Error | WsException | any, host: ArgumentsHost) { + public handle(exception: Error | WsException, host: ArgumentsHost) { const client = host.switchToWs().getClient(); if (this.invokeCustomFilters(exception, host) || !client.emit) { return; diff --git a/packages/websockets/gateway-metadata-explorer.ts b/packages/websockets/gateway-metadata-explorer.ts index 65a0c40773d..f57fc9ee9f1 100644 --- a/packages/websockets/gateway-metadata-explorer.ts +++ b/packages/websockets/gateway-metadata-explorer.ts @@ -11,7 +11,7 @@ import { NestGateway } from './interfaces/nest-gateway.interface'; export interface MessageMappingProperties { message: any; methodName: string; - callback: (...args: any[]) => Observable | Promise | any; + callback: (...args: any[]) => Observable | Promise; } export class GatewayMetadataExplorer { diff --git a/packages/websockets/interfaces/gateway-metadata.interface.ts b/packages/websockets/interfaces/gateway-metadata.interface.ts index 616c70b3e42..7164c21a9ec 100644 --- a/packages/websockets/interfaces/gateway-metadata.interface.ts +++ b/packages/websockets/interfaces/gateway-metadata.interface.ts @@ -100,7 +100,7 @@ export interface GatewayMetadata { * might be used for sticky-session. Defaults to not sending any cookie. * @default false */ - cookie?: any | boolean; + cookie?: any; /** * The options that will be forwarded to the cors module */ diff --git a/packages/websockets/web-sockets-controller.ts b/packages/websockets/web-sockets-controller.ts index d4103e79fe0..ac47927e412 100644 --- a/packages/websockets/web-sockets-controller.ts +++ b/packages/websockets/web-sockets-controller.ts @@ -176,6 +176,7 @@ export class WebSocketsController { const adapter = this.config.getIoAdapter(); const handlers = subscribersMap.map(({ callback, message }) => ({ message, + callback: callback.bind(instance, client), })); adapter.bindMessageHandlers(client, handlers, data => diff --git a/tsconfig.json b/tsconfig.json index 89fc99832e3..1752d4258a3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,6 +4,7 @@ "noImplicitAny": false, "noUnusedLocals": false, "removeComments": true, + "forceConsistentCasingInFileNames": true, "noLib": false, "emitDecoratorMetadata": true, "experimentalDecorators": true, From 38367e8e88883c8c71e91b14edd8281be4441d49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 26 Nov 2024 11:57:05 +0100 Subject: [PATCH 086/122] style: address spec lint errors --- eslint.config.mjs | 1 + package-lock.json | 16 +++--- .../test/exceptions/http.exception.spec.ts | 1 + .../test/services/logger.service.spec.ts | 3 +- .../utils/is-log-level-enabled.util.spec.ts | 4 +- .../exceptions/external-exception-filter.ts | 2 +- .../core/helpers/external-context-creator.ts | 18 +++--- packages/core/middleware/builder.ts | 5 +- .../middleware/route-info-path-extractor.ts | 4 +- .../external-exceptions-handler.spec.ts | 12 ++-- .../helpers/external-context-creator.spec.ts | 4 +- .../core/test/helpers/external-proxy.spec.ts | 14 ++--- packages/core/test/injector/container.spec.ts | 16 +++--- packages/core/test/injector/injector.spec.ts | 8 +-- .../interceptors-consumer.spec.ts | 1 - .../core/test/middleware/resolver.spec.ts | 4 +- .../core/test/pipes/pipes-consumer.spec.ts | 3 + .../router/router-execution-context.spec.ts | 10 ++-- .../core/test/router/router-proxy.spec.ts | 55 +++++++++---------- .../router/router-response-controller.spec.ts | 4 +- packages/core/test/scanner.spec.ts | 14 ++--- packages/microservices/context/rpc-proxy.ts | 2 +- .../microservices/microservices-module.ts | 2 +- .../serializers/nats-record.serializer.ts | 2 +- packages/microservices/server/server-mqtt.ts | 2 +- packages/microservices/server/server.ts | 2 +- .../test/client/client-kafka.spec.ts | 3 +- .../test/client/client-mqtt.spec.ts | 16 +++--- .../test/client/client-nats.spec.ts | 24 ++++---- .../test/client/client-redis.spec.ts | 13 +++-- .../test/client/client-rmq.spec.ts | 6 +- .../test/context/rpc-context-creator.spec.ts | 8 +-- .../test/context/rpc-proxy.spec.ts | 2 +- .../mqtt-record.serializer.spec.ts | 3 + .../serializers/rmq-record.serializer.spec.ts | 5 ++ .../test/server/server-grpc.spec.ts | 14 ++--- .../test/server/server-kafka.spec.ts | 6 +- .../test/server/server-mqtt.spec.ts | 38 +++++++------ .../test/server/server-nats.spec.ts | 6 +- .../test/server/server-redis.spec.ts | 10 ++-- .../test/server/server-rmq.spec.ts | 28 ++++++---- .../test/server/server-tcp.spec.ts | 4 +- packages/platform-fastify/test/tsconfig.json | 3 + packages/websockets/context/ws-proxy.ts | 2 +- .../test/context/ws-context-creator.spec.ts | 10 ++-- .../websockets/test/context/ws-proxy.spec.ts | 7 +-- 46 files changed, 221 insertions(+), 196 deletions(-) create mode 100644 packages/platform-fastify/test/tsconfig.json diff --git a/eslint.config.mjs b/eslint.config.mjs index 244b8102c10..b651263d2c8 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -49,6 +49,7 @@ export default tseslint.config( '@typescript-eslint/prefer-promise-reject-errors': 'off', '@typescript-eslint/no-base-to-string': 'off', '@typescript-eslint/unbound-method': 'off', + '@typescript-eslint/only-throw-error': 'off', }, }, ); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 8563c11ebe7..3ca4246b44d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,8 +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", + "@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", @@ -53,7 +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/eslint__js": "8.42.3", "@types/express": "4.17.21", "@types/gulp": "4.0.17", "@types/http-errors": "2.0.4", @@ -78,14 +78,14 @@ "coveralls": "3.1.1", "delete-empty": "3.0.0", "engine.io-client": "6.6.1", - "eslint": "^9.15.0", + "eslint": "9.15.0", "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.29.1", - "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-prettier": "5.2.1", "eventsource": "2.0.2", "fancy-log": "2.0.0", "fastify": "4.28.1", - "globals": "^15.12.0", + "globals": "15.12.0", "graphql": "16.9.0", "graphql-tools": "9.0.1", "gulp": "4.0.2", @@ -113,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", @@ -125,7 +125,7 @@ "ts-node": "10.9.2", "typeorm": "0.3.20", "typescript": "5.6.2", - "typescript-eslint": "^8.15.0", + "typescript-eslint": "8.15.0", "wrk": "1.2.1", "ws": "8.18.0" }, diff --git a/packages/common/test/exceptions/http.exception.spec.ts b/packages/common/test/exceptions/http.exception.spec.ts index b9aa2aa3bd9..3bcc6d2aecb 100644 --- a/packages/common/test/exceptions/http.exception.spec.ts +++ b/packages/common/test/exceptions/http.exception.spec.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/restrict-template-expressions */ import { expect } from 'chai'; import { Type } from '../../../common'; import { diff --git a/packages/common/test/services/logger.service.spec.ts b/packages/common/test/services/logger.service.spec.ts index 7dd45379afa..81fff5fdee2 100644 --- a/packages/common/test/services/logger.service.spec.ts +++ b/packages/common/test/services/logger.service.spec.ts @@ -467,7 +467,6 @@ describe('Logger', () => { // named class class Test { - #privateField = 'private field'; publicField = 'public field'; } logger.log(Test); @@ -830,7 +829,7 @@ describe('Logger', () => { contextMessage: string, timestampDiff: string, ) { - return `Prefix: ${message}`; + return `Prefix: ${message as string}`; } } diff --git a/packages/common/test/services/utils/is-log-level-enabled.util.spec.ts b/packages/common/test/services/utils/is-log-level-enabled.util.spec.ts index 9575d67efc0..27d18ea13aa 100644 --- a/packages/common/test/services/utils/is-log-level-enabled.util.spec.ts +++ b/packages/common/test/services/utils/is-log-level-enabled.util.spec.ts @@ -22,8 +22,8 @@ describe('isLogLevelEnabled', () => { ]; for (const { inputArgs, expectedReturnValue } of tests) { - describe(`when log levels = [${inputArgs[1]}]`, () => { - describe(`and target level is "${inputArgs[0]}"`, () => { + describe(`when log levels = [${inputArgs[1] as string}]`, () => { + describe(`and target level is "${inputArgs[0] as string}"`, () => { it('should return true', () => { expect( isLogLevelEnabled(...(inputArgs as [LogLevel, LogLevel[]])), diff --git a/packages/core/exceptions/external-exception-filter.ts b/packages/core/exceptions/external-exception-filter.ts index 043fb61ef5d..af85b77f465 100644 --- a/packages/core/exceptions/external-exception-filter.ts +++ b/packages/core/exceptions/external-exception-filter.ts @@ -7,7 +7,7 @@ export class ExternalExceptionFilter { if (exception instanceof Error && !(exception instanceof HttpException)) { ExternalExceptionFilter.logger.error(exception); } - /* eslint-disable-next-line @typescript-eslint/only-throw-error */ + throw exception; } } diff --git a/packages/core/helpers/external-context-creator.ts b/packages/core/helpers/external-context-creator.ts index 83ef9994d66..ffc869c23de 100644 --- a/packages/core/helpers/external-context-creator.ts +++ b/packages/core/helpers/external-context-creator.ts @@ -6,10 +6,10 @@ import { PipeTransform, } from '@nestjs/common/interfaces'; import { isEmpty } from '@nestjs/common/utils/shared.utils'; -import { lastValueFrom, isObservable } from 'rxjs'; +import { isObservable, lastValueFrom } from 'rxjs'; import { ExternalExceptionFilterContext } from '../exceptions/external-exception-filter-context'; -import { FORBIDDEN_MESSAGE } from '../guards/constants'; import { GuardsConsumer, GuardsContextCreator } from '../guards'; +import { FORBIDDEN_MESSAGE } from '../guards/constants'; import { STATIC_CONTEXT } from '../injector/constants'; import { NestContainer } from '../injector/container'; import { ContextId } from '../injector/instance-wrapper'; @@ -106,7 +106,7 @@ export class ExternalContextCreator { }, contextType: TContext = 'http' as TContext, ) { - const module = this.getContextModuleKey(instance.constructor); + const moduleKey = this.getContextModuleKey(instance.constructor); const { argsLength, paramtypes, getParamsMetadata } = this.getMetadata< TParamsMetadata, TContext @@ -114,21 +114,21 @@ export class ExternalContextCreator { const pipes = this.pipesContextCreator.create( instance, callback, - module, + moduleKey, contextId, inquirerId, ); const guards = this.guardsContextCreator.create( instance, callback, - module, + moduleKey, contextId, inquirerId, ); const exceptionFilter = this.filtersContextCreator.create( instance, - callback, - module, + callback as (...args: any[]) => any, + moduleKey, contextId, inquirerId, ); @@ -136,13 +136,13 @@ export class ExternalContextCreator { ? this.interceptorsContextCreator.create( instance, callback, - module, + moduleKey, contextId, inquirerId, ) : []; - const paramsMetadata = getParamsMetadata(module, contextId, inquirerId); + const paramsMetadata = getParamsMetadata(moduleKey, contextId, inquirerId); const paramsOptions = paramsMetadata ? this.contextUtils.mergeParamsMetatypes(paramsMetadata, paramtypes) : []; diff --git a/packages/core/middleware/builder.ts b/packages/core/middleware/builder.ts index c647bf34f32..3d423e16010 100644 --- a/packages/core/middleware/builder.ts +++ b/packages/core/middleware/builder.ts @@ -1,4 +1,3 @@ -import { flatten } from '@nestjs/common/decorators/core/dependencies.decorator'; import { HttpServer, MiddlewareConsumer, @@ -25,11 +24,11 @@ export class MiddlewareBuilder implements MiddlewareConsumer { ) {} public apply( - ...middleware: Array | Function> + ...middleware: Array | Function | Array | Function>> ): MiddlewareConfigProxy { return new MiddlewareBuilder.ConfigProxy( this, - flatten(middleware), + middleware.flat(), this.routeInfoPathExtractor, ); } diff --git a/packages/core/middleware/route-info-path-extractor.ts b/packages/core/middleware/route-info-path-extractor.ts index 08627017ca6..fda54ce1832 100644 --- a/packages/core/middleware/route-info-path-extractor.ts +++ b/packages/core/middleware/route-info-path-extractor.ts @@ -50,7 +50,9 @@ export class RouteInfoPathExtractor { ...entries, ...this.excludedGlobalPrefixRoutes .map(route => - versionPaths.map(v => v + addLeadingSlash(route.path)), + Array.isArray(versionPaths) && versionPaths.length > 0 + ? versionPaths.map(v => v + addLeadingSlash(route.path)) + : addLeadingSlash(route.path), ) .flat(), ] diff --git a/packages/core/test/exceptions/external-exceptions-handler.spec.ts b/packages/core/test/exceptions/external-exceptions-handler.spec.ts index 2eae8c6ed98..debdaff3ac5 100644 --- a/packages/core/test/exceptions/external-exceptions-handler.spec.ts +++ b/packages/core/test/exceptions/external-exceptions-handler.spec.ts @@ -60,13 +60,13 @@ describe('ExternalExceptionsHandler', () => { filters = [{ exceptionMetatypes: [TestException], func: funcSpy }]; (handler as any).filters = filters; }); - it('should call funcSpy', () => { - handler.invokeCustomFilters(new TestException(), null); + it('should call funcSpy', async () => { + await handler.invokeCustomFilters(new TestException(), null); expect(funcSpy.notCalled).to.be.false; }); - it('should call funcSpy with exception and response passed as an arguments', () => { + it('should call funcSpy with exception and response passed as an arguments', async () => { const exception = new TestException(); - handler.invokeCustomFilters(exception, null); + await handler.invokeCustomFilters(exception, null); expect(funcSpy.calledWith(exception)).to.be.true; }); it('should return stream', () => { @@ -81,8 +81,8 @@ describe('ExternalExceptionsHandler', () => { ]; (handler as any).filters = filters; }); - it('should not call funcSpy', () => { - handler.invokeCustomFilters(new TestException(), null); + it('should not call funcSpy', async () => { + await handler.invokeCustomFilters(new TestException(), null); expect(funcSpy.notCalled).to.be.true; }); it('should return null', () => { diff --git a/packages/core/test/helpers/external-context-creator.spec.ts b/packages/core/test/helpers/external-context-creator.spec.ts index cae5fa05132..b8a5a4fb640 100644 --- a/packages/core/test/helpers/external-context-creator.spec.ts +++ b/packages/core/test/helpers/external-context-creator.spec.ts @@ -163,8 +163,8 @@ describe('ExternalContextCreator', () => { beforeEach(() => { consumerApplySpy = sinon.spy(pipesConsumer, 'apply'); }); - it('should call "consumer.apply"', () => { - contextCreator.getParamValue( + it('should call "consumer.apply"', async () => { + await contextCreator.getParamValue( value, { metatype, type: RouteParamtypes.NEXT, data: null }, transforms, diff --git a/packages/core/test/helpers/external-proxy.spec.ts b/packages/core/test/helpers/external-proxy.spec.ts index 4152d890251..200ee23229f 100644 --- a/packages/core/test/helpers/external-proxy.spec.ts +++ b/packages/core/test/helpers/external-proxy.spec.ts @@ -21,26 +21,24 @@ describe('ExternalErrorProxy', () => { expect(typeof proxy === 'function').to.be.true; }); - it('should method encapsulate callback passed as argument', () => { + it('should method encapsulate callback passed as argument', async () => { const expectation = handlerMock.expects('next').once(); const proxy = externalErrorProxy.createProxy((req, res, next) => { throw new HttpException('test', 500); }, handler); - proxy(null, null, null); + await proxy(null, null, null); expectation.verify(); }); - it('should method encapsulate async callback passed as argument', done => { + it('should method encapsulate async callback passed as argument', async () => { const expectation = handlerMock.expects('next').once(); const proxy = externalErrorProxy.createProxy(async (req, res, next) => { throw new HttpException('test', 500); }, handler); - proxy(null, null, null); - setTimeout(() => { - expectation.verify(); - done(); - }, 0); + await proxy(null, null, null); + + expectation.verify(); }); }); }); diff --git a/packages/core/test/injector/container.spec.ts b/packages/core/test/injector/container.spec.ts index 05bd4782162..c2056de980d 100644 --- a/packages/core/test/injector/container.spec.ts +++ b/packages/core/test/injector/container.spec.ts @@ -179,18 +179,18 @@ describe('NestContainer', () => { untypedContainer.dynamicModulesMetadata = collection; }); describe('when dynamic metadata exists', () => { - it('should add to the dynamic metadata collection', () => { + it('should add to the dynamic metadata collection', async () => { const addSpy = sinon.spy(collection, 'set'); const dynamicMetadata = { module: null }; - container.addDynamicMetadata(token, dynamicMetadata, []); + await container.addDynamicMetadata(token, dynamicMetadata, []); expect(addSpy.calledWith(token, dynamicMetadata)).to.be.true; }); }); describe('when dynamic metadata does not exists', () => { - it('should not add to the dynamic metadata collection', () => { + it('should not add to the dynamic metadata collection', async () => { const addSpy = sinon.spy(collection, 'set'); - container.addDynamicMetadata(token, null, []); + await container.addDynamicMetadata(token, null, []); expect(addSpy.called).to.be.false; }); }); @@ -199,16 +199,16 @@ describe('NestContainer', () => { class Test {} describe('addDynamicModules', () => { describe('when array is empty/undefined', () => { - it('should not call "addModule"', () => { + it('should not call "addModule"', async () => { const addModuleSpy = sinon.spy(container, 'addModule'); - container.addDynamicModules(undefined, []); + await container.addDynamicModules(undefined, []); expect(addModuleSpy.called).to.be.false; }); }); describe('when array is not empty/undefined', () => { - it('should call "addModule"', () => { + it('should call "addModule"', async () => { const addModuleSpy = sinon.spy(container, 'addModule'); - container.addDynamicModules([Test] as any, []); + await container.addDynamicModules([Test] as any, []); expect(addModuleSpy.called).to.be.true; }); }); diff --git a/packages/core/test/injector/injector.spec.ts b/packages/core/test/injector/injector.spec.ts index 6a221410764..4c18ae3ddf8 100644 --- a/packages/core/test/injector/injector.spec.ts +++ b/packages/core/test/injector/injector.spec.ts @@ -218,13 +218,13 @@ describe('Injector', () => { injector.loadInstance = loadInstanceSpy; }); - it('should call "loadInstance" when instance is not resolved', () => { + it('should call "loadInstance" when instance is not resolved', async () => { const collection = { get: (...args) => ({}), set: (...args) => {}, }; - injector.loadMiddleware( + await injector.loadMiddleware( { metatype: { name: '', prototype: {} } } as any, collection as any, null, @@ -232,7 +232,7 @@ describe('Injector', () => { expect(loadInstanceSpy.called).to.be.true; }); - it('should not call "loadInstanceSpy" when instance is not resolved', () => { + it('should not call "loadInstanceSpy" when instance is not resolved', async () => { const collection = { get: (...args) => ({ instance: {}, @@ -240,7 +240,7 @@ describe('Injector', () => { set: (...args) => {}, }; - injector.loadMiddleware( + await injector.loadMiddleware( { metatype: { name: '' } } as any, collection as any, null, diff --git a/packages/core/test/interceptors/interceptors-consumer.spec.ts b/packages/core/test/interceptors/interceptors-consumer.spec.ts index 8ac10f8d3a1..beb875b0f50 100644 --- a/packages/core/test/interceptors/interceptors-consumer.spec.ts +++ b/packages/core/test/interceptors/interceptors-consumer.spec.ts @@ -203,7 +203,6 @@ describe('InterceptorsConsumer', () => { .stub() .callsFake(async (ctx, handler) => handler.handle()), }, - , ]; const observable = await consumer.intercept( diff --git a/packages/core/test/middleware/resolver.spec.ts b/packages/core/test/middleware/resolver.spec.ts index d57e4ee6532..07ccc9fb33b 100644 --- a/packages/core/test/middleware/resolver.spec.ts +++ b/packages/core/test/middleware/resolver.spec.ts @@ -24,7 +24,7 @@ describe('MiddlewareResolver', () => { mockContainer = sinon.mock(container); }); - it('should resolve middleware instances from container', () => { + it('should resolve middleware instances from container', async () => { const loadMiddleware = sinon.stub(resolver['injector'], 'loadMiddleware'); const middleware = new Map(); const wrapper = { @@ -35,7 +35,7 @@ describe('MiddlewareResolver', () => { const module = { metatype: { name: '' } } as any; mockContainer.expects('getMiddlewareCollection').returns(middleware); - resolver.resolveInstances(module, null); + await resolver.resolveInstances(module, null); expect(loadMiddleware.callCount).to.be.equal(middleware.size); expect(loadMiddleware.calledWith(wrapper as any, middleware, module)).to.be diff --git a/packages/core/test/pipes/pipes-consumer.spec.ts b/packages/core/test/pipes/pipes-consumer.spec.ts index d6bf927a931..08771997ca2 100644 --- a/packages/core/test/pipes/pipes-consumer.spec.ts +++ b/packages/core/test/pipes/pipes-consumer.spec.ts @@ -24,6 +24,7 @@ describe('PipesConsumer', () => { ]; }); it('should call all transform functions', done => { + /* eslint-disable-next-line @typescript-eslint/no-floating-promises */ consumer.apply(value, { metatype, type, data }, transforms).then(() => { expect( transforms.reduce( @@ -31,11 +32,13 @@ describe('PipesConsumer', () => { true, ), ).to.be.true; + done(); }); }); it('should return expected result', done => { const expectedResult = 3; + /* eslint-disable-next-line @typescript-eslint/no-floating-promises */ consumer .apply(value, { metatype, type, data }, transforms) .then(result => { diff --git a/packages/core/test/router/router-execution-context.spec.ts b/packages/core/test/router/router-execution-context.spec.ts index bf0af4271ad..1581ee6864a 100644 --- a/packages/core/test/router/router-execution-context.spec.ts +++ b/packages/core/test/router/router-execution-context.spec.ts @@ -205,8 +205,8 @@ describe('RouterExecutionContext', () => { consumerApplySpy = sinon.spy(consumer, 'apply'); }); describe('when paramtype is query, body, rawBody or param', () => { - it('should call "consumer.apply" with expected arguments', () => { - contextCreator.getParamValue( + it('should call "consumer.apply" with expected arguments', async () => { + await contextCreator.getParamValue( value, { metatype, type: RouteParamtypes.QUERY, data: null }, transforms, @@ -219,7 +219,7 @@ describe('RouterExecutionContext', () => { ), ).to.be.true; - contextCreator.getParamValue( + await contextCreator.getParamValue( value, { metatype, type: RouteParamtypes.BODY, data: null }, transforms, @@ -232,7 +232,7 @@ describe('RouterExecutionContext', () => { ), ).to.be.true; - contextCreator.getParamValue( + await contextCreator.getParamValue( value, { metatype, type: RouteParamtypes.RAW_BODY, data: null }, transforms, @@ -245,7 +245,7 @@ describe('RouterExecutionContext', () => { ), ).to.be.true; - contextCreator.getParamValue( + await contextCreator.getParamValue( value, { metatype, type: RouteParamtypes.PARAM, data: null }, transforms, diff --git a/packages/core/test/router/router-proxy.spec.ts b/packages/core/test/router/router-proxy.spec.ts index 7822a7f1329..d95d4587d02 100644 --- a/packages/core/test/router/router-proxy.spec.ts +++ b/packages/core/test/router/router-proxy.spec.ts @@ -2,10 +2,9 @@ import { expect } from 'chai'; import * as sinon from 'sinon'; import { HttpException } from '../../../common/exceptions/http.exception'; import { ExceptionsHandler } from '../../exceptions/exceptions-handler'; +import { ExecutionContextHost } from '../../helpers/execution-context-host'; import { RouterProxy } from '../../router/router-proxy'; import { NoopHttpAdapter } from '../utils/noop-adapter.spec'; -import { SinonSpy } from 'sinon'; -import { ExecutionContextHost } from '../../helpers/execution-context-host'; describe('RouterProxy', () => { let routerProxy: RouterProxy; @@ -24,11 +23,11 @@ describe('RouterProxy', () => { expect(typeof proxy === 'function').to.be.true; }); - it('should method encapsulate callback passed as argument', () => { + it('should method encapsulate callback passed as argument', async () => { const proxy = routerProxy.createProxy((req, res, next) => { throw httpException; }, handler); - proxy(null, null, null); + await proxy(null, null, null); expect(nextStub.calledOnce).to.be.true; expect( @@ -39,22 +38,20 @@ describe('RouterProxy', () => { ).to.be.true; }); - it('should method encapsulate async callback passed as argument', done => { + it('should method encapsulate async callback passed as argument', async () => { const proxy = routerProxy.createProxy(async (req, res, next) => { throw httpException; }, handler); - proxy(null, null, null); - setTimeout(() => { - expect(nextStub.calledOnce).to.be.true; - expect( - nextStub.calledWith( - httpException, - new ExecutionContextHost([null, null, null]), - ), - ).to.be.true; - done(); - }, 0); + await proxy(null, null, null); + + expect(nextStub.calledOnce).to.be.true; + expect( + nextStub.calledWith( + httpException, + new ExecutionContextHost([null, null, null]), + ), + ).to.be.true; }); }); @@ -64,14 +61,14 @@ describe('RouterProxy', () => { expect(typeof proxy === 'function').to.be.true; }); - it('should method encapsulate callback passed as argument', () => { + it('should method encapsulate callback passed as argument', async () => { const proxy = routerProxy.createExceptionLayerProxy( (err, req, res, next) => { throw httpException; }, handler, ); - proxy(null, null, null, null); + await proxy(null, null, null, null); expect(nextStub.calledOnce).to.be.true; expect( @@ -82,25 +79,23 @@ describe('RouterProxy', () => { ).to.be.true; }); - it('should method encapsulate async callback passed as argument', done => { + it('should method encapsulate async callback passed as argument', async () => { const proxy = routerProxy.createExceptionLayerProxy( async (err, req, res, next) => { throw httpException; }, handler, ); - proxy(null, null, null, null); - setTimeout(() => { - expect(nextStub.calledOnce).to.be.true; - expect( - nextStub.calledWith( - httpException, - new ExecutionContextHost([null, null, null]), - ), - ).to.be.true; - done(); - }, 0); + await proxy(null, null, null, null); + + expect(nextStub.calledOnce).to.be.true; + expect( + nextStub.calledWith( + httpException, + new ExecutionContextHost([null, null, null]), + ), + ).to.be.true; }); }); }); diff --git a/packages/core/test/router/router-response-controller.spec.ts b/packages/core/test/router/router-response-controller.spec.ts index 9e48d83a00e..8dca089593e 100644 --- a/packages/core/test/router/router-response-controller.spec.ts +++ b/packages/core/test/router/router-response-controller.spec.ts @@ -6,8 +6,8 @@ import * as sinon from 'sinon'; import { PassThrough, Writable } from 'stream'; import { HttpStatus, RequestMethod } from '../../../common'; import { RouterResponseController } from '../../router/router-response-controller'; -import { NoopHttpAdapter } from '../utils/noop-adapter.spec'; import { SseStream } from '../../router/sse-stream'; +import { NoopHttpAdapter } from '../utils/noop-adapter.spec'; describe('RouterResponseController', () => { let adapter: NoopHttpAdapter; @@ -263,7 +263,7 @@ describe('RouterResponseController', () => { it('should accept only observables', async () => { const result = Promise.resolve('test'); try { - await routerResponseController.sse( + routerResponseController.sse( result as unknown as any, {} as unknown as ServerResponse, {} as unknown as IncomingMessage, diff --git a/packages/core/test/scanner.spec.ts b/packages/core/test/scanner.spec.ts index 94f137aa30d..eba50d4f6f4 100644 --- a/packages/core/test/scanner.spec.ts +++ b/packages/core/test/scanner.spec.ts @@ -393,11 +393,11 @@ describe('DependenciesScanner', () => { }); describe('insertModule', () => { - it('should call forwardRef() when forwardRef property exists', () => { + it('should call forwardRef() when forwardRef property exists', async () => { sinon.stub(container, 'addModule').returns({} as any); - const module = { forwardRef: sinon.spy() }; - scanner.insertModule(module, []); + const module = { forwardRef: sinon.stub().returns(class {}) }; + await scanner.insertModule(module, []); expect(module.forwardRef.called).to.be.true; }); @@ -730,9 +730,9 @@ describe('DependenciesScanner', () => { }); }); describe('scanForModules', () => { - it('should throw an exception when the imports array includes undefined', () => { + it('should throw an exception when the imports array includes undefined', async () => { try { - scanner.scanForModules({ + await scanner.scanForModules({ moduleDefinition: UndefinedModule, scope: [UndefinedModule], }); @@ -740,9 +740,9 @@ describe('DependenciesScanner', () => { expect(exception instanceof UndefinedModuleException).to.be.true; } }); - it('should throw an exception when the imports array includes an invalid value', () => { + it('should throw an exception when the imports array includes an invalid value', async () => { try { - scanner.scanForModules({ + await scanner.scanForModules({ moduleDefinition: InvalidModule, scope: [InvalidModule], }); diff --git a/packages/microservices/context/rpc-proxy.ts b/packages/microservices/context/rpc-proxy.ts index 521d5b7cd42..0e90b8e83f1 100644 --- a/packages/microservices/context/rpc-proxy.ts +++ b/packages/microservices/context/rpc-proxy.ts @@ -31,6 +31,6 @@ export class RpcProxy { ): Observable { const host = new ExecutionContextHost(args); host.setType('rpc'); - return exceptionsHandler.handle(error, host); + return exceptionsHandler.handle(error as Error, host); } } diff --git a/packages/microservices/microservices-module.ts b/packages/microservices/microservices-module.ts index 65f1855feb6..fe56e509256 100644 --- a/packages/microservices/microservices-module.ts +++ b/packages/microservices/microservices-module.ts @@ -105,7 +105,7 @@ export class MicroservicesModule< ) { items.forEach(({ instance, isNotMetatype }) => { !isNotMetatype && - this.listenersController.assignClientsToProperties(instance); + this.listenersController.assignClientsToProperties(instance as object); }); } diff --git a/packages/microservices/serializers/nats-record.serializer.ts b/packages/microservices/serializers/nats-record.serializer.ts index 3c2b76013c5..b00f3969a1d 100644 --- a/packages/microservices/serializers/nats-record.serializer.ts +++ b/packages/microservices/serializers/nats-record.serializer.ts @@ -19,7 +19,7 @@ export class NatsRecordSerializer this.jsonCodec = natsPackage.JSONCodec(); } - serialize(packet: ReadPacket): NatsRecord { + serialize(packet: any): NatsRecord { const natsMessage = packet?.data && isObject(packet.data) && packet.data instanceof NatsRecord ? packet.data diff --git a/packages/microservices/server/server-mqtt.ts b/packages/microservices/server/server-mqtt.ts index 36bf74b4f6d..39af5092895 100644 --- a/packages/microservices/server/server-mqtt.ts +++ b/packages/microservices/server/server-mqtt.ts @@ -104,7 +104,7 @@ export class ServerMqtt extends Server { return mqttPackage.connect(this.url, this.options as MqttOptions); } - public getMessageHandler(pub: MqttClient): Function { + public getMessageHandler(pub: MqttClient) { return async ( channel: string, buffer: Buffer, diff --git a/packages/microservices/server/server.ts b/packages/microservices/server/server.ts index 7c3505f67d7..62eb4940350 100644 --- a/packages/microservices/server/server.ts +++ b/packages/microservices/server/server.ts @@ -126,7 +126,7 @@ export abstract class Server< public send( stream$: Observable, - respond: (data: WritePacket) => Promise, + respond: (data: WritePacket) => Promise | void, ): Subscription { let dataBuffer: WritePacket[] = null; const scheduleOnNextTick = (data: WritePacket) => { diff --git a/packages/microservices/test/client/client-kafka.spec.ts b/packages/microservices/test/client/client-kafka.spec.ts index dbaf9c26e07..f5e3b83133b 100644 --- a/packages/microservices/test/client/client-kafka.spec.ts +++ b/packages/microservices/test/client/client-kafka.spec.ts @@ -793,6 +793,7 @@ describe('ClientKafka', () => { }); it('should call callback', async () => { + /* eslint-disable-next-line no-async-promise-executor */ return new Promise(async resolve => { return client['publish'](readPacket, ({ err }) => resolve(err)); }).then(err => { @@ -819,7 +820,7 @@ describe('ClientKafka', () => { .stub(client as any, 'getReplyTopicPartition') .callsFake(() => '0'); - subscription = await client['publish'](readPacket, callback); + subscription = client['publish'](readPacket, callback); subscription(payloadDisposed); }); diff --git a/packages/microservices/test/client/client-mqtt.spec.ts b/packages/microservices/test/client/client-mqtt.spec.ts index ffba44dda37..e662d6fc65f 100644 --- a/packages/microservices/test/client/client-mqtt.spec.ts +++ b/packages/microservices/test/client/client-mqtt.spec.ts @@ -65,15 +65,15 @@ describe('ClientMqtt', () => { assignStub.restore(); }); it('should subscribe to response pattern name', async () => { - await client['publish'](msg, () => {}); + client['publish'](msg, () => {}); expect(subscribeSpy.calledWith(`${pattern}/reply`)).to.be.true; }); it('should publish stringified message to request pattern name', async () => { - await client['publish'](msg, () => {}); + client['publish'](msg, () => {}); expect(publishSpy.calledWith(pattern, JSON.stringify(msg))).to.be.true; }); it('should add callback to routing map', async () => { - await client['publish'](msg, () => {}); + client['publish'](msg, () => {}); expect(client['routingMap'].has(id)).to.be.true; }); describe('on error', () => { @@ -103,7 +103,7 @@ describe('ClientMqtt', () => { getResponsePatternStub = sinon .stub(client, 'getResponsePattern') .callsFake(() => channel); - subscription = await client['publish'](msg, callback); + subscription = client['publish'](msg, callback); subscription(channel, JSON.stringify({ isDisposed: true, id })); }); afterEach(() => { @@ -119,7 +119,7 @@ describe('ClientMqtt', () => { }); describe('headers', () => { it('should not generate headers if none are configured', async () => { - await client['publish'](msg, () => {}); + client['publish'](msg, () => {}); expect(publishSpy.getCall(0).args[2]).to.be.undefined; }); it('should send packet headers', async () => { @@ -128,7 +128,7 @@ describe('ClientMqtt', () => { properties: { userProperties: requestHeaders }, }); - await client['publish'](msg, () => {}); + client['publish'](msg, () => {}); expect(publishSpy.getCall(0).args[2].properties.userProperties).to.eql( requestHeaders, ); @@ -142,7 +142,7 @@ describe('ClientMqtt', () => { properties: { userProperties: requestHeaders }, }); - await client['publish'](msg, () => {}); + client['publish'](msg, () => {}); expect(publishSpy.getCall(0).args[2].properties.userProperties).to.eql({ ...staticHeaders, ...requestHeaders, @@ -157,7 +157,7 @@ describe('ClientMqtt', () => { properties: { userProperties: requestHeaders }, }); - await client['publish'](msg, () => {}); + client['publish'](msg, () => {}); expect(publishSpy.getCall(0).args[2].properties.userProperties).to.eql( requestHeaders, ); diff --git a/packages/microservices/test/client/client-nats.spec.ts b/packages/microservices/test/client/client-nats.spec.ts index 1a51a9ebd08..2b7827eb06a 100644 --- a/packages/microservices/test/client/client-nats.spec.ts +++ b/packages/microservices/test/client/client-nats.spec.ts @@ -233,8 +233,8 @@ describe('ClientNats', () => { natsClient = { close: natsClose }; untypedClient.natsClient = natsClient; }); - it('should close "natsClient" when it is not null', () => { - client.close(); + it('should close "natsClient" when it is not null', async () => { + await client.close(); expect(natsClose.called).to.be.true; }); }); @@ -287,7 +287,7 @@ describe('ClientNats', () => { [Symbol.asyncIterator]: [], }), }; - client.handleStatusUpdates(clientMock as any); + void client.handleStatusUpdates(clientMock as any); expect(clientMock.status.called).to.be.true; }); @@ -361,29 +361,29 @@ describe('ClientNats', () => { subscribeStub.callsFake((channel, options) => options.callback(new Error()), ); - client['dispatchEvent'](msg).catch(err => + await client['dispatchEvent'](msg).catch(err => expect(err).to.be.instanceOf(Error), ); }); describe('headers', () => { - it('should not generate headers if none are configured', () => { - client['dispatchEvent'](msg); + it('should not generate headers if none are configured', async () => { + await client['dispatchEvent'](msg); expect(natsClient.publish.getCall(0).args[2].headers).to.be.undefined; }); - it('should send packet headers', () => { + it('should send packet headers', async () => { const requestHeaders = createHeaders(); requestHeaders.set('1', '123'); msg.data = new NatsRecord('data', requestHeaders); - client['dispatchEvent'](msg); + await client['dispatchEvent'](msg); expect(natsClient.publish.getCall(0).args[2].headers.get('1')).to.eql( '123', ); }); - it('should combine packet and static headers', () => { + it('should combine packet and static headers', async () => { const staticHeaders = { 'client-id': 'some-client-id' }; untypedClient.options.headers = staticHeaders; @@ -391,7 +391,7 @@ describe('ClientNats', () => { requestHeaders.set('1', '123'); msg.data = new NatsRecord('data', requestHeaders); - client['dispatchEvent'](msg); + await client['dispatchEvent'](msg); expect( natsClient.publish.getCall(0).args[2].headers.get('client-id'), ).to.eql('some-client-id'); @@ -400,7 +400,7 @@ describe('ClientNats', () => { ); }); - it('should prefer packet headers over static headers', () => { + it('should prefer packet headers over static headers', async () => { const staticHeaders = { 'client-id': 'some-client-id' }; untypedClient.options.headers = staticHeaders; @@ -408,7 +408,7 @@ describe('ClientNats', () => { requestHeaders.set('client-id', 'override-client-id'); msg.data = new NatsRecord('data', requestHeaders); - client['dispatchEvent'](msg); + await client['dispatchEvent'](msg); expect( natsClient.publish.getCall(0).args[2].headers.get('client-id'), ).to.eql('override-client-id'); diff --git a/packages/microservices/test/client/client-redis.spec.ts b/packages/microservices/test/client/client-redis.spec.ts index 763b5fe931d..84d6ece6aae 100644 --- a/packages/microservices/test/client/client-redis.spec.ts +++ b/packages/microservices/test/client/client-redis.spec.ts @@ -57,8 +57,8 @@ describe('ClientRedis', () => { client['publish'](msg, () => {}); expect(subscribeSpy.calledWith(`${pattern}.reply`)).to.be.true; }); - it('should publish stringified message to request pattern name', async () => { - await client['publish'](msg, () => {}); + it('should publish stringified message to request pattern name', () => { + client['publish'](msg, () => {}); expect(publishSpy.calledWith(pattern, JSON.stringify(msg))).to.be.true; }); describe('on error', () => { @@ -218,18 +218,19 @@ describe('ClientRedis', () => { let createClientSpy: sinon.SinonSpy; let registerErrorListenerSpy: sinon.SinonSpy; - beforeEach(() => { + beforeEach(async () => { createClientSpy = sinon.stub(client, 'createClient').callsFake( () => ({ on: () => null, addListener: () => null, removeListener: () => null, + connect: () => Promise.resolve(), }) as any, ); registerErrorListenerSpy = sinon.spy(client, 'registerErrorListener'); - client.connect(); + await client.connect(); client['pubClient'] = null; }); afterEach(() => { @@ -291,7 +292,9 @@ describe('ClientRedis', () => { const { retryStrategy } = client.getClientOptions(); try { retryStrategy({} as any); - } catch {} + } catch { + // No empty + } expect(createSpy.called).to.be.true; }); }); diff --git a/packages/microservices/test/client/client-rmq.spec.ts b/packages/microservices/test/client/client-rmq.spec.ts index f0329cdb20e..85a890e793e 100644 --- a/packages/microservices/test/client/client-rmq.spec.ts +++ b/packages/microservices/test/client/client-rmq.spec.ts @@ -44,7 +44,9 @@ describe('ClientRMQ', function () { try { client['client'] = null; await client.connect(); - } catch {} + } catch { + // Ignore + } }); it('should call "registerErrorListener" once', async () => { expect(registerErrorListenerSpy.called).to.be.true; @@ -232,7 +234,7 @@ describe('ClientRMQ', function () { on: sinon.spy(), } as any as EventEmitter; - subscription = await client['publish'](msg, sinon.spy()); + subscription = client['publish'](msg, sinon.spy()); subscription(); }); it('should unsubscribe', () => { diff --git a/packages/microservices/test/context/rpc-context-creator.spec.ts b/packages/microservices/test/context/rpc-context-creator.spec.ts index 85de2cb520a..5f5aecbff87 100644 --- a/packages/microservices/test/context/rpc-context-creator.spec.ts +++ b/packages/microservices/test/context/rpc-context-creator.spec.ts @@ -104,7 +104,7 @@ describe('RpcContextCreator', () => { sinon .stub(guardsContextCreator, 'create') .callsFake(() => [{ canActivate: () => true }]); - const proxy = await contextCreator.create( + const proxy = contextCreator.create( instance, instance.test, module, @@ -121,7 +121,7 @@ describe('RpcContextCreator', () => { .stub(guardsConsumer, 'tryActivate') .callsFake(async () => false); - const proxy = await contextCreator.create( + const proxy = contextCreator.create( instance, instance.test, module, @@ -193,8 +193,8 @@ describe('RpcContextCreator', () => { beforeEach(() => { consumerApplySpy = sinon.spy(pipesConsumer, 'apply'); }); - it('should call "consumer.apply"', () => { - contextCreator.getParamValue( + it('should call "consumer.apply"', async () => { + await contextCreator.getParamValue( value, { metatype, type: RpcParamtype.PAYLOAD, data: null }, transforms, diff --git a/packages/microservices/test/context/rpc-proxy.spec.ts b/packages/microservices/test/context/rpc-proxy.spec.ts index dbfe7f0b182..ccfac6d2d91 100644 --- a/packages/microservices/test/context/rpc-proxy.spec.ts +++ b/packages/microservices/test/context/rpc-proxy.spec.ts @@ -18,7 +18,7 @@ describe('RpcProxy', () => { describe('create', () => { it('should method return thunk', async () => { - const proxy = await routerProxy.create(async data => of(true), handler); + const proxy = routerProxy.create(async data => of(true), handler); expect(typeof proxy === 'function').to.be.true; }); diff --git a/packages/microservices/test/serializers/mqtt-record.serializer.spec.ts b/packages/microservices/test/serializers/mqtt-record.serializer.spec.ts index ff3d33f1ca8..d95d9664390 100644 --- a/packages/microservices/test/serializers/mqtt-record.serializer.spec.ts +++ b/packages/microservices/test/serializers/mqtt-record.serializer.spec.ts @@ -19,15 +19,18 @@ describe('MqttRecordSerializer', () => { expect( instance.serialize({ + pattern: 'pattern', data: mqttMessage, }), ).to.deep.eq({ + pattern: 'pattern', options: { qos: 1, retain: true, dup: true, properties: {} }, data: { value: 'string' }, }); }); it('should act as an identity function if msg is not an instance of MqttRecord class', () => { const packet = { + pattern: 'pattern', data: { random: true }, }; expect(instance.serialize(packet)).to.eq(packet); diff --git a/packages/microservices/test/serializers/rmq-record.serializer.spec.ts b/packages/microservices/test/serializers/rmq-record.serializer.spec.ts index eb3f8097327..b9dc4202863 100644 --- a/packages/microservices/test/serializers/rmq-record.serializer.spec.ts +++ b/packages/microservices/test/serializers/rmq-record.serializer.spec.ts @@ -3,6 +3,8 @@ import { RmqRecordBuilder } from '../../record-builders'; import { RmqRecordSerializer } from '../../serializers/rmq-record.serializer'; describe('RmqRecordSerializer', () => { + const pattern = 'test'; + let instance: RmqRecordSerializer; beforeEach(() => { instance = new RmqRecordSerializer(); @@ -16,9 +18,11 @@ describe('RmqRecordSerializer', () => { expect( instance.serialize({ + pattern, data: rmqMessage, }), ).to.deep.eq({ + pattern, options: { appId: 'app', persistent: true }, data: { value: 'string' }, }); @@ -26,6 +30,7 @@ describe('RmqRecordSerializer', () => { it('should act as an identity function if msg is not an instance of RmqRecord class', () => { const packet = { + pattern, data: { random: true }, }; expect(instance.serialize(packet)).to.eq(packet); diff --git a/packages/microservices/test/server/server-grpc.spec.ts b/packages/microservices/test/server/server-grpc.spec.ts index 00ac4fe37fe..7955349eea5 100644 --- a/packages/microservices/test/server/server-grpc.spec.ts +++ b/packages/microservices/test/server/server-grpc.spec.ts @@ -572,7 +572,7 @@ describe('ServerGrpc', () => { }); describe('createRequestStreamMethod', () => { - it('should wrap call into Subject', () => { + it('should wrap call into Subject', async () => { const handler = sinon.spy(); const fn = server.createRequestStreamMethod(handler, false); const call = { @@ -581,12 +581,12 @@ describe('ServerGrpc', () => { end: sinon.spy(), write: sinon.spy(), }; - fn(call as any, sinon.spy()); + await fn(call as any, sinon.spy()); expect(handler.called).to.be.true; }); - it('should wrap call into Subject with metadata', () => { + it('should wrap call into Subject with metadata', async () => { const handler = sinon.spy(); const fn = server.createRequestStreamMethod(handler, false); const call = { @@ -598,7 +598,7 @@ describe('ServerGrpc', () => { test: '123', }, }; - fn(call as any, sinon.spy()); + await fn(call as any, sinon.spy()); expect(handler.called).to.be.true; expect(handler.args[0][1]).to.eq(call.metadata); @@ -705,7 +705,7 @@ describe('ServerGrpc', () => { const handlerResult = Promise.resolve(subject); const methodHandler = () => handlerResult; - const serviceMethod = await server.createRequestStreamMethod( + const serviceMethod = server.createRequestStreamMethod( methodHandler, true, ); @@ -838,11 +838,11 @@ describe('ServerGrpc', () => { }); describe('createStreamCallMethod', () => { - it('should pass through to "methodHandler"', () => { + it('should pass through to "methodHandler"', async () => { const handler = sinon.spy(); const fn = server.createStreamCallMethod(handler, false); const args = [1, 2, 3]; - fn(args as any, sinon.spy()); + await fn(args as any, sinon.spy()); expect(handler.calledWith(args)).to.be.true; }); diff --git a/packages/microservices/test/server/server-kafka.spec.ts b/packages/microservices/test/server/server-kafka.spec.ts index 1e990ffa779..1eb7c33e664 100644 --- a/packages/microservices/test/server/server-kafka.spec.ts +++ b/packages/microservices/test/server/server-kafka.spec.ts @@ -168,14 +168,14 @@ describe('ServerKafka', () => { expect(callback.called).to.be.true; }); describe('when "start" throws an exception', () => { - it('should call callback with a thrown error as an argument', () => { + it('should call callback with a thrown error as an argument', async () => { const error = new Error('random error'); const callbackSpy = sinon.spy(); sinon.stub(server, 'start').callsFake(() => { throw error; }); - server.listen(callbackSpy); + await server.listen(callbackSpy); expect(callbackSpy.calledWith(error)).to.be.true; }); }); @@ -266,7 +266,7 @@ describe('ServerKafka', () => { const handleMessageStub = sinon .stub(server, 'handleMessage') .callsFake(() => null); - (await server.getMessageHandler())(null); + await server.getMessageHandler()(null); expect(handleMessageStub.called).to.be.true; }); }); diff --git a/packages/microservices/test/server/server-mqtt.spec.ts b/packages/microservices/test/server/server-mqtt.spec.ts index 306a965232c..ad5858c1444 100644 --- a/packages/microservices/test/server/server-mqtt.spec.ts +++ b/packages/microservices/test/server/server-mqtt.spec.ts @@ -26,38 +26,38 @@ describe('ServerMqtt', () => { sinon.stub(server, 'createMqttClient').callsFake(() => client); callbackSpy = sinon.spy(); }); - it('should bind "error" event to handler', () => { - server.listen(callbackSpy); + it('should bind "error" event to handler', async () => { + await server.listen(callbackSpy); expect(onSpy.getCall(0).args[0]).to.be.equal('error'); }); - it('should bind "reconnect" event to handler', () => { - server.listen(callbackSpy); + it('should bind "reconnect" event to handler', async () => { + await server.listen(callbackSpy); expect(onSpy.getCall(1).args[0]).to.be.equal('reconnect'); }); - it('should bind "disconnect" event to handler', () => { - server.listen(callbackSpy); + it('should bind "disconnect" event to handler', async () => { + await server.listen(callbackSpy); expect(onSpy.getCall(2).args[0]).to.be.equal('disconnect'); }); - it('should bind "close" event to handler', () => { - server.listen(callbackSpy); + it('should bind "close" event to handler', async () => { + await server.listen(callbackSpy); expect(onSpy.getCall(3).args[0]).to.be.equal('close'); }); - it('should bind "connect" event to handler', () => { - server.listen(callbackSpy); + it('should bind "connect" event to handler', async () => { + await server.listen(callbackSpy); expect(onSpy.getCall(4).args[0]).to.be.equal('connect'); }); - it('should bind "message" event to handler', () => { - server.listen(callbackSpy); + it('should bind "message" event to handler', async () => { + await server.listen(callbackSpy); expect(onSpy.getCall(5).args[0]).to.be.equal('message'); }); describe('when "start" throws an exception', () => { - it('should call callback with a thrown error as an argument', () => { + it('should call callback with a thrown error as an argument', async () => { const error = new Error('random error'); sinon.stub(server, 'start').callsFake(() => { throw error; }); - server.listen(callbackSpy); + await server.listen(callbackSpy); expect(callbackSpy.calledWith(error)).to.be.true; }); }); @@ -104,7 +104,11 @@ describe('ServerMqtt', () => { const handleMessageStub = sinon .stub(server, 'handleMessage') .callsFake(() => null); - (await server.getMessageHandler(untypedServer.mqttClient))(null); + await server.getMessageHandler(untypedServer.mqttClient)( + null, + null, + null, + ); expect(handleMessageStub.called).to.be.true; }); }); @@ -214,13 +218,13 @@ describe('ServerMqtt', () => { const channel = 'test'; const data = 'test'; - it('should call handler with expected arguments', () => { + it('should call handler with expected arguments', async () => { const handler = sinon.spy(); untypedServer.messageHandlers = objectToMap({ [channel]: handler, }); - server.handleEvent( + await server.handleEvent( channel, { pattern: '', data }, new BaseRpcContext([]), diff --git a/packages/microservices/test/server/server-nats.spec.ts b/packages/microservices/test/server/server-nats.spec.ts index bcca66e736b..154ee16a372 100644 --- a/packages/microservices/test/server/server-nats.spec.ts +++ b/packages/microservices/test/server/server-nats.spec.ts @@ -254,13 +254,13 @@ describe('ServerNats', () => { const channel = 'test'; const data = 'test'; - it('should call handler with expected arguments', () => { + it('should call handler with expected arguments', async () => { const handler = sinon.spy(); untypedServer.messageHandlers = objectToMap({ [channel]: handler, }); - server.handleEvent( + await server.handleEvent( channel, { pattern: '', data }, new BaseRpcContext([]), @@ -275,7 +275,7 @@ describe('ServerNats', () => { [Symbol.asyncIterator]: [], }), }; - server.handleStatusUpdates(serverMock as any); + void server.handleStatusUpdates(serverMock as any); expect(serverMock.status.called).to.be.true; }); diff --git a/packages/microservices/test/server/server-redis.spec.ts b/packages/microservices/test/server/server-redis.spec.ts index d0d1b7c950a..e892f897828 100644 --- a/packages/microservices/test/server/server-redis.spec.ts +++ b/packages/microservices/test/server/server-redis.spec.ts @@ -162,7 +162,7 @@ describe('ServerRedis', () => { }); sinon.stub(server, 'parseMessage').callsFake(() => ({ id, data }) as any); - await server.handleMessage(channel, {}, null, channel); + await server.handleMessage(channel, '', null, channel); expect(handler.calledWith(data)).to.be.true; }); }); @@ -226,7 +226,9 @@ describe('ServerRedis', () => { const { retryStrategy } = server.getClientOptions(); try { retryStrategy(0); - } catch {} + } catch { + // Ignore + } expect(createSpy.called).to.be.true; }); }); @@ -269,13 +271,13 @@ describe('ServerRedis', () => { const channel = 'test'; const data = 'test'; - it('should call handler with expected arguments', () => { + it('should call handler with expected arguments', async () => { const handler = sinon.spy(); untypedServer.messageHandlers = objectToMap({ [channel]: handler, }); - server.handleEvent( + await server.handleEvent( channel, { pattern: '', data }, new BaseRpcContext([]), diff --git a/packages/microservices/test/server/server-rmq.spec.ts b/packages/microservices/test/server/server-rmq.spec.ts index cc671cfb494..bb5ec629940 100644 --- a/packages/microservices/test/server/server-rmq.spec.ts +++ b/packages/microservices/test/server/server-rmq.spec.ts @@ -42,8 +42,8 @@ describe('ServerRMQ', () => { afterEach(() => { setupChannelStub.restore(); }); - it('should call "createClient"', () => { - server.listen(callbackSpy); + it('should call "createClient"', async () => { + await server.listen(callbackSpy); expect(createClient.called).to.be.true; }); it('should bind "connect" event to handler', async () => { @@ -59,13 +59,13 @@ describe('ServerRMQ', () => { expect(onStub.getCall(3).args[0]).to.be.equal('connectFailed'); }); describe('when "start" throws an exception', () => { - it('should call callback with a thrown error as an argument', () => { + it('should call callback with a thrown error as an argument', async () => { const error = new Error('random error'); sinon.stub(server, 'start').callsFake(() => { throw error; }); - server.listen(callbackSpy); + await server.listen(callbackSpy); expect(callbackSpy.calledWith(error)).to.be.true; }); }); @@ -260,13 +260,13 @@ describe('ServerRMQ', () => { const channel = 'test'; const data = 'test'; - it('should call handler with expected arguments', () => { + it('should call handler with expected arguments', async () => { const handler = sinon.spy(); untypedServer.messageHandlers = objectToMap({ [channel]: handler, }); - server.handleEvent( + await server.handleEvent( channel, { pattern: '', data }, new RmqContext([{}, {}, '']), @@ -274,26 +274,34 @@ describe('ServerRMQ', () => { expect(handler.calledWith(data)).to.be.true; }); - it('should negative acknowledge without retrying if key does not exists in handlers object and noAck option is false', () => { + it('should negative acknowledge without retrying if key does not exists in handlers object and noAck option is false', async () => { const nack = sinon.spy(); const message = { pattern: 'no-exists', data }; untypedServer.channel = { nack, }; untypedServer.noAck = false; - server.handleEvent(channel, message, new RmqContext([message, '', ''])); + await server.handleEvent( + channel, + message, + new RmqContext([message, '', '']), + ); expect(nack.calledWith(message, false, false)).to.be.true; }); - it('should not negative acknowledge if key does not exists in handlers object but noAck option is true', () => { + it('should not negative acknowledge if key does not exists in handlers object but noAck option is true', async () => { const nack = sinon.spy(); const message = { pattern: 'no-exists', data }; untypedServer.channel = { nack, }; untypedServer.noAck = true; - server.handleEvent(channel, message, new RmqContext([message, '', ''])); + await server.handleEvent( + channel, + message, + new RmqContext([message, '', '']), + ); expect(nack.calledWith(message, false, false)).not.to.be.true; }); diff --git a/packages/microservices/test/server/server-tcp.spec.ts b/packages/microservices/test/server/server-tcp.spec.ts index 72f0df73ce7..597a5f4e1c2 100644 --- a/packages/microservices/test/server/server-tcp.spec.ts +++ b/packages/microservices/test/server/server-tcp.spec.ts @@ -123,13 +123,13 @@ describe('ServerTCP', () => { const channel = 'test'; const data = 'test'; - it('should call handler with expected arguments', () => { + it('should call handler with expected arguments', async () => { const handler = sinon.spy(); untypedServer.messageHandlers = objectToMap({ [channel]: handler, }); - server.handleEvent( + await server.handleEvent( channel, { pattern: '', data }, new BaseRpcContext([]), diff --git a/packages/platform-fastify/test/tsconfig.json b/packages/platform-fastify/test/tsconfig.json new file mode 100644 index 00000000000..50d59661da9 --- /dev/null +++ b/packages/platform-fastify/test/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../../tsconfig.spec.json" +} diff --git a/packages/websockets/context/ws-proxy.ts b/packages/websockets/context/ws-proxy.ts index 51f362fbe86..dedbfddfc3e 100644 --- a/packages/websockets/context/ws-proxy.ts +++ b/packages/websockets/context/ws-proxy.ts @@ -34,6 +34,6 @@ export class WsProxy { ) { const host = new ExecutionContextHost(args); host.setType('ws'); - exceptionsHandler.handle(error, host); + exceptionsHandler.handle(error as Error, host); } } diff --git a/packages/websockets/test/context/ws-context-creator.spec.ts b/packages/websockets/test/context/ws-context-creator.spec.ts index 4704d8e9967..516d362fab0 100644 --- a/packages/websockets/test/context/ws-context-creator.spec.ts +++ b/packages/websockets/test/context/ws-context-creator.spec.ts @@ -101,7 +101,7 @@ describe('WsContextCreator', () => { sinon .stub(guardsContextCreator, 'create') .callsFake(() => [{ canActivate: () => true }]); - const proxy = await contextCreator.create( + const proxy = contextCreator.create( instance, instance.test, module, @@ -113,11 +113,11 @@ describe('WsContextCreator', () => { expect(tryActivateSpy.called).to.be.true; }); describe('when can not activate', () => { - it('should throw forbidden exception', async () => { + it('should throw forbidden exception', () => { sinon .stub(guardsConsumer, 'tryActivate') .callsFake(async () => false); - const proxy = await contextCreator.create( + const proxy = contextCreator.create( instance, instance.test, module, @@ -187,8 +187,8 @@ describe('WsContextCreator', () => { beforeEach(() => { consumerApplySpy = sinon.spy(pipesConsumer, 'apply'); }); - it('should call "consumer.apply"', () => { - contextCreator.getParamValue( + it('should call "consumer.apply"', async () => { + await contextCreator.getParamValue( value, { metatype, type: WsParamtype.PAYLOAD, data: null }, transforms, diff --git a/packages/websockets/test/context/ws-proxy.spec.ts b/packages/websockets/test/context/ws-proxy.spec.ts index ada93709a5d..7266ce13b32 100644 --- a/packages/websockets/test/context/ws-proxy.spec.ts +++ b/packages/websockets/test/context/ws-proxy.spec.ts @@ -17,11 +17,8 @@ describe('WsProxy', () => { }); describe('create', () => { - it('should method return thunk', async () => { - const proxy = await routerProxy.create( - async (client, data) => {}, - handler, - ); + it('should method return thunk', () => { + const proxy = routerProxy.create(async (client, data) => {}, handler); expect(typeof proxy === 'function').to.be.true; }); From 10fdf16c476564d71acb752414b7ab58caeedc95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 26 Nov 2024 12:46:59 +0100 Subject: [PATCH 087/122] build: use strict null checks part 1 --- packages/core/injector/module.ts | 12 ++-- packages/core/inspector/graph-inspector.ts | 12 ++-- .../interceptors-context-creator.ts | 16 ++--- packages/core/metadata-scanner.ts | 5 +- packages/core/middleware/middleware-module.ts | 4 +- packages/core/middleware/utils.ts | 6 +- packages/core/router/router-explorer.ts | 8 +-- packages/core/router/router-module.ts | 2 +- .../router/utils/flatten-route-paths.util.ts | 10 ++- packages/core/scanner.ts | 64 +++++++++-------- packages/core/services/reflector.service.ts | 4 +- packages/microservices/client/client-grpc.ts | 12 ++-- packages/microservices/client/client-kafka.ts | 29 +++++--- packages/microservices/client/client-mqtt.ts | 21 +++--- packages/microservices/client/client-nats.ts | 7 +- .../client/client-proxy-factory.ts | 18 +++-- packages/microservices/client/client-proxy.ts | 58 ++++++++++------ packages/microservices/client/client-redis.ts | 9 +-- packages/microservices/client/client-rmq.ts | 30 +++++--- packages/microservices/client/client-tcp.ts | 25 ++++--- .../decorators/event-pattern.decorator.ts | 12 ++-- .../decorators/message-pattern.decorator.ts | 24 ++++--- .../microservices/exceptions/rpc-exception.ts | 5 +- .../listener-metadata-explorer.ts | 7 +- .../microservices/listeners-controller.ts | 4 +- .../microservices/module/clients.module.ts | 14 ++-- packages/microservices/nest-microservice.ts | 2 +- .../microservices/server/server-factory.ts | 20 ++++-- packages/microservices/server/server-grpc.ts | 14 ++-- packages/microservices/server/server-kafka.ts | 53 ++++++++------ packages/microservices/server/server-mqtt.ts | 8 +-- packages/microservices/server/server-nats.ts | 4 +- packages/microservices/server/server-redis.ts | 10 +-- packages/microservices/server/server-rmq.ts | 4 +- packages/microservices/server/server-tcp.ts | 6 +- packages/microservices/server/server.ts | 69 +++++++++++-------- packages/microservices/utils/param.utils.ts | 11 +-- .../adapters/express-adapter.ts | 24 ++++--- .../platform-express/multer/multer.module.ts | 6 +- .../adapters/fastify-adapter.ts | 14 ++-- packages/platform-ws/adapters/ws-adapter.ts | 14 ++-- packages/testing/testing-injector.ts | 6 ++ packages/testing/testing-module.builder.ts | 2 +- packages/tsconfig.build.json | 4 +- .../context/exception-filters-context.ts | 2 +- packages/websockets/errors/ws-exception.ts | 5 +- .../websockets/gateway-metadata-explorer.ts | 4 +- packages/websockets/sockets-container.ts | 2 +- packages/websockets/utils/param.utils.ts | 11 +-- packages/websockets/web-sockets-controller.ts | 2 +- tsconfig.json | 2 + 51 files changed, 413 insertions(+), 304 deletions(-) diff --git a/packages/core/injector/module.ts b/packages/core/injector/module.ts index 807e2049907..fa90bdc491e 100644 --- a/packages/core/injector/module.ts +++ b/packages/core/injector/module.ts @@ -128,8 +128,8 @@ export class Module { } get entryProviders(): Array> { - return Array.from(this._entryProviderKeys).map(token => - this.providers.get(token), + return Array.from(this._entryProviderKeys).map( + token => this.providers.get(token)!, ); } @@ -379,7 +379,7 @@ export class Module { new InstanceWrapper({ token: providerToken, name: (providerToken as Function)?.name || providerToken, - metatype: null, + metatype: null!, instance: value, isResolved: true, async: value instanceof Promise, @@ -497,7 +497,7 @@ export class Module { token: controller, name: controller.name, metatype: controller, - instance: null, + instance: null!, isResolved: false, scope: getClassScope(controller), durable: isDurable(controller), @@ -532,11 +532,11 @@ export class Module { if (options.isProvider && this.hasProvider(toReplace)) { const originalProvider = this._providers.get(toReplace); - return originalProvider.mergeWith({ provide: toReplace, ...options }); + return originalProvider!.mergeWith({ provide: toReplace, ...options }); } else if (!options.isProvider && this.hasInjectable(toReplace)) { const originalInjectable = this._injectables.get(toReplace); - return originalInjectable.mergeWith({ + return originalInjectable!.mergeWith({ provide: toReplace, ...options, }); diff --git a/packages/core/inspector/graph-inspector.ts b/packages/core/inspector/graph-inspector.ts index a2146a54398..f99a7e8a21f 100644 --- a/packages/core/inspector/graph-inspector.ts +++ b/packages/core/inspector/graph-inspector.ts @@ -91,7 +91,7 @@ export class GraphInspector { } public insertAttachedEnhancer(wrapper: InstanceWrapper) { - const existingNode = this.graph.getNodeById(wrapper.id); + const existingNode = this.graph.getNodeById(wrapper.id)!; existingNode.metadata.global = true; this.graph.insertAttachedEnhancer(existingNode.id); @@ -123,12 +123,12 @@ export class GraphInspector { sourceModuleName: moduleRef.name, durable: wrapper.isDependencyTreeDurable(), static: wrapper.isDependencyTreeStatic(), - scope: wrapper.scope, + scope: wrapper.scope!, transient: wrapper.isTransient, exported: moduleRef.exports.has(wrapper.token), token: wrapper.token, subtype: wrapper.subtype, - initTime: wrapper.initTime, + initTime: wrapper.initTime!, }, }); } @@ -168,7 +168,7 @@ export class GraphInspector { const moduleRef = this.container.getModuleByKey(entry.moduleToken); const sourceInstanceWrapper = moduleRef.controllers.get(entry.classRef) ?? - moduleRef.providers.get(entry.classRef); + moduleRef.providers.get(entry.classRef)!; const existingSourceNode = this.graph.getNodeById( sourceInstanceWrapper.id, ) as ClassNode; @@ -190,7 +190,7 @@ export class GraphInspector { }); } else { const name = - entry.enhancerRef.constructor?.name ?? + entry.enhancerRef!.constructor?.name ?? (entry.enhancerRef as Function).name; enhancers.push({ @@ -219,7 +219,7 @@ export class GraphInspector { targetClassName: target.name, sourceClassToken: source.token, targetClassToken: target.token, - targetModuleName: target.host?.name, + targetModuleName: target.host?.name!, keyOrIndex, injectionType, }, diff --git a/packages/core/interceptors/interceptors-context-creator.ts b/packages/core/interceptors/interceptors-context-creator.ts index b05dcb445b8..a7bebc04498 100644 --- a/packages/core/interceptors/interceptors-context-creator.ts +++ b/packages/core/interceptors/interceptors-context-creator.ts @@ -41,19 +41,19 @@ export class InterceptorsContextCreator extends ContextCreator { inquirerId?: string, ): R { if (isEmpty(metadata)) { - return [] as R; + return [] as any[] as R; } return iterate(metadata) .filter( interceptor => interceptor && (interceptor.name || interceptor.intercept), ) - .map(interceptor => - this.getInterceptorInstance(interceptor, contextId, inquirerId), + .map( + interceptor => + this.getInterceptorInstance(interceptor, contextId, inquirerId)!, ) - .filter( - (interceptor: NestInterceptor) => - interceptor && isFunction(interceptor.intercept), + .filter((interceptor: NestInterceptor) => + interceptor ? isFunction(interceptor.intercept) : false, ) .toArray() as R; } @@ -63,7 +63,7 @@ export class InterceptorsContextCreator extends ContextCreator { contextId = STATIC_CONTEXT, inquirerId?: string, ): NestInterceptor | null { - const isObject = (metatype as NestInterceptor).intercept; + const isObject = !!(metatype as NestInterceptor).intercept; if (isObject) { return metatype as NestInterceptor; } @@ -99,7 +99,7 @@ export class InterceptorsContextCreator extends ContextCreator { inquirerId?: string, ): T { if (!this.config) { - return [] as T; + return [] as unknown[] as T; } const globalInterceptors = this.config.getGlobalInterceptors() as T; if (contextId === STATIC_CONTEXT && !inquirerId) { diff --git a/packages/core/metadata-scanner.ts b/packages/core/metadata-scanner.ts index b70f0c8603d..24ec8f5b10f 100644 --- a/packages/core/metadata-scanner.ts +++ b/packages/core/metadata-scanner.ts @@ -34,7 +34,10 @@ export class MetadataScanner { visitedNames.set(property, true); // reason: https://github.com/nestjs/nest/pull/10821#issuecomment-1411916533 - const descriptor = Object.getOwnPropertyDescriptor(prototype, property); + const descriptor = Object.getOwnPropertyDescriptor( + prototype, + property, + )!; if ( descriptor.set || diff --git a/packages/core/middleware/middleware-module.ts b/packages/core/middleware/middleware-module.ts index 49468742ad3..f7430295b24 100644 --- a/packages/core/middleware/middleware-module.ts +++ b/packages/core/middleware/middleware-module.ts @@ -338,8 +338,8 @@ export class MiddlewareModule< } private getContextId(request: unknown, isTreeDurable: boolean): ContextId { - const contextId = ContextIdFactory.getByRequest(request); - if (!request[REQUEST_CONTEXT_ID]) { + const contextId = ContextIdFactory.getByRequest(request!); + if (!request![REQUEST_CONTEXT_ID]) { Object.defineProperty(request, REQUEST_CONTEXT_ID, { value: contextId, enumerable: false, diff --git a/packages/core/middleware/utils.ts b/packages/core/middleware/utils.ts index f9883a64c13..3b6568d991b 100644 --- a/packages/core/middleware/utils.ts +++ b/packages/core/middleware/utils.ts @@ -112,9 +112,9 @@ export function isMiddlewareRouteExcluded( if (excludedRoutes.length <= 0) { return false; } - const reqMethod = httpAdapter.getRequestMethod(req); - const originalUrl = httpAdapter.getRequestUrl(req); - const queryParamsIndex = originalUrl && originalUrl.indexOf('?'); + const reqMethod = httpAdapter.getRequestMethod?.(req)!; + const originalUrl = httpAdapter.getRequestUrl?.(req)!; + const queryParamsIndex = originalUrl ? originalUrl.indexOf('?') : -1; const pathname = queryParamsIndex >= 0 ? originalUrl.slice(0, queryParamsIndex) diff --git a/packages/core/router/router-explorer.ts b/packages/core/router/router-explorer.ts index 52ae8410948..1e142746059 100644 --- a/packages/core/router/router-explorer.ts +++ b/packages/core/router/router-explorer.ts @@ -26,15 +26,15 @@ import { NestContainer } from '../injector/container'; import { Injector } from '../injector/injector'; import { ContextId, InstanceWrapper } from '../injector/instance-wrapper'; import { Module } from '../injector/module'; -import { - InterceptorsConsumer, - InterceptorsContextCreator, -} from '../interceptors'; import { GraphInspector } from '../inspector/graph-inspector'; import { Entrypoint, HttpEntrypointMetadata, } from '../inspector/interfaces/entrypoint.interface'; +import { + InterceptorsConsumer, + InterceptorsContextCreator, +} from '../interceptors'; import { MetadataScanner } from '../metadata-scanner'; import { PipesConsumer, PipesContextCreator } from '../pipes'; import { ExceptionsFilter } from './interfaces/exceptions-filter.interface'; diff --git a/packages/core/router/router-module.ts b/packages/core/router/router-module.ts index 88831c3b322..72162dcdbf5 100644 --- a/packages/core/router/router-module.ts +++ b/packages/core/router/router-module.ts @@ -78,7 +78,7 @@ export class RouterModule { private updateTargetModulesCache(moduleCtor: Type) { let moduleClassSet: WeakSet; if (targetModulesByContainer.has(this.modulesContainer)) { - moduleClassSet = targetModulesByContainer.get(this.modulesContainer); + moduleClassSet = targetModulesByContainer.get(this.modulesContainer)!; } else { moduleClassSet = new WeakSet(); targetModulesByContainer.set(this.modulesContainer, moduleClassSet); diff --git a/packages/core/router/utils/flatten-route-paths.util.ts b/packages/core/router/utils/flatten-route-paths.util.ts index cbb411f25e5..fe0cff258a3 100644 --- a/packages/core/router/utils/flatten-route-paths.util.ts +++ b/packages/core/router/utils/flatten-route-paths.util.ts @@ -1,8 +1,12 @@ -import { normalizePath, isString } from '@nestjs/common/utils/shared.utils'; +import { Type } from '@nestjs/common'; +import { isString, normalizePath } from '@nestjs/common/utils/shared.utils'; import { Routes } from '../interfaces/routes.interface'; export function flattenRoutePaths(routes: Routes) { - const result = []; + const result: Array<{ + module: Type; + path: string; + }> = []; routes.forEach(item => { if (item.module && item.path) { result.push({ module: item.module, path: item.path }); @@ -15,7 +19,7 @@ export function flattenRoutePaths(routes: Routes) { normalizePath(item.path) + normalizePath(child.path), ); } else { - result.push({ path: item.path, module: child }); + result.push({ path: item.path, module: child as any as Type }); } }); result.push(...flattenRoutePaths(childrenRef)); diff --git a/packages/core/scanner.ts b/packages/core/scanner.ts index aba25daca26..6c109ea7d48 100644 --- a/packages/core/scanner.ts +++ b/packages/core/scanner.ts @@ -138,7 +138,7 @@ export class DependenciesScanner { ...((moduleDefinition as DynamicModule).imports || []), ]; - let registeredModuleRefs = []; + let registeredModuleRefs: Module[] = []; for (const [index, innerModule] of modules.entries()) { // In case of a circular dependency (ES module system), JavaScript will resolve the type to `undefined`. if (innerModule === undefined) { @@ -152,7 +152,7 @@ export class DependenciesScanner { } const moduleRefs = await this.scanForModules({ moduleDefinition: innerModule, - scope: [].concat(scope, moduleDefinition), + scope: ([] as Array).concat(scope, moduleDefinition as Type), ctxRegistry, overrides, lazy, @@ -215,7 +215,7 @@ export class DependenciesScanner { ...this.container.getDynamicMetadataByToken( token, MODULE_METADATA.IMPORTS as 'imports', - ), + )!, ]; for (const related of modules) { await this.insertImport(related, token, context); @@ -228,7 +228,7 @@ export class DependenciesScanner { ...this.container.getDynamicMetadataByToken( token, MODULE_METADATA.PROVIDERS as 'providers', - ), + )!, ]; providers.forEach(provider => { this.insertProvider(provider, token); @@ -242,7 +242,7 @@ export class DependenciesScanner { ...this.container.getDynamicMetadataByToken( token, MODULE_METADATA.CONTROLLERS as 'controllers', - ), + )!, ]; controllers.forEach(item => { this.insertController(item, token); @@ -267,7 +267,7 @@ export class DependenciesScanner { ...this.container.getDynamicMetadataByToken( token, MODULE_METADATA.EXPORTS as 'exports', - ), + )!, ]; exports.forEach(exportedProvider => this.insertExportedProvider(exportedProvider, token), @@ -285,19 +285,25 @@ export class DependenciesScanner { ); const methodInjectables = this.metadataScanner .getAllMethodNames(component.prototype) - .reduce((acc, method) => { - const methodInjectable = this.reflectKeyMetadata( - component, - metadataKey, - method, - ); + .reduce( + (acc, method) => { + const methodInjectable = this.reflectKeyMetadata( + component, + metadataKey, + method, + ); - if (methodInjectable) { - acc.push(methodInjectable); - } + if (methodInjectable) { + acc.push(methodInjectable); + } - return acc; - }, []); + return acc; + }, + [] as Array<{ + methodKey: string; + metadata: Type[]; + }>, + ); controllerInjectables.forEach(injectable => this.insertInjectable( @@ -308,13 +314,13 @@ export class DependenciesScanner { ), ); methodInjectables.forEach(methodInjectable => { - methodInjectable.metadata.forEach(injectable => + methodInjectable.metadata!.forEach(injectable => this.insertInjectable( injectable, token, component, ENHANCER_KEY_TO_SUBTYPE_MAP[metadataKey], - methodInjectable.methodKey, + methodInjectable.methodKey!, ), ); }); @@ -392,7 +398,7 @@ export class DependenciesScanner { const calculateDistance = ( moduleRef: Module, distance = 1, - modulesStack = [], + modulesStack: Module[] = [], ) => { const localModulesStack = [...modulesStack]; if (!moduleRef || localModulesStack.includes(moduleRef)) { @@ -412,7 +418,7 @@ export class DependenciesScanner { }; const rootModule = modulesGenerator.next().value; - calculateDistance(rootModule); + calculateDistance(rootModule!); } public async insertImport(related: any, token: string, context: string) { @@ -478,7 +484,7 @@ export class DependenciesScanner { const factoryOrClassProvider = newProvider as | FactoryProvider | ClassProvider; - if (this.isRequestOrTransient(factoryOrClassProvider.scope)) { + if (this.isRequestOrTransient(factoryOrClassProvider.scope!)) { return this.container.addInjectable(newProvider, token, enhancerSubtype); } this.container.addProvider(newProvider, token, enhancerSubtype); @@ -629,10 +635,10 @@ export class DependenciesScanner { */ public addScopedEnhancersMetadata() { iterate(this.applicationProvidersApplyMap) - .filter(wrapper => this.isRequestOrTransient(wrapper.scope)) + .filter(wrapper => this.isRequestOrTransient(wrapper.scope!)) .forEach(({ moduleKey, providerKey }) => { const modulesContainer = this.container.getModules(); - const { injectables } = modulesContainer.get(moduleKey); + const { injectables } = modulesContainer.get(moduleKey)!; const instanceWrapper = injectables.get(providerKey); const iterableIterator = modulesContainer.values(); @@ -644,7 +650,7 @@ export class DependenciesScanner { ) .flatten() .forEach(controllerOrEntryProvider => - controllerOrEntryProvider.addEnhancerMetadata(instanceWrapper), + controllerOrEntryProvider.addEnhancerMetadata(instanceWrapper!), ); }); } @@ -659,7 +665,7 @@ export class DependenciesScanner { collectionKey: 'providers' | 'injectables', ) => { const modules = this.container.getModules(); - const collection = modules.get(moduleKey)[collectionKey]; + const collection = modules.get(moduleKey)![collectionKey]; return collection.get(providerKey); }; @@ -667,12 +673,12 @@ export class DependenciesScanner { this.applicationProvidersApplyMap.forEach( ({ moduleKey, providerKey, type, scope }) => { let instanceWrapper: InstanceWrapper; - if (this.isRequestOrTransient(scope)) { + if (this.isRequestOrTransient(scope!)) { instanceWrapper = getInstanceWrapper( moduleKey, providerKey, 'injectables', - ); + )!; this.graphInspector.insertAttachedEnhancer(instanceWrapper); return applyRequestProvidersMap[type as string](instanceWrapper); @@ -681,7 +687,7 @@ export class DependenciesScanner { moduleKey, providerKey, 'providers', - ); + )!; this.graphInspector.insertAttachedEnhancer(instanceWrapper); applyProvidersMap[type as string](instanceWrapper.instance); }, diff --git a/packages/core/services/reflector.service.ts b/packages/core/services/reflector.service.ts index badd406f675..be666f9a58c 100644 --- a/packages/core/services/reflector.service.ts +++ b/packages/core/services/reflector.service.ts @@ -64,7 +64,7 @@ export class Reflector { const value = options.transform ? options.transform(metadataValue) : metadataValue; - SetMetadata(metadataKey, value ?? {})(target, key, descriptor); + SetMetadata(metadataKey, value ?? {})(target, key!, descriptor); }; decoratorFn.KEY = metadataKey; @@ -256,7 +256,7 @@ export class Reflector { public getAllAndOverride( metadataKeyOrDecorator: TKey, targets: (Type | Function)[], - ): TResult { + ): TResult | undefined { for (const target of targets) { const result = this.get(metadataKeyOrDecorator, target); if (result !== undefined) { diff --git a/packages/microservices/client/client-grpc.ts b/packages/microservices/client/client-grpc.ts index 22ea0d55961..d0ae9e41c80 100644 --- a/packages/microservices/client/client-grpc.ts +++ b/packages/microservices/client/client-grpc.ts @@ -43,7 +43,7 @@ export class ClientGrpcProxy ); } - constructor(protected readonly options: GrpcOptions['options']) { + constructor(protected readonly options: Required['options']) { super(); this.url = this.getOptionsProp(options, 'url') || GRPC_DEFAULT_URL; @@ -166,10 +166,10 @@ export class ClientGrpcProxy methodName: string, ): (...args: any[]) => Observable { return (...args: any[]) => { - const isRequestStream = client[methodName].requestStream; + const isRequestStream = client![methodName].requestStream; const stream = new Observable(observer => { let isClientCanceled = false; - let upstreamSubscription: Subscription; + let upstreamSubscription: Subscription | null = null; const upstreamSubjectOrData = args[0]; const maybeMetadata = args[1]; @@ -179,8 +179,8 @@ export class ClientGrpcProxy const call = isRequestStream && isUpstreamSubject - ? client[methodName](maybeMetadata) - : client[methodName](...args); + ? client![methodName](maybeMetadata) + : client![methodName](...args); if (isRequestStream && isUpstreamSubject) { upstreamSubscription = upstreamSubjectOrData.subscribe( @@ -295,7 +295,7 @@ export class ClientGrpcProxy public createClients(): any[] { const grpcContext = this.loadProto(); const packageOption = this.getOptionsProp(this.options, 'package'); - const grpcPackages = []; + const grpcPackages: any[] = []; const packageNames = Array.isArray(packageOption) ? packageOption : [packageOption]; diff --git a/packages/microservices/client/client-kafka.ts b/packages/microservices/client/client-kafka.ts index 42dac0d8c46..dc25d8ddfa3 100644 --- a/packages/microservices/client/client-kafka.ts +++ b/packages/microservices/client/client-kafka.ts @@ -73,15 +73,15 @@ export class ClientKafka } get producer(): Producer { - if (!this._consumer) { + if (!this._producer) { throw new Error( 'No producer initialized. Please, call the "connect" method first.', ); } - return this._producer; + return this._producer!; } - constructor(protected readonly options: KafkaOptions['options']) { + constructor(protected readonly options: Required['options']) { super(); const clientOptions = this.getOptionsProp( @@ -135,7 +135,7 @@ export class ClientKafka public async connect(): Promise { if (this.initialized) { - return this.initialized.then(() => this._producer); + return this.initialized.then(() => this._producer!); } /* eslint-disable-next-line no-async-promise-executor */ this.initialized = new Promise(async (resolve, reject) => { @@ -160,7 +160,7 @@ export class ClientKafka }, ); - this._consumer = this.client.consumer(consumerOptions); + this._consumer = this.client!.consumer(consumerOptions); this.registerConsumerEventListeners(); // Set member assignments on join and rebalance @@ -172,7 +172,7 @@ export class ClientKafka await this.bindTopics(); } - this._producer = this.client.producer(this.options.producer || {}); + this._producer = this.client!.producer(this.options.producer || {}); this.registerProducerEventListeners(); await this._producer.connect(); @@ -181,7 +181,7 @@ export class ClientKafka reject(err); } }); - return this.initialized.then(() => this._producer); + return this.initialized.then(() => this._producer!); } public async bindTopics(): Promise { @@ -217,13 +217,13 @@ export class ClientKafka public createResponseCallback(): (payload: EachMessagePayload) => any { return async (payload: EachMessagePayload) => { - const rawMessage = this.parser.parse( + const rawMessage = this.parser!.parse( Object.assign(payload.message, { topic: payload.topic, partition: payload.partition, }), ); - if (isUndefined(rawMessage.headers[KafkaHeaders.CORRELATION_ID])) { + if (isUndefined(rawMessage.headers![KafkaHeaders.CORRELATION_ID])) { return; } const { err, response, isDisposed, id } = @@ -270,6 +270,9 @@ export class ClientKafka } protected registerConsumerEventListeners() { + if (!this._consumer) { + return; + } this._consumer.on(this._consumer.events.CONNECT, () => this._status$.next(KafkaStatus.CONNECTED), ); @@ -288,6 +291,9 @@ export class ClientKafka } protected registerProducerEventListeners() { + if (!this._producer) { + return; + } this._producer.on(this._producer.events.CONNECT, () => this._status$.next(KafkaStatus.CONNECTED), ); @@ -309,7 +315,7 @@ export class ClientKafka this.options.send || {}, ); - return this._producer.send(message); + return this._producer!.send(message); } protected getReplyTopicPartition(topic: string): string { @@ -355,13 +361,14 @@ export class ClientKafka this.options.send || {}, ); - return this._producer.send(message); + return this._producer!.send(message); }) .catch(err => errorCallback(err)); return cleanup; } catch (err) { errorCallback(err); + return () => null; } } diff --git a/packages/microservices/client/client-mqtt.ts b/packages/microservices/client/client-mqtt.ts index 8ed3a75103a..02e7db931f8 100644 --- a/packages/microservices/client/client-mqtt.ts +++ b/packages/microservices/client/client-mqtt.ts @@ -28,8 +28,8 @@ export class ClientMqtt extends ClientProxy { protected readonly logger = new Logger(ClientProxy.name); protected readonly subscriptionsCount = new Map(); protected readonly url: string; - protected mqttClient: MqttClient; - protected connectionPromise: Promise; + protected mqttClient: MqttClient | null = null; + protected connectionPromise: Promise | null = null; protected isInitialConnection = false; protected isReconnecting = false; protected pendingEventListeners: Array<{ @@ -37,7 +37,7 @@ export class ClientMqtt extends ClientProxy { callback: MqttEvents[keyof MqttEvents]; }> = []; - constructor(protected readonly options: MqttOptions['options']) { + constructor(protected readonly options: Required['options']) { super(); this.url = this.getOptionsProp(this.options, 'url') ?? MQTT_DEFAULT_URL; @@ -64,7 +64,7 @@ export class ClientMqtt extends ClientProxy { public connect(): Promise { if (this.mqttClient) { - return this.connectionPromise; + return this.connectionPromise!; } this.mqttClient = this.createClient(); this.registerErrorListener(this.mqttClient); @@ -75,7 +75,7 @@ export class ClientMqtt extends ClientProxy { this.registerCloseListener(this.mqttClient); this.pendingEventListeners.forEach(({ event, callback }) => - this.mqttClient.on(event, callback), + this.mqttClient!.on(event, callback), ); this.pendingEventListeners = []; @@ -233,7 +233,7 @@ export class ClientMqtt extends ClientProxy { const options = serializedPacket.options; delete serializedPacket.options; - this.mqttClient.publish( + this.mqttClient!.publish( this.getRequestPattern(pattern), JSON.stringify(serializedPacket), this.mergePacketOptions(options), @@ -241,7 +241,7 @@ export class ClientMqtt extends ClientProxy { }; if (subscriptionsCount <= 0) { - this.mqttClient.subscribe( + this.mqttClient!.subscribe( responseChannel, (err: any) => !err && publishPacket(), ); @@ -255,6 +255,7 @@ export class ClientMqtt extends ClientProxy { }; } catch (err) { callback({ err }); + return () => {}; } } @@ -267,7 +268,7 @@ export class ClientMqtt extends ClientProxy { delete serializedPacket.options; return new Promise((resolve, reject) => - this.mqttClient.publish( + this.mqttClient!.publish( pattern, JSON.stringify(serializedPacket), this.mergePacketOptions(options), @@ -277,11 +278,11 @@ export class ClientMqtt extends ClientProxy { } protected unsubscribeFromChannel(channel: string) { - const subscriptionCount = this.subscriptionsCount.get(channel); + const subscriptionCount = this.subscriptionsCount.get(channel)!; this.subscriptionsCount.set(channel, subscriptionCount - 1); if (subscriptionCount - 1 <= 0) { - this.mqttClient.unsubscribe(channel); + this.mqttClient!.unsubscribe(channel); } } diff --git a/packages/microservices/client/client-nats.ts b/packages/microservices/client/client-nats.ts index c3b75cf2888..8559bf3d4af 100644 --- a/packages/microservices/client/client-nats.ts +++ b/packages/microservices/client/client-nats.ts @@ -29,13 +29,13 @@ type NatsMsg = any; export class ClientNats extends ClientProxy { protected readonly logger = new Logger(ClientNats.name); - protected natsClient: Client; - protected connectionPromise: Promise; + protected natsClient: Client | null = null; + protected connectionPromise: Promise | null = null; protected statusEventEmitter = new EventEmitter<{ [key in keyof NatsEvents]: Parameters; }>(); - constructor(protected readonly options: NatsOptions['options']) { + constructor(protected readonly options: Required['options']) { super(); natsPackage = loadPackage('nats', ClientNats.name, () => require('nats')); @@ -229,6 +229,7 @@ export class ClientNats extends ClientProxy { return () => subscription.unsubscribe(); } catch (err) { callback({ err }); + return () => {}; } } diff --git a/packages/microservices/client/client-proxy-factory.ts b/packages/microservices/client/client-proxy-factory.ts index 9d17ab83c5d..ab7abccb033 100644 --- a/packages/microservices/client/client-proxy-factory.ts +++ b/packages/microservices/client/client-proxy-factory.ts @@ -49,21 +49,27 @@ export class ClientProxyFactory { switch (transport) { case Transport.REDIS: return new ClientRedis( - options as RedisOptions['options'], + options as Required['options'], ) as ClientProxy; case Transport.NATS: - return new ClientNats(options as NatsOptions['options']) as ClientProxy; + return new ClientNats( + options as Required['options'], + ) as ClientProxy; case Transport.MQTT: - return new ClientMqtt(options as MqttOptions['options']) as ClientProxy; + return new ClientMqtt( + options as Required['options'], + ) as ClientProxy; case Transport.GRPC: return new ClientGrpcProxy(options as GrpcOptions['options']); case Transport.RMQ: - return new ClientRMQ(options as RmqOptions['options']) as ClientProxy; + return new ClientRMQ( + options as Required['options'], + ) as ClientProxy; case Transport.KAFKA: - return new ClientKafka(options as KafkaOptions['options']); + return new ClientKafka(options as Required['options']); default: return new ClientTCP( - options as TcpClientOptions['options'], + options as Required['options'], ) as ClientProxy; } } diff --git a/packages/microservices/client/client-proxy.ts b/packages/microservices/client/client-proxy.ts index ed25ad4d923..769eb5d0f2f 100644 --- a/packages/microservices/client/client-proxy.ts +++ b/packages/microservices/client/client-proxy.ts @@ -177,10 +177,28 @@ export abstract class ClientProxy< } protected getOptionsProp< - T extends ClientOptions['options'], - K extends keyof T, - >(obj: T, prop: K, defaultValue: T[K] = undefined) { - return obj && prop in obj ? obj[prop] : defaultValue; + Options extends ClientOptions['options'], + Attribute extends keyof Options, + >(obj: Options, prop: Attribute): Options[Attribute]; + protected getOptionsProp< + Options extends ClientOptions['options'], + Attribute extends keyof Options, + DefaultValue extends Options[Attribute] = Options[Attribute], + >( + obj: Options, + prop: Attribute, + defaultValue: DefaultValue, + ): Required[Attribute]; + protected getOptionsProp< + Options extends ClientOptions['options'], + Attribute extends keyof Options, + DefaultValue extends Options[Attribute] = Options[Attribute], + >( + obj: Options, + prop: Attribute, + defaultValue: DefaultValue = undefined as DefaultValue, + ) { + return obj && prop in obj ? obj![prop] : defaultValue; } protected normalizePattern(pattern: MsPattern): string { @@ -190,30 +208,26 @@ export abstract class ClientProxy< protected initializeSerializer(options: ClientOptions['options']) { this.serializer = (options && - ( - options as - | RedisOptions['options'] - | NatsOptions['options'] - | MqttOptions['options'] - | TcpClientOptions['options'] - | RmqOptions['options'] - | KafkaOptions['options'] - ).serializer) || + (options as + | RedisOptions['options'] + | NatsOptions['options'] + | MqttOptions['options'] + | TcpClientOptions['options'] + | RmqOptions['options'] + | KafkaOptions['options'])!.serializer) || new IdentitySerializer(); } protected initializeDeserializer(options: ClientOptions['options']) { this.deserializer = (options && - ( - options as - | RedisOptions['options'] - | NatsOptions['options'] - | MqttOptions['options'] - | TcpClientOptions['options'] - | RmqOptions['options'] - | KafkaOptions['options'] - ).deserializer) || + (options as + | RedisOptions['options'] + | NatsOptions['options'] + | MqttOptions['options'] + | TcpClientOptions['options'] + | RmqOptions['options'] + | KafkaOptions['options'])!.deserializer) || new IncomingResponseDeserializer(); } } diff --git a/packages/microservices/client/client-redis.ts b/packages/microservices/client/client-redis.ts index 00d5596db10..f0b5bc5e868 100644 --- a/packages/microservices/client/client-redis.ts +++ b/packages/microservices/client/client-redis.ts @@ -34,7 +34,7 @@ export class ClientRedis extends ClientProxy { callback: RedisEvents[keyof RedisEvents]; }> = []; - constructor(protected readonly options: RedisOptions['options']) { + constructor(protected readonly options: Required['options']) { super(); redisPackage = loadPackage('ioredis', ClientRedis.name, () => @@ -209,11 +209,11 @@ export class ClientRedis extends ClientProxy { ); return; } - if (times > this.getOptionsProp(this.options, 'retryAttempts')) { + if (times > this.getOptionsProp(this.options, 'retryAttempts', 0)) { this.logger.error('Retry time exhausted'); return; } - return this.getOptionsProp(this.options, 'retryDelay') ?? 5000; + return this.getOptionsProp(this.options, 'retryDelay', 5000); } public createResponseCallback(): ( @@ -280,6 +280,7 @@ export class ClientRedis extends ClientProxy { }; } catch (err) { callback({ err }); + return () => {}; } } @@ -295,7 +296,7 @@ export class ClientRedis extends ClientProxy { } protected unsubscribeFromChannel(channel: string) { - const subscriptionCount = this.subscriptionsCount.get(channel); + const subscriptionCount = this.subscriptionsCount.get(channel)!; this.subscriptionsCount.set(channel, subscriptionCount - 1); if (subscriptionCount - 1 <= 0) { diff --git a/packages/microservices/client/client-rmq.ts b/packages/microservices/client/client-rmq.ts index e313072ecbf..fa75d0fc33c 100644 --- a/packages/microservices/client/client-rmq.ts +++ b/packages/microservices/client/client-rmq.ts @@ -68,15 +68,19 @@ export class ClientRMQ extends ClientProxy { protected replyQueue: string; protected noAssert: boolean; - constructor(protected readonly options: RmqOptions['options']) { + constructor(protected readonly options: Required['options']) { super(); - this.queue = - this.getOptionsProp(this.options, 'queue') || RQM_DEFAULT_QUEUE; - this.queueOptions = - this.getOptionsProp(this.options, 'queueOptions') || - RQM_DEFAULT_QUEUE_OPTIONS; - this.replyQueue = - this.getOptionsProp(this.options, 'replyQueue') || REPLY_QUEUE; + this.queue = this.getOptionsProp(this.options, 'queue', RQM_DEFAULT_QUEUE); + this.queueOptions = this.getOptionsProp( + this.options, + 'queueOptions', + RQM_DEFAULT_QUEUE_OPTIONS, + ); + this.replyQueue = this.getOptionsProp( + this.options, + 'replyQueue', + REPLY_QUEUE, + ); this.noAssert = this.getOptionsProp(this.options, 'noAssert') ?? this.queueOptions.noAssert ?? @@ -300,7 +304,10 @@ export class ClientRMQ extends ClientProxy { ): Promise; public async handleMessage( packet: unknown, - options: Record | ((packet: WritePacket) => any), + options: + | Record + | ((packet: WritePacket) => any) + | undefined, callback?: (packet: WritePacket) => any, ): Promise { if (isFunction(options)) { @@ -313,13 +320,13 @@ export class ClientRMQ extends ClientProxy { options, ); if (isDisposed || err) { - callback({ + callback?.({ err, response, isDisposed: true, }); } - callback({ + callback?.({ err, response, }); @@ -372,6 +379,7 @@ export class ClientRMQ extends ClientProxy { return () => this.responseEmitter.removeListener(correlationId, listener); } catch (err) { callback({ err }); + return () => {}; } } diff --git a/packages/microservices/client/client-tcp.ts b/packages/microservices/client/client-tcp.ts index c410d03d65d..f8df2edff5d 100644 --- a/packages/microservices/client/client-tcp.ts +++ b/packages/microservices/client/client-tcp.ts @@ -19,19 +19,18 @@ export class ClientTCP extends ClientProxy { protected readonly host: string; protected readonly socketClass: Type; protected readonly tlsOptions?: ConnectionOptions; - protected socket: TcpSocket; - protected connectionPromise: Promise; + protected socket: TcpSocket | null = null; + protected connectionPromise: Promise | null = null; protected pendingEventListeners: Array<{ event: keyof TcpEvents; callback: TcpEvents[keyof TcpEvents]; }> = []; - constructor(options: TcpClientOptions['options']) { + constructor(options: Required['options']) { super(); - this.port = this.getOptionsProp(options, 'port') || TCP_DEFAULT_PORT; - this.host = this.getOptionsProp(options, 'host') || TCP_DEFAULT_HOST; - this.socketClass = - this.getOptionsProp(options, 'socketClass') || JsonSocket; + this.port = this.getOptionsProp(options, 'port', TCP_DEFAULT_PORT); + this.host = this.getOptionsProp(options, 'host', TCP_DEFAULT_HOST); + this.socketClass = this.getOptionsProp(options, 'socketClass', JsonSocket); this.tlsOptions = this.getOptionsProp(options, 'tlsOptions'); this.initializeSerializer(options); @@ -48,13 +47,13 @@ export class ClientTCP extends ClientProxy { this.registerErrorListener(this.socket); this.pendingEventListeners.forEach(({ event, callback }) => - this.socket.on(event, callback as any), + this.socket!.on(event, callback as any), ); this.pendingEventListeners = []; const source$ = this.connect$(this.socket.netSocket).pipe( tap(() => { - this.socket.on('message', (buffer: WritePacket & PacketId) => + this.socket!.on('message', (buffer: WritePacket & PacketId) => this.handleResponse(buffer), ); }), @@ -105,7 +104,6 @@ export class ClientTCP extends ClientProxy { ...this.tlsOptions, port: this.port, host: this.host, - socket, }); } else { socket = new net.Socket(); @@ -148,7 +146,7 @@ export class ClientTCP extends ClientProxy { public handleClose() { this.socket = null; - this.connectionPromise = undefined; + this.connectionPromise = null; if (this.routingMap.size > 0) { const err = new Error('Connection closed'); @@ -188,11 +186,12 @@ export class ClientTCP extends ClientProxy { const serializedPacket = this.serializer.serialize(packet); this.routingMap.set(packet.id, callback); - this.socket.sendMessage(serializedPacket); + this.socket!.sendMessage(serializedPacket); return () => this.routingMap.delete(packet.id); } catch (err) { callback({ err }); + return () => {}; } } @@ -202,6 +201,6 @@ export class ClientTCP extends ClientProxy { ...packet, pattern, }); - return this.socket.sendMessage(serializedPacket); + return this.socket!.sendMessage(serializedPacket); } } diff --git a/packages/microservices/decorators/event-pattern.decorator.ts b/packages/microservices/decorators/event-pattern.decorator.ts index ead1830b911..f4973d741bf 100644 --- a/packages/microservices/decorators/event-pattern.decorator.ts +++ b/packages/microservices/decorators/event-pattern.decorator.ts @@ -1,17 +1,17 @@ import { - isObject, - isNumber, isNil, + isNumber, + isObject, isSymbol, } from '@nestjs/common/utils/shared.utils'; import { + PATTERN_EXTRAS_METADATA, PATTERN_HANDLER_METADATA, PATTERN_METADATA, TRANSPORT_METADATA, - PATTERN_EXTRAS_METADATA, } from '../constants'; -import { PatternHandler } from '../enums/pattern-handler.enum'; import { Transport } from '../enums'; +import { PatternHandler } from '../enums/pattern-handler.enum'; /** * Subscribes to incoming events which fulfils chosen pattern. @@ -43,7 +43,7 @@ export const EventPattern: { extras = transportOrExtras; } else { transport = transportOrExtras as Transport | symbol; - extras = maybeExtras; + extras = maybeExtras!; } return ( target: object, @@ -52,7 +52,7 @@ export const EventPattern: { ) => { Reflect.defineMetadata( PATTERN_METADATA, - [].concat(metadata), + ([] as any[]).concat(metadata), descriptor.value, ); Reflect.defineMetadata( diff --git a/packages/microservices/decorators/message-pattern.decorator.ts b/packages/microservices/decorators/message-pattern.decorator.ts index 32030fe8a5a..c35bcb8f143 100644 --- a/packages/microservices/decorators/message-pattern.decorator.ts +++ b/packages/microservices/decorators/message-pattern.decorator.ts @@ -1,23 +1,23 @@ import { - isObject, - isNumber, isNil, + isNumber, + isObject, isSymbol, } from '@nestjs/common/utils/shared.utils'; import { + PATTERN_EXTRAS_METADATA, PATTERN_HANDLER_METADATA, PATTERN_METADATA, TRANSPORT_METADATA, - PATTERN_EXTRAS_METADATA, } from '../constants'; -import { PatternHandler } from '../enums/pattern-handler.enum'; -import { PatternMetadata } from '../interfaces/pattern-metadata.interface'; import { Transport } from '../enums'; +import { PatternHandler } from '../enums/pattern-handler.enum'; import { InvalidGrpcDecoratorException, RpcDecoratorMetadata, } from '../errors/invalid-grpc-message-decorator.exception'; +import { PatternMetadata } from '../interfaces/pattern-metadata.interface'; export enum GrpcMethodStreamingType { NO_STREAMING = 'no_stream', @@ -61,8 +61,9 @@ export const MessagePattern: { extras = transportOrExtras; } else { transport = transportOrExtras as Transport | symbol; - extras = maybeExtras; + extras = maybeExtras!; } + return ( target: object, key: string | symbol, @@ -71,7 +72,7 @@ export const MessagePattern: { try { Reflect.defineMetadata( PATTERN_METADATA, - [].concat(metadata), + ([] as any[]).concat(metadata), descriptor.value, ); Reflect.defineMetadata( @@ -100,7 +101,10 @@ export const MessagePattern: { */ export function GrpcMethod(service?: string): MethodDecorator; export function GrpcMethod(service: string, method?: string): MethodDecorator; -export function GrpcMethod(service: string, method?: string): MethodDecorator { +export function GrpcMethod( + service: string | undefined, + method?: string, +): MethodDecorator { return ( target: object, key: string | symbol, @@ -126,7 +130,7 @@ export function GrpcStreamMethod( method?: string, ): MethodDecorator; export function GrpcStreamMethod( - service: string, + service: string | undefined, method?: string, ): MethodDecorator { return ( @@ -160,7 +164,7 @@ export function GrpcStreamCall( method?: string, ): MethodDecorator; export function GrpcStreamCall( - service: string, + service: string | undefined, method?: string, ): MethodDecorator { return ( diff --git a/packages/microservices/exceptions/rpc-exception.ts b/packages/microservices/exceptions/rpc-exception.ts index 60d77f5c156..5a4bad658da 100644 --- a/packages/microservices/exceptions/rpc-exception.ts +++ b/packages/microservices/exceptions/rpc-exception.ts @@ -18,9 +18,8 @@ export class RpcException extends Error { ) { this.message = (this.error as Record).message; } else if (this.constructor) { - this.message = this.constructor.name - .match(/[A-Z][a-z]+|[0-9]+/g) - .join(' '); + this.message = + this.constructor!.name!.match(/[A-Z][a-z]+|[0-9]+/g)!.join(' '); } } diff --git a/packages/microservices/listener-metadata-explorer.ts b/packages/microservices/listener-metadata-explorer.ts index 721c2367062..e0fdd9c033e 100644 --- a/packages/microservices/listener-metadata-explorer.ts +++ b/packages/microservices/listener-metadata-explorer.ts @@ -39,8 +39,9 @@ export class ListenerMetadataExplorer { const instancePrototype = Object.getPrototypeOf(instance); return this.metadataScanner .getAllMethodNames(instancePrototype) - .map(method => - this.exploreMethodMetadata(instance, instancePrototype, method), + .map( + method => + this.exploreMethodMetadata(instance, instancePrototype, method)!, ) .filter(metadata => metadata); } @@ -49,7 +50,7 @@ export class ListenerMetadataExplorer { instance: Controller, instancePrototype: object, methodKey: string, - ): EventOrMessageListenerDefinition { + ): EventOrMessageListenerDefinition | undefined { const prototypeCallback = instancePrototype[methodKey]; const handlerType = Reflect.getMetadata( PATTERN_HANDLER_METADATA, diff --git a/packages/microservices/listeners-controller.ts b/packages/microservices/listeners-controller.ts index 57797396bfc..e4549a3a807 100644 --- a/packages/microservices/listeners-controller.ts +++ b/packages/microservices/listeners-controller.ts @@ -85,7 +85,7 @@ export class ListenersController { acc.push({ ...handler, patterns: [pattern] }), ); return acc; - }, []) + }, [] as EventOrMessageListenerDefinition[]) .forEach((definition: EventOrMessageListenerDefinition) => { const { patterns: [pattern], @@ -98,7 +98,7 @@ export class ListenersController { this.insertEntrypointDefinition( instanceWrapper, definition, - serverInstance.transportId, + serverInstance.transportId!, ); if (isStatic) { diff --git a/packages/microservices/module/clients.module.ts b/packages/microservices/module/clients.module.ts index f6ca14b589e..6630b394343 100644 --- a/packages/microservices/module/clients.module.ts +++ b/packages/microservices/module/clients.module.ts @@ -1,8 +1,10 @@ import { DynamicModule, + ForwardReference, Module, OnApplicationShutdown, Provider, + Type, } from '@nestjs/common'; import { ClientProxy, ClientProxyFactory } from '../client'; import { @@ -44,7 +46,9 @@ export class ClientsModule { option.imports && !accImports.includes(option.imports) ? accImports.concat(option.imports) : accImports, - [], + [] as Array< + DynamicModule | Promise | ForwardReference | Type + >, ); return { module: ClientsModule, @@ -64,8 +68,8 @@ export class ClientsModule { return [ this.createAsyncOptionsProvider(options), { - provide: options.useClass, - useClass: options.useClass, + provide: options.useClass!, + useClass: options.useClass!, }, ]; } @@ -86,7 +90,7 @@ export class ClientsModule { (optionsFactory: ClientsModuleOptionsFactory) => optionsFactory.createClientOptions(), ), - inject: [options.useExisting || options.useClass], + inject: [options.useExisting || options.useClass!], }; } @@ -94,7 +98,7 @@ export class ClientsModule { useFactory: ClientsProviderAsyncOptions['useFactory'], ) { return async (...args: any[]) => { - const clientOptions = await useFactory(...args); + const clientOptions = await useFactory!(...args); const clientProxyRef = ClientProxyFactory.create(clientOptions); return this.assignOnAppShutdownHook(clientProxyRef); }; diff --git a/packages/microservices/nest-microservice.ts b/packages/microservices/nest-microservice.ts index 8a7bf6fb936..ea299121c6e 100644 --- a/packages/microservices/nest-microservice.ts +++ b/packages/microservices/nest-microservice.ts @@ -64,7 +64,7 @@ export class NestMicroservice ) { super(container, config); - this.injector = new Injector({ preview: config.preview }); + this.injector = new Injector({ preview: config.preview! }); this.microservicesModule.register( container, this.graphInspector, diff --git a/packages/microservices/server/server-factory.ts b/packages/microservices/server/server-factory.ts index b978d9f40b0..0701f9b07a5 100644 --- a/packages/microservices/server/server-factory.ts +++ b/packages/microservices/server/server-factory.ts @@ -1,8 +1,14 @@ import { Transport } from '../enums/transport.enum'; import { CustomStrategy, + GrpcOptions, + KafkaOptions, MicroserviceOptions, MqttOptions, + NatsOptions, + RedisOptions, + RmqOptions, + TcpOptions, } from '../interfaces'; import { ServerGrpc } from './server-grpc'; import { ServerKafka } from './server-kafka'; @@ -20,19 +26,19 @@ export class ServerFactory { >; switch (transport) { case Transport.REDIS: - return new ServerRedis(options); + return new ServerRedis(options as Required['options']); case Transport.NATS: - return new ServerNats(options); + return new ServerNats(options as Required['options']); case Transport.MQTT: - return new ServerMqtt(options); + return new ServerMqtt(options as Required['options']); case Transport.GRPC: - return new ServerGrpc(options); + return new ServerGrpc(options as Required['options']); case Transport.KAFKA: - return new ServerKafka(options); + return new ServerKafka(options as Required['options']); case Transport.RMQ: - return new ServerRMQ(options); + return new ServerRMQ(options as Required['options']); default: - return new ServerTCP(options); + return new ServerTCP(options as Required['options']); } } } diff --git a/packages/microservices/server/server-grpc.ts b/packages/microservices/server/server-grpc.ts index aca484d5f6a..59c9c901a9c 100644 --- a/packages/microservices/server/server-grpc.ts +++ b/packages/microservices/server/server-grpc.ts @@ -63,7 +63,7 @@ export class ServerGrpc extends Server { ); } - constructor(private readonly options: GrpcOptions['options']) { + constructor(private readonly options: Readonly['options']) { super(); this.url = this.getOptionsProp(options, 'url') || GRPC_DEFAULT_URL; @@ -96,7 +96,7 @@ export class ServerGrpc extends Server { public async start(callback?: () => void) { await this.bindEvents(); - callback(); + callback?.(); } public async bindEvents() { @@ -136,7 +136,7 @@ export class ServerGrpc extends Server { const service = {}; for (const methodName in grpcService.prototype) { - let methodHandler = null; + let methodHandler: MessageHandler | null = null; let streamingType = GrpcMethodStreamingType.NO_STREAMING; const methodFunction = grpcService.prototype[methodName]; @@ -190,13 +190,13 @@ export class ServerGrpc extends Server { methodName: string, streaming: GrpcMethodStreamingType, grpcMethod: { path?: string }, - ) { + ): MessageHandler { let pattern = this.createPattern(serviceName, methodName, streaming); - let methodHandler = this.messageHandlers.get(pattern); + let methodHandler = this.messageHandlers.get(pattern)!; if (!methodHandler) { const packageServiceName = grpcMethod.path?.split?.('/')[1]; - pattern = this.createPattern(packageServiceName, methodName, streaming); - methodHandler = this.messageHandlers.get(pattern); + pattern = this.createPattern(packageServiceName!, methodName, streaming); + methodHandler = this.messageHandlers.get(pattern)!; } return methodHandler; } diff --git a/packages/microservices/server/server-kafka.ts b/packages/microservices/server/server-kafka.ts index 4bc0a66d9c8..ba6ef9052cb 100644 --- a/packages/microservices/server/server-kafka.ts +++ b/packages/microservices/server/server-kafka.ts @@ -39,23 +39,28 @@ export class ServerKafka extends Server { public readonly transportId = Transport.KAFKA; protected logger = new Logger(ServerKafka.name); - protected client: Kafka = null; - protected consumer: Consumer = null; - protected producer: Producer = null; - protected parser: KafkaParser = null; + protected client: Kafka | null = null; + protected consumer: Consumer | null = null; + protected producer: Producer | null = null; + protected parser: KafkaParser | null = null; protected brokers: string[] | BrokersFunction; protected clientId: string; protected groupId: string; - constructor(protected readonly options: KafkaOptions['options']) { + constructor(protected readonly options: Required['options']) { super(); - const clientOptions = - this.getOptionsProp(this.options, 'client') || ({} as KafkaConfig); - const consumerOptions = - this.getOptionsProp(this.options, 'consumer') || ({} as ConsumerConfig); - const postfixId = - this.getOptionsProp(this.options, 'postfixId') ?? '-server'; + const clientOptions = this.getOptionsProp( + this.options, + 'client', + {} as KafkaConfig, + ); + const consumerOptions = this.getOptionsProp( + this.options, + 'consumer', + {} as ConsumerConfig, + ); + const postfixId = this.getOptionsProp(this.options, 'postfixId', '-server'); this.brokers = clientOptions.brokers || [KAFKA_DEFAULT_BROKER]; @@ -98,8 +103,8 @@ export class ServerKafka extends Server { const consumerOptions = Object.assign(this.options.consumer || {}, { groupId: this.groupId, }); - this.consumer = this.client.consumer(consumerOptions); - this.producer = this.client.producer(this.options.producer); + this.consumer = this.client!.consumer(consumerOptions); + this.producer = this.client!.producer(this.options.producer); this.registerConsumerEventListeners(); this.registerProducerEventListeners(); @@ -110,6 +115,9 @@ export class ServerKafka extends Server { } protected registerConsumerEventListeners() { + if (!this.consumer) { + return; + } this.consumer.on(this.consumer.events.CONNECT, () => this._status$.next(KafkaStatus.CONNECTED), ); @@ -128,6 +136,9 @@ export class ServerKafka extends Server { } protected registerProducerEventListeners() { + if (!this.producer) { + return; + } this.producer.on(this.producer.events.CONNECT, () => this._status$.next(KafkaStatus.CONNECTED), ); @@ -151,7 +162,7 @@ export class ServerKafka extends Server { const consumerSubscribeOptions = this.options.subscribe || {}; if (registeredPatterns.length > 0) { - await this.consumer.subscribe({ + await this.consumer!.subscribe({ ...consumerSubscribeOptions, topics: registeredPatterns, }); @@ -178,7 +189,7 @@ export class ServerKafka extends Server { public async handleMessage(payload: EachMessagePayload) { const channel = payload.topic; - const rawMessage = this.parser.parse( + const rawMessage = this.parser!.parse( Object.assign(payload.message, { topic: payload.topic, partition: payload.partition, @@ -194,9 +205,9 @@ export class ServerKafka extends Server { rawMessage, payload.partition, payload.topic, - this.consumer, + this.consumer!, payload.heartbeat, - this.producer, + this.producer!, ]); const handler = this.getHandlerByPattern(packet.pattern); // if the correlation id or reply topic is not set @@ -291,7 +302,7 @@ export class ServerKafka extends Server { }, this.options.send || {}, ); - return this.producer.send(replyMessage); + return this.producer!.send(replyMessage); } public assignIsDisposedHeader( @@ -301,7 +312,7 @@ export class ServerKafka extends Server { if (!outgoingResponse.isDisposed) { return; } - outgoingMessage.headers[KafkaHeaders.NEST_IS_DISPOSED] = Buffer.alloc(1); + outgoingMessage.headers![KafkaHeaders.NEST_IS_DISPOSED] = Buffer.alloc(1); } public assignErrorHeader( @@ -315,7 +326,7 @@ export class ServerKafka extends Server { typeof outgoingResponse.err === 'object' ? JSON.stringify(outgoingResponse.err) : outgoingResponse.err; - outgoingMessage.headers[KafkaHeaders.NEST_ERR] = + outgoingMessage.headers![KafkaHeaders.NEST_ERR] = Buffer.from(stringifiedError); } @@ -323,7 +334,7 @@ export class ServerKafka extends Server { correlationId: string, outgoingMessage: Message, ) { - outgoingMessage.headers[KafkaHeaders.CORRELATION_ID] = + outgoingMessage.headers![KafkaHeaders.CORRELATION_ID] = Buffer.from(correlationId); } diff --git a/packages/microservices/server/server-mqtt.ts b/packages/microservices/server/server-mqtt.ts index 39af5092895..b1befe05117 100644 --- a/packages/microservices/server/server-mqtt.ts +++ b/packages/microservices/server/server-mqtt.ts @@ -41,9 +41,9 @@ export class ServerMqtt extends Server { callback: MqttEvents[keyof MqttEvents]; }> = []; - constructor(private readonly options: MqttOptions['options']) { + constructor(private readonly options: Required['options']) { super(); - this.url = this.getOptionsProp(options, 'url') || MQTT_DEFAULT_URL; + this.url = this.getOptionsProp(options, 'url', MQTT_DEFAULT_URL); mqttPackage = this.loadPackage('mqtt', ServerMqtt.name, () => require('mqtt'), @@ -87,7 +87,7 @@ export class ServerMqtt extends Server { const registeredPatterns = [...this.messageHandlers.keys()]; registeredPatterns.forEach(pattern => { - const { isEventHandler } = this.messageHandlers.get(pattern); + const { isEventHandler } = this.messageHandlers.get(pattern)!; mqttClient.subscribe( isEventHandler ? pattern : this.getRequestPattern(pattern), this.getOptionsProp(this.options, 'subscribeOptions'), @@ -120,7 +120,7 @@ export class ServerMqtt extends Server { ): Promise { const rawPacket = this.parseMessage(buffer.toString()); const packet = await this.deserializer.deserialize(rawPacket, { channel }); - const mqttContext = new MqttContext([channel, originalPacket]); + const mqttContext = new MqttContext([channel, originalPacket!]); if (isUndefined((packet as IncomingRequest).id)) { return this.handleEvent(channel, packet, mqttContext); } diff --git a/packages/microservices/server/server-nats.ts b/packages/microservices/server/server-nats.ts index 6a7c26f66c5..6f1a4560b4b 100644 --- a/packages/microservices/server/server-nats.ts +++ b/packages/microservices/server/server-nats.ts @@ -44,7 +44,7 @@ export class ServerNats< }>(); private readonly subscriptions: Subscription[] = []; - constructor(private readonly options: NatsOptions['options']) { + constructor(private readonly options: Required['options']) { super(); natsPackage = this.loadPackage('nats', ServerNats.name, () => @@ -211,7 +211,7 @@ export class ServerNats< case 'pingTimer': if (this.options.debug) { - this.logger.debug( + this.logger.debug!( `NatsStatus: type: "${status.type}", data: "${data}".`, ); } diff --git a/packages/microservices/server/server-redis.ts b/packages/microservices/server/server-redis.ts index f3f91d5c71e..9ee9b4be6f8 100644 --- a/packages/microservices/server/server-redis.ts +++ b/packages/microservices/server/server-redis.ts @@ -38,7 +38,7 @@ export class ServerRedis extends Server { callback: RedisEvents[keyof RedisEvents]; }> = []; - constructor(protected readonly options: RedisOptions['options']) { + constructor(protected readonly options: Required['options']) { super(); redisPackage = this.loadPackage('ioredis', ServerRedis.name, () => @@ -78,7 +78,7 @@ export class ServerRedis extends Server { Promise.all([this.subClient.connect(), this.pubClient.connect()]) .then(() => { this.bindEvents(this.subClient, this.pubClient); - callback(); + callback?.(); }) .catch(callback); } @@ -90,7 +90,7 @@ export class ServerRedis extends Server { ); const subscribePatterns = [...this.messageHandlers.keys()]; subscribePatterns.forEach(pattern => { - const { isEventHandler } = this.messageHandlers.get(pattern); + const { isEventHandler } = this.messageHandlers.get(pattern)!; const channel = isEventHandler ? pattern @@ -258,11 +258,11 @@ export class ServerRedis extends Server { ); return; } - if (times > this.getOptionsProp(this.options, 'retryAttempts')) { + if (times > this.getOptionsProp(this.options, 'retryAttempts', 0)) { this.logger.error(`Retry time exhausted`); return; } - return this.getOptionsProp(this.options, 'retryDelay') ?? 5000; + return this.getOptionsProp(this.options, 'retryDelay', 5000); } public unwrap(): T { diff --git a/packages/microservices/server/server-rmq.ts b/packages/microservices/server/server-rmq.ts index 5b9e28d79bf..20fdea33e31 100644 --- a/packages/microservices/server/server-rmq.ts +++ b/packages/microservices/server/server-rmq.ts @@ -65,7 +65,7 @@ export class ServerRMQ extends Server { callback: RmqEvents[keyof RmqEvents]; }> = []; - constructor(protected readonly options: RmqOptions['options']) { + constructor(protected readonly options: Required['options']) { super(); this.urls = this.getOptionsProp(this.options, 'urls') || [RQM_DEFAULT_URL]; this.queue = @@ -113,7 +113,7 @@ export class ServerRMQ extends Server { this._status$.next(RmqStatus.CONNECTED); this.channel = this.server.createChannel({ json: false, - setup: (channel: any) => this.setupChannel(channel, callback), + setup: (channel: any) => this.setupChannel(channel, callback!), }); }); diff --git a/packages/microservices/server/server-tcp.ts b/packages/microservices/server/server-tcp.ts index 39a953b4fd2..c78926ef675 100644 --- a/packages/microservices/server/server-tcp.ts +++ b/packages/microservices/server/server-tcp.ts @@ -41,7 +41,7 @@ export class ServerTCP extends Server { callback: TcpEvents[keyof TcpEvents]; }> = []; - constructor(private readonly options: TcpOptions['options']) { + constructor(private readonly options: Required['options']) { super(); this.port = this.getOptionsProp(options, 'port', TCP_DEFAULT_PORT); this.host = this.getOptionsProp(options, 'host', TCP_DEFAULT_HOST); @@ -121,14 +121,14 @@ export class ServerTCP extends Server { this.isManuallyTerminated || !this.getOptionsProp(this.options, 'retryAttempts') || this.retryAttemptsCount >= - this.getOptionsProp(this.options, 'retryAttempts') + this.getOptionsProp(this.options, 'retryAttempts', 0) ) { return undefined; } ++this.retryAttemptsCount; return setTimeout( () => this.server.listen(this.port, this.host), - this.getOptionsProp(this.options, 'retryDelay') || 0, + this.getOptionsProp(this.options, 'retryDelay', 0), ); } diff --git a/packages/microservices/server/server.ts b/packages/microservices/server/server.ts index 62eb4940350..723eba661db 100644 --- a/packages/microservices/server/server.ts +++ b/packages/microservices/server/server.ts @@ -102,7 +102,7 @@ export abstract class Server< callback.extras = extras; if (this.messageHandlers.has(normalizedPattern) && isEventHandler) { - const headRef = this.messageHandlers.get(normalizedPattern); + const headRef = this.messageHandlers.get(normalizedPattern)!; const getTail = (handler: MessageHandler) => handler?.next ? getTail(handler.next) : handler; @@ -120,7 +120,7 @@ export abstract class Server< public getHandlerByPattern(pattern: string): MessageHandler | null { const route = this.getRouteFromPattern(pattern); return this.messageHandlers.has(route) - ? this.messageHandlers.get(route) + ? this.messageHandlers.get(route)! : null; } @@ -128,12 +128,13 @@ export abstract class Server< stream$: Observable, respond: (data: WritePacket) => Promise | void, ): Subscription { - let dataBuffer: WritePacket[] = null; + let dataBuffer: WritePacket[] | null = null; + const scheduleOnNextTick = (data: WritePacket) => { if (!dataBuffer) { dataBuffer = [data]; process.nextTick(async () => { - for (const item of dataBuffer) { + for (const item of dataBuffer!) { await respond(item); } dataBuffer = null; @@ -197,10 +198,28 @@ export abstract class Server< } public getOptionsProp< - T extends MicroserviceOptions['options'], - K extends keyof T, - >(obj: T, prop: K, defaultValue: T[K] = undefined) { - return obj && prop in obj ? obj[prop] : defaultValue; + Options extends MicroserviceOptions['options'], + Attribute extends keyof Options, + >(obj: Options, prop: Attribute): Options[Attribute]; + public getOptionsProp< + Options extends MicroserviceOptions['options'], + Attribute extends keyof Options, + DefaultValue extends Options[Attribute] = Options[Attribute], + >( + obj: Options, + prop: Attribute, + defaultValue: DefaultValue, + ): Required[Attribute]; + public getOptionsProp< + Options extends MicroserviceOptions['options'], + Attribute extends keyof Options, + DefaultValue extends Options[Attribute] = Options[Attribute], + >( + obj: Options, + prop: Attribute, + defaultValue: DefaultValue = undefined as DefaultValue, + ) { + return obj && prop in obj ? obj![prop] : defaultValue; } protected handleError(error: string) { @@ -218,30 +237,26 @@ export abstract class Server< protected initializeSerializer(options: ClientOptions['options']) { this.serializer = (options && - ( - options as - | RedisOptions['options'] - | NatsOptions['options'] - | MqttOptions['options'] - | TcpOptions['options'] - | RmqOptions['options'] - | KafkaOptions['options'] - ).serializer) || + (options as + | RedisOptions['options'] + | NatsOptions['options'] + | MqttOptions['options'] + | TcpOptions['options'] + | RmqOptions['options'] + | KafkaOptions['options'])!.serializer) || new IdentitySerializer(); } protected initializeDeserializer(options: ClientOptions['options']) { this.deserializer = - (options && - ( - options as - | RedisOptions['options'] - | NatsOptions['options'] - | MqttOptions['options'] - | TcpOptions['options'] - | RmqOptions['options'] - | KafkaOptions['options'] - ).deserializer) || + (options! && + (options as + | RedisOptions['options'] + | NatsOptions['options'] + | MqttOptions['options'] + | TcpOptions['options'] + | RmqOptions['options'] + | KafkaOptions['options'])!.deserializer) || new IncomingRequestDeserializer(); } diff --git a/packages/microservices/utils/param.utils.ts b/packages/microservices/utils/param.utils.ts index 4046936aef9..6096709dbbe 100644 --- a/packages/microservices/utils/param.utils.ts +++ b/packages/microservices/utils/param.utils.ts @@ -11,12 +11,13 @@ export function createRpcParamDecorator( return (...pipes: (Type | PipeTransform)[]) => (target, key, index) => { const args = - Reflect.getMetadata(PARAM_ARGS_METADATA, target.constructor, key) || {}; + Reflect.getMetadata(PARAM_ARGS_METADATA, target.constructor, key!) || + {}; Reflect.defineMetadata( PARAM_ARGS_METADATA, assignMetadata(args, paramtype, index, undefined, ...pipes), target.constructor, - key, + key!, ); }; } @@ -29,7 +30,7 @@ export const createPipesRpcParamDecorator = ): ParameterDecorator => (target, key, index) => { const args = - Reflect.getMetadata(PARAM_ARGS_METADATA, target.constructor, key) || {}; + Reflect.getMetadata(PARAM_ARGS_METADATA, target.constructor, key!) || {}; const hasParamData = isNil(data) || isString(data); const paramData = hasParamData ? data : undefined; @@ -37,8 +38,8 @@ export const createPipesRpcParamDecorator = Reflect.defineMetadata( PARAM_ARGS_METADATA, - assignMetadata(args, paramtype, index, paramData, ...paramPipes), + assignMetadata(args, paramtype, index, paramData!, ...paramPipes), target.constructor, - key, + key!, ); }; diff --git a/packages/platform-express/adapters/express-adapter.ts b/packages/platform-express/adapters/express-adapter.ts index 6ff37178b09..b56ed16f2b9 100644 --- a/packages/platform-express/adapters/express-adapter.ts +++ b/packages/platform-express/adapters/express-adapter.ts @@ -1,13 +1,12 @@ -import type { Server } from 'http'; import { HttpStatus, InternalServerErrorException, Logger, RequestMethod, StreamableFile, + VERSION_NEUTRAL, VersioningOptions, VersioningType, - VERSION_NEUTRAL, } from '@nestjs/common'; import { VersionValue } from '@nestjs/common/interfaces'; import { @@ -24,13 +23,14 @@ import { } from '@nestjs/common/utils/shared.utils'; import { AbstractHttpAdapter } from '@nestjs/core/adapters/http-adapter'; import { RouterMethodFactory } from '@nestjs/core/helpers/router-method-factory'; +import * as bodyparser from 'body-parser'; import { json as bodyParserJson, urlencoded as bodyParserUrlencoded, } from 'body-parser'; -import * as bodyparser from 'body-parser'; import * as cors from 'cors'; import * as express from 'express'; +import type { Server } from 'http'; import * as http from 'http'; import * as https from 'https'; import { Duplex, pipeline } from 'stream'; @@ -94,7 +94,7 @@ export class ExpressAdapter extends AbstractHttpAdapter< body.errorHandler(err, response); }), response, - (err: Error) => { + (err: any) => { if (err) { body.errorLogger(err); } @@ -218,7 +218,7 @@ export class ExpressAdapter extends AbstractHttpAdapter< } public enableCors(options: CorsOptions | CorsOptionsDelegate) { - return this.use(cors(options)); + return this.use(cors(options as any)); } public createMiddlewareFactory( @@ -233,7 +233,7 @@ export class ExpressAdapter extends AbstractHttpAdapter< const isHttpsEnabled = options && options.httpsOptions; if (isHttpsEnabled) { this.httpServer = https.createServer( - options.httpsOptions, + options.httpsOptions!, this.getInstance(), ); } else { @@ -246,8 +246,8 @@ export class ExpressAdapter extends AbstractHttpAdapter< } public registerParserMiddleware(prefix?: string, rawBody?: boolean) { - const bodyParserJsonOptions = getBodyParserOptions(rawBody); - const bodyParserUrlencodedOptions = getBodyParserOptions(rawBody, { + const bodyParserJsonOptions = getBodyParserOptions(rawBody!); + const bodyParserUrlencodedOptions = getBodyParserOptions(rawBody!, { extended: true, }); @@ -260,13 +260,15 @@ export class ExpressAdapter extends AbstractHttpAdapter< .forEach(parserKey => this.use(parserMiddleware[parserKey])); } - public useBodyParser( + public useBodyParser< + Options extends NestExpressBodyParserOptions = NestExpressBodyParserOptions, + >( type: NestExpressBodyParserType, rawBody: boolean, options?: Omit, ): this { const parserOptions = getBodyParserOptions(rawBody, options); - const parser = bodyparser[type](parserOptions); + const parser = bodyparser[type](parserOptions!); this.use(parser); @@ -425,6 +427,8 @@ export class ExpressAdapter extends AbstractHttpAdapter< return handlerForHeaderVersioning; } + + throw new Error('Unsupported versioning options'); } private trackOpenConnections() { diff --git a/packages/platform-express/multer/multer.module.ts b/packages/platform-express/multer/multer.module.ts index 04823c95885..0ee770b9305 100644 --- a/packages/platform-express/multer/multer.module.ts +++ b/packages/platform-express/multer/multer.module.ts @@ -51,8 +51,8 @@ export class MulterModule { return [ this.createAsyncOptionsProvider(options), { - provide: options.useClass, - useClass: options.useClass, + provide: options.useClass!, + useClass: options.useClass!, }, ]; } @@ -71,7 +71,7 @@ export class MulterModule { provide: MULTER_MODULE_OPTIONS, useFactory: async (optionsFactory: MulterOptionsFactory) => optionsFactory.createMulterOptions(), - inject: [options.useExisting || options.useClass], + inject: [options.useExisting || options.useClass!], }; } } diff --git a/packages/platform-fastify/adapters/fastify-adapter.ts b/packages/platform-fastify/adapters/fastify-adapter.ts index 3a2ba937141..a501a505ee7 100644 --- a/packages/platform-fastify/adapters/fastify-adapter.ts +++ b/packages/platform-fastify/adapters/fastify-adapter.ts @@ -159,7 +159,7 @@ export class FastifyAdapter< return { get(version: string | Array) { if (Array.isArray(version)) { - return versions.get(version.find(v => versions.has(v))) || null; + return versions.get(version.find(v => versions.has(v))!) || null; } return versions.get(version) || null; }, @@ -427,11 +427,11 @@ export class FastifyAdapter< response.statusCode = statusCode; return response; } - return response.code(statusCode); + return (response as TReply).code(statusCode); } public end(response: TReply, message?: string) { - response.raw.end(message); + response.raw.end(message!); } public render( @@ -475,7 +475,7 @@ export class FastifyAdapter< public inject( opts?: InjectOptions | string, ): LightMyRequestChain | Promise { - return this.instance.inject(opts); + return this.instance.inject(opts!); } public async close() { @@ -539,7 +539,7 @@ export class FastifyAdapter< } public getRequestMethod(request: TRequest): string { - return request.raw ? request.raw.method : request.method; + return request.raw ? request.raw.method! : request.method; } public getRequestUrl(request: TRequest): string; @@ -581,7 +581,7 @@ export class FastifyAdapter< type, parserOptions, ( - req: RawBodyRequest>, + req: RawBodyRequest>, body: Buffer, done, ) => { @@ -708,7 +708,7 @@ export class FastifyAdapter< } private getRequestOriginalUrl(rawRequest: TRawRequest) { - return rawRequest.originalUrl || rawRequest.url; + return rawRequest.originalUrl || rawRequest.url!; } private injectRouteOptions( diff --git a/packages/platform-ws/adapters/ws-adapter.ts b/packages/platform-ws/adapters/ws-adapter.ts index 46f3494ed46..6292468ad89 100644 --- a/packages/platform-ws/adapters/ws-adapter.ts +++ b/packages/platform-ws/adapters/ws-adapter.ts @@ -70,7 +70,11 @@ export class WsAdapter extends AbstractWsAdapter { path?: string; }, ) { - const { server, path, ...wsOptions } = options; + const { server, path, ...wsOptions } = options as { + namespace?: string; + server?: any; + path?: string; + }; if (wsOptions?.namespace) { const error = new Error( '"WsAdapter" does not support namespaces. If you need namespaces in your project, consider using the "@nestjs/platform-socket.io" package instead.', @@ -88,7 +92,7 @@ export class WsAdapter extends AbstractWsAdapter { }), ); - this.addWsServerToRegistry(wsServer, port, path); + this.addWsServerToRegistry(wsServer, port, path!); return wsServer; } @@ -157,7 +161,7 @@ export class WsAdapter extends AbstractWsAdapter { if (!message) { return EMPTY; } - const messageHandler = handlersMap.get(message.event); + const messageHandler = handlersMap.get(message.event)!; const { callback } = messageHandler; return transform(callback(message.data, message.event)); } catch { @@ -213,8 +217,8 @@ export class WsAdapter extends AbstractWsAdapter { httpServer.on('upgrade', (request, socket, head) => { try { const baseUrl = 'ws://' + request.headers.host + '/'; - const pathname = new URL(request.url, baseUrl).pathname; - const wsServersCollection = this.wsServersRegistry.get(port); + const pathname = new URL(request.url!, baseUrl).pathname; + const wsServersCollection = this.wsServersRegistry.get(port)!; let isRequestDelegated = false; for (const wsServer of wsServersCollection) { diff --git a/packages/testing/testing-injector.ts b/packages/testing/testing-injector.ts index 4847e412283..3ece834be9f 100644 --- a/packages/testing/testing-injector.ts +++ b/packages/testing/testing-injector.ts @@ -59,6 +59,12 @@ export class TestingInjector extends Injector { metatype: wrapper.metatype, }); const internalCoreModule = this.container.getInternalCoreModuleRef(); + if (!internalCoreModule) { + throw new Error( + 'Expected to have internal core module reference at this point.', + ); + } + internalCoreModule.addCustomProvider( { provide: name, diff --git a/packages/testing/testing-module.builder.ts b/packages/testing/testing-module.builder.ts index b6670cbce51..6fd4443b41a 100644 --- a/packages/testing/testing-module.builder.ts +++ b/packages/testing/testing-module.builder.ts @@ -160,7 +160,7 @@ export class TestingModuleBuilder { private getRootModule() { const modules = this.container.getModules().values(); - return modules.next().value; + return modules.next().value!; } private async createInstancesOfDependencies( diff --git a/packages/tsconfig.build.json b/packages/tsconfig.build.json index 66fed93b6a6..e1bdb8e40dd 100644 --- a/packages/tsconfig.build.json +++ b/packages/tsconfig.build.json @@ -16,7 +16,9 @@ "sourceMap": false, "allowJs": false, "strict": true, - "strictNullChecks": false, + "strictNullChecks": true, + "forceConsistentCasingInFileNames": true, + "strictPropertyInitialization": false, "types": ["node"] } } diff --git a/packages/websockets/context/exception-filters-context.ts b/packages/websockets/context/exception-filters-context.ts index 6ec95a1f92f..7d630ad1cc6 100644 --- a/packages/websockets/context/exception-filters-context.ts +++ b/packages/websockets/context/exception-filters-context.ts @@ -33,6 +33,6 @@ export class ExceptionFiltersContext extends BaseExceptionFilterContext { } public getGlobalMetadata(): T { - return [] as T; + return [] as any[] as T; } } diff --git a/packages/websockets/errors/ws-exception.ts b/packages/websockets/errors/ws-exception.ts index cf7e639a2cc..b20f6499144 100644 --- a/packages/websockets/errors/ws-exception.ts +++ b/packages/websockets/errors/ws-exception.ts @@ -15,9 +15,8 @@ export class WsException extends Error { ) { this.message = (this.error as Record).message; } else if (this.constructor) { - this.message = this.constructor.name - .match(/[A-Z][a-z]+|[0-9]+/g) - .join(' '); + this.message = + this.constructor!.name!.match(/[A-Z][a-z]+|[0-9]+/g)!.join(' '); } } diff --git a/packages/websockets/gateway-metadata-explorer.ts b/packages/websockets/gateway-metadata-explorer.ts index f57fc9ee9f1..aadaaf67cd0 100644 --- a/packages/websockets/gateway-metadata-explorer.ts +++ b/packages/websockets/gateway-metadata-explorer.ts @@ -21,14 +21,14 @@ export class GatewayMetadataExplorer { const instancePrototype = Object.getPrototypeOf(instance); return this.metadataScanner .getAllMethodNames(instancePrototype) - .map(method => this.exploreMethodMetadata(instancePrototype, method)) + .map(method => this.exploreMethodMetadata(instancePrototype, method)!) .filter(metadata => metadata); } public exploreMethodMetadata( instancePrototype: object, methodName: string, - ): MessageMappingProperties { + ): MessageMappingProperties | null { const callback = instancePrototype[methodName]; const isMessageMapping = Reflect.getMetadata( MESSAGE_MAPPING_METADATA, diff --git a/packages/websockets/sockets-container.ts b/packages/websockets/sockets-container.ts index 1090150e823..f6b0ccfccf3 100644 --- a/packages/websockets/sockets-container.ts +++ b/packages/websockets/sockets-container.ts @@ -15,7 +15,7 @@ export class SocketsContainer { options: T, ): ServerAndEventStreamsHost { const uniqueToken = this.generateHashByOptions(options); - return this.serverAndEventStreamsHosts.get(uniqueToken); + return this.serverAndEventStreamsHosts.get(uniqueToken)!; } public addOne( diff --git a/packages/websockets/utils/param.utils.ts b/packages/websockets/utils/param.utils.ts index 48598d97e98..6f539903b6b 100644 --- a/packages/websockets/utils/param.utils.ts +++ b/packages/websockets/utils/param.utils.ts @@ -11,12 +11,13 @@ export function createWsParamDecorator( return (...pipes: (Type | PipeTransform)[]) => (target, key, index) => { const args = - Reflect.getMetadata(PARAM_ARGS_METADATA, target.constructor, key) || {}; + Reflect.getMetadata(PARAM_ARGS_METADATA, target.constructor, key!) || + {}; Reflect.defineMetadata( PARAM_ARGS_METADATA, assignMetadata(args, paramtype, index, undefined, ...pipes), target.constructor, - key, + key!, ); }; } @@ -29,15 +30,15 @@ export const createPipesWsParamDecorator = ): ParameterDecorator => (target, key, index) => { const args = - Reflect.getMetadata(PARAM_ARGS_METADATA, target.constructor, key) || {}; + Reflect.getMetadata(PARAM_ARGS_METADATA, target.constructor, key!) || {}; const hasParamData = isNil(data) || isString(data); const paramData = hasParamData ? data : undefined; const paramPipes = hasParamData ? pipes : [data, ...pipes]; Reflect.defineMetadata( PARAM_ARGS_METADATA, - assignMetadata(args, paramtype, index, paramData, ...paramPipes), + assignMetadata(args, paramtype, index, paramData!, ...paramPipes), target.constructor, - key, + key!, ); }; diff --git a/packages/websockets/web-sockets-controller.ts b/packages/websockets/web-sockets-controller.ts index ac47927e412..09677f4d871 100644 --- a/packages/websockets/web-sockets-controller.ts +++ b/packages/websockets/web-sockets-controller.ts @@ -156,7 +156,7 @@ export class WebSocketsController { .pipe( distinctUntilChanged((prev, curr) => compareElementAt(prev, curr, 0)), ) - .subscribe((args: unknown[]) => instance.handleConnection(...args)); + .subscribe((args: unknown[]) => instance.handleConnection!(...args)); } } diff --git a/tsconfig.json b/tsconfig.json index 1752d4258a3..b9e2adb889f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,6 +4,8 @@ "noImplicitAny": false, "noUnusedLocals": false, "removeComments": true, + "strictNullChecks": true, + "strictPropertyInitialization": false, "forceConsistentCasingInFileNames": true, "noLib": false, "emitDecoratorMetadata": true, From 22008976ec4ecbeeabb8daee5ed3d2219e2a217a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 26 Nov 2024 13:36:33 +0100 Subject: [PATCH 088/122] build: use strict null checks part 2 --- .../decorators/core/apply-decorators.ts | 4 +- .../decorators/core/dependencies.decorator.ts | 2 +- .../decorators/core/inject.decorator.ts | 4 +- .../create-route-param-metadata.decorator.ts | 5 +- .../decorators/http/route-params.decorator.ts | 13 ++--- .../exceptions/bad-gateway.exception.ts | 2 +- .../exceptions/bad-request.exception.ts | 2 +- .../common/exceptions/conflict.exception.ts | 6 ++- .../common/exceptions/forbidden.exception.ts | 2 +- .../exceptions/gateway-timeout.exception.ts | 2 +- packages/common/exceptions/gone.exception.ts | 2 +- .../http-version-not-supported.exception.ts | 2 +- packages/common/exceptions/http.exception.ts | 10 ++-- .../exceptions/im-a-teapot.exception.ts | 2 +- .../internal-server-error.exception.ts | 2 +- .../method-not-allowed.exception.ts | 2 +- .../exceptions/misdirected.exception.ts | 2 +- .../exceptions/not-acceptable.exception.ts | 2 +- .../common/exceptions/not-found.exception.ts | 2 +- .../exceptions/not-implemented.exception.ts | 2 +- .../exceptions/payload-too-large.exception.ts | 2 +- .../precondition-failed.exception.ts | 2 +- .../exceptions/request-timeout.exception.ts | 2 +- .../service-unavailable.exception.ts | 2 +- .../exceptions/unauthorized.exception.ts | 2 +- .../unprocessable-entity.exception.ts | 2 +- .../unsupported-media-type.exception.ts | 2 +- .../configurable-module.builder.ts | 24 +++++---- .../utils/get-injection-providers.util.ts | 8 +-- .../pipes/file/max-file-size.validator.ts | 2 +- packages/common/pipes/parse-array.pipe.ts | 2 +- packages/common/pipes/parse-date.pipe.ts | 4 +- packages/common/pipes/parse-enum.pipe.ts | 2 +- packages/common/pipes/parse-uuid.pipe.ts | 2 +- packages/common/pipes/validation.pipe.ts | 10 ++-- .../common/services/console-logger.service.ts | 6 +-- packages/common/services/logger.service.ts | 8 +-- packages/core/application-config.ts | 2 +- .../discoverable-meta-host-collection.ts | 4 +- packages/core/discovery/discovery-service.ts | 8 +-- .../undefined-dependency.exception.ts | 6 +-- packages/core/errors/messages.ts | 8 +-- .../base-exception-filter-context.ts | 8 +-- .../core/exceptions/base-exception-filter.ts | 2 +- .../external-exception-filter-context.ts | 4 +- packages/core/guards/guards-consumer.ts | 2 +- .../core/guards/guards-context-creator.ts | 10 ++-- packages/core/helpers/context-creator.ts | 2 +- packages/core/helpers/context-id-factory.ts | 2 +- .../core/helpers/execution-context-host.ts | 8 +-- .../core/helpers/external-context-creator.ts | 4 +- packages/core/helpers/external-proxy.ts | 2 +- packages/core/helpers/http-adapter-host.ts | 2 +- .../core/hooks/before-app-shutdown.hook.ts | 2 +- .../injector/abstract-instance-resolver.ts | 6 +-- packages/core/injector/container.ts | 26 ++++----- packages/core/injector/injector.ts | 54 ++++++++++--------- packages/core/injector/instance-wrapper.ts | 39 +++++++------- .../lazy-module-loader/lazy-module-loader.ts | 4 +- packages/core/injector/module.ts | 4 +- .../deep-hashed-module-opaque-key-factory.ts | 2 +- packages/core/inspector/graph-inspector.ts | 2 +- packages/core/inspector/serialized-graph.ts | 2 +- .../interceptors/interceptors-consumer.ts | 2 +- packages/core/metadata-scanner.ts | 8 +-- packages/core/middleware/container.ts | 6 +-- packages/core/middleware/middleware-module.ts | 12 ++--- .../middleware/route-info-path-extractor.ts | 2 +- packages/core/middleware/routes-mapper.ts | 7 ++- packages/core/nest-application-context.ts | 10 ++-- packages/core/nest-application.ts | 8 +-- packages/core/nest-factory.ts | 20 +++---- packages/core/pipes/pipes-context-creator.ts | 8 +-- packages/core/repl/assign-to-object.util.ts | 5 +- packages/core/repl/repl-context.ts | 2 +- packages/core/repl/repl-logger.ts | 2 +- .../route-params-factory.interface.ts | 2 +- packages/core/router/paths-explorer.ts | 2 +- packages/core/router/route-params-factory.ts | 2 +- .../core/router/router-exception-filters.ts | 6 +-- .../core/router/router-execution-context.ts | 8 +-- packages/core/router/router-explorer.ts | 12 ++--- packages/core/router/router-proxy.ts | 6 +-- packages/core/router/routes-resolver.ts | 10 ++-- packages/core/router/sse-stream.ts | 8 +-- .../microservices/listeners-controller.ts | 4 +- .../microservices/module/clients.module.ts | 13 +++-- packages/microservices/server/server-nats.ts | 2 +- .../exceptions/base-ws-exception-filter.ts | 8 +-- packages/websockets/socket-module.ts | 4 +- 90 files changed, 287 insertions(+), 259 deletions(-) diff --git a/packages/common/decorators/core/apply-decorators.ts b/packages/common/decorators/core/apply-decorators.ts index 0d8a22219c9..bc898c49527 100644 --- a/packages/common/decorators/core/apply-decorators.ts +++ b/packages/common/decorators/core/apply-decorators.ts @@ -22,8 +22,8 @@ export function applyDecorators( } (decorator as MethodDecorator | PropertyDecorator)( target, - propertyKey, - descriptor, + propertyKey!, + descriptor!, ); } }; diff --git a/packages/common/decorators/core/dependencies.decorator.ts b/packages/common/decorators/core/dependencies.decorator.ts index b9657efa071..99a60008c88 100644 --- a/packages/common/decorators/core/dependencies.decorator.ts +++ b/packages/common/decorators/core/dependencies.decorator.ts @@ -3,7 +3,7 @@ import { PARAMTYPES_METADATA } from '../../constants'; export function flatten = any>( arr: T, ): T extends Array ? R : never { - const flat = [].concat(...arr); + const flat = ([] as any[]).concat(...arr); return flat.some(Array.isArray) ? flatten(flat) : flat; } diff --git a/packages/common/decorators/core/inject.decorator.ts b/packages/common/decorators/core/inject.decorator.ts index c632f423f4f..f8bedbd63f7 100644 --- a/packages/common/decorators/core/inject.decorator.ts +++ b/packages/common/decorators/core/inject.decorator.ts @@ -41,10 +41,10 @@ export function Inject( const injectCallHasArguments = arguments.length > 0; return (target: object, key: string | symbol | undefined, index?: number) => { - let type = token || Reflect.getMetadata('design:type', target, key); + let type = token || Reflect.getMetadata('design:type', target, key!); // Try to infer the token in a constructor-based injection if (!type && !injectCallHasArguments) { - type = Reflect.getMetadata(PARAMTYPES_METADATA, target, key)?.[index]; + type = Reflect.getMetadata(PARAMTYPES_METADATA, target, key!)?.[index!]; } if (!isUndefined(index)) { diff --git a/packages/common/decorators/http/create-route-param-metadata.decorator.ts b/packages/common/decorators/http/create-route-param-metadata.decorator.ts index 245998d741a..62f90b7f627 100644 --- a/packages/common/decorators/http/create-route-param-metadata.decorator.ts +++ b/packages/common/decorators/http/create-route-param-metadata.decorator.ts @@ -29,7 +29,8 @@ export function createParamDecorator( ): ParameterDecorator => (target, key, index) => { const args = - Reflect.getMetadata(ROUTE_ARGS_METADATA, target.constructor, key) || {}; + Reflect.getMetadata(ROUTE_ARGS_METADATA, target.constructor, key!) || + {}; const isPipe = (pipe: any) => pipe && @@ -53,7 +54,7 @@ export function createParamDecorator( ...(paramPipes as PipeTransform[]), ), target.constructor, - key, + key!, ); enhancers.forEach(fn => fn(target, key, index)); }; diff --git a/packages/common/decorators/http/route-params.decorator.ts b/packages/common/decorators/http/route-params.decorator.ts index dffb9d72c48..76963ee7bd5 100644 --- a/packages/common/decorators/http/route-params.decorator.ts +++ b/packages/common/decorators/http/route-params.decorator.ts @@ -48,7 +48,8 @@ function createRouteParamDecorator(paramtype: RouteParamtypes) { return (data?: ParamData): ParameterDecorator => (target, key, index) => { const args = - Reflect.getMetadata(ROUTE_ARGS_METADATA, target.constructor, key) || {}; + Reflect.getMetadata(ROUTE_ARGS_METADATA, target.constructor, key!) || + {}; Reflect.defineMetadata( ROUTE_ARGS_METADATA, assignMetadata>( @@ -58,7 +59,7 @@ function createRouteParamDecorator(paramtype: RouteParamtypes) { data, ), target.constructor, - key, + key!, ); }; } @@ -71,16 +72,16 @@ const createPipesRouteParamDecorator = ): ParameterDecorator => (target, key, index) => { const args = - Reflect.getMetadata(ROUTE_ARGS_METADATA, target.constructor, key) || {}; + Reflect.getMetadata(ROUTE_ARGS_METADATA, target.constructor, key!) || {}; const hasParamData = isNil(data) || isString(data); const paramData = hasParamData ? data : undefined; const paramPipes = hasParamData ? pipes : [data, ...pipes]; Reflect.defineMetadata( ROUTE_ARGS_METADATA, - assignMetadata(args, paramtype, index, paramData, ...paramPipes), + assignMetadata(args, paramtype, index, paramData!, ...paramPipes), target.constructor, - key, + key!, ); }; @@ -117,7 +118,7 @@ export const Response: ( RESPONSE_PASSTHROUGH_METADATA, options?.passthrough, target.constructor, - key, + key!, ); } return createRouteParamDecorator(RouteParamtypes.RESPONSE)()( diff --git a/packages/common/exceptions/bad-gateway.exception.ts b/packages/common/exceptions/bad-gateway.exception.ts index 30d45a28646..5bb9cd156a3 100644 --- a/packages/common/exceptions/bad-gateway.exception.ts +++ b/packages/common/exceptions/bad-gateway.exception.ts @@ -43,7 +43,7 @@ export class BadGatewayException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.BAD_GATEWAY, ), HttpStatus.BAD_GATEWAY, diff --git a/packages/common/exceptions/bad-request.exception.ts b/packages/common/exceptions/bad-request.exception.ts index 004417a8c8a..33ad6652b65 100644 --- a/packages/common/exceptions/bad-request.exception.ts +++ b/packages/common/exceptions/bad-request.exception.ts @@ -43,7 +43,7 @@ export class BadRequestException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.BAD_REQUEST, ), HttpStatus.BAD_REQUEST, diff --git a/packages/common/exceptions/conflict.exception.ts b/packages/common/exceptions/conflict.exception.ts index 39342c34d1f..27bdda8aa07 100644 --- a/packages/common/exceptions/conflict.exception.ts +++ b/packages/common/exceptions/conflict.exception.ts @@ -41,7 +41,11 @@ export class ConflictException extends HttpException { HttpException.extractDescriptionAndOptionsFrom(descriptionOrOptions); super( - HttpException.createBody(objectOrError, description, HttpStatus.CONFLICT), + HttpException.createBody( + objectOrError, + description!, + HttpStatus.CONFLICT, + ), HttpStatus.CONFLICT, httpExceptionOptions, ); diff --git a/packages/common/exceptions/forbidden.exception.ts b/packages/common/exceptions/forbidden.exception.ts index ada4ca4fd7c..f04b86bcaa0 100644 --- a/packages/common/exceptions/forbidden.exception.ts +++ b/packages/common/exceptions/forbidden.exception.ts @@ -43,7 +43,7 @@ export class ForbiddenException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.FORBIDDEN, ), HttpStatus.FORBIDDEN, diff --git a/packages/common/exceptions/gateway-timeout.exception.ts b/packages/common/exceptions/gateway-timeout.exception.ts index 2a42838a11f..49dee49381f 100644 --- a/packages/common/exceptions/gateway-timeout.exception.ts +++ b/packages/common/exceptions/gateway-timeout.exception.ts @@ -43,7 +43,7 @@ export class GatewayTimeoutException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.GATEWAY_TIMEOUT, ), HttpStatus.GATEWAY_TIMEOUT, diff --git a/packages/common/exceptions/gone.exception.ts b/packages/common/exceptions/gone.exception.ts index 39a608369f2..b1fc0f65b52 100644 --- a/packages/common/exceptions/gone.exception.ts +++ b/packages/common/exceptions/gone.exception.ts @@ -41,7 +41,7 @@ export class GoneException extends HttpException { HttpException.extractDescriptionAndOptionsFrom(descriptionOrOptions); super( - HttpException.createBody(objectOrError, description, HttpStatus.GONE), + HttpException.createBody(objectOrError, description!, HttpStatus.GONE), HttpStatus.GONE, httpExceptionOptions, ); diff --git a/packages/common/exceptions/http-version-not-supported.exception.ts b/packages/common/exceptions/http-version-not-supported.exception.ts index 5a30438615b..23283d343e2 100644 --- a/packages/common/exceptions/http-version-not-supported.exception.ts +++ b/packages/common/exceptions/http-version-not-supported.exception.ts @@ -45,7 +45,7 @@ export class HttpVersionNotSupportedException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.HTTP_VERSION_NOT_SUPPORTED, ), HttpStatus.HTTP_VERSION_NOT_SUPPORTED, diff --git a/packages/common/exceptions/http.exception.ts b/packages/common/exceptions/http.exception.ts index a2a1b772524..fe162c6a779 100644 --- a/packages/common/exceptions/http.exception.ts +++ b/packages/common/exceptions/http.exception.ts @@ -132,16 +132,16 @@ export class HttpException extends IntrinsicException { ): HttpExceptionBody | Body { if (!arg0) { return { - message: arg1, - statusCode: statusCode, + message: arg1!, + statusCode: statusCode!, }; } if (isString(arg0) || Array.isArray(arg0) || isNumber(arg0)) { return { - message: arg0, + message: arg0!, error: arg1 as string, - statusCode: statusCode, + statusCode: statusCode!, }; } @@ -153,7 +153,7 @@ export class HttpException extends IntrinsicException { ): string { return isString(descriptionOrOptions) ? descriptionOrOptions - : descriptionOrOptions?.description; + : descriptionOrOptions?.description!; } public static getHttpExceptionOptionsFrom( diff --git a/packages/common/exceptions/im-a-teapot.exception.ts b/packages/common/exceptions/im-a-teapot.exception.ts index 6c063b17c8a..209e32c4380 100644 --- a/packages/common/exceptions/im-a-teapot.exception.ts +++ b/packages/common/exceptions/im-a-teapot.exception.ts @@ -46,7 +46,7 @@ export class ImATeapotException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.I_AM_A_TEAPOT, ), HttpStatus.I_AM_A_TEAPOT, diff --git a/packages/common/exceptions/internal-server-error.exception.ts b/packages/common/exceptions/internal-server-error.exception.ts index a5f7c06b9ae..f8955b86afb 100644 --- a/packages/common/exceptions/internal-server-error.exception.ts +++ b/packages/common/exceptions/internal-server-error.exception.ts @@ -45,7 +45,7 @@ export class InternalServerErrorException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.INTERNAL_SERVER_ERROR, ), HttpStatus.INTERNAL_SERVER_ERROR, diff --git a/packages/common/exceptions/method-not-allowed.exception.ts b/packages/common/exceptions/method-not-allowed.exception.ts index 19cf543093c..e6db6198cf5 100644 --- a/packages/common/exceptions/method-not-allowed.exception.ts +++ b/packages/common/exceptions/method-not-allowed.exception.ts @@ -43,7 +43,7 @@ export class MethodNotAllowedException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.METHOD_NOT_ALLOWED, ), HttpStatus.METHOD_NOT_ALLOWED, diff --git a/packages/common/exceptions/misdirected.exception.ts b/packages/common/exceptions/misdirected.exception.ts index 36413b2fb04..4ff86459f62 100644 --- a/packages/common/exceptions/misdirected.exception.ts +++ b/packages/common/exceptions/misdirected.exception.ts @@ -43,7 +43,7 @@ export class MisdirectedException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.MISDIRECTED, ), HttpStatus.MISDIRECTED, diff --git a/packages/common/exceptions/not-acceptable.exception.ts b/packages/common/exceptions/not-acceptable.exception.ts index 64b97abdd3a..8b3cf66a028 100644 --- a/packages/common/exceptions/not-acceptable.exception.ts +++ b/packages/common/exceptions/not-acceptable.exception.ts @@ -43,7 +43,7 @@ export class NotAcceptableException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.NOT_ACCEPTABLE, ), HttpStatus.NOT_ACCEPTABLE, diff --git a/packages/common/exceptions/not-found.exception.ts b/packages/common/exceptions/not-found.exception.ts index 837ca780b94..1213e8dca8b 100644 --- a/packages/common/exceptions/not-found.exception.ts +++ b/packages/common/exceptions/not-found.exception.ts @@ -43,7 +43,7 @@ export class NotFoundException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.NOT_FOUND, ), HttpStatus.NOT_FOUND, diff --git a/packages/common/exceptions/not-implemented.exception.ts b/packages/common/exceptions/not-implemented.exception.ts index d673f7f5a8a..206a87333a7 100644 --- a/packages/common/exceptions/not-implemented.exception.ts +++ b/packages/common/exceptions/not-implemented.exception.ts @@ -43,7 +43,7 @@ export class NotImplementedException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.NOT_IMPLEMENTED, ), HttpStatus.NOT_IMPLEMENTED, diff --git a/packages/common/exceptions/payload-too-large.exception.ts b/packages/common/exceptions/payload-too-large.exception.ts index 3a9868fa786..4e841a35911 100644 --- a/packages/common/exceptions/payload-too-large.exception.ts +++ b/packages/common/exceptions/payload-too-large.exception.ts @@ -43,7 +43,7 @@ export class PayloadTooLargeException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.PAYLOAD_TOO_LARGE, ), HttpStatus.PAYLOAD_TOO_LARGE, diff --git a/packages/common/exceptions/precondition-failed.exception.ts b/packages/common/exceptions/precondition-failed.exception.ts index 20963d964e7..68c3433c7f7 100644 --- a/packages/common/exceptions/precondition-failed.exception.ts +++ b/packages/common/exceptions/precondition-failed.exception.ts @@ -43,7 +43,7 @@ export class PreconditionFailedException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.PRECONDITION_FAILED, ), HttpStatus.PRECONDITION_FAILED, diff --git a/packages/common/exceptions/request-timeout.exception.ts b/packages/common/exceptions/request-timeout.exception.ts index 0cc875ef8ef..f4f6d795566 100644 --- a/packages/common/exceptions/request-timeout.exception.ts +++ b/packages/common/exceptions/request-timeout.exception.ts @@ -43,7 +43,7 @@ export class RequestTimeoutException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.REQUEST_TIMEOUT, ), HttpStatus.REQUEST_TIMEOUT, diff --git a/packages/common/exceptions/service-unavailable.exception.ts b/packages/common/exceptions/service-unavailable.exception.ts index 9cd734ba6c2..0afca4bdd5f 100644 --- a/packages/common/exceptions/service-unavailable.exception.ts +++ b/packages/common/exceptions/service-unavailable.exception.ts @@ -43,7 +43,7 @@ export class ServiceUnavailableException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.SERVICE_UNAVAILABLE, ), HttpStatus.SERVICE_UNAVAILABLE, diff --git a/packages/common/exceptions/unauthorized.exception.ts b/packages/common/exceptions/unauthorized.exception.ts index 8d7d65578dd..c5be32253ff 100644 --- a/packages/common/exceptions/unauthorized.exception.ts +++ b/packages/common/exceptions/unauthorized.exception.ts @@ -43,7 +43,7 @@ export class UnauthorizedException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.UNAUTHORIZED, ), HttpStatus.UNAUTHORIZED, diff --git a/packages/common/exceptions/unprocessable-entity.exception.ts b/packages/common/exceptions/unprocessable-entity.exception.ts index 077a2fa0dfb..d6f99aa253f 100644 --- a/packages/common/exceptions/unprocessable-entity.exception.ts +++ b/packages/common/exceptions/unprocessable-entity.exception.ts @@ -45,7 +45,7 @@ export class UnprocessableEntityException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.UNPROCESSABLE_ENTITY, ), HttpStatus.UNPROCESSABLE_ENTITY, diff --git a/packages/common/exceptions/unsupported-media-type.exception.ts b/packages/common/exceptions/unsupported-media-type.exception.ts index 32957e5f6c1..9d8af94af26 100644 --- a/packages/common/exceptions/unsupported-media-type.exception.ts +++ b/packages/common/exceptions/unsupported-media-type.exception.ts @@ -45,7 +45,7 @@ export class UnsupportedMediaTypeException extends HttpException { super( HttpException.createBody( objectOrError, - description, + description!, HttpStatus.UNSUPPORTED_MEDIA_TYPE, ), HttpStatus.UNSUPPORTED_MEDIA_TYPE, diff --git a/packages/common/module-utils/configurable-module.builder.ts b/packages/common/module-utils/configurable-module.builder.ts index 88bdec7446c..1376a498b01 100644 --- a/packages/common/module-utils/configurable-module.builder.ts +++ b/packages/common/module-utils/configurable-module.builder.ts @@ -74,7 +74,11 @@ export class ConfigurableModuleBuilder< this.staticMethodKey = parentBuilder.staticMethodKey as StaticMethodKey; this.factoryClassMethodKey = parentBuilder.factoryClassMethodKey as FactoryClassMethodKey; - this.transformModuleDefinition = parentBuilder.transformModuleDefinition; + this.transformModuleDefinition = + parentBuilder.transformModuleDefinition as ( + definition: DynamicModule, + extraOptions: ExtraModuleDefinitionOptions, + ) => DynamicModule; this.extras = parentBuilder.extras as ExtraModuleDefinitionOptions; } } @@ -186,8 +190,8 @@ export class ConfigurableModuleBuilder< } private constructInjectionTokenString(): string { - const moduleNameInSnakeCase = this.options.moduleName - .trim() + const moduleNameInSnakeCase = this.options + .moduleName!.trim() .split(/(?=[A-Z])/) .join('_') .toUpperCase(); @@ -209,7 +213,7 @@ export class ConfigurableModuleBuilder< ): DynamicModule { const providers: Array = [ { - provide: self.options.optionsInjectionToken, + provide: self.options.optionsInjectionToken!, useValue: this.omitExtras(options, self.extras), }, ]; @@ -265,7 +269,7 @@ export class ConfigurableModuleBuilder< const moduleOptions = {}; const extrasKeys = Object.keys(extras); - Object.keys(input) + Object.keys(input!) .filter(key => !extrasKeys.includes(key)) .forEach(key => { moduleOptions[key] = input[key]; @@ -291,8 +295,8 @@ export class ConfigurableModuleBuilder< return [ this.createAsyncOptionsProvider(options), { - provide: options.useClass, - useClass: options.useClass, + provide: options.useClass!, + useClass: options.useClass!, }, ]; } @@ -302,13 +306,13 @@ export class ConfigurableModuleBuilder< ): Provider { if (options.useFactory) { return { - provide: self.options.optionsInjectionToken, + provide: self.options.optionsInjectionToken!, useFactory: options.useFactory, inject: options.inject || [], }; } return { - provide: self.options.optionsInjectionToken, + provide: self.options.optionsInjectionToken!, useFactory: async ( optionsFactory: ConfigurableModuleOptionsFactory< ModuleOptions, @@ -318,7 +322,7 @@ export class ConfigurableModuleBuilder< await optionsFactory[ self.factoryClassMethodKey as keyof typeof optionsFactory ](), - inject: [options.useExisting || options.useClass], + inject: [options.useExisting || options.useClass!], }; } } diff --git a/packages/common/module-utils/utils/get-injection-providers.util.ts b/packages/common/module-utils/utils/get-injection-providers.util.ts index e36b11cfdd9..f9421b27299 100644 --- a/packages/common/module-utils/utils/get-injection-providers.util.ts +++ b/packages/common/module-utils/utils/get-injection-providers.util.ts @@ -1,8 +1,8 @@ import { - InjectionToken, - Provider, FactoryProvider, + InjectionToken, OptionalFactoryDependency, + Provider, } from '../../interfaces'; /** @@ -31,7 +31,7 @@ export function getInjectionProviders( tokens: FactoryProvider['inject'], ): Provider[] { const result: Provider[] = []; - let search: InjectionToken[] = tokens.map(mapInjectToTokens); + let search: InjectionToken[] = tokens!.map(mapInjectToTokens); while (search.length > 0) { const match = (providers ?? []).filter( p => @@ -42,7 +42,7 @@ export function getInjectionProviders( // get injection tokens of the matched providers, if any search = match .filter(p => (p as any)?.inject) - .flatMap(p => (p as FactoryProvider).inject) + .flatMap(p => (p as FactoryProvider).inject!) .map(mapInjectToTokens); } return result; diff --git a/packages/common/pipes/file/max-file-size.validator.ts b/packages/common/pipes/file/max-file-size.validator.ts index cdd2a52b3d4..024bc532411 100644 --- a/packages/common/pipes/file/max-file-size.validator.ts +++ b/packages/common/pipes/file/max-file-size.validator.ts @@ -23,7 +23,7 @@ export class MaxFileSizeValidator extends FileValidator< return this.validationOptions.message(this.validationOptions.maxSize); } - return this.validationOptions.message; + return this.validationOptions.message!; } return `Validation failed (expected size is less than ${this.validationOptions.maxSize})`; diff --git a/packages/common/pipes/parse-array.pipe.ts b/packages/common/pipes/parse-array.pipe.ts index ed396928c4f..349e831be90 100644 --- a/packages/common/pipes/parse-array.pipe.ts +++ b/packages/common/pipes/parse-array.pipe.ts @@ -120,7 +120,7 @@ export class ParseArrayPipe implements PipeTransform { if (this.options.stopAtFirstError === false) { // strict compare to "false" to make sure // that this option is disabled by default - let errors = []; + let errors: string[] = []; const targetArray = value as Array; for (let i = 0; i < targetArray.length; i++) { diff --git a/packages/common/pipes/parse-date.pipe.ts b/packages/common/pipes/parse-date.pipe.ts index c86ca3630be..c2417b476b3 100644 --- a/packages/common/pipes/parse-date.pipe.ts +++ b/packages/common/pipes/parse-date.pipe.ts @@ -52,7 +52,9 @@ export class ParseDatePipe * @param value currently processed route argument * @param metadata contains metadata about the currently processed route argument */ - transform(value: string | number | undefined | null): Date { + transform( + value: string | number | undefined | null, + ): Date | null | undefined { if (this.options.optional && isNil(value)) { return this.options.default ? this.options.default() : value; } diff --git a/packages/common/pipes/parse-enum.pipe.ts b/packages/common/pipes/parse-enum.pipe.ts index 0bccd8b29f4..58bdea58303 100644 --- a/packages/common/pipes/parse-enum.pipe.ts +++ b/packages/common/pipes/parse-enum.pipe.ts @@ -77,7 +77,7 @@ export class ParseEnumPipe implements PipeTransform { } protected isEnum(value: T): boolean { - const enumValues = Object.keys(this.enumType).map( + const enumValues = Object.keys(this.enumType!).map( item => this.enumType[item], ); return enumValues.includes(value); diff --git a/packages/common/pipes/parse-uuid.pipe.ts b/packages/common/pipes/parse-uuid.pipe.ts index 3c13c6b5120..1c67860b9cf 100644 --- a/packages/common/pipes/parse-uuid.pipe.ts +++ b/packages/common/pipes/parse-uuid.pipe.ts @@ -53,7 +53,7 @@ export class ParseUUIDPipe implements PipeTransform { 7: /^[0-9A-F]{8}-[0-9A-F]{4}-7[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i, all: /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i, }; - private readonly version: '3' | '4' | '5' | '7'; + private readonly version: '3' | '4' | '5' | '7' | undefined; protected exceptionFactory: (errors: string) => any; constructor(@Optional() protected readonly options?: ParseUUIDPipeOptions) { diff --git a/packages/common/pipes/validation.pipe.ts b/packages/common/pipes/validation.pipe.ts index e33d98b6ea4..7bdf15a486e 100644 --- a/packages/common/pipes/validation.pipe.ts +++ b/packages/common/pipes/validation.pipe.ts @@ -48,9 +48,9 @@ export class ValidationPipe implements PipeTransform { protected isTransformEnabled: boolean; protected isDetailedOutputDisabled?: boolean; protected validatorOptions: ValidatorOptions; - protected transformOptions: ClassTransformOptions; + protected transformOptions: ClassTransformOptions | undefined; protected errorHttpStatusCode: ErrorHttpStatusCode; - protected expectedType: Type; + protected expectedType: Type | undefined; protected exceptionFactory: (errors: ValidationError[]) => any; protected validateCustomDecorators: boolean; @@ -215,7 +215,7 @@ export class ValidationPipe implements PipeTransform { } protected toEmptyIfNil(value: T): R | object { - return isNil(value) ? {} : value; + return isNil(value) ? {} : value!; } protected stripProtoKeys(value: any) { @@ -256,7 +256,7 @@ export class ValidationPipe implements PipeTransform { .map(error => this.mapChildrenToValidationErrors(error)) .flatten() .filter(item => !!item.constraints) - .map(item => Object.values(item.constraints)) + .map(item => Object.values(item.constraints!)) .flatten() .toArray(); } @@ -268,7 +268,7 @@ export class ValidationPipe implements PipeTransform { if (!(error.children && error.children.length)) { return [error]; } - const validationErrors = []; + const validationErrors: ValidationError[] = []; parentPath = parentPath ? `${parentPath}.${error.property}` : error.property; diff --git a/packages/common/services/console-logger.service.ts b/packages/common/services/console-logger.service.ts index 2b6e54c0334..2f9fd396b80 100644 --- a/packages/common/services/console-logger.service.ts +++ b/packages/common/services/console-logger.service.ts @@ -192,7 +192,7 @@ export class ConsoleLogger implements LoggerService { this.getContextAndStackAndMessagesToPrint([message, ...optionalParams]); this.printMessages(messages, context, 'error', 'stderr', stack); - this.printStackTrace(stack); + this.printStackTrace(stack!); } /** @@ -444,7 +444,7 @@ export class ConsoleLogger implements LoggerService { const includeTimestamp = ConsoleLogger.lastTimestampAt && this.options?.timestamp; const result = includeTimestamp - ? this.formatTimestampDiff(Date.now() - ConsoleLogger.lastTimestampAt) + ? this.formatTimestampDiff(Date.now() - ConsoleLogger.lastTimestampAt!) : ''; ConsoleLogger.lastTimestampAt = Date.now(); return result; @@ -556,7 +556,7 @@ export class ConsoleLogger implements LoggerService { return false; } - return /^(.)+\n\s+at .+:\d+:\d+/.test(stack); + return /^(.)+\n\s+at .+:\d+:\d+/.test(stack!); } private getColorByLogLevel(level: LogLevel) { diff --git a/packages/common/services/logger.service.ts b/packages/common/services/logger.service.ts index aeb808b32f9..3e006cedf4c 100644 --- a/packages/common/services/logger.service.ts +++ b/packages/common/services/logger.service.ts @@ -119,7 +119,7 @@ export class Logger implements LoggerService { return this.registerLocalInstanceRef(); } } - return Logger.staticInstanceRef; + return Logger.staticInstanceRef!; } /** @@ -303,12 +303,12 @@ export class Logger implements LoggerService { static overrideLogger(logger: LoggerService | LogLevel[] | boolean) { if (Array.isArray(logger)) { Logger.logLevels = logger; - return this.staticInstanceRef?.setLogLevels(logger); + return this.staticInstanceRef?.setLogLevels?.(logger); } if (isObject(logger)) { if (logger instanceof Logger && logger.constructor !== Logger) { const errorMessage = `Using the "extends Logger" instruction is not allowed in Nest v9. Please, use "extends ConsoleLogger" instead.`; - this.staticInstanceRef.error(errorMessage); + this.staticInstanceRef?.error(errorMessage); throw new Error(errorMessage); } this.staticInstanceRef = logger as LoggerService; @@ -326,7 +326,7 @@ export class Logger implements LoggerService { if (this.localInstanceRef) { return this.localInstanceRef; } - this.localInstanceRef = new ConsoleLogger(this.context, { + this.localInstanceRef = new ConsoleLogger(this.context!, { timestamp: this.options?.timestamp, logLevels: Logger.logLevels, }); diff --git a/packages/core/application-config.ts b/packages/core/application-config.ts index 1b6adfa4e53..e023e08060e 100644 --- a/packages/core/application-config.ts +++ b/packages/core/application-config.ts @@ -50,7 +50,7 @@ export class ApplicationConfig { } public getIoAdapter(): WebSocketAdapter { - return this.ioAdapter; + return this.ioAdapter!; } public addGlobalPipe(pipe: PipeTransform) { diff --git a/packages/core/discovery/discoverable-meta-host-collection.ts b/packages/core/discovery/discoverable-meta-host-collection.ts index d4b55ac463e..d59a7ad2313 100644 --- a/packages/core/discovery/discoverable-meta-host-collection.ts +++ b/packages/core/discovery/discoverable-meta-host-collection.ts @@ -80,7 +80,7 @@ export class DiscoverableMetaHostCollection { collection: Map>, ) { if (collection.has(metaKey)) { - const wrappers = collection.get(metaKey); + const wrappers = collection.get(metaKey)!; wrappers.add(instanceWrapper); } else { const wrappers = new Set(); @@ -123,7 +123,7 @@ export class DiscoverableMetaHostCollection { let collection: Map>; if (wrapperByMetaKeyMap.has(hostContainerRef)) { - collection = wrapperByMetaKeyMap.get(hostContainerRef); + collection = wrapperByMetaKeyMap.get(hostContainerRef)!; } else { collection = new Map>(); wrapperByMetaKeyMap.set(hostContainerRef, collection); diff --git a/packages/core/discovery/discovery-service.ts b/packages/core/discovery/discovery-service.ts index d0f45d3efa0..25c6aacb247 100644 --- a/packages/core/discovery/discovery-service.ts +++ b/packages/core/discovery/discovery-service.ts @@ -67,7 +67,7 @@ export class DiscoveryService { metadataKey, ); } - SetMetadata(metadataKey, opts ?? {})(target, key, descriptor); + SetMetadata(metadataKey, opts ?? {})(target, key!, descriptor); }; decoratorFn.KEY = metadataKey; @@ -88,7 +88,7 @@ export class DiscoveryService { if ('metadataKey' in options) { const providers = DiscoverableMetaHostCollection.getProvidersByMetaKey( this.modulesContainer, - options.metadataKey, + options.metadataKey!, ); return Array.from(providers); } @@ -112,7 +112,7 @@ export class DiscoveryService { const controllers = DiscoverableMetaHostCollection.getControllersByMetaKey( this.modulesContainer, - options.metadataKey, + options.metadataKey!, ); return Array.from(controllers); } @@ -154,7 +154,7 @@ export class DiscoveryService { const moduleRefs = [...this.modulesContainer.values()]; return moduleRefs; } - const whitelisted = this.includeWhitelisted(options.include); + const whitelisted = this.includeWhitelisted(options.include!); return whitelisted; } diff --git a/packages/core/errors/exceptions/undefined-dependency.exception.ts b/packages/core/errors/exceptions/undefined-dependency.exception.ts index 0b2e134f27f..62d7f61d756 100644 --- a/packages/core/errors/exceptions/undefined-dependency.exception.ts +++ b/packages/core/errors/exceptions/undefined-dependency.exception.ts @@ -1,16 +1,16 @@ import { InjectorDependencyContext } from '../../injector/injector'; +import { Module } from '../../injector/module'; import { UNKNOWN_DEPENDENCIES_MESSAGE } from '../messages'; import { RuntimeException } from './runtime.exception'; -import { Module } from '../../injector/module'; export class UndefinedDependencyException extends RuntimeException { constructor( type: string, undefinedDependencyContext: InjectorDependencyContext, - module?: Module, + moduleRef?: Module, ) { super( - UNKNOWN_DEPENDENCIES_MESSAGE(type, undefinedDependencyContext, module), + UNKNOWN_DEPENDENCIES_MESSAGE(type, undefinedDependencyContext, moduleRef), ); } } diff --git a/packages/core/errors/messages.ts b/packages/core/errors/messages.ts index e163d67458e..d529b31a587 100644 --- a/packages/core/errors/messages.ts +++ b/packages/core/errors/messages.ts @@ -54,7 +54,7 @@ const getDependencyName = ( * Tries to get the class name. As fallback it returns 'current'. * @param module The module which should get displayed */ -const getModuleName = (module: Module) => +const getModuleName = (module: Module | undefined) => (module && getInstanceName(module.metatype)) || 'current'; const stringifyScope = (scope: any[]): string => @@ -63,10 +63,10 @@ const stringifyScope = (scope: any[]): string => export const UNKNOWN_DEPENDENCIES_MESSAGE = ( type: string | symbol, unknownDependencyContext: InjectorDependencyContext, - module: Module, + moduleRef: Module | undefined, ) => { const { index, name, dependencies, key } = unknownDependencyContext; - const moduleName = getModuleName(module); + const moduleName = getModuleName(moduleRef); const dependencyName = getDependencyName(name, 'dependency'); const potentialSolutions = @@ -93,7 +93,7 @@ Potential solutions: let message = `Nest can't resolve dependencies of the ${type.toString()}`; if (isNil(index)) { - message += `. Please make sure that the "${key.toString()}" property is available in the current context.${potentialSolutions}`; + message += `. Please make sure that the "${key!.toString()}" property is available in the current context.${potentialSolutions}`; return message; } const dependenciesName = (dependencies || []).map(dependencyName => diff --git a/packages/core/exceptions/base-exception-filter-context.ts b/packages/core/exceptions/base-exception-filter-context.ts index 40ff0a156d2..332cbb736d5 100644 --- a/packages/core/exceptions/base-exception-filter-context.ts +++ b/packages/core/exceptions/base-exception-filter-context.ts @@ -21,7 +21,7 @@ export class BaseExceptionFilterContext extends ContextCreator { inquirerId?: string, ): R { if (isEmpty(metadata)) { - return [] as R; + return [] as any[] as R; } return iterate(metadata) .filter( @@ -30,8 +30,8 @@ export class BaseExceptionFilterContext extends ContextCreator { .map(filter => this.getFilterInstance(filter, contextId, inquirerId)) .filter(item => !!item) .map(instance => ({ - func: instance.catch.bind(instance), - exceptionMetatypes: this.reflectCatchExceptions(instance), + func: instance!.catch.bind(instance), + exceptionMetatypes: this.reflectCatchExceptions(instance!), })) .toArray() as R; } @@ -41,7 +41,7 @@ export class BaseExceptionFilterContext extends ContextCreator { contextId = STATIC_CONTEXT, inquirerId?: string, ): ExceptionFilter | null { - const isObject = (filter as ExceptionFilter).catch; + const isObject = !!(filter as ExceptionFilter).catch; if (isObject) { return filter as ExceptionFilter; } diff --git a/packages/core/exceptions/base-exception-filter.ts b/packages/core/exceptions/base-exception-filter.ts index cc7c8611fcd..1966614101b 100644 --- a/packages/core/exceptions/base-exception-filter.ts +++ b/packages/core/exceptions/base-exception-filter.ts @@ -26,7 +26,7 @@ export class BaseExceptionFilter implements ExceptionFilter { catch(exception: T, host: ArgumentsHost) { const applicationRef = this.applicationRef || - (this.httpAdapterHost && this.httpAdapterHost.httpAdapter); + (this.httpAdapterHost && this.httpAdapterHost.httpAdapter)!; if (!(exception instanceof HttpException)) { return this.handleUnknownError(exception, host, applicationRef); diff --git a/packages/core/exceptions/external-exception-filter-context.ts b/packages/core/exceptions/external-exception-filter-context.ts index c1aaa2cb9d6..d763dfe7349 100644 --- a/packages/core/exceptions/external-exception-filter-context.ts +++ b/packages/core/exceptions/external-exception-filter-context.ts @@ -2,6 +2,7 @@ import { EXCEPTION_FILTERS_METADATA } from '@nestjs/common/constants'; import { Controller } from '@nestjs/common/interfaces'; import { ExceptionFilterMetadata } from '@nestjs/common/interfaces/exceptions'; import { isEmpty } from '@nestjs/common/utils/shared.utils'; +import { iterate } from 'iterare'; import { ApplicationConfig } from '../application-config'; import { STATIC_CONTEXT } from '../injector/constants'; import { NestContainer } from '../injector/container'; @@ -9,7 +10,6 @@ import { InstanceWrapper } from '../injector/instance-wrapper'; import { RouterProxyCallback } from '../router/router-proxy'; import { BaseExceptionFilterContext } from './base-exception-filter-context'; import { ExternalExceptionsHandler } from './external-exceptions-handler'; -import { iterate } from 'iterare'; export class ExternalExceptionFilterContext extends BaseExceptionFilterContext { constructor( @@ -48,7 +48,7 @@ export class ExternalExceptionFilterContext extends BaseExceptionFilterContext { inquirerId?: string, ): T { if (!this.config) { - return [] as T; + return [] as any[] as T; } const globalFilters = this.config.getGlobalFilters() as T; if (contextId === STATIC_CONTEXT && !inquirerId) { diff --git a/packages/core/guards/guards-consumer.ts b/packages/core/guards/guards-consumer.ts index 8cc1b64053f..7f3c717e2de 100644 --- a/packages/core/guards/guards-consumer.ts +++ b/packages/core/guards/guards-consumer.ts @@ -16,7 +16,7 @@ export class GuardsConsumer { return true; } const context = this.createContext(args, instance, callback); - context.setType(type); + context.setType(type!); for (const guard of guards) { const result = guard.canActivate(context); diff --git a/packages/core/guards/guards-context-creator.ts b/packages/core/guards/guards-context-creator.ts index 7c9963b3a93..536a4cc0ea4 100644 --- a/packages/core/guards/guards-context-creator.ts +++ b/packages/core/guards/guards-context-creator.ts @@ -42,14 +42,16 @@ export class GuardsContextCreator extends ContextCreator { inquirerId?: string, ): R { if (isEmpty(metadata)) { - return [] as R; + return [] as unknown[] as R; } return iterate(metadata) .filter((guard: any) => guard && (guard.name || guard.canActivate)) .map(guard => this.getGuardInstance(guard as Function, contextId, inquirerId), ) - .filter((guard: CanActivate) => guard && isFunction(guard.canActivate)) + .filter( + (guard: CanActivate | null) => !!guard && isFunction(guard.canActivate), + ) .toArray() as R; } @@ -58,7 +60,7 @@ export class GuardsContextCreator extends ContextCreator { contextId = STATIC_CONTEXT, inquirerId?: string, ): CanActivate | null { - const isObject = (metatype as CanActivate).canActivate; + const isObject = !!(metatype as CanActivate).canActivate; if (isObject) { return metatype as CanActivate; } @@ -95,7 +97,7 @@ export class GuardsContextCreator extends ContextCreator { inquirerId?: string, ): T { if (!this.config) { - return [] as T; + return [] as unknown[] as T; } const globalGuards = this.config.getGlobalGuards() as T; if (contextId === STATIC_CONTEXT && !inquirerId) { diff --git a/packages/core/helpers/context-creator.ts b/packages/core/helpers/context-creator.ts index fa8c9c4ac4b..17f455c2b3a 100644 --- a/packages/core/helpers/context-creator.ts +++ b/packages/core/helpers/context-creator.ts @@ -27,7 +27,7 @@ export abstract class ContextCreator { const methodMetadata = this.reflectMethodMetadata(callback, metadataKey); return [ ...this.createConcreteContext( - globalMetadata || ([] as T), + globalMetadata || ([] as unknown[] as T), contextId, inquirerId, ), diff --git a/packages/core/helpers/context-id-factory.ts b/packages/core/helpers/context-id-factory.ts index 0c7282cb95c..fde7f241061 100644 --- a/packages/core/helpers/context-id-factory.ts +++ b/packages/core/helpers/context-id-factory.ts @@ -74,7 +74,7 @@ export class ContextIdFactory { } const contextId = createContextId(); const resolverObjectOrFunction = this.strategy.attach(contextId, request); - if (this.isContextIdResolverWithPayload(resolverObjectOrFunction)) { + if (this.isContextIdResolverWithPayload(resolverObjectOrFunction!)) { contextId.getParent = resolverObjectOrFunction.resolve; contextId.payload = resolverObjectOrFunction.payload; } else { diff --git a/packages/core/helpers/execution-context-host.ts b/packages/core/helpers/execution-context-host.ts index 83b460a9a95..f8ac796b67c 100644 --- a/packages/core/helpers/execution-context-host.ts +++ b/packages/core/helpers/execution-context-host.ts @@ -12,8 +12,8 @@ export class ExecutionContextHost implements ExecutionContext { constructor( private readonly args: any[], - private readonly constructorRef: Type = null, - private readonly handler: Function = null, + private readonly constructorRef: Type | null = null, + private readonly handler: Function | null = null, ) {} setType(type: TContext) { @@ -25,11 +25,11 @@ export class ExecutionContextHost implements ExecutionContext { } getClass(): Type { - return this.constructorRef; + return this.constructorRef!; } getHandler(): Function { - return this.handler; + return this.handler!; } getArgs = any[]>(): T { diff --git a/packages/core/helpers/external-context-creator.ts b/packages/core/helpers/external-context-creator.ts index ffc869c23de..bacc125ba60 100644 --- a/packages/core/helpers/external-context-creator.ts +++ b/packages/core/helpers/external-context-creator.ts @@ -208,7 +208,7 @@ export class ExternalContextCreator { methodName, ); const contextFactory = this.contextUtils.getContextFactory( - contextType, + contextType!, instance, instance[methodName], ); @@ -232,7 +232,7 @@ export class ExternalContextCreator { const handlerMetadata: ExternalHandlerMetadata = { argsLength, paramtypes, - getParamsMetadata, + getParamsMetadata: getParamsMetadata as any, }; this.handlerMetadataStorage.set(instance, methodName, handlerMetadata); return handlerMetadata; diff --git a/packages/core/helpers/external-proxy.ts b/packages/core/helpers/external-proxy.ts index b035d4326f4..98f1cb77767 100644 --- a/packages/core/helpers/external-proxy.ts +++ b/packages/core/helpers/external-proxy.ts @@ -13,7 +13,7 @@ export class ExternalErrorProxy { return await targetCallback(...args); } catch (e) { const host = new ExecutionContextHost(args); - host.setType(type); + host.setType(type!); return exceptionsHandler.next(e, host); } }; diff --git a/packages/core/helpers/http-adapter-host.ts b/packages/core/helpers/http-adapter-host.ts index 1909ed9e3e5..40d487e2eb0 100644 --- a/packages/core/helpers/http-adapter-host.ts +++ b/packages/core/helpers/http-adapter-host.ts @@ -33,6 +33,6 @@ export class HttpAdapterHost< * `const httpAdapter = adapterHost.httpAdapter;` */ get httpAdapter(): T { - return this._httpAdapter; + return this._httpAdapter as T; } } diff --git a/packages/core/hooks/before-app-shutdown.hook.ts b/packages/core/hooks/before-app-shutdown.hook.ts index 25652dd3176..42fbed515ab 100644 --- a/packages/core/hooks/before-app-shutdown.hook.ts +++ b/packages/core/hooks/before-app-shutdown.hook.ts @@ -51,7 +51,7 @@ export async function callBeforeAppShutdownHook( signal?: string, ): Promise { const providers = module.getNonAliasProviders(); - const [_, moduleClassHost] = providers.shift(); + const [_, moduleClassHost] = providers.shift()!; const instances = [ ...module.controllers, ...providers, diff --git a/packages/core/injector/abstract-instance-resolver.ts b/packages/core/injector/abstract-instance-resolver.ts index 0308574d60f..ed78674c778 100644 --- a/packages/core/injector/abstract-instance-resolver.ts +++ b/packages/core/injector/abstract-instance-resolver.ts @@ -53,19 +53,19 @@ export abstract class AbstractInstanceResolver { each: options.each, }) : this.instanceLinksHost.get(typeOrToken, { - each: options.each, + each: options?.each, }); const pluckInstance = async (instanceLink: InstanceLink) => { const { wrapperRef, collection } = instanceLink; if (wrapperRef.isDependencyTreeStatic() && !wrapperRef.isTransient) { - return this.get(typeOrToken, { strict: options.strict }); + return this.get(typeOrToken, { strict: options?.strict }); } const ctorHost = wrapperRef.instance || { constructor: typeOrToken }; const instance = await this.injector.loadPerContext( ctorHost, - wrapperRef.host, + wrapperRef.host!, collection, contextId, wrapperRef, diff --git a/packages/core/injector/container.ts b/packages/core/injector/container.ts index 41cba231846..94e1ad925e7 100644 --- a/packages/core/injector/container.ts +++ b/packages/core/injector/container.ts @@ -104,7 +104,7 @@ export class NestContainer { await this.moduleCompiler.compile(metatype); if (this.modules.has(token)) { return { - moduleRef: this.modules.get(token), + moduleRef: this.modules.get(token)!, inserted: true, }; } @@ -159,14 +159,14 @@ export class NestContainer { private async setModule( { token, dynamicMetadata, type }: ModuleFactory, scope: ModuleScope, - ): Promise { + ): Promise { const moduleRef = new Module(type, this); moduleRef.token = token; moduleRef.initOnPreview = this.shouldInitOnPreview(type); this.modules.set(token, moduleRef); - const updatedScope = [].concat(scope, type); - await this.addDynamicMetadata(token, dynamicMetadata, updatedScope); + const updatedScope = ([] as ModuleScope).concat(scope, type); + await this.addDynamicMetadata(token, dynamicMetadata!, updatedScope); if (this.isGlobalModule(type, dynamicMetadata)) { moduleRef.isGlobal = true; @@ -187,7 +187,7 @@ export class NestContainer { this.dynamicModulesMetadata.set(token, dynamicModuleMetadata); const { imports } = dynamicModuleMetadata; - await this.addDynamicModules(imports, scope); + await this.addDynamicModules(imports!, scope); } public async addDynamicModules(modules: any[], scope: Type[]) { @@ -219,7 +219,7 @@ export class NestContainer { return this.moduleCompiler; } - public getModuleByKey(moduleKey: string): Module { + public getModuleByKey(moduleKey: string): Module | undefined { return this.modules.get(moduleKey); } @@ -234,10 +234,10 @@ export class NestContainer { if (!this.modules.has(token)) { return; } - const moduleRef = this.modules.get(token); + const moduleRef = this.modules.get(token)!; const { token: relatedModuleToken } = await this.moduleCompiler.compile(relatedModule); - const related = this.modules.get(relatedModuleToken); + const related = this.modules.get(relatedModuleToken)!; moduleRef.addImport(related); } @@ -253,7 +253,7 @@ export class NestContainer { if (!moduleRef) { throw new UnknownModuleException(); } - const providerKey = moduleRef.addProvider(provider, enhancerSubtype); + const providerKey = moduleRef.addProvider(provider, enhancerSubtype!); const providerRef = moduleRef.getProviderByKey(providerKey); DiscoverableMetaHostCollection.inspectProvider(this.modules, providerRef); @@ -270,7 +270,7 @@ export class NestContainer { if (!this.modules.has(token)) { throw new UnknownModuleException(); } - const moduleRef = this.modules.get(token); + const moduleRef = this.modules.get(token)!; return moduleRef.addInjectable(injectable, enhancerSubtype, host); } @@ -278,7 +278,7 @@ export class NestContainer { if (!this.modules.has(token)) { throw new UnknownModuleException(); } - const moduleRef = this.modules.get(token); + const moduleRef = this.modules.get(token)!; moduleRef.addExportedProvider(provider); } @@ -286,10 +286,10 @@ export class NestContainer { if (!this.modules.has(token)) { throw new UnknownModuleException(); } - const moduleRef = this.modules.get(token); + const moduleRef = this.modules.get(token)!; moduleRef.addController(controller); - const controllerRef = moduleRef.controllers.get(controller); + const controllerRef = moduleRef.controllers.get(controller)!; DiscoverableMetaHostCollection.inspectController( this.modules, controllerRef, diff --git a/packages/core/injector/injector.ts b/packages/core/injector/injector.ts index 27d74d5c175..0847943b7ae 100644 --- a/packages/core/injector/injector.ts +++ b/packages/core/injector/injector.ts @@ -95,7 +95,7 @@ export class Injector { if (!collection) { return; } - const target = collection.get(token); + const target = collection.get(token)!; const instance = target.createPrototype(contextId); if (instance) { const wrapper = new InstanceWrapper({ @@ -125,7 +125,7 @@ export class Injector { throw new CircularDependencyException(`"${wrapper.name}"`); } - return instanceHost.donePromise.then((err?: unknown) => { + return instanceHost.donePromise!.then((err?: unknown) => { if (err) { throw err; } @@ -188,11 +188,11 @@ export class Injector { inquirer?: InstanceWrapper, ) { const { metatype, token } = wrapper; - const targetWrapper = collection.get(token); + const targetWrapper = collection.get(token)!; if (!isUndefined(targetWrapper.instance)) { return; } - targetWrapper.instance = Object.create(metatype.prototype); + targetWrapper.instance = Object.create(metatype!.prototype); await this.loadInstance( wrapper, collection, @@ -266,7 +266,7 @@ export class Injector { public async resolveConstructorParams( wrapper: InstanceWrapper, moduleRef: Module, - inject: InjectorDependency[], + inject: InjectorDependency[] | undefined, callback: (args: unknown[]) => void | Promise, contextId = STATIC_CONTEXT, inquirer?: InstanceWrapper, @@ -342,7 +342,7 @@ export class Injector { public getFactoryProviderDependencies( wrapper: InstanceWrapper, ): [InjectorDependency[], number[]] { - const optionalDependenciesIds = []; + const optionalDependenciesIds: number[] = []; const isOptionalFactoryDep = ( item: InjectionToken | OptionalFactoryDependency, ): item is OptionalFactoryDependency => @@ -365,7 +365,7 @@ export class Injector { return item; }; return [ - wrapper.inject?.map?.(mapFactoryProviderInjectArray), + wrapper.inject?.map?.(mapFactoryProviderInjectArray)!, optionalDependenciesIds, ]; } @@ -527,10 +527,10 @@ export class Injector { { id: wrapper.id }, ); } - if (providers.has(name)) { - const instanceWrapper = providers.get(name); + if (name && providers.has(name)) { + const instanceWrapper = providers.get(name)!; this.printFoundInModuleLog(name, moduleRef); - this.addDependencyMetadata(keyOrIndex, wrapper, instanceWrapper); + this.addDependencyMetadata(keyOrIndex!, wrapper, instanceWrapper); return instanceWrapper; } return this.lookupComponentInParentModules( @@ -553,7 +553,7 @@ export class Injector { ) { const instanceWrapper = await this.lookupComponentInImports( moduleRef, - dependencyContext.name, + dependencyContext.name!, wrapper, [], contextId, @@ -581,7 +581,7 @@ export class Injector { keyOrIndex?: symbol | string | number, isTraversing?: boolean, ): Promise { - let instanceWrapperRef: InstanceWrapper = null; + let instanceWrapperRef: InstanceWrapper | null = null; const imports = moduleRef.imports || new Set(); const identity = (item: any) => item; @@ -612,14 +612,14 @@ export class Injector { true, ); if (instanceRef) { - this.addDependencyMetadata(keyOrIndex, wrapper, instanceRef); + this.addDependencyMetadata(keyOrIndex!, wrapper, instanceRef); return instanceRef; } continue; } this.printFoundInModuleLog(name, relatedModule); - instanceWrapperRef = providers.get(name); - this.addDependencyMetadata(keyOrIndex, wrapper, instanceWrapperRef); + instanceWrapperRef = providers.get(name)!; + this.addDependencyMetadata(keyOrIndex!, wrapper, instanceWrapperRef); const inquirerId = this.getInquirerId(inquirer); const instanceHost = instanceWrapperRef.getInstanceByContextId( @@ -772,15 +772,15 @@ export class Injector { wrapper?: InstanceWrapper, ): Promise { if (!wrapper) { - const injectionToken = instance.constructor; + const injectionToken = (instance as any).constructor!; wrapper = collection.get(injectionToken); } - await this.loadInstance(wrapper, collection, moduleRef, ctx, wrapper); - await this.loadEnhancersPerContext(wrapper, ctx, wrapper); + await this.loadInstance(wrapper!, collection, moduleRef, ctx, wrapper); + await this.loadEnhancersPerContext(wrapper!, ctx, wrapper); - const host = wrapper.getInstanceByContextId( - this.getContextId(ctx, wrapper), - wrapper.id, + const host = wrapper!.getInstanceByContextId( + this.getContextId(ctx, wrapper!), + wrapper!.id, ); return host && (host.instance as T); } @@ -792,7 +792,7 @@ export class Injector { ) { const enhancers = wrapper.getEnhancersMetadata() || []; const loadEnhancer = (item: InstanceWrapper) => { - const hostModule = item.host; + const hostModule = item.host!; return this.loadInstance( item, hostModule.injectables, @@ -839,7 +839,7 @@ export class Injector { metadata.map(async ({ wrapper: item, key }) => ({ key, host: await this.resolveComponentHost( - item.host, + item.host!, item, contextId, inquirer, @@ -857,8 +857,10 @@ export class Injector { })); } - private getInquirerId(inquirer: InstanceWrapper | undefined): string { - return inquirer && inquirer.id; + private getInquirerId( + inquirer: InstanceWrapper | undefined, + ): string | undefined { + return inquirer ? inquirer.id : undefined; } private resolveScopedComponentHost( @@ -869,7 +871,7 @@ export class Injector { ) { return this.isInquirerRequest(item, parentInquirer) ? parentInquirer - : this.resolveComponentHost(item.host, item, contextId, inquirer); + : this.resolveComponentHost(item.host!, item, contextId, inquirer); } private isInquirerRequest( diff --git a/packages/core/injector/instance-wrapper.ts b/packages/core/injector/instance-wrapper.ts index 020e9bf0c5a..9d7dbd09a7d 100644 --- a/packages/core/injector/instance-wrapper.ts +++ b/packages/core/injector/instance-wrapper.ts @@ -65,8 +65,8 @@ export class InstanceWrapper { public readonly isAlias: boolean = false; public readonly subtype?: EnhancerSubtype; public scope?: Scope = Scope.DEFAULT; - public metatype: Type | Function; - public inject?: FactoryProvider['inject']; + public metatype: Type | Function | null; + public inject?: FactoryProvider['inject'] | null; public forwardRef?: boolean; public durable?: boolean; public initTime?: number; @@ -109,7 +109,7 @@ export class InstanceWrapper { } get isFactory(): boolean { - return this.metatype && !isNil(this.inject); + return !!this.metatype && !isNil(this.inject); } get isTransient(): boolean { @@ -133,10 +133,10 @@ export class InstanceWrapper { contextId: ContextId, inquirerId: string, ): InstancePerContext { - let collectionPerContext = this.transientMap.get(inquirerId); + let collectionPerContext = this.transientMap!.get(inquirerId); if (!collectionPerContext) { collectionPerContext = new WeakMap(); - this.transientMap.set(inquirerId, collectionPerContext); + this.transientMap!.set(inquirerId, collectionPerContext); } const instancePerContext = collectionPerContext.get(contextId); return instancePerContext @@ -160,10 +160,10 @@ export class InstanceWrapper { inquirerId: string, value: InstancePerContext, ) { - let collection = this.transientMap.get(inquirerId); + let collection = this.transientMap!.get(inquirerId); if (!collection) { collection = new WeakMap(); - this.transientMap.set(inquirerId, collection); + this.transientMap!.set(inquirerId, collection); } collection.set(contextId, value); } @@ -176,7 +176,7 @@ export class InstanceWrapper { } public getCtorMetadata(): InstanceWrapper[] { - return this[INSTANCE_METADATA_SYMBOL].dependencies; + return this[INSTANCE_METADATA_SYMBOL].dependencies!; } public addPropertiesMetadata(key: symbol | string, wrapper: InstanceWrapper) { @@ -190,7 +190,7 @@ export class InstanceWrapper { } public getPropertiesMetadata(): PropertyMetadata[] { - return this[INSTANCE_METADATA_SYMBOL].properties; + return this[INSTANCE_METADATA_SYMBOL].properties!; } public addEnhancerMetadata(wrapper: InstanceWrapper) { @@ -201,7 +201,7 @@ export class InstanceWrapper { } public getEnhancersMetadata(): InstanceWrapper[] { - return this[INSTANCE_METADATA_SYMBOL].enhancers; + return this[INSTANCE_METADATA_SYMBOL].enhancers!; } public isDependencyTreeDurable(lookupRegistry: string[] = []): boolean { @@ -299,12 +299,12 @@ export class InstanceWrapper { } const instancePerContext: InstancePerContext = { ...staticInstance, - instance: undefined, + instance: undefined!, isResolved: false, isPending: false, }; if (this.isNewable()) { - instancePerContext.instance = Object.create(this.metatype.prototype); + instancePerContext.instance = Object.create(this.metatype!.prototype); } this.setInstanceByContextId(contextId, instancePerContext); return instancePerContext; @@ -317,12 +317,12 @@ export class InstanceWrapper { const staticInstance = this.getInstanceByContextId(STATIC_CONTEXT); const instancePerContext: InstancePerContext = { ...staticInstance, - instance: undefined, + instance: undefined!, isResolved: false, isPending: false, }; if (this.isNewable()) { - instancePerContext.instance = Object.create(this.metatype.prototype); + instancePerContext.instance = Object.create(this.metatype!.prototype); } this.setInstanceByInquirerId(contextId, inquirerId, instancePerContext); return instancePerContext; @@ -333,7 +333,7 @@ export class InstanceWrapper { if (!this.isNewable() || host.isResolved) { return; } - return Object.create(this.metatype.prototype); + return Object.create(this.metatype!.prototype); } public isInRequestScope( @@ -353,8 +353,9 @@ export class InstanceWrapper { contextId: ContextId, inquirer: InstanceWrapper | undefined, ): boolean { - const isInquirerRequestScoped = - inquirer && !inquirer.isDependencyTreeStatic(); + const isInquirerRequestScoped = !!( + inquirer && !inquirer.isDependencyTreeStatic() + ); return ( this.isDependencyTreeStatic() && @@ -372,7 +373,7 @@ export class InstanceWrapper { return ( this.isDependencyTreeStatic() && contextId !== STATIC_CONTEXT && - (isSelfRequested || (inquirer && inquirer.scope === Scope.TRANSIENT)) + (isSelfRequested || !!(inquirer && inquirer.scope === Scope.TRANSIENT)) ); } @@ -435,7 +436,7 @@ export class InstanceWrapper { Object.assign(this, wrapperPartial); this.setInstanceByContextId(STATIC_CONTEXT, { - instance, + instance: instance as T, isResolved, }); this.scope === Scope.TRANSIENT && (this.transientMap = new Map()); diff --git a/packages/core/injector/lazy-module-loader/lazy-module-loader.ts b/packages/core/injector/lazy-module-loader/lazy-module-loader.ts index ee9da6b5e09..8e8edeb453d 100644 --- a/packages/core/injector/lazy-module-loader/lazy-module-loader.ts +++ b/packages/core/injector/lazy-module-loader/lazy-module-loader.ts @@ -39,8 +39,8 @@ export class LazyModuleLoader { const { token } = await this.moduleCompiler.compile( moduleClassOrDynamicDefinition, ); - const moduleInstance = this.modulesContainer.get(token); - return moduleInstance && this.getTargetModuleRef(moduleInstance); + const moduleInstance = this.modulesContainer.get(token)!; + return moduleInstance && this.getTargetModuleRef(moduleInstance)!; } const lazyModulesContainer = this.createLazyModulesContainer(moduleInstances); diff --git a/packages/core/injector/module.ts b/packages/core/injector/module.ts index fa90bdc491e..3ceb30f2b14 100644 --- a/packages/core/injector/module.ts +++ b/packages/core/injector/module.ts @@ -141,8 +141,8 @@ export class Module { if (!this._providers.has(this._metatype)) { throw new RuntimeException(); } - const module = this._providers.get(this._metatype); - return module.instance as NestModule; + const moduleRef = this._providers.get(this._metatype); + return moduleRef!.instance as NestModule; } get metatype(): Type { diff --git a/packages/core/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.ts b/packages/core/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.ts index d5ac6dc5051..52865dc4f57 100644 --- a/packages/core/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.ts +++ b/packages/core/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.ts @@ -25,7 +25,7 @@ export class DeepHashedModuleOpaqueKeyFactory const key = `${moduleId}_${moduleName}`; if (this.moduleTokenCache.has(key)) { - return this.moduleTokenCache.get(key); + return this.moduleTokenCache.get(key)!; } const hash = this.hashString(key); diff --git a/packages/core/inspector/graph-inspector.ts b/packages/core/inspector/graph-inspector.ts index f99a7e8a21f..5ae1b89b480 100644 --- a/packages/core/inspector/graph-inspector.ts +++ b/packages/core/inspector/graph-inspector.ts @@ -165,7 +165,7 @@ export class GraphInspector { } private insertEnhancerEdge(entry: EnhancerMetadataCacheEntry) { - const moduleRef = this.container.getModuleByKey(entry.moduleToken); + const moduleRef = this.container.getModuleByKey(entry.moduleToken)!; const sourceInstanceWrapper = moduleRef.controllers.get(entry.classRef) ?? moduleRef.providers.get(entry.classRef)!; diff --git a/packages/core/inspector/serialized-graph.ts b/packages/core/inspector/serialized-graph.ts index 241ef353d32..a4271620865 100644 --- a/packages/core/inspector/serialized-graph.ts +++ b/packages/core/inspector/serialized-graph.ts @@ -101,7 +101,7 @@ export class SerializedGraph { public insertEntrypoint(definition: Entrypoint, parentId: string) { if (this.entrypoints.has(parentId)) { - const existingCollection = this.entrypoints.get(parentId); + const existingCollection = this.entrypoints.get(parentId)!; existingCollection.push(definition); } else { this.entrypoints.set(parentId, [definition]); diff --git a/packages/core/interceptors/interceptors-consumer.ts b/packages/core/interceptors/interceptors-consumer.ts index a2b690a721e..5032e93235a 100644 --- a/packages/core/interceptors/interceptors-consumer.ts +++ b/packages/core/interceptors/interceptors-consumer.ts @@ -23,7 +23,7 @@ export class InterceptorsConsumer { return next(); } const context = this.createContext(args, instance, callback); - context.setType(type); + context.setType(type!); const nextFn = async (i = 0) => { if (i >= interceptors.length) { diff --git a/packages/core/metadata-scanner.ts b/packages/core/metadata-scanner.ts index 24ec8f5b10f..7c6a2326663 100644 --- a/packages/core/metadata-scanner.ts +++ b/packages/core/metadata-scanner.ts @@ -15,7 +15,7 @@ export class MetadataScanner { */ public scanFromPrototype( instance: T, - prototype: object, + prototype: object | null, callback: (name: string) => R, ): R[] { if (!prototype) { @@ -81,7 +81,7 @@ export class MetadataScanner { } if (this.cachedScannedPrototypes.has(prototype)) { - return this.cachedScannedPrototypes.get(prototype); + return this.cachedScannedPrototypes.get(prototype)!; } const visitedNames = new Map(); @@ -101,8 +101,8 @@ export class MetadataScanner { const descriptor = Object.getOwnPropertyDescriptor(prototype, property); if ( - descriptor.set || - descriptor.get || + descriptor!.set || + descriptor!.get || isConstructor(property) || !isFunction(prototype[property]) ) { diff --git a/packages/core/middleware/container.ts b/packages/core/middleware/container.ts index 5544f68277d..a30a3fa2d80 100644 --- a/packages/core/middleware/container.ts +++ b/packages/core/middleware/container.ts @@ -21,10 +21,10 @@ export class MiddlewareContainer { moduleKey: string, ): Map { if (!this.middleware.has(moduleKey)) { - const moduleRef = this.container.getModuleByKey(moduleKey); + const moduleRef = this.container.getModuleByKey(moduleKey)!; this.middleware.set(moduleKey, moduleRef.middlewares); } - return this.middleware.get(moduleKey); + return this.middleware.get(moduleKey)!; } public getConfigurations(): Map> { @@ -36,7 +36,7 @@ export class MiddlewareContainer { moduleKey: string, ) { const middleware = this.getMiddlewareCollection(moduleKey); - const targetConfig = this.getTargetConfig(moduleKey); + const targetConfig = this.getTargetConfig(moduleKey)!; const configurations = configList || []; const insertMiddleware = >(metatype: T) => { diff --git a/packages/core/middleware/middleware-module.ts b/packages/core/middleware/middleware-module.ts index f7430295b24..605122dfe1b 100644 --- a/packages/core/middleware/middleware-module.ts +++ b/packages/core/middleware/middleware-module.ts @@ -149,8 +149,8 @@ export class MiddlewareModule< const entriesSortedByDistance = [...configs.entries()].sort( ([moduleA], [moduleB]) => { return ( - this.container.getModuleByKey(moduleA).distance - - this.container.getModuleByKey(moduleB).distance + this.container.getModuleByKey(moduleA)!.distance - + this.container.getModuleByKey(moduleB)!.distance ); }, ); @@ -185,7 +185,7 @@ export class MiddlewareModule< applicationRef: any, ) { const middlewareCollection = [].concat(config.middleware); - const moduleRef = this.container.getModuleByKey(moduleKey); + const moduleRef = this.container.getModuleByKey(moduleKey)!; for (const metatype of middlewareCollection) { const collection = middlewareContainer.getMiddlewareCollection(moduleKey); @@ -242,7 +242,7 @@ export class MiddlewareModule< const { instance, metatype } = wrapper; if (isUndefined(instance?.use)) { - throw new InvalidMiddlewareException(metatype.name); + throw new InvalidMiddlewareException(metatype!.name); } const isStatic = wrapper.isDependencyTreeStatic(); if (isStatic) { @@ -325,12 +325,12 @@ export class MiddlewareModule< res: TResponse, next: () => void, ) => { - if (applicationRef.getRequestMethod(req) === requestMethod) { + if (applicationRef.getRequestMethod?.(req) === requestMethod) { return proxy(req, res, next); } return next(); }; - const pathsToApplyMiddleware = []; + const pathsToApplyMiddleware = [] as string[]; paths.some(path => path.match(/^\/?$/)) ? pathsToApplyMiddleware.push('/') : pathsToApplyMiddleware.push(...paths); diff --git a/packages/core/middleware/route-info-path-extractor.ts b/packages/core/middleware/route-info-path-extractor.ts index fda54ce1832..b8ef7b071b1 100644 --- a/packages/core/middleware/route-info-path-extractor.ts +++ b/packages/core/middleware/route-info-path-extractor.ts @@ -25,7 +25,7 @@ export class RouteInfoPathExtractor { addLeadingSlash(this.applicationConfig.getGlobalPrefix()), ); this.excludedGlobalPrefixRoutes = - this.applicationConfig.getGlobalPrefixOptions().exclude; + this.applicationConfig.getGlobalPrefixOptions().exclude!; this.versioningConfig = this.applicationConfig.getVersioning(); } diff --git a/packages/core/middleware/routes-mapper.ts b/packages/core/middleware/routes-mapper.ts index bd491277d89..d5155aace63 100644 --- a/packages/core/middleware/routes-mapper.ts +++ b/packages/core/middleware/routes-mapper.ts @@ -42,7 +42,10 @@ export class RoutesMapper { return this.getRouteInfoFromObject(controllerOrRoute); } - return this.getRouteInfoFromController(controllerOrRoute, routePathOrPaths); + return this.getRouteInfoFromController( + controllerOrRoute, + routePathOrPaths!, + ); } private getRouteInfoFromPath(routePath: string): RouteInfo[] { @@ -109,7 +112,7 @@ export class RoutesMapper { return routeInfo; }); - return [] + return ([] as string[]) .concat(routePath) .map(routePath => controllerPaths diff --git a/packages/core/nest-application-context.ts b/packages/core/nest-application-context.ts index 63543231cb1..5289912a3d0 100644 --- a/packages/core/nest-application-context.ts +++ b/packages/core/nest-application-context.ts @@ -66,7 +66,7 @@ export class NestApplicationContext< constructor( protected readonly container: NestContainer, protected readonly appOptions: TOptions = {} as TOptions, - private contextModule: Module = null, + private contextModule: Module | null = null, private readonly scope = new Array>(), ) { super(); @@ -80,7 +80,7 @@ export class NestApplicationContext< public selectContextModule() { const modules = this.container.getModules().values(); - this.contextModule = modules.next().value; + this.contextModule = modules.next().value!; } /** @@ -92,7 +92,7 @@ export class NestApplicationContext< selectOptions?: SelectOptions, ): INestApplicationContext { const modulesContainer = this.container.getModules(); - const contextModuleCtor = this.contextModule.metatype; + const contextModuleCtor = this.contextModule!.metatype; const scope = this.scope.concat(contextModuleCtor); const moduleTokenFactory = this.container.getModuleTokenFactory(); @@ -228,7 +228,7 @@ export class NestApplicationContext< ): Promise> { return this.resolvePerContext( typeOrToken, - this.contextModule, + this.contextModule!, contextId, options, ); @@ -382,7 +382,7 @@ export class NestApplicationContext< return; } this.activeShutdownSignals.forEach(signal => { - process.removeListener(signal, this.shutdownCleanupRef); + process.removeListener(signal, this.shutdownCleanupRef!); }); } diff --git a/packages/core/nest-application.ts b/packages/core/nest-application.ts index ef123cde060..232216231a5 100644 --- a/packages/core/nest-application.ts +++ b/packages/core/nest-application.ts @@ -85,7 +85,7 @@ export class NestApplication this.selectContextModule(); this.registerHttpServer(); - this.injector = new Injector({ preview: this.appOptions.preview }); + this.injector = new Injector({ preview: this.appOptions.preview! }); this.middlewareModule = new MiddlewareModule(); this.routesResolver = new RoutesResolver( this.container, @@ -182,7 +182,7 @@ export class NestApplication } this.applyOptions(); - await this.httpAdapter?.init(); + await this.httpAdapter?.init?.(); const useBodyParser = this.appOptions && this.appOptions.bodyParser !== false; @@ -274,13 +274,13 @@ export class NestApplication const [parserType, ...otherArgs] = args; const rawBody = !!this.appOptions.rawBody; - this.httpAdapter.useBodyParser(...[parserType, rawBody, ...otherArgs]); + this.httpAdapter.useBodyParser?.(...[parserType, rawBody, ...otherArgs]); return this; } public enableCors(options?: CorsOptions | CorsOptionsDelegate): void { - this.httpAdapter.enableCors(options); + this.httpAdapter.enableCors(options!); } public enableVersioning( diff --git a/packages/core/nest-factory.ts b/packages/core/nest-factory.ts index f3cb93bcdc7..933d5d65851 100644 --- a/packages/core/nest-factory.ts +++ b/packages/core/nest-factory.ts @@ -1,10 +1,10 @@ import { + DynamicModule, + ForwardReference, HttpServer, INestApplication, INestApplicationContext, INestMicroservice, - DynamicModule, - ForwardReference, Type, } from '@nestjs/common'; import { NestMicroserviceOptions } from '@nestjs/common/interfaces/microservices/nest-microservice-options.interface'; @@ -80,13 +80,13 @@ export class NestFactoryStatic { serverOrOptions?: AbstractHttpAdapter | NestApplicationOptions, options?: NestApplicationOptions, ): Promise { - const [httpServer, appOptions] = this.isHttpServer(serverOrOptions) + const [httpServer, appOptions] = this.isHttpServer(serverOrOptions!) ? [serverOrOptions, options] : [this.createHttpAdapter(), serverOrOptions]; const applicationConfig = new ApplicationConfig(); const container = new NestContainer(applicationConfig); - const graphInspector = this.createGraphInspector(appOptions, container); + const graphInspector = this.createGraphInspector(appOptions!, container); this.setAbortOnError(serverOrOptions, options); this.registerLoggerConfiguration(appOptions); @@ -131,7 +131,7 @@ export class NestFactoryStatic { ); const applicationConfig = new ApplicationConfig(); const container = new NestContainer(applicationConfig); - const graphInspector = this.createGraphInspector(options, container); + const graphInspector = this.createGraphInspector(options!, container); this.setAbortOnError(options); this.registerLoggerConfiguration(options); @@ -168,7 +168,7 @@ export class NestFactoryStatic { ): Promise { const applicationConfig = new ApplicationConfig(); const container = new NestContainer(applicationConfig); - const graphInspector = this.createGraphInspector(options, container); + const graphInspector = this.createGraphInspector(options!, container); this.setAbortOnError(options); this.registerLoggerConfiguration(options); @@ -203,13 +203,13 @@ export class NestFactoryStatic { graphInspector: GraphInspector, config = new ApplicationConfig(), options: NestApplicationContextOptions = {}, - httpServer: HttpServer = null, + httpServer: HttpServer | null = null, ) { UuidFactory.mode = options.snapshot ? UuidFactoryMode.Deterministic : UuidFactoryMode.Random; - const injector = new Injector({ preview: options.preview }); + const injector = new Injector({ preview: options.preview! }); const instanceLoader = new InstanceLoader( container, injector, @@ -225,7 +225,7 @@ export class NestFactoryStatic { container.setHttpAdapter(httpServer); const teardown = this.abortOnError === false ? rethrow : undefined; - await httpServer?.init(); + await httpServer?.init?.(); try { this.logger.log(MESSAGES.APPLICATION_START); @@ -327,7 +327,7 @@ export class NestFactoryStatic { serverOrOptions?: AbstractHttpAdapter | NestApplicationOptions, options?: NestApplicationContextOptions | NestApplicationOptions, ) { - this.abortOnError = this.isHttpServer(serverOrOptions) + this.abortOnError = this.isHttpServer(serverOrOptions!) ? !(options && options.abortOnError === false) : !(serverOrOptions && serverOrOptions.abortOnError === false); } diff --git a/packages/core/pipes/pipes-context-creator.ts b/packages/core/pipes/pipes-context-creator.ts index fa81402372b..0ea6568cd83 100644 --- a/packages/core/pipes/pipes-context-creator.ts +++ b/packages/core/pipes/pipes-context-creator.ts @@ -41,12 +41,12 @@ export class PipesContextCreator extends ContextCreator { inquirerId?: string, ): R { if (isEmpty(metadata)) { - return [] as R; + return [] as any[] as R; } return iterate(metadata) .filter((pipe: any) => pipe && (pipe.name || pipe.transform)) .map(pipe => this.getPipeInstance(pipe, contextId, inquirerId)) - .filter(pipe => pipe && pipe.transform && isFunction(pipe.transform)) + .filter(pipe => !!pipe && pipe.transform && isFunction(pipe.transform)) .toArray() as R; } @@ -55,7 +55,7 @@ export class PipesContextCreator extends ContextCreator { contextId = STATIC_CONTEXT, inquirerId?: string, ): PipeTransform | null { - const isObject = (pipe as PipeTransform).transform; + const isObject = !!(pipe as PipeTransform).transform; if (isObject) { return pipe as PipeTransform; } @@ -89,7 +89,7 @@ export class PipesContextCreator extends ContextCreator { inquirerId?: string, ): T { if (!this.config) { - return [] as T; + return [] as unknown[] as T; } const globalPipes = this.config.getGlobalPipes() as T; if (contextId === STATIC_CONTEXT && !inquirerId) { diff --git a/packages/core/repl/assign-to-object.util.ts b/packages/core/repl/assign-to-object.util.ts index 16f9379992f..0ef116b6fb1 100644 --- a/packages/core/repl/assign-to-object.util.ts +++ b/packages/core/repl/assign-to-object.util.ts @@ -2,7 +2,10 @@ * Similar to `Object.assign` but copying properties descriptors from `source` * as well. */ -export function assignToObject(target: T, source: U): T & U { +export function assignToObject( + target: T, + source: U, +): T & U { Object.defineProperties( target, Object.keys(source).reduce((descriptors, key) => { diff --git a/packages/core/repl/repl-context.ts b/packages/core/repl/repl-context.ts index e3f71b44fd5..a22c46f5c6f 100644 --- a/packages/core/repl/repl-context.ts +++ b/packages/core/repl/repl-context.ts @@ -115,7 +115,7 @@ export class ReplContext { return typeof token !== 'string' ? typeof token === 'function' ? token.name - : token?.toString() + : token?.toString()! : `"${token}"`; } diff --git a/packages/core/repl/repl-logger.ts b/packages/core/repl/repl-logger.ts index afaa04316c2..c68744d29ea 100644 --- a/packages/core/repl/repl-logger.ts +++ b/packages/core/repl/repl-logger.ts @@ -11,7 +11,7 @@ export class ReplLogger extends ConsoleLogger { ]; log(_message: any, context?: string) { - if (ReplLogger.ignoredContexts.includes(context)) { + if (ReplLogger.ignoredContexts.includes(context!)) { return; } // eslint-disable-next-line diff --git a/packages/core/router/interfaces/route-params-factory.interface.ts b/packages/core/router/interfaces/route-params-factory.interface.ts index 8d1a61c0800..5420269faf0 100644 --- a/packages/core/router/interfaces/route-params-factory.interface.ts +++ b/packages/core/router/interfaces/route-params-factory.interface.ts @@ -9,5 +9,5 @@ export interface IRouteParamsFactory { key: RouteParamtypes | string, data: any, { req, res, next }: { req: TRequest; res: TResponse; next: Function }, - ): TResult; + ): TResult | null; } diff --git a/packages/core/router/paths-explorer.ts b/packages/core/router/paths-explorer.ts index 34c9972eb88..eec6a7471f2 100644 --- a/packages/core/router/paths-explorer.ts +++ b/packages/core/router/paths-explorer.ts @@ -47,7 +47,7 @@ export class PathsExplorer { } return acc; - }, []); + }, [] as RouteDefinition[]); } public exploreMethodMetadata( diff --git a/packages/core/router/route-params-factory.ts b/packages/core/router/route-params-factory.ts index 4fc8baf93a8..200cb780c0e 100644 --- a/packages/core/router/route-params-factory.ts +++ b/packages/core/router/route-params-factory.ts @@ -10,7 +10,7 @@ export class RouteParamsFactory implements IRouteParamsFactory { key: RouteParamtypes | string, data: string, { req, res, next }: { req: TRequest; res: TResponse; next: Function }, - ): TResult { + ): TResult | null { switch (key) { case RouteParamtypes.NEXT: return next as any; diff --git a/packages/core/router/router-exception-filters.ts b/packages/core/router/router-exception-filters.ts index 68d7f1c36b6..67769fa22da 100644 --- a/packages/core/router/router-exception-filters.ts +++ b/packages/core/router/router-exception-filters.ts @@ -2,6 +2,7 @@ import { HttpServer } from '@nestjs/common'; import { EXCEPTION_FILTERS_METADATA } from '@nestjs/common/constants'; import { Controller } from '@nestjs/common/interfaces/controllers/controller.interface'; import { isEmpty } from '@nestjs/common/utils/shared.utils'; +import { iterate } from 'iterare'; import { ApplicationConfig } from '../application-config'; import { BaseExceptionFilterContext } from '../exceptions/base-exception-filter-context'; import { ExceptionsHandler } from '../exceptions/exceptions-handler'; @@ -9,7 +10,6 @@ import { STATIC_CONTEXT } from '../injector/constants'; import { NestContainer } from '../injector/container'; import { InstanceWrapper } from '../injector/instance-wrapper'; import { RouterProxyCallback } from './router-proxy'; -import { iterate } from 'iterare'; export class RouterExceptionFilters extends BaseExceptionFilterContext { constructor( @@ -23,11 +23,11 @@ export class RouterExceptionFilters extends BaseExceptionFilterContext { public create( instance: Controller, callback: RouterProxyCallback, - moduleKey: string, + moduleKey: string | undefined, contextId = STATIC_CONTEXT, inquirerId?: string, ): ExceptionsHandler { - this.moduleContext = moduleKey; + this.moduleContext = moduleKey!; const exceptionHandler = new ExceptionsHandler(this.applicationRef); const filters = this.createContext( diff --git a/packages/core/router/router-execution-context.ts b/packages/core/router/router-execution-context.ts index c91207d897f..f73ab40bda7 100644 --- a/packages/core/router/router-execution-context.ts +++ b/packages/core/router/router-execution-context.ts @@ -304,7 +304,7 @@ export class RouterExecutionContext { const customExtractValue = this.contextUtils.getCustomFactory( factory, data, - contextFactory, + contextFactory!, ); return { index, extractValue: customExtractValue, type, data, pipes }; } @@ -315,7 +315,7 @@ export class RouterExecutionContext { next: Function, ) => this.paramsFactory.exchangeKeyForValue(numericType, data, { - req, + req: req as Record, res, next, }); @@ -359,7 +359,7 @@ export class RouterExecutionContext { instance: Controller, callback: (...args: any[]) => any, contextType?: TContext, - ): (args: any[]) => Promise | null { + ): ((args: any[]) => Promise) | null { const canActivateFn = async (args: any[]) => { const canActivate = await this.guardsConsumer.tryActivate( guards, @@ -447,7 +447,7 @@ export class RouterExecutionContext { result, (res as any).raw || res, (req as any).raw || req, - { additionalHeaders: res.getHeaders?.() }, + { additionalHeaders: res.getHeaders?.()! }, ); }; } diff --git a/packages/core/router/router-explorer.ts b/packages/core/router/router-explorer.ts index 1e142746059..283c7239705 100644 --- a/packages/core/router/router-explorer.ts +++ b/packages/core/router/router-explorer.ts @@ -177,7 +177,7 @@ export class RouterExplorer { ? this.createRequestScopedHandler( instanceWrapper, requestMethod, - this.container.getModuleByKey(moduleKey), + this.container.getModuleByKey(moduleKey)!, moduleKey, methodName, ) @@ -198,7 +198,7 @@ export class RouterExplorer { paths.forEach(path => { if ( isVersioned && - routePathMetadata.versioningOptions.type !== VersioningType.URI + routePathMetadata.versioningOptions!.type !== VersioningType.URI ) { // All versioning (except for URI Versioning) is done via the "Version Filter" routeHandler = this.applyVersionFilter( @@ -250,7 +250,7 @@ export class RouterExplorer { if (isVersioned) { const version = this.routePathFactory.getVersion(routePathMetadata); this.logger.log( - VERSIONED_ROUTE_MAPPED_MESSAGE(path, requestMethod, version), + VERSIONED_ROUTE_MAPPED_MESSAGE(path, requestMethod, version!), ); } else { this.logger.log(ROUTE_MAPPED_MESSAGE(path, requestMethod)); @@ -270,7 +270,7 @@ export class RouterExplorer { const httpAdapterRef = this.container.getHttpAdapterRef(); const hosts = Array.isArray(host) ? host : [host]; const hostRegExps = hosts.map((host: string | RegExp) => { - const keys = []; + const keys: any[] = []; const regexp = pathToRegexp(host, keys); return { regexp, keys }; }); @@ -316,11 +316,11 @@ export class RouterExplorer { routePathMetadata: RoutePathMetadata, handler: Function, ) { - const version = this.routePathFactory.getVersion(routePathMetadata); + const version = this.routePathFactory.getVersion(routePathMetadata)!; return router.applyVersionFilter( handler, version, - routePathMetadata.versioningOptions, + routePathMetadata.versioningOptions!, ); } diff --git a/packages/core/router/router-proxy.ts b/packages/core/router/router-proxy.ts index b2f4db3313f..bf60595cdf5 100644 --- a/packages/core/router/router-proxy.ts +++ b/packages/core/router/router-proxy.ts @@ -2,9 +2,9 @@ import { ExceptionsHandler } from '../exceptions/exceptions-handler'; import { ExecutionContextHost } from '../helpers/execution-context-host'; export type RouterProxyCallback = ( - req?: TRequest, - res?: TResponse, - next?: () => void, + req: TRequest, + res: TResponse, + next: () => void, ) => void | Promise; export class RouterProxy { diff --git a/packages/core/router/routes-resolver.ts b/packages/core/router/routes-resolver.ts index e03ade389aa..abc0eb7d4cb 100644 --- a/packages/core/router/routes-resolver.ts +++ b/packages/core/router/routes-resolver.ts @@ -70,7 +70,7 @@ export class RoutesResolver implements Resolver { ) { const modules = this.container.getModules(); modules.forEach(({ controllers, metatype }, moduleName) => { - const modulePath = this.getModulePathMetadata(metatype); + const modulePath = this.getModulePathMetadata(metatype)!; this.registerRouters( controllers, moduleName, @@ -91,12 +91,12 @@ export class RoutesResolver implements Resolver { routes.forEach(instanceWrapper => { const { metatype } = instanceWrapper; - const host = this.getHostMetadata(metatype); + const host = this.getHostMetadata(metatype!); const routerPaths = this.routerExplorer.extractRouterPath( metatype as Type, ); - const controllerVersion = this.getVersionMetadata(metatype); - const controllerName = metatype.name; + const controllerVersion = this.getVersionMetadata(metatype!); + const controllerName = metatype!.name; routerPaths.forEach(path => { const pathsToLog = this.routePathFactory.create({ @@ -132,7 +132,7 @@ export class RoutesResolver implements Resolver { instanceWrapper, moduleName, applicationRef, - host, + host!, routePathMetadata, ); }); diff --git a/packages/core/router/sse-stream.ts b/packages/core/router/sse-stream.ts index 523e745e02a..a354c8a890c 100644 --- a/packages/core/router/sse-stream.ts +++ b/packages/core/router/sse-stream.ts @@ -51,7 +51,7 @@ export type HeaderStream = WritableHeaderStream & ReadHeaders; * If this stream is piped to an HTTP Response, it will set appropriate headers. */ export class SseStream extends Transform { - private lastEventId: number = null; + private lastEventId: number | null = null; constructor(req?: IncomingMessage) { super({ objectMode: true }); @@ -83,7 +83,7 @@ export class SseStream extends Transform { // NGINX support https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/#x-accel-buffering 'X-Accel-Buffering': 'no', }); - destination.flushHeaders(); + destination.flushHeaders?.(); } destination.write('\n'); @@ -112,8 +112,8 @@ export class SseStream extends Transform { cb: (error: Error | null | undefined) => void, ) { if (!message.id) { - this.lastEventId++; - message.id = this.lastEventId.toString(); + this.lastEventId!++; + message.id = this.lastEventId!.toString(); } if (!this.write(message, 'utf-8')) { diff --git a/packages/microservices/listeners-controller.ts b/packages/microservices/listeners-controller.ts index e4549a3a807..27cb5eae323 100644 --- a/packages/microservices/listeners-controller.ts +++ b/packages/microservices/listeners-controller.ts @@ -143,7 +143,7 @@ export class ListenersController { const asyncHandler = this.createRequestScopedHandler( instanceWrapper, pattern, - moduleRef, + moduleRef!, moduleKey, methodKey, defaultCallMetadata, @@ -167,7 +167,7 @@ export class ListenersController { { type: 'microservice', methodName: definition.methodKey, - className: instanceWrapper.metatype?.name, + className: instanceWrapper.metatype?.name!, classNodeId: instanceWrapper.id, metadata: { key: definition.patterns.toString(), diff --git a/packages/microservices/module/clients.module.ts b/packages/microservices/module/clients.module.ts index 6630b394343..4ed9f2eb93c 100644 --- a/packages/microservices/module/clients.module.ts +++ b/packages/microservices/module/clients.module.ts @@ -42,10 +42,15 @@ export class ClientsModule { [], ); const imports = clientsOptions.reduce( - (accImports, option) => - option.imports && !accImports.includes(option.imports) - ? accImports.concat(option.imports) - : accImports, + (accImports, option) => { + if (!option.imports) { + return accImports; + } + const toInsert = option.imports.filter( + item => !accImports.includes(item), + ); + return accImports.concat(toInsert); + }, [] as Array< DynamicModule | Promise | ForwardReference | Type >, diff --git a/packages/microservices/server/server-nats.ts b/packages/microservices/server/server-nats.ts index f41b5fcf31f..121a0ad1962 100644 --- a/packages/microservices/server/server-nats.ts +++ b/packages/microservices/server/server-nats.ts @@ -86,7 +86,7 @@ export class ServerNats< const defaultQueue = this.getOptionsProp(this.options, 'queue'); const registeredPatterns = [...this.messageHandlers.keys()]; for (const channel of registeredPatterns) { - const handlerRef = this.messageHandlers.get(channel); + const handlerRef = this.messageHandlers.get(channel)!; const queue = handlerRef.extras?.queue ?? defaultQueue; const sub = subscribe(channel, queue); this.subscriptions.push(sub); diff --git a/packages/websockets/exceptions/base-ws-exception-filter.ts b/packages/websockets/exceptions/base-ws-exception-filter.ts index 4b64c838352..7b7f09bb501 100644 --- a/packages/websockets/exceptions/base-ws-exception-filter.ts +++ b/packages/websockets/exceptions/base-ws-exception-filter.ts @@ -85,8 +85,8 @@ export class BaseWsExceptionFilter message: result, }; - if (this.options?.includeCause) { - payload.cause = this.options.causeFactory(cause.pattern, cause.data); + if (this.options?.includeCause && cause) { + payload.cause = this.options.causeFactory!(cause.pattern, cause.data); } client.emit('exception', payload); @@ -103,8 +103,8 @@ export class BaseWsExceptionFilter message: MESSAGES.UNKNOWN_EXCEPTION_MESSAGE, }; - if (this.options?.includeCause) { - payload.cause = this.options.causeFactory(data.pattern, data.data); + if (this.options?.includeCause && data) { + payload.cause = this.options.causeFactory!(data.pattern, data.data); } client.emit('exception', payload); diff --git a/packages/websockets/socket-module.ts b/packages/websockets/socket-module.ts index 06e70dc3835..19a3d85fb62 100644 --- a/packages/websockets/socket-module.ts +++ b/packages/websockets/socket-module.ts @@ -78,7 +78,7 @@ export class SocketModule< moduleName: string, ) { const { instance, metatype } = wrapper; - const metadataKeys = Reflect.getMetadataKeys(metatype); + const metadataKeys = Reflect.getMetadataKeys(metatype!); if (!metadataKeys.includes(GATEWAY_METADATA)) { return; } @@ -87,7 +87,7 @@ export class SocketModule< } this.webSocketsController.connectGatewayToServer( instance as NestGateway, - metatype, + metatype!, moduleName, wrapper.id, ); From b94b0b910efcec7289c6c063e78169d0c8a79731 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 26 Nov 2024 13:49:07 +0100 Subject: [PATCH 089/122] build: use strict null checks part 3 --- .../use-interceptors.decorator.spec.ts | 2 +- .../configurable-module.builder.spec.ts | 2 +- .../common/test/pipes/parse-bool.pipe.spec.ts | 5 +- .../common/test/pipes/parse-date.pipe.spec.ts | 4 +- .../common/test/pipes/parse-enum.pipe.spec.ts | 5 +- .../test/pipes/parse-float.pipe.spec.ts | 8 +-- .../common/test/pipes/parse-int.pipe.spec.ts | 7 ++- .../common/test/pipes/parse-uuid.pipe.spec.ts | 7 ++- .../common/test/utils/shared.utils.spec.ts | 4 +- packages/core/test/application-config.spec.ts | 7 +-- .../core/test/errors/test/messages.spec.ts | 8 +-- .../exceptions/base-exception-filter.spec.ts | 6 +-- .../exceptions/exceptions-handler.spec.ts | 12 ++--- .../external-exception-filter-context.spec.ts | 5 +- .../external-exceptions-handler.spec.ts | 18 +++---- .../core/test/guards/guards-consumer.spec.ts | 6 +-- .../guards/guards-context-creator.spec.ts | 6 +-- .../core/test/helpers/context-utils.spec.ts | 8 +-- .../helpers/external-context-creator.spec.ts | 8 +-- packages/core/test/injector/container.spec.ts | 20 ++++---- .../helpers/provider-classifier.spec.ts | 10 ++-- packages/core/test/injector/injector.spec.ts | 42 ++++++++-------- .../internal-core-module-factory.spec.ts | 12 ++--- packages/core/test/injector/module.spec.ts | 4 +- .../test/inspector/graph-inspector.spec.ts | 8 +-- .../interceptors-consumer.spec.ts | 32 ++++++------ .../interceptors-context-creator.spec.ts | 6 +-- .../core/test/middleware/container.spec.ts | 6 +-- .../test/middleware/middleware-module.spec.ts | 2 +- .../core/test/middleware/resolver.spec.ts | 2 +- .../test/nest-application-context.spec.ts | 2 +- .../test/pipes/pipes-context-creator.spec.ts | 8 +-- .../native-functions/debug-repl-fn.spec.ts | 8 +-- .../native-functions/methods-repl-fn.spec.ts | 8 +-- .../core/test/router/paths-explorer.spec.ts | 16 +++--- .../router/router-execution-context.spec.ts | 50 +++++++++---------- .../core/test/router/router-explorer.spec.ts | 18 +++---- .../core/test/router/router-module.spec.ts | 6 +-- .../core/test/router/router-proxy.spec.ts | 8 +-- .../router/router-response-controller.spec.ts | 4 +- packages/core/test/scanner.spec.ts | 4 +- 41 files changed, 208 insertions(+), 196 deletions(-) diff --git a/packages/common/test/decorators/use-interceptors.decorator.spec.ts b/packages/common/test/decorators/use-interceptors.decorator.spec.ts index 52731904593..48449e05bc8 100644 --- a/packages/common/test/decorators/use-interceptors.decorator.spec.ts +++ b/packages/common/test/decorators/use-interceptors.decorator.spec.ts @@ -44,7 +44,7 @@ describe('@UseInterceptors', () => { try { UseInterceptors({ intercept() { - return null; + return null!; }, })({ name: 'target' } as any); } catch (e) { diff --git a/packages/common/test/module-utils/configurable-module.builder.spec.ts b/packages/common/test/module-utils/configurable-module.builder.spec.ts index f198ca679b0..756c01d2556 100644 --- a/packages/common/test/module-utils/configurable-module.builder.spec.ts +++ b/packages/common/test/module-utils/configurable-module.builder.spec.ts @@ -112,7 +112,7 @@ describe('ConfigurableModuleBuilder', () => { provideInjectionTokensFrom[2], ); expect(MODULE_OPTIONS_TOKEN).to.equal('RANDOM_TEST_MODULE_OPTIONS'); - expect((definition.providers[0] as any).provide).to.equal( + expect((definition.providers![0] as any).provide).to.equal( 'RANDOM_TEST_MODULE_OPTIONS', ); diff --git a/packages/common/test/pipes/parse-bool.pipe.spec.ts b/packages/common/test/pipes/parse-bool.pipe.spec.ts index c6420187f30..25dc5959bf2 100644 --- a/packages/common/test/pipes/parse-bool.pipe.spec.ts +++ b/packages/common/test/pipes/parse-bool.pipe.spec.ts @@ -21,7 +21,10 @@ describe('ParseBoolPipe', () => { it('should not throw an error if the value is undefined/null and optional is true', async () => { const target = new ParseBoolPipe({ optional: true }); - const value = await target.transform(undefined, {} as ArgumentMetadata); + const value = await target.transform( + undefined!, + {} as ArgumentMetadata, + ); expect(value).to.equal(undefined); }); }); diff --git a/packages/common/test/pipes/parse-date.pipe.spec.ts b/packages/common/test/pipes/parse-date.pipe.spec.ts index 867e26f3f80..e7f2b78706a 100644 --- a/packages/common/test/pipes/parse-date.pipe.spec.ts +++ b/packages/common/test/pipes/parse-date.pipe.spec.ts @@ -14,12 +14,12 @@ describe('ParseDatePipe', () => { it('should return a valid date object', () => { const date = new Date().toISOString(); - const transformedDate = target.transform(date); + const transformedDate = target.transform(date)!; expect(transformedDate).to.be.instanceOf(Date); expect(transformedDate.toISOString()).to.equal(date); const asNumber = transformedDate.getTime(); - const transformedNumber = target.transform(asNumber); + const transformedNumber = target.transform(asNumber)!; expect(transformedNumber).to.be.instanceOf(Date); expect(transformedNumber.getTime()).to.equal(asNumber); }); diff --git a/packages/common/test/pipes/parse-enum.pipe.spec.ts b/packages/common/test/pipes/parse-enum.pipe.spec.ts index 8b4895bc259..5182781dcbe 100644 --- a/packages/common/test/pipes/parse-enum.pipe.spec.ts +++ b/packages/common/test/pipes/parse-enum.pipe.spec.ts @@ -30,7 +30,10 @@ describe('ParseEnumPipe', () => { it('should not throw an error if enumType is undefined/null and optional is true', async () => { const target = new ParseEnumPipe('DOWN', { optional: true }); - const value = await target.transform(undefined, {} as ArgumentMetadata); + const value = await target.transform( + undefined!, + {} as ArgumentMetadata, + ); expect(value).to.equal(undefined); }); }); diff --git a/packages/common/test/pipes/parse-float.pipe.spec.ts b/packages/common/test/pipes/parse-float.pipe.spec.ts index ff4351c43e0..5343c23a616 100644 --- a/packages/common/test/pipes/parse-float.pipe.spec.ts +++ b/packages/common/test/pipes/parse-float.pipe.spec.ts @@ -1,8 +1,7 @@ -import * as sinon from 'sinon'; import { expect } from 'chai'; +import { HttpException } from '../../exceptions'; import { ArgumentMetadata } from '../../interfaces'; import { ParseFloatPipe } from '../../pipes/parse-float.pipe'; -import { HttpException } from '../../exceptions'; class CustomTestError extends HttpException { constructor() { @@ -27,7 +26,10 @@ describe('ParseFloatPipe', () => { }); it('should not throw an error if the value is undefined/null and optional is true', async () => { const target = new ParseFloatPipe({ optional: true }); - const value = await target.transform(undefined, {} as ArgumentMetadata); + const value = await target.transform( + undefined!, + {} as ArgumentMetadata, + ); expect(value).to.equal(undefined); }); }); diff --git a/packages/common/test/pipes/parse-int.pipe.spec.ts b/packages/common/test/pipes/parse-int.pipe.spec.ts index 8906b5a3a36..5c2370a7422 100644 --- a/packages/common/test/pipes/parse-int.pipe.spec.ts +++ b/packages/common/test/pipes/parse-int.pipe.spec.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; +import { HttpException } from '../../exceptions'; import { ArgumentMetadata } from '../../interfaces'; import { ParseIntPipe } from '../../pipes/parse-int.pipe'; -import { HttpException } from '../../exceptions'; class CustomTestError extends HttpException { constructor() { @@ -32,7 +32,10 @@ describe('ParseIntPipe', () => { }); it('should not throw an error if the value is undefined/null and optional is true', async () => { const target = new ParseIntPipe({ optional: true }); - const value = await target.transform(undefined, {} as ArgumentMetadata); + const value = await target.transform( + undefined!, + {} as ArgumentMetadata, + ); expect(value).to.equal(undefined); }); }); diff --git a/packages/common/test/pipes/parse-uuid.pipe.spec.ts b/packages/common/test/pipes/parse-uuid.pipe.spec.ts index ae8c86b21e7..a28d1c0b74d 100644 --- a/packages/common/test/pipes/parse-uuid.pipe.spec.ts +++ b/packages/common/test/pipes/parse-uuid.pipe.spec.ts @@ -43,7 +43,10 @@ describe('ParseUUIDPipe', () => { }); it('should not throw an error if the value is undefined/null and optional is true', async () => { const target = new ParseUUIDPipe({ optional: true }); - const value = await target.transform(undefined, {} as ArgumentMetadata); + const value = await target.transform( + undefined!, + {} as ArgumentMetadata, + ); expect(value).to.equal(undefined); }); }); @@ -59,7 +62,7 @@ describe('ParseUUIDPipe', () => { it('should throw an error - not a string', async () => { target = new ParseUUIDPipe({ exceptionFactory }); await expect( - target.transform(undefined, {} as ArgumentMetadata), + target.transform(undefined!, {} as ArgumentMetadata), ).to.be.rejectedWith(TestException); }); diff --git a/packages/common/test/utils/shared.utils.spec.ts b/packages/common/test/utils/shared.utils.spec.ts index d37ac4a0f09..391838d6580 100644 --- a/packages/common/test/utils/shared.utils.spec.ts +++ b/packages/common/test/utils/shared.utils.spec.ts @@ -123,7 +123,7 @@ describe('Shared utils', () => { }); it('should return empty path', () => { expect(addLeadingSlash('')).to.be.eql(''); - expect(addLeadingSlash(null)).to.be.eql(''); + expect(addLeadingSlash(null!)).to.be.eql(''); expect(addLeadingSlash(undefined)).to.be.eql(''); }); }); @@ -140,7 +140,7 @@ describe('Shared utils', () => { }); it('should return / for empty path', () => { expect(normalizePath('')).to.be.eql('/'); - expect(normalizePath(null)).to.be.eql('/'); + expect(normalizePath(null!)).to.be.eql('/'); expect(normalizePath(undefined)).to.be.eql('/'); }); }); diff --git a/packages/core/test/application-config.spec.ts b/packages/core/test/application-config.spec.ts index cff91bb118c..73e23f7e377 100644 --- a/packages/core/test/application-config.spec.ts +++ b/packages/core/test/application-config.spec.ts @@ -1,8 +1,5 @@ import { RequestMethod } from '@nestjs/common'; -import { - GlobalPrefixOptions, - VersioningOptions, -} from '@nestjs/common/interfaces'; +import { GlobalPrefixOptions } from '@nestjs/common/interfaces'; import { expect } from 'chai'; import { ApplicationConfig } from '../application-config'; import { ExcludeRouteMetadata } from '../router/interfaces/exclude-route-metadata.interface'; @@ -141,7 +138,7 @@ describe('ApplicationConfig', () => { const options = { type: 'test', defaultVersion: ['1', '2', '2', '1'] }; appConfig.enableVersioning(options as any); - expect(appConfig.getVersioning().defaultVersion).to.be.eql(['1', '2']); + expect(appConfig.getVersioning()!.defaultVersion).to.be.eql(['1', '2']); }); it('should have undefined as the versioning by default', () => { diff --git a/packages/core/test/errors/test/messages.spec.ts b/packages/core/test/errors/test/messages.spec.ts index df4a74c5b26..19941c08fa3 100644 --- a/packages/core/test/errors/test/messages.spec.ts +++ b/packages/core/test/errors/test/messages.spec.ts @@ -1,11 +1,11 @@ import { expect } from 'chai'; import { UnknownDependenciesException } from '../../../errors/exceptions/unknown-dependencies.exception'; -import { Module } from '../../../injector/module'; -import { stringCleaner } from '../../utils/string.cleaner'; import { - UNDEFINED_MODULE_MESSAGE, INVALID_MODULE_MESSAGE, + UNDEFINED_MODULE_MESSAGE, } from '../../../errors/messages'; +import { Module } from '../../../injector/module'; +import { stringCleaner } from '../../utils/string.cleaner'; describe('Error Messages', () => { const CatsModule = { name: 'CatsModule' }; @@ -115,7 +115,7 @@ describe('Error Messages', () => { const actualMessage = stringCleaner( new UnknownDependenciesException('CatService', { index, - dependencies: ['', undefined], + dependencies: ['', undefined!], }).message, ); diff --git a/packages/core/test/exceptions/base-exception-filter.spec.ts b/packages/core/test/exceptions/base-exception-filter.spec.ts index 444e1cb9966..f348814c919 100644 --- a/packages/core/test/exceptions/base-exception-filter.spec.ts +++ b/packages/core/test/exceptions/base-exception-filter.spec.ts @@ -33,7 +33,7 @@ describe('BaseExceptionFilterContext', () => { expect(filter.getFilterInstance(Filter)).to.be.eql(wrapper.instance); }); it('should return null', () => { - sinon.stub(filter, 'getInstanceByMetatype').callsFake(() => null); + sinon.stub(filter, 'getInstanceByMetatype').callsFake(() => null!); expect(filter.getFilterInstance(Filter)).to.be.eql(null); }); }); @@ -43,7 +43,7 @@ describe('BaseExceptionFilterContext', () => { describe('when "moduleContext" is nil', () => { it('should return undefined', () => { (filter as any).moduleContext = undefined; - expect(filter.getInstanceByMetatype(null)).to.be.undefined; + expect(filter.getInstanceByMetatype(null!)).to.be.undefined; }); }); describe('when "moduleContext" is not nil', () => { @@ -54,7 +54,7 @@ describe('BaseExceptionFilterContext', () => { describe('and when module exists', () => { it('should return undefined', () => { sinon.stub(container.getModules(), 'get').callsFake(() => undefined); - expect(filter.getInstanceByMetatype(null)).to.be.undefined; + expect(filter.getInstanceByMetatype(null!)).to.be.undefined; }); }); diff --git a/packages/core/test/exceptions/exceptions-handler.spec.ts b/packages/core/test/exceptions/exceptions-handler.spec.ts index 65446858c83..4472a0b36f1 100644 --- a/packages/core/test/exceptions/exceptions-handler.spec.ts +++ b/packages/core/test/exceptions/exceptions-handler.spec.ts @@ -120,7 +120,7 @@ describe('ExceptionsHandler', () => { expect((handler as any).filters).to.be.eql(filters); }); it('should throw exception when passed argument is not an array', () => { - expect(() => handler.setCustomFilters(null)).to.throws( + expect(() => handler.setCustomFilters(null!)).to.throws( InvalidExceptionFilterException, ); }); @@ -128,7 +128,7 @@ describe('ExceptionsHandler', () => { describe('invokeCustomFilters', () => { describe('when filters array is empty', () => { it('should return false', () => { - expect(handler.invokeCustomFilters(null, null)).to.be.false; + expect(handler.invokeCustomFilters(null, null!)).to.be.false; }); }); describe('when filters array is not empty', () => { @@ -144,7 +144,7 @@ describe('ExceptionsHandler', () => { (handler as any).filters = filters; }); it('should call funcSpy', () => { - handler.invokeCustomFilters(new TestException(), null); + handler.invokeCustomFilters(new TestException(), null!); expect(funcSpy.notCalled).to.be.false; }); it('should call funcSpy with exception and response passed as an arguments', () => { @@ -155,17 +155,17 @@ describe('ExceptionsHandler', () => { expect(funcSpy.calledWith(exception, res)).to.be.true; }); it('should return true', () => { - expect(handler.invokeCustomFilters(new TestException(), null)).to.be + expect(handler.invokeCustomFilters(new TestException(), null!)).to.be .true; }); }); describe('when filter does not exists in filters array', () => { it('should not call funcSpy', () => { - handler.invokeCustomFilters(new TestException(), null); + handler.invokeCustomFilters(new TestException(), null!); expect(funcSpy.notCalled).to.be.true; }); it('should return false', () => { - expect(handler.invokeCustomFilters(new TestException(), null)).to.be + expect(handler.invokeCustomFilters(new TestException(), null!)).to.be .false; }); }); diff --git a/packages/core/test/exceptions/external-exception-filter-context.spec.ts b/packages/core/test/exceptions/external-exception-filter-context.spec.ts index e1e9621758f..db05ca315e0 100644 --- a/packages/core/test/exceptions/external-exception-filter-context.spec.ts +++ b/packages/core/test/exceptions/external-exception-filter-context.spec.ts @@ -1,6 +1,5 @@ import { expect } from 'chai'; import * as sinon from 'sinon'; -import { ExceptionFilter } from '../../../common'; import { Catch } from '../../../common/decorators/core/catch.decorator'; import { UseFilters } from '../../../common/decorators/core/exception-filters.decorator'; import { ApplicationConfig } from '../../application-config'; @@ -38,7 +37,7 @@ describe('ExternalExceptionFilterContext', () => { const filter = exceptionFilter.create( new EmptyMetadata(), () => ({}) as any, - undefined, + undefined!, ); expect((filter as any).filters).to.be.empty; }); @@ -51,7 +50,7 @@ describe('ExternalExceptionFilterContext', () => { const filter = exceptionFilter.create( new WithMetadata(), () => ({}) as any, - undefined, + undefined!, ); expect((filter as any).filters).to.not.be.empty; }); diff --git a/packages/core/test/exceptions/external-exceptions-handler.spec.ts b/packages/core/test/exceptions/external-exceptions-handler.spec.ts index debdaff3ac5..cf8ca92a415 100644 --- a/packages/core/test/exceptions/external-exceptions-handler.spec.ts +++ b/packages/core/test/exceptions/external-exceptions-handler.spec.ts @@ -18,7 +18,7 @@ describe('ExternalExceptionsHandler', () => { describe('next', () => { it('should method returns expected stream with message when exception is unknown', () => { const error = new Error(); - expect(() => handler.next(error, null)).to.throw(error); + expect(() => handler.next(error, null!)).to.throw(error); }); describe('when "invokeCustomFilters" returns value', () => { const observable$ = of(true); @@ -26,7 +26,7 @@ describe('ExternalExceptionsHandler', () => { sinon.stub(handler, 'invokeCustomFilters').returns(observable$ as any); }); it('should return observable', () => { - const result = handler.next(new Error(), null); + const result = handler.next(new Error(), null!); expect(result).to.be.eql(observable$); }); }); @@ -38,13 +38,13 @@ describe('ExternalExceptionsHandler', () => { expect((handler as any).filters).to.be.eql(filters); }); it('should throw exception when passed argument is not an array', () => { - expect(() => handler.setCustomFilters(null)).to.throw(); + expect(() => handler.setCustomFilters(null!)).to.throw(); }); }); describe('invokeCustomFilters', () => { describe('when filters array is empty', () => { it('should return identity', () => { - expect(handler.invokeCustomFilters(null, null)).to.be.null; + expect(handler.invokeCustomFilters(null, null!)).to.be.null; }); }); describe('when filters array is not empty', () => { @@ -61,16 +61,16 @@ describe('ExternalExceptionsHandler', () => { (handler as any).filters = filters; }); it('should call funcSpy', async () => { - await handler.invokeCustomFilters(new TestException(), null); + await handler.invokeCustomFilters(new TestException(), null!); expect(funcSpy.notCalled).to.be.false; }); it('should call funcSpy with exception and response passed as an arguments', async () => { const exception = new TestException(); - await handler.invokeCustomFilters(exception, null); + await handler.invokeCustomFilters(exception, null!); expect(funcSpy.calledWith(exception)).to.be.true; }); it('should return stream', () => { - expect(handler.invokeCustomFilters(new TestException(), null)).to.be + expect(handler.invokeCustomFilters(new TestException(), null!)).to.be .not.null; }); }); @@ -82,11 +82,11 @@ describe('ExternalExceptionsHandler', () => { (handler as any).filters = filters; }); it('should not call funcSpy', async () => { - await handler.invokeCustomFilters(new TestException(), null); + await handler.invokeCustomFilters(new TestException(), null!); expect(funcSpy.notCalled).to.be.true; }); it('should return null', () => { - expect(handler.invokeCustomFilters(new TestException(), null)).to.be + expect(handler.invokeCustomFilters(new TestException(), null!)).to.be .null; }); }); diff --git a/packages/core/test/guards/guards-consumer.spec.ts b/packages/core/test/guards/guards-consumer.spec.ts index b62da0c2a03..8ab3049ca04 100644 --- a/packages/core/test/guards/guards-consumer.spec.ts +++ b/packages/core/test/guards/guards-consumer.spec.ts @@ -16,7 +16,7 @@ describe('GuardsConsumer', () => { [], [], { constructor: null }, - null, + null!, ); expect(canActivate).to.be.true; }); @@ -28,7 +28,7 @@ describe('GuardsConsumer', () => { [...guards, { canActivate: () => false }], [], { constructor: null }, - null, + null!, ); expect(canActivate).to.be.false; }); @@ -39,7 +39,7 @@ describe('GuardsConsumer', () => { guards, [], { constructor: null }, - null, + null!, ); expect(canActivate).to.be.true; }); diff --git a/packages/core/test/guards/guards-context-creator.spec.ts b/packages/core/test/guards/guards-context-creator.spec.ts index 0e358c27169..0597f4fd45b 100644 --- a/packages/core/test/guards/guards-context-creator.spec.ts +++ b/packages/core/test/guards/guards-context-creator.spec.ts @@ -79,7 +79,7 @@ describe('GuardsContextCreator', () => { describe('getGuardInstance', () => { describe('when param is an object', () => { it('should return instance', () => { - const instance = { canActivate: () => null }; + const instance = { canActivate: () => null! }; expect(guardsContextCreator.getGuardInstance(instance)).to.be.eql( instance, ); @@ -101,7 +101,7 @@ describe('GuardsContextCreator', () => { it('should return null', () => { sinon .stub(guardsContextCreator, 'getInstanceByMetatype') - .callsFake(() => null); + .callsFake(() => null!); expect(guardsContextCreator.getGuardInstance(Guard)).to.be.eql(null); }); }); @@ -111,7 +111,7 @@ describe('GuardsContextCreator', () => { describe('when "moduleContext" is nil', () => { it('should return undefined', () => { (guardsContextCreator as any).moduleContext = undefined; - expect(guardsContextCreator.getInstanceByMetatype(null)).to.be + expect(guardsContextCreator.getInstanceByMetatype(null!)).to.be .undefined; }); }); diff --git a/packages/core/test/helpers/context-utils.spec.ts b/packages/core/test/helpers/context-utils.spec.ts index d344f954cfa..0c220f3f415 100644 --- a/packages/core/test/helpers/context-utils.spec.ts +++ b/packages/core/test/helpers/context-utils.spec.ts @@ -54,7 +54,9 @@ describe('ContextUtils', () => { ); const keys = Object.keys(metadata); - const custom = keys.find(key => key.includes(CUSTOM_ROUTE_ARGS_METADATA)); + const custom = keys.find(key => + key.includes(CUSTOM_ROUTE_ARGS_METADATA), + )!; expect(metadata[custom]).to.be.an('object'); expect(metadata[custom].index).to.be.eq(2); @@ -90,7 +92,7 @@ describe('ContextUtils', () => { it('should return "paramsProperties" when paramtypes array doesn\'t exists', () => { const paramsProperties = ['1']; expect( - contextUtils.mergeParamsMetatypes(paramsProperties as any, null), + contextUtils.mergeParamsMetatypes(paramsProperties as any, null!), ).to.be.eql(paramsProperties); }); }); @@ -113,7 +115,7 @@ describe('ContextUtils', () => { const customFactory = undefined; expect( contextUtils.getCustomFactory( - customFactory, + customFactory!, undefined, contextFactory, )(), diff --git a/packages/core/test/helpers/external-context-creator.spec.ts b/packages/core/test/helpers/external-context-creator.spec.ts index b8a5a4fb640..7a87aa4ced9 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, '', '', null); + contextCreator.create({ foo: 'bar' }, callback, '', '', null!); expect(getContextModuleKeySpy.called).to.be.true; done(); }); @@ -65,7 +65,7 @@ describe('ExternalContextCreator', () => { beforeEach(() => { instance = { foo: 'bar' }; - proxyContext = contextCreator.create(instance, callback, '', '', null); + proxyContext = contextCreator.create(instance, callback, '', '', null!); }); it('should be a function', () => { expect(proxyContext).to.be.a('function'); @@ -187,12 +187,12 @@ describe('ExternalContextCreator', () => { { index: 1, type: 'test', - data: null, + data: null!, pipes: [], extractValue: () => null, }, ], - ); + )!; await pipesFn([]); expect(pipesFn).to.be.a('function'); }); diff --git a/packages/core/test/injector/container.spec.ts b/packages/core/test/injector/container.spec.ts index c2056de980d..3083ed6b7a7 100644 --- a/packages/core/test/injector/container.spec.ts +++ b/packages/core/test/injector/container.spec.ts @@ -30,25 +30,25 @@ describe('NestContainer', () => { }); it('should "addProvider" throw "CircularDependencyException" when provider is nil', () => { - expect(() => container.addProvider(null, 'TestModule')).throw( + expect(() => container.addProvider(null!, 'TestModule')).throw( CircularDependencyException, ); }); it('should "addController" throw "UnknownModuleException" when module is not stored in collection', () => { - expect(() => container.addController(null, 'TestModule')).throw( + expect(() => container.addController(null!, 'TestModule')).throw( UnknownModuleException, ); }); it('should "addExportedProvider" throw "UnknownModuleException" when module is not stored in collection', () => { - expect(() => container.addExportedProvider(null, 'TestModule')).throw( + expect(() => container.addExportedProvider(null!, 'TestModule')).throw( UnknownModuleException, ); }); it('should "addInjectable" throw "UnknownModuleException" when module is not stored in collection', () => { - expect(() => container.addInjectable(null, 'TestModule', null)).throw( + expect(() => container.addInjectable(null!, 'TestModule', null!)).throw( UnknownModuleException, ); }); @@ -74,7 +74,7 @@ describe('NestContainer', () => { }); it('should throw an exception when metatype is not defined', () => { - expect(container.addModule(undefined, [])).to.eventually.throws(); + expect(container.addModule(undefined!, [])).to.eventually.throws(); }); it('should add global module when module is global', async () => { @@ -104,7 +104,7 @@ describe('NestContainer', () => { }); it('should throw an exception when metatype is not defined', () => { - expect(container.addModule(undefined, [])).to.eventually.throws(); + expect(container.addModule(undefined!, [])).to.eventually.throws(); }); it('should add global module when module is global', async () => { @@ -156,7 +156,7 @@ describe('NestContainer', () => { describe('when "module" is not "globalModule"', () => { it('should call "addImport"', () => { const module = { addImport: sinon.spy() }; - container.bindGlobalModuleToModule(module as any, null); + container.bindGlobalModuleToModule(module as any, null!); expect(module.addImport.calledOnce).to.be.true; }); }); @@ -181,7 +181,7 @@ describe('NestContainer', () => { describe('when dynamic metadata exists', () => { it('should add to the dynamic metadata collection', async () => { const addSpy = sinon.spy(collection, 'set'); - const dynamicMetadata = { module: null }; + const dynamicMetadata = { module: null! }; await container.addDynamicMetadata(token, dynamicMetadata, []); expect(addSpy.calledWith(token, dynamicMetadata)).to.be.true; @@ -190,7 +190,7 @@ describe('NestContainer', () => { describe('when dynamic metadata does not exists', () => { it('should not add to the dynamic metadata collection', async () => { const addSpy = sinon.spy(collection, 'set'); - await container.addDynamicMetadata(token, null, []); + await container.addDynamicMetadata(token, null!, []); expect(addSpy.called).to.be.false; }); }); @@ -201,7 +201,7 @@ describe('NestContainer', () => { describe('when array is empty/undefined', () => { it('should not call "addModule"', async () => { const addModuleSpy = sinon.spy(container, 'addModule'); - await container.addDynamicModules(undefined, []); + await container.addDynamicModules(undefined!, []); expect(addModuleSpy.called).to.be.false; }); }); diff --git a/packages/core/test/injector/helpers/provider-classifier.spec.ts b/packages/core/test/injector/helpers/provider-classifier.spec.ts index 9314cfe9914..5da20b4dd57 100644 --- a/packages/core/test/injector/helpers/provider-classifier.spec.ts +++ b/packages/core/test/injector/helpers/provider-classifier.spec.ts @@ -19,7 +19,7 @@ describe('provider classifier', () => { it('should return false if useClass is undefined', () => { const classProvider: ClassProvider = { - useClass: undefined, + useClass: undefined!, provide: 'token', }; @@ -35,9 +35,9 @@ describe('provider classifier', () => { }); it('should return false if provider is undefined', () => { - const classProvider = undefined; + const classProvider = undefined!; - expect(isClassProvider(classProvider as ClassProvider)).to.be.false; + expect(isClassProvider(classProvider as ClassProvider)!).to.be.false; }); }); @@ -96,7 +96,7 @@ describe('provider classifier', () => { }); it('should return false if provider is undefined', () => { - const valueProvider = undefined; + const valueProvider = undefined!; expect(isValueProvider(valueProvider as ValueProvider)).to.be.false; }); @@ -123,7 +123,7 @@ describe('provider classifier', () => { it('should return false if useFactory is undefined', () => { const factoryProvider: FactoryProvider = { provide: 'token', - useFactory: undefined, + useFactory: undefined!, }; expect(isFactoryProvider(factoryProvider)).to.be.false; diff --git a/packages/core/test/injector/injector.spec.ts b/packages/core/test/injector/injector.spec.ts index 4c18ae3ddf8..3b28e14fa3e 100644 --- a/packages/core/test/injector/injector.spec.ts +++ b/packages/core/test/injector/injector.spec.ts @@ -167,13 +167,13 @@ describe('Injector', () => { it('should create prototype of instance', () => { injector.loadPrototype(test, moduleDeps.providers); - expect(moduleDeps.providers.get('Test').instance).to.deep.equal( + expect(moduleDeps.providers.get('Test')!.instance).to.deep.equal( Object.create(Test.prototype), ); }); it('should return undefined when collection is nil', () => { - const result = injector.loadPrototype(test, null); + const result = injector.loadPrototype(test, null!); expect(result).to.be.undefined; }); @@ -201,10 +201,10 @@ describe('Injector', () => { it('should throw "RuntimeException" when param is undefined', async () => { return expect( injector.resolveSingleParam( - null, - undefined, + null!, + undefined!, { index: 0, dependencies: [] }, - null, + null!, ), ).to.eventually.be.rejected; }); @@ -227,7 +227,7 @@ describe('Injector', () => { await injector.loadMiddleware( { metatype: { name: '', prototype: {} } } as any, collection as any, - null, + null!, ); expect(loadInstanceSpy.called).to.be.true; }); @@ -243,7 +243,7 @@ describe('Injector', () => { await injector.loadMiddleware( { metatype: { name: '' } } as any, collection as any, - null, + null!, ); expect(loadInstanceSpy.called).to.be.false; }); @@ -307,7 +307,7 @@ describe('Injector', () => { }; const result = await injector.lookupComponent( collection as any, - null, + null!, { name: metatype.name, index: 0, dependencies: [] }, wrapper, ); @@ -323,7 +323,7 @@ describe('Injector', () => { }; const result = injector.lookupComponent( collection as any, - null, + null!, { name, index: 0, dependencies: [] }, Object.assign(wrapper, { name, @@ -339,7 +339,7 @@ describe('Injector', () => { }; await injector.lookupComponent( collection as any, - null, + null!, { name: metatype.name, index: 0, dependencies: [] }, wrapper, ); @@ -420,7 +420,7 @@ describe('Injector', () => { injector.lookupComponentInImports( moduleFixture as any, metatype as any, - null, + null!, ), ).to.be.eventually.eq(null); @@ -443,7 +443,7 @@ describe('Injector', () => { injector.lookupComponentInImports( moduleFixture as any, metatype as any, - null, + null!, ), ).to.eventually.be.eq(null); }); @@ -500,7 +500,7 @@ describe('Injector', () => { await injector.lookupComponentInImports( moduleFixture as any, metatype as any, - null, + null!, ); expect(loadProvider.called).to.be.false; }); @@ -546,7 +546,7 @@ describe('Injector', () => { }); describe('resolveComponentInstance', () => { - let module; + let module: any; beforeEach(() => { module = { providers: [], @@ -559,7 +559,7 @@ describe('Injector', () => { const loadStub = sinon .stub(injector, 'loadProvider') - .callsFake(() => null); + .callsFake(() => null!); sinon .stub(injector, 'lookupComponent') .returns(Promise.resolve(wrapper)); @@ -576,7 +576,7 @@ describe('Injector', () => { const wrapper = new InstanceWrapper({ isResolved: true }); const loadStub = sinon .stub(injector, 'loadProvider') - .callsFake(() => null); + .callsFake(() => null!); sinon .stub(injector, 'lookupComponent') @@ -597,7 +597,7 @@ describe('Injector', () => { }); const loadStub = sinon .stub(injector, 'loadProvider') - .callsFake(() => null); + .callsFake(() => null!); sinon .stub(injector, 'lookupComponent') @@ -615,7 +615,7 @@ describe('Injector', () => { describe('when instanceWrapper has async property', () => { it('should await instance', async () => { - sinon.stub(injector, 'loadProvider').callsFake(() => null); + sinon.stub(injector, 'loadProvider').callsFake(() => null!); const instance = Promise.resolve(true); const wrapper = new InstanceWrapper({ @@ -713,7 +713,7 @@ describe('Injector', () => { const container = new NestContainer(); const moduleCtor = class TestModule {}; const ctx = STATIC_CONTEXT; - const { moduleRef } = await container.addModule(moduleCtor, []); + const { moduleRef } = (await container.addModule(moduleCtor, []))!; moduleRef.addProvider({ provide: TestClass, @@ -798,7 +798,7 @@ describe('Injector', () => { const loadCtorMetadataSpy = sinon.spy(injector, 'loadCtorMetadata'); await injector.resolveConstructorParams( wrapper, - null, + null!, [], () => { expect(loadCtorMetadataSpy.called).to.be.true; @@ -818,7 +818,7 @@ describe('Injector', () => { injector, 'loadPropertiesMetadata', ); - await injector.resolveProperties(wrapper, null, null, { id: 2 }); + await injector.resolveProperties(wrapper, null!, null!, { id: 2 }); expect(loadPropertiesMetadataSpy.called).to.be.true; }); }); diff --git a/packages/core/test/injector/internal-core-module/internal-core-module-factory.spec.ts b/packages/core/test/injector/internal-core-module/internal-core-module-factory.spec.ts index 989170044bf..b5bfcd32ee3 100644 --- a/packages/core/test/injector/internal-core-module/internal-core-module-factory.spec.ts +++ b/packages/core/test/injector/internal-core-module/internal-core-module-factory.spec.ts @@ -12,15 +12,15 @@ describe('InternalCoreModuleFactory', () => { it('should return the internal core module definition', () => { const moduleDefinition = InternalCoreModuleFactory.create( new NestContainer(), - null, - null, - null, - null, + null!, + null!, + null!, + null!, ); expect(moduleDefinition.module).to.equal(InternalCoreModule); - const providedInjectables = moduleDefinition.providers.map( + const providedInjectables = moduleDefinition.providers!.map( item => (item as ClassProvider | FactoryProvider).provide, ); expect(providedInjectables).to.deep.equal([ @@ -31,7 +31,7 @@ describe('InternalCoreModuleFactory', () => { SerializedGraph, ]); - const lazyModuleLoaderProvider = moduleDefinition.providers.find( + const lazyModuleLoaderProvider = moduleDefinition.providers!.find( item => (item as FactoryProvider)?.provide === LazyModuleLoader, ) as FactoryProvider; expect(lazyModuleLoaderProvider.useFactory()).to.be.instanceOf( diff --git a/packages/core/test/injector/module.spec.ts b/packages/core/test/injector/module.spec.ts index 345f7438ee7..784c247c739 100644 --- a/packages/core/test/injector/module.spec.ts +++ b/packages/core/test/injector/module.spec.ts @@ -356,7 +356,7 @@ describe('Module', () => { sinon.stub(moduleRef, 'hasProvider').callsFake(() => true); sinon.stub(moduleRef.providers, 'get').callsFake(() => wrapper as any); - moduleRef.replace(null, { isProvider: true }); + moduleRef.replace(null!, { isProvider: true }); expect(wrapper.mergeWith.called).to.be.true; }); }); @@ -371,7 +371,7 @@ describe('Module', () => { .stub(moduleRef.injectables, 'get') .callsFake(() => wrapper as any); - moduleRef.replace(null, {}); + moduleRef.replace(null!, {}); expect(wrapper.mergeWith.called).to.be.true; }); }); diff --git a/packages/core/test/inspector/graph-inspector.spec.ts b/packages/core/test/inspector/graph-inspector.spec.ts index 0082ef154c2..d24780341c0 100644 --- a/packages/core/test/inspector/graph-inspector.spec.ts +++ b/packages/core/test/inspector/graph-inspector.spec.ts @@ -76,7 +76,7 @@ describe('GraphInspector', () => { metadata: { injectionType: 'constructor', keyOrIndex: 0, - sourceClassName: instanceWrapper.metatype.name, + sourceClassName: instanceWrapper.metatype!.name, sourceClassToken: instanceWrapper.token, sourceModuleName: 'TestModule', targetClassName: param1.name, @@ -92,7 +92,7 @@ describe('GraphInspector', () => { metadata: { injectionType: 'constructor', keyOrIndex: 1, - sourceClassName: instanceWrapper.metatype.name, + sourceClassName: instanceWrapper.metatype!.name, sourceClassToken: instanceWrapper.token, sourceModuleName: 'TestModule', targetClassName: param2.name, @@ -129,7 +129,7 @@ describe('GraphInspector', () => { class RandomPipe {} it('should inspect all modules', async () => { - const { moduleRef } = await container.addModule(TestModule, []); + const { moduleRef } = (await container.addModule(TestModule, []))!; moduleRef.addController(AController); const subtype = 'interceptor'; @@ -203,7 +203,7 @@ describe('GraphInspector', () => { initTime: 100, }, }; - const insertedNode = graph.insertNode(nodeDefinition); + const insertedNode = graph.insertNode(nodeDefinition)!; graphInspector.insertAttachedEnhancer(instanceWrapper); diff --git a/packages/core/test/interceptors/interceptors-consumer.spec.ts b/packages/core/test/interceptors/interceptors-consumer.spec.ts index beb875b0f50..e560be19f7c 100644 --- a/packages/core/test/interceptors/interceptors-consumer.spec.ts +++ b/packages/core/test/interceptors/interceptors-consumer.spec.ts @@ -28,7 +28,7 @@ describe('InterceptorsConsumer', () => { next = sinon.spy(); }); it('should call next()', async () => { - await consumer.intercept([], null, { constructor: null }, null, next); + await consumer.intercept([], null!, { constructor: null }, null!, next); expect(next.calledOnce).to.be.true; }); }); @@ -40,9 +40,9 @@ describe('InterceptorsConsumer', () => { it('does not call `intercept` (lazy evaluation)', async () => { await consumer.intercept( interceptors, - null, + null!, { constructor: null }, - null, + null!, next, ); @@ -52,9 +52,9 @@ describe('InterceptorsConsumer', () => { it('should call every `intercept` method when subscribe', async () => { const intercepted = await consumer.intercept( interceptors, - null, + null!, { constructor: null }, - null, + null!, next, ); await transformToResult(intercepted); @@ -65,9 +65,9 @@ describe('InterceptorsConsumer', () => { it('should not call `next` (lazy evaluation)', async () => { await consumer.intercept( interceptors, - null, + null!, { constructor: null }, - null, + null!, next, ); expect(next.called).to.be.false; @@ -75,9 +75,9 @@ describe('InterceptorsConsumer', () => { it('should call `next` when subscribe', async () => { const intercepted = await consumer.intercept( interceptors, - null, + null!, { constructor: null }, - null, + null!, next, ); await transformToResult(intercepted); @@ -97,13 +97,13 @@ describe('InterceptorsConsumer', () => { } } const next = () => { - return Promise.resolve(storage.getStore().value); + return Promise.resolve(storage.getStore()!.value); }; const intercepted = await consumer.intercept( [new StorageInterceptor()], - null, + null!, { constructor: null }, - null, + null!, next, ); const result = await transformToResult(intercepted); @@ -131,9 +131,9 @@ describe('InterceptorsConsumer', () => { } const intercepted = await consumer.intercept( [new RetryInterceptor()], - null, + null!, { constructor: null }, - null, + null!, next, ); expect(await transformToResult(intercepted)).to.equal(3); @@ -207,9 +207,9 @@ describe('InterceptorsConsumer', () => { const observable = await consumer.intercept( testInterceptors, - null, + null!, { constructor: null }, - null, + null!, async () => 1, ); diff --git a/packages/core/test/interceptors/interceptors-context-creator.spec.ts b/packages/core/test/interceptors/interceptors-context-creator.spec.ts index 81d74a2ff73..8e9bd5ce9d1 100644 --- a/packages/core/test/interceptors/interceptors-context-creator.spec.ts +++ b/packages/core/test/interceptors/interceptors-context-creator.spec.ts @@ -84,7 +84,7 @@ describe('InterceptorsContextCreator', () => { describe('getInterceptorInstance', () => { describe('when param is an object', () => { it('should return instance', () => { - const instance = { intercept: () => null }; + const instance = { intercept: () => null! }; expect( interceptorsContextCreator.getInterceptorInstance(instance), ).to.be.eql(instance); @@ -106,7 +106,7 @@ describe('InterceptorsContextCreator', () => { it('should return null', () => { sinon .stub(interceptorsContextCreator, 'getInstanceByMetatype') - .callsFake(() => null); + .callsFake(() => null!); expect( interceptorsContextCreator.getInterceptorInstance(Interceptor), ).to.be.eql(null); @@ -118,7 +118,7 @@ describe('InterceptorsContextCreator', () => { describe('when "moduleContext" is nil', () => { it('should return undefined', () => { (interceptorsContextCreator as any).moduleContext = undefined; - expect(interceptorsContextCreator.getInstanceByMetatype(null)).to.be + expect(interceptorsContextCreator.getInstanceByMetatype(null!)).to.be .undefined; }); }); diff --git a/packages/core/test/middleware/container.spec.ts b/packages/core/test/middleware/container.spec.ts index dcdd2a8b715..1cf312ae069 100644 --- a/packages/core/test/middleware/container.spec.ts +++ b/packages/core/test/middleware/container.spec.ts @@ -47,7 +47,7 @@ describe('MiddlewareContainer', () => { }, ]; container.insertConfig(config, 'Module'); - expect([...container.getConfigurations().get('Module')]).to.deep.equal( + expect([...container.getConfigurations().get('Module')!]).to.deep.equal( config, ); }); @@ -68,7 +68,7 @@ describe('MiddlewareContainer', () => { expect(collection.size).to.eql(config.length); expect(insertedMiddleware).to.be.instanceOf(InstanceWrapper); - expect(insertedMiddleware.scope).to.be.undefined; - expect(insertedMiddleware.metatype).to.be.eql(TestMiddleware); + expect(insertedMiddleware!.scope).to.be.undefined; + expect(insertedMiddleware!.metatype).to.be.eql(TestMiddleware); }); }); diff --git a/packages/core/test/middleware/middleware-module.spec.ts b/packages/core/test/middleware/middleware-module.spec.ts index 91639e3f048..0b0453a25c4 100644 --- a/packages/core/test/middleware/middleware-module.spec.ts +++ b/packages/core/test/middleware/middleware-module.spec.ts @@ -91,7 +91,7 @@ describe('MiddlewareModule', () => { configureSpy.calledWith( new MiddlewareBuilder( (middlewareModule as any).routesMapper, - undefined, + undefined!, new RouteInfoPathExtractor(new ApplicationConfig()), ), ), diff --git a/packages/core/test/middleware/resolver.spec.ts b/packages/core/test/middleware/resolver.spec.ts index 07ccc9fb33b..3641da2d07a 100644 --- a/packages/core/test/middleware/resolver.spec.ts +++ b/packages/core/test/middleware/resolver.spec.ts @@ -35,7 +35,7 @@ describe('MiddlewareResolver', () => { const module = { metatype: { name: '' } } as any; mockContainer.expects('getMiddlewareCollection').returns(middleware); - await resolver.resolveInstances(module, null); + await resolver.resolveInstances(module, null!); expect(loadMiddleware.callCount).to.be.equal(middleware.size); expect(loadMiddleware.calledWith(wrapper as any, middleware, module)).to.be diff --git a/packages/core/test/nest-application-context.spec.ts b/packages/core/test/nest-application-context.spec.ts index d83dba163e9..e398f49bca7 100644 --- a/packages/core/test/nest-application-context.spec.ts +++ b/packages/core/test/nest-application-context.spec.ts @@ -22,7 +22,7 @@ describe('NestApplicationContext', () => { injector, new GraphInspector(nestContainer), ); - const { moduleRef } = await nestContainer.addModule(class T {}, []); + const { moduleRef } = (await nestContainer.addModule(class T {}, []))!; nestContainer.addProvider( { diff --git a/packages/core/test/pipes/pipes-context-creator.spec.ts b/packages/core/test/pipes/pipes-context-creator.spec.ts index 6ea5d1d4a05..63b7cc0c46f 100644 --- a/packages/core/test/pipes/pipes-context-creator.spec.ts +++ b/packages/core/test/pipes/pipes-context-creator.spec.ts @@ -20,7 +20,7 @@ describe('PipesContextCreator', () => { describe('createConcreteContext', () => { describe('when metadata is empty or undefined', () => { it('should return empty array', () => { - expect(creator.createConcreteContext(undefined)).to.be.deep.equal([]); + expect(creator.createConcreteContext(undefined!)).to.be.deep.equal([]); expect(creator.createConcreteContext([])).to.be.deep.equal([]); }); }); @@ -49,7 +49,7 @@ describe('PipesContextCreator', () => { expect(creator.getPipeInstance(Pipe)).to.be.eql(wrapper.instance); }); it('should return null', () => { - sinon.stub(creator, 'getInstanceByMetatype').callsFake(() => null); + sinon.stub(creator, 'getInstanceByMetatype').callsFake(() => null!); expect(creator.getPipeInstance(Pipe)).to.be.eql(null); }); }); @@ -59,7 +59,7 @@ describe('PipesContextCreator', () => { describe('when "moduleContext" is nil', () => { it('should return undefined', () => { (creator as any).moduleContext = undefined; - expect(creator.getInstanceByMetatype(null)).to.be.undefined; + expect(creator.getInstanceByMetatype(null!)).to.be.undefined; }); }); describe('when "moduleContext" is not nil', () => { @@ -70,7 +70,7 @@ describe('PipesContextCreator', () => { describe('and when module exists', () => { it('should return undefined', () => { sinon.stub(container.getModules(), 'get').callsFake(() => undefined); - expect(creator.getInstanceByMetatype(null)).to.be.undefined; + expect(creator.getInstanceByMetatype(null!)).to.be.undefined; }); }); diff --git a/packages/core/test/repl/native-functions/debug-repl-fn.spec.ts b/packages/core/test/repl/native-functions/debug-repl-fn.spec.ts index 5bfdcadb633..cfda9b51a26 100644 --- a/packages/core/test/repl/native-functions/debug-repl-fn.spec.ts +++ b/packages/core/test/repl/native-functions/debug-repl-fn.spec.ts @@ -18,14 +18,14 @@ describe('DebugReplFn', () => { before(async () => { const container = new NestContainer(); - const { moduleRef: aModuleRef } = await container.addModule( + const { moduleRef: aModuleRef } = (await container.addModule( class ModuleA {}, [], - ); - const { moduleRef: bModuleRef } = await container.addModule( + ))!; + const { moduleRef: bModuleRef } = (await container.addModule( class ModuleB {}, [], - ); + ))!; container.addController(class ControllerA {}, aModuleRef.token); container.addProvider(class ProviderA1 {}, aModuleRef.token); diff --git a/packages/core/test/repl/native-functions/methods-repl-fn.spec.ts b/packages/core/test/repl/native-functions/methods-repl-fn.spec.ts index a083b8f2857..6cf7c60e319 100644 --- a/packages/core/test/repl/native-functions/methods-repl-fn.spec.ts +++ b/packages/core/test/repl/native-functions/methods-repl-fn.spec.ts @@ -18,14 +18,14 @@ describe('MethodsReplFn', () => { before(async () => { const container = new NestContainer(); - const { moduleRef: aModuleRef } = await container.addModule( + const { moduleRef: aModuleRef } = (await container.addModule( class ModuleA {}, [], - ); - const { moduleRef: bModuleRef } = await container.addModule( + ))!; + const { moduleRef: bModuleRef } = (await container.addModule( class ModuleB {}, [], - ); + ))!; container.addController(class ControllerA {}, aModuleRef.token); container.addProvider(class ProviderA1 {}, aModuleRef.token); diff --git a/packages/core/test/router/paths-explorer.spec.ts b/packages/core/test/router/paths-explorer.spec.ts index 6607cd8146a..053a566a667 100644 --- a/packages/core/test/router/paths-explorer.spec.ts +++ b/packages/core/test/router/paths-explorer.spec.ts @@ -89,7 +89,7 @@ describe('PathsExplorer', () => { instance, instanceProto, 'getTest', - ); + )!; expect(route.path).to.eql(['/test']); expect(route.requestMethod).to.eql(RequestMethod.GET); @@ -104,7 +104,7 @@ describe('PathsExplorer', () => { instance, instanceProto, 'getTest', - ); + )!; expect(route.path).to.eql(['/test']); expect(route.requestMethod).to.eql(RequestMethod.GET); @@ -119,7 +119,7 @@ describe('PathsExplorer', () => { instance, instanceProto, 'getTestUsingArray', - ); + )!; expect(route.path).to.eql(['/foo', '/bar']); expect(route.requestMethod).to.eql(RequestMethod.GET); @@ -134,7 +134,7 @@ describe('PathsExplorer', () => { instance, instanceProto, 'getTestUsingArray', - ); + )!; expect(route.path).to.eql(['/foo', '/bar']); expect(route.requestMethod).to.eql(RequestMethod.GET); @@ -153,7 +153,7 @@ describe('PathsExplorer', () => { instance, instanceProto, 'getTest', - ); + )!; expect(route.targetCallback).to.eq(newImpl); expect(route.path).to.eql(['/test']); @@ -171,7 +171,7 @@ describe('PathsExplorer', () => { instance, instanceProto, 'getTest', - ); + )!; expect(route.targetCallback).to.eq(newImpl); expect(route.path).to.eql(['/test']); @@ -189,7 +189,7 @@ describe('PathsExplorer', () => { instance, instanceProto, 'getTestUsingArray', - ); + )!; expect(route.targetCallback).to.eq(newImpl); expect(route.path).to.eql(['/foo', '/bar']); @@ -207,7 +207,7 @@ describe('PathsExplorer', () => { instance, instanceProto, 'getTestUsingArray', - ); + )!; expect(route.targetCallback).to.eq(newImpl); expect(route.path).to.eql(['/foo', '/bar']); diff --git a/packages/core/test/router/router-execution-context.spec.ts b/packages/core/test/router/router-execution-context.spec.ts index 1581ee6864a..ee7499dd5d7 100644 --- a/packages/core/test/router/router-execution-context.spec.ts +++ b/packages/core/test/router/router-execution-context.spec.ts @@ -98,8 +98,8 @@ describe('RouterExecutionContext', () => { const canActivateFn = contextCreator.createGuardsFn( [1] as any, - null, - null, + null!, + null!, ); sinon.stub(contextCreator, 'createGuardsFn').returns(canActivateFn); tryActivateStub = sinon @@ -144,9 +144,9 @@ describe('RouterExecutionContext', () => { } catch (e) { error = e; } - expect(error).to.be.instanceOf(ForbiddenException); - expect(error.message).to.be.eql('Forbidden resource'); - expect(error.getResponse()).to.be.eql({ + expect(error!).to.be.instanceOf(ForbiddenException); + expect(error!.message).to.be.eql('Forbidden resource'); + expect(error!.getResponse()).to.be.eql({ statusCode: HttpStatus.FORBIDDEN, error: 'Forbidden', message: FORBIDDEN_MESSAGE, @@ -287,7 +287,7 @@ describe('RouterExecutionContext', () => { }); describe('createGuardsFn', () => { it('should throw ForbiddenException when "tryActivate" returns false', async () => { - const guardsFn = contextCreator.createGuardsFn([null], null, null); + const guardsFn = contextCreator.createGuardsFn([null!], null!, null!)!; sinon.stub(guardsConsumer, 'tryActivate').callsFake(async () => false); let error: ForbiddenException; @@ -297,9 +297,9 @@ describe('RouterExecutionContext', () => { error = e; } - expect(error).to.be.instanceOf(ForbiddenException); - expect(error.message).to.be.eql('Forbidden resource'); - expect(error.getResponse()).to.be.eql({ + expect(error!).to.be.instanceOf(ForbiddenException); + expect(error!.message).to.be.eql('Forbidden resource'); + expect(error!.getResponse()).to.be.eql({ statusCode: HttpStatus.FORBIDDEN, message: FORBIDDEN_MESSAGE, error: 'Forbidden', @@ -323,7 +323,7 @@ describe('RouterExecutionContext', () => { sinon.stub(contextCreator, 'reflectRenderTemplate').returns(template); const handler = contextCreator.createHandleResponseFn( - null, + null!, true, undefined, 200, @@ -339,11 +339,11 @@ describe('RouterExecutionContext', () => { const response = { render: sinon.spy() }; sinon.stub(contextCreator, 'reflectResponseHeaders').returns([]); - sinon.stub(contextCreator, 'reflectRenderTemplate').returns(undefined); - sinon.stub(contextCreator, 'reflectSse').returns(undefined); + sinon.stub(contextCreator, 'reflectRenderTemplate').returns(undefined!); + sinon.stub(contextCreator, 'reflectSse').returns(undefined!); const handler = contextCreator.createHandleResponseFn( - null, + null!, true, undefined, 200, @@ -391,11 +391,11 @@ describe('RouterExecutionContext', () => { const response = { redirect: sinon.spy() }; sinon.stub(contextCreator, 'reflectResponseHeaders').returns([]); - sinon.stub(contextCreator, 'reflectRenderTemplate').returns(undefined); - sinon.stub(contextCreator, 'reflectSse').returns(undefined); + sinon.stub(contextCreator, 'reflectRenderTemplate').returns(undefined!); + sinon.stub(contextCreator, 'reflectSse').returns(undefined!); const handler = contextCreator.createHandleResponseFn( - null, + null!, true, undefined, 200, @@ -411,11 +411,11 @@ describe('RouterExecutionContext', () => { const result = Promise.resolve('test'); const response = {}; - sinon.stub(contextCreator, 'reflectRenderTemplate').returns(undefined); - sinon.stub(contextCreator, 'reflectSse').returns(undefined); + sinon.stub(contextCreator, 'reflectRenderTemplate').returns(undefined!); + sinon.stub(contextCreator, 'reflectSse').returns(undefined!); const handler = contextCreator.createHandleResponseFn( - null, + null!, false, undefined, 1234, @@ -441,11 +441,11 @@ describe('RouterExecutionContext', () => { const request = new PassThrough(); request.on = sinon.spy(); - sinon.stub(contextCreator, 'reflectRenderTemplate').returns(undefined); + sinon.stub(contextCreator, 'reflectRenderTemplate').returns(undefined!); sinon.stub(contextCreator, 'reflectSse').returns('/'); const handler = contextCreator.createHandleResponseFn( - null, + null!, true, undefined, 200, @@ -461,11 +461,11 @@ describe('RouterExecutionContext', () => { const response = new PassThrough(); const request = new PassThrough(); - sinon.stub(contextCreator, 'reflectRenderTemplate').returns(undefined); + sinon.stub(contextCreator, 'reflectRenderTemplate').returns(undefined!); sinon.stub(contextCreator, 'reflectSse').returns('/'); const handler = contextCreator.createHandleResponseFn( - null, + null!, true, undefined, 200, @@ -493,11 +493,11 @@ describe('RouterExecutionContext', () => { const request = new PassThrough(); request.on = sinon.spy(); - sinon.stub(contextCreator, 'reflectRenderTemplate').returns(undefined); + sinon.stub(contextCreator, 'reflectRenderTemplate').returns(undefined!); sinon.stub(contextCreator, 'reflectSse').returns('/'); const handler = contextCreator.createHandleResponseFn( - null, + null!, true, undefined, 200, diff --git a/packages/core/test/router/router-explorer.spec.ts b/packages/core/test/router/router-explorer.spec.ts index da96ee6064f..a5d32ad0a5e 100644 --- a/packages/core/test/router/router-explorer.spec.ts +++ b/packages/core/test/router/router-explorer.spec.ts @@ -72,13 +72,13 @@ describe('RouterExplorer', () => { exceptionsFilter = new RouterExceptionFilters( container, applicationConfig, - null, + null!, ); routerBuilder = new RouterExplorer( new MetadataScanner(), container, injector, - null, + null!, exceptionsFilter, applicationConfig, routePathFactory, @@ -99,9 +99,9 @@ describe('RouterExplorer', () => { ]; routerBuilder.applyPathsToRouterProxy( - null, + null!, paths as any, - null, + null!, '', {}, '', @@ -126,9 +126,9 @@ describe('RouterExplorer', () => { versioningOptions: { type: VersioningType.URI }, }; routerBuilder.applyPathsToRouterProxy( - null, + null!, paths as any, - null, + null!, '', routePathMetadata, '1', @@ -197,7 +197,7 @@ describe('RouterExplorer', () => { moduleKey, methodKey, ); - await handler(null, null, null); + await handler(null!, null, null!); expect(nextSpy.called).to.be.true; expect(nextSpy.getCall(0).args[0]).to.be.instanceOf(Error); @@ -229,8 +229,8 @@ describe('RouterExplorer', () => { expect( router.applyVersionFilter.calledOnceWithExactly( handler, - routePathMetadata.methodVersion, - routePathMetadata.versioningOptions, + routePathMetadata.methodVersion!, + routePathMetadata.versioningOptions!, ), ).to.be.true; diff --git a/packages/core/test/router/router-module.spec.ts b/packages/core/test/router/router-module.spec.ts index 472c391e060..8049d8b9655 100644 --- a/packages/core/test/router/router-module.spec.ts +++ b/packages/core/test/router/router-module.spec.ts @@ -7,7 +7,6 @@ import { ROUTES, targetModulesByContainer, } from '../../router/router-module'; -import { FactoryProvider } from '@nestjs/common'; class TestModuleClass {} @@ -29,7 +28,7 @@ describe('RouterModule', () => { }); describe('when instantiated', () => { it('should update the "targetModulesByContainer" weak map', () => { - const moduleRef = new Module(TestModuleClass, new NestContainer(null)); + const moduleRef = new Module(TestModuleClass, new NestContainer(null!)); const container = new ModulesContainer([ [TestModuleClass.name, moduleRef], ]); @@ -45,7 +44,8 @@ describe('RouterModule', () => { }, ]); - expect(targetModulesByContainer.get(container).has(moduleRef)).to.be.true; + expect(targetModulesByContainer.get(container)!.has(moduleRef)).to.be + .true; }); }); }); diff --git a/packages/core/test/router/router-proxy.spec.ts b/packages/core/test/router/router-proxy.spec.ts index d95d4587d02..8b85bcd39fb 100644 --- a/packages/core/test/router/router-proxy.spec.ts +++ b/packages/core/test/router/router-proxy.spec.ts @@ -27,7 +27,7 @@ describe('RouterProxy', () => { const proxy = routerProxy.createProxy((req, res, next) => { throw httpException; }, handler); - await proxy(null, null, null); + await proxy(null, null, null!); expect(nextStub.calledOnce).to.be.true; expect( @@ -43,7 +43,7 @@ describe('RouterProxy', () => { throw httpException; }, handler); - await proxy(null, null, null); + await proxy(null, null, null!); expect(nextStub.calledOnce).to.be.true; expect( @@ -68,7 +68,7 @@ describe('RouterProxy', () => { }, handler, ); - await proxy(null, null, null, null); + await proxy(null, null, null, null!); expect(nextStub.calledOnce).to.be.true; expect( @@ -87,7 +87,7 @@ describe('RouterProxy', () => { handler, ); - await proxy(null, null, null, null); + await proxy(null, null, null, null!); expect(nextStub.calledOnce).to.be.true; expect( diff --git a/packages/core/test/router/router-response-controller.spec.ts b/packages/core/test/router/router-response-controller.spec.ts index 8dca089593e..20c4ed8ba7c 100644 --- a/packages/core/test/router/router-response-controller.spec.ts +++ b/packages/core/test/router/router-response-controller.spec.ts @@ -189,7 +189,7 @@ describe('RouterResponseController', () => { .stub(routerResponseController, 'transformToResult') .returns(Promise.resolve({ statusCode: 123, url: 'redirect url' })); const result = {}; - await routerResponseController.redirect(result, null, null); + await routerResponseController.redirect(result, null, null!); expect(transformToResultSpy.firstCall.args[0]).to.be.equal(result); }); it('should pass the response to redirect', async () => { @@ -198,7 +198,7 @@ describe('RouterResponseController', () => { .returns(Promise.resolve({ statusCode: 123, url: 'redirect url' })); const redirectSpy = sinon.spy(adapter, 'redirect'); const response = {}; - await routerResponseController.redirect(null, response, null); + await routerResponseController.redirect(null, response, null!); expect(redirectSpy.firstCall.args[0]).to.be.equal(response); }); describe('status code', () => { diff --git a/packages/core/test/scanner.spec.ts b/packages/core/test/scanner.spec.ts index eba50d4f6f4..cbc8f9eb8a8 100644 --- a/packages/core/test/scanner.spec.ts +++ b/packages/core/test/scanner.spec.ts @@ -46,12 +46,12 @@ describe('DependenciesScanner', () => { class TestModule {} @Module({ - imports: [undefined], + imports: [undefined!], }) class UndefinedModule {} @Module({ - imports: [null], + imports: [null!], }) class InvalidModule {} From 5b220df1187fb06fe5b6a411d95ce9c660a29c71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 26 Nov 2024 14:03:07 +0100 Subject: [PATCH 090/122] build: use strict null checks part 4 --- packages/core/hooks/on-app-bootstrap.hook.ts | 2 +- packages/core/hooks/on-app-shutdown.hook.ts | 2 +- packages/core/hooks/on-module-destroy.hook.ts | 2 +- packages/core/hooks/on-module-init.hook.ts | 2 +- .../test/client/client-grpc.spec.ts | 8 +- .../test/client/client-kafka.spec.ts | 4 +- .../test/client/client-mqtt.spec.ts | 2 +- .../test/client/client-nats.spec.ts | 2 +- .../test/client/client-redis.spec.ts | 6 +- .../test/client/client-rmq.spec.ts | 2 +- .../context/exception-filters-context.spec.ts | 4 +- .../test/context/rpc-context-creator.spec.ts | 6 +- .../event-pattern.decorator.spec.ts | 4 +- .../message-pattern.decorator.spec.ts | 6 +- .../exceptions/rpc-exceptions-handler.spec.ts | 22 ++--- .../test/factories/rpc-params-factory.spec.ts | 10 ++- .../test/json-socket/connection.spec.ts | 84 +++++++++---------- .../microservices/test/json-socket/helpers.ts | 4 +- .../json-socket/listener-chaining.spec.ts | 10 +-- .../test/listeners-controller.spec.ts | 2 +- .../test/listeners-metadata-explorer.spec.ts | 8 +- .../test/module/clients.module.spec.ts | 12 +-- .../test/server/server-grpc.spec.ts | 2 +- .../test/server/server-kafka.spec.ts | 12 +-- .../test/server/server-mqtt.spec.ts | 8 +- .../test/server/server-nats.spec.ts | 4 +- .../test/server/server-redis.spec.ts | 4 +- .../test/server/server-tcp.spec.ts | 2 +- .../microservices/test/server/server.spec.ts | 2 +- .../utils/transform-pattern.utils.spec.ts | 6 +- .../test/multer/multer/multer.module.spec.ts | 6 +- .../test/multer/multer/multer.utils.spec.ts | 4 +- .../context/exception-filters.context.spec.ts | 2 - .../test/context/ws-context-creator.spec.ts | 6 +- .../exceptions/ws-exceptions-handler.spec.ts | 12 +-- .../test/factories/ws-params-factory.spec.ts | 10 ++- .../test/gateway-metadata-explorer.spec.ts | 2 +- .../test/socket-server-provider.spec.ts | 2 +- .../test/web-sockets-controller.spec.ts | 10 +-- 39 files changed, 152 insertions(+), 146 deletions(-) diff --git a/packages/core/hooks/on-app-bootstrap.hook.ts b/packages/core/hooks/on-app-bootstrap.hook.ts index 583ad8fbcf2..9ec8ca6ebdf 100644 --- a/packages/core/hooks/on-app-bootstrap.hook.ts +++ b/packages/core/hooks/on-app-bootstrap.hook.ts @@ -44,7 +44,7 @@ export async function callModuleBootstrapHook(module: Module): Promise { const providers = module.getNonAliasProviders(); // Module (class) instance is the first element of the providers array // Lifecycle hook has to be called once all classes are properly initialized - const [_, moduleClassHost] = providers.shift(); + const [_, moduleClassHost] = providers.shift()!; const instances = [ ...module.controllers, ...providers, diff --git a/packages/core/hooks/on-app-shutdown.hook.ts b/packages/core/hooks/on-app-shutdown.hook.ts index 2496d588859..3c9b2b900ed 100644 --- a/packages/core/hooks/on-app-shutdown.hook.ts +++ b/packages/core/hooks/on-app-shutdown.hook.ts @@ -49,7 +49,7 @@ export async function callAppShutdownHook( const providers = module.getNonAliasProviders(); // Module (class) instance is the first element of the providers array // Lifecycle hook has to be called once all classes are properly initialized - const [_, moduleClassHost] = providers.shift(); + const [_, moduleClassHost] = providers.shift()!; const instances = [ ...module.controllers, ...providers, diff --git a/packages/core/hooks/on-module-destroy.hook.ts b/packages/core/hooks/on-module-destroy.hook.ts index 41c9f435fdd..8c2692372a5 100644 --- a/packages/core/hooks/on-module-destroy.hook.ts +++ b/packages/core/hooks/on-module-destroy.hook.ts @@ -42,7 +42,7 @@ export async function callModuleDestroyHook(module: Module): Promise { const providers = module.getNonAliasProviders(); // Module (class) instance is the first element of the providers array // Lifecycle hook has to be called once all classes are properly destroyed - const [_, moduleClassHost] = providers.shift(); + const [_, moduleClassHost] = providers.shift()!; const instances = [ ...module.controllers, ...providers, diff --git a/packages/core/hooks/on-module-init.hook.ts b/packages/core/hooks/on-module-init.hook.ts index 7b821e89ac1..029eaecadf3 100644 --- a/packages/core/hooks/on-module-init.hook.ts +++ b/packages/core/hooks/on-module-init.hook.ts @@ -38,7 +38,7 @@ export async function callModuleInitHook(module: Module): Promise { const providers = module.getNonAliasProviders(); // Module (class) instance is the first element of the providers array // Lifecycle hook has to be called once all classes are properly initialized - const [_, moduleClassHost] = providers.shift(); + const [_, moduleClassHost] = providers.shift()!; const instances = [ ...module.controllers, ...providers, diff --git a/packages/microservices/test/client/client-grpc.spec.ts b/packages/microservices/test/client/client-grpc.spec.ts index 2b17ec88060..bb91f8479e2 100644 --- a/packages/microservices/test/client/client-grpc.spec.ts +++ b/packages/microservices/test/client/client-grpc.spec.ts @@ -365,7 +365,7 @@ describe('ClientGrpcProxy', () => { }); subscription.unsubscribe(); - handler(null, 'a'); + handler!(null, 'a'); expect(dataSpy.called).to.be.false; expect(errorSpy.called).to.be.false; @@ -416,7 +416,7 @@ describe('ClientGrpcProxy', () => { }); subscription.unsubscribe(); - handler(null, 'a'); + handler!(null, 'a'); expect(dataSpy.called).to.be.false; expect(writeSpy.called).to.be.true; @@ -476,7 +476,7 @@ describe('ClientGrpcProxy', () => { describe('publish', () => { it('should throw exception', () => { - expect(() => client['publish'](null, null)).to.throws(Error); + expect(() => client['publish'](null, null!)).to.throws(Error); }); }); @@ -504,7 +504,7 @@ describe('ClientGrpcProxy', () => { it('should return root package in case package name is not defined', () => { const root = {}; - expect(client.lookupPackage(root, undefined)).to.be.equal(root); + expect(client.lookupPackage(root, undefined!)).to.be.equal(root); expect(client.lookupPackage(root, '')).to.be.equal(root); }); }); diff --git a/packages/microservices/test/client/client-kafka.spec.ts b/packages/microservices/test/client/client-kafka.spec.ts index f5e3b83133b..773df074da6 100644 --- a/packages/microservices/test/client/client-kafka.spec.ts +++ b/packages/microservices/test/client/client-kafka.spec.ts @@ -647,7 +647,7 @@ describe('ClientKafka', () => { it('should throw error when the topic is not being consumed', () => { client['consumerAssignments'] = { - [topic]: undefined, + [topic]: undefined!, }; expect(() => client['getReplyTopicPartition'](replyTopic)).to.throw( @@ -687,7 +687,7 @@ describe('ClientKafka', () => { assignPacketIdStub = sinon .stub(client as any, 'assignPacketId') .callsFake(packet => - Object.assign(packet, { + Object.assign(packet!, { id: correlationId, }), ); diff --git a/packages/microservices/test/client/client-mqtt.spec.ts b/packages/microservices/test/client/client-mqtt.spec.ts index e662d6fc65f..a5f389e38f6 100644 --- a/packages/microservices/test/client/client-mqtt.spec.ts +++ b/packages/microservices/test/client/client-mqtt.spec.ts @@ -58,7 +58,7 @@ describe('ClientMqtt', () => { connectSpy = sinon.stub(client, 'connect'); assignStub = sinon .stub(client, 'assignPacketId' as any) - .callsFake(packet => Object.assign(packet, { id })); + .callsFake(packet => Object.assign(packet!, { id })); }); afterEach(() => { connectSpy.restore(); diff --git a/packages/microservices/test/client/client-nats.spec.ts b/packages/microservices/test/client/client-nats.spec.ts index 2b7827eb06a..1009544b23c 100644 --- a/packages/microservices/test/client/client-nats.spec.ts +++ b/packages/microservices/test/client/client-nats.spec.ts @@ -88,7 +88,7 @@ describe('ClientNats', () => { callback = sinon.spy(); assignStub = sinon .stub(client, 'assignPacketId' as any) - .callsFake(packet => Object.assign(packet, { id })); + .callsFake(packet => Object.assign(packet!, { id })); subscription = client['publish'](msg, callback); subscription(); diff --git a/packages/microservices/test/client/client-redis.spec.ts b/packages/microservices/test/client/client-redis.spec.ts index 84d6ece6aae..b46a7dbc9af 100644 --- a/packages/microservices/test/client/client-redis.spec.ts +++ b/packages/microservices/test/client/client-redis.spec.ts @@ -93,7 +93,7 @@ describe('ClientRedis', () => { callback = sinon.spy(); assignStub = sinon .stub(client, 'assignPacketId' as any) - .callsFake(packet => Object.assign(packet, { id })); + .callsFake(packet => Object.assign(packet!, { id })); getReplyPatternStub = sinon .stub(client, 'getReplyPattern') @@ -289,9 +289,9 @@ describe('ClientRedis', () => { describe('getClientOptions', () => { it('should return options object with "retryStrategy" and call "createRetryStrategy"', () => { const createSpy = sinon.spy(client, 'createRetryStrategy'); - const { retryStrategy } = client.getClientOptions(); + const { retryStrategy } = client.getClientOptions()!; try { - retryStrategy({} as any); + retryStrategy!({} as any); } catch { // No empty } diff --git a/packages/microservices/test/client/client-rmq.spec.ts b/packages/microservices/test/client/client-rmq.spec.ts index 85a890e793e..8ba1db458a3 100644 --- a/packages/microservices/test/client/client-rmq.spec.ts +++ b/packages/microservices/test/client/client-rmq.spec.ts @@ -135,7 +135,7 @@ describe('ClientRMQ', function () { assertQueue: sinon.spy(() => ({})), prefetch: sinon.spy(), }; - consumeStub = sinon.stub(client, 'consumeChannel').callsFake(() => null); + consumeStub = sinon.stub(client, 'consumeChannel').callsFake(() => null!); }); afterEach(() => { consumeStub.restore(); diff --git a/packages/microservices/test/context/exception-filters-context.spec.ts b/packages/microservices/test/context/exception-filters-context.spec.ts index 6440b5fe243..f55c4019e2d 100644 --- a/packages/microservices/test/context/exception-filters-context.spec.ts +++ b/packages/microservices/test/context/exception-filters-context.spec.ts @@ -34,7 +34,7 @@ describe('ExceptionFiltersContext', () => { const filter = exceptionFilter.create( new EmptyMetadata(), () => ({}) as any, - undefined, + undefined!, ); expect((filter as any).filters).to.be.empty; }); @@ -47,7 +47,7 @@ describe('ExceptionFiltersContext', () => { const filter = exceptionFilter.create( new WithMetadata(), () => ({}) as any, - undefined, + undefined!, ); expect((filter as any).filters).to.not.be.empty; }); diff --git a/packages/microservices/test/context/rpc-context-creator.spec.ts b/packages/microservices/test/context/rpc-context-creator.spec.ts index 5f5aecbff87..8b9f11d23d9 100644 --- a/packages/microservices/test/context/rpc-context-creator.spec.ts +++ b/packages/microservices/test/context/rpc-context-creator.spec.ts @@ -149,7 +149,7 @@ describe('RpcContextCreator', () => { describe('createGuardsFn', () => { it('should throw exception when "tryActivate" returns false', () => { - const guardsFn = contextCreator.createGuardsFn([null], null, null); + const guardsFn = contextCreator.createGuardsFn([null], null!, null!)!; sinon.stub(guardsConsumer, 'tryActivate').callsFake(async () => false); guardsFn([]).catch(err => expect(err).to.not.be.undefined); }); @@ -217,12 +217,12 @@ describe('RpcContextCreator', () => { { index: 1, type: 'test', - data: null, + data: null!, pipes: [], extractValue: () => null, }, ], - ); + )!; await pipesFn([]); expect(pipesFn).to.be.a('function'); }); diff --git a/packages/microservices/test/decorators/event-pattern.decorator.spec.ts b/packages/microservices/test/decorators/event-pattern.decorator.spec.ts index 3a78e602d2d..13cbb268441 100644 --- a/packages/microservices/test/decorators/event-pattern.decorator.spec.ts +++ b/packages/microservices/test/decorators/event-pattern.decorator.spec.ts @@ -4,8 +4,8 @@ import { PATTERN_METADATA, TRANSPORT_METADATA, } from '../../constants'; -import { Transport } from '../../enums/transport.enum'; import { EventPattern } from '../../decorators/event-pattern.decorator'; +import { Transport } from '../../enums/transport.enum'; describe('@EventPattern', () => { const pattern = { role: 'test' }; @@ -79,7 +79,7 @@ describe('@EventPattern', () => { Reflect.defineMetadata( PATTERN_EXTRAS_METADATA, additionalExtras, - descriptor.value, + descriptor.value!, ) )()) public static test() {} diff --git a/packages/microservices/test/decorators/message-pattern.decorator.spec.ts b/packages/microservices/test/decorators/message-pattern.decorator.spec.ts index 4980c3ff10a..23b291d6b20 100644 --- a/packages/microservices/test/decorators/message-pattern.decorator.spec.ts +++ b/packages/microservices/test/decorators/message-pattern.decorator.spec.ts @@ -1,10 +1,9 @@ import { expect } from 'chai'; import { - PATTERN_METADATA, PATTERN_EXTRAS_METADATA, + PATTERN_METADATA, TRANSPORT_METADATA, } from '../../constants'; -import { Transport } from '../../enums/transport.enum'; import { GrpcMethod, GrpcMethodStreamingType, @@ -12,6 +11,7 @@ import { GrpcStreamMethod, MessagePattern, } from '../../decorators/message-pattern.decorator'; +import { Transport } from '../../enums/transport.enum'; describe('@MessagePattern', () => { const pattern = { role: 'test' }; @@ -61,7 +61,7 @@ describe('@MessagePattern', () => { Reflect.defineMetadata( PATTERN_EXTRAS_METADATA, additionalExtras, - descriptor.value, + descriptor.value!, ) )()) public static test() {} diff --git a/packages/microservices/test/exceptions/rpc-exceptions-handler.spec.ts b/packages/microservices/test/exceptions/rpc-exceptions-handler.spec.ts index 265ceb95795..8765f734619 100644 --- a/packages/microservices/test/exceptions/rpc-exceptions-handler.spec.ts +++ b/packages/microservices/test/exceptions/rpc-exceptions-handler.spec.ts @@ -14,7 +14,7 @@ describe('RpcExceptionsHandler', () => { describe('handle', () => { it('should method returns expected stream with message when exception is unknown', done => { - const stream$ = handler.handle(new Error(), null); + const stream$ = handler.handle(new Error(), null!); stream$ .pipe( catchError((err: any) => { @@ -33,7 +33,7 @@ describe('RpcExceptionsHandler', () => { const message = { custom: 'Unauthorized', }; - const stream$ = handler.handle(new RpcException(message), null); + const stream$ = handler.handle(new RpcException(message), null!); stream$ .pipe( catchError((err: any) => { @@ -47,7 +47,7 @@ describe('RpcExceptionsHandler', () => { it('should method emit expected status and transform message to json', done => { const message = 'Unauthorized'; - const stream$ = handler.handle(new RpcException(message), null); + const stream$ = handler.handle(new RpcException(message), null!); stream$ .pipe( catchError((err: any) => { @@ -65,7 +65,7 @@ describe('RpcExceptionsHandler', () => { sinon.stub(handler, 'invokeCustomFilters').returns(observable$); }); it('should return observable', () => { - const result = handler.handle(new RpcException(''), null); + const result = handler.handle(new RpcException(''), null!); expect(result).to.be.eql(observable$); }); }); @@ -77,13 +77,13 @@ describe('RpcExceptionsHandler', () => { expect((handler as any).filters).to.be.eql(filters); }); it('should throw exception when passed argument is not an array', () => { - expect(() => handler.setCustomFilters(null)).to.throw(); + expect(() => handler.setCustomFilters(null!)).to.throw(); }); }); describe('invokeCustomFilters', () => { describe('when filters array is empty', () => { it('should return identity', () => { - expect(handler.invokeCustomFilters(null, null)).to.be.null; + expect(handler.invokeCustomFilters(null, null!)).to.be.null; }); }); describe('when filters array is not empty', () => { @@ -99,26 +99,26 @@ describe('RpcExceptionsHandler', () => { (handler as any).filters = filters; }); it('should call funcSpy', () => { - handler.invokeCustomFilters(new TestException(), null); + handler.invokeCustomFilters(new TestException(), null!); expect(funcSpy.notCalled).to.be.false; }); it('should call funcSpy with exception and response passed as an arguments', () => { const exception = new TestException(); - handler.invokeCustomFilters(exception, null); + handler.invokeCustomFilters(exception, null!); expect(funcSpy.calledWith(exception)).to.be.true; }); it('should return stream', () => { - expect(handler.invokeCustomFilters(new TestException(), null)).to.be + expect(handler.invokeCustomFilters(new TestException(), null!)).to.be .not.null; }); }); describe('when filter does not exists in filters array', () => { it('should not call funcSpy', () => { - handler.invokeCustomFilters(new TestException(), null); + handler.invokeCustomFilters(new TestException(), null!); expect(funcSpy.notCalled).to.be.true; }); it('should return null', () => { - expect(handler.invokeCustomFilters(new TestException(), null)).to.be + expect(handler.invokeCustomFilters(new TestException(), null!)).to.be .null; }); }); diff --git a/packages/microservices/test/factories/rpc-params-factory.spec.ts b/packages/microservices/test/factories/rpc-params-factory.spec.ts index ca1fe7ff193..40658077689 100644 --- a/packages/microservices/test/factories/rpc-params-factory.spec.ts +++ b/packages/microservices/test/factories/rpc-params-factory.spec.ts @@ -16,7 +16,7 @@ describe('RpcParamsFactory', () => { describe(`RpcParamtype.PAYLOAD`, () => { it('should return a message payload object', () => { expect( - factory.exchangeKeyForValue(RpcParamtype.PAYLOAD, null, args), + factory.exchangeKeyForValue(RpcParamtype.PAYLOAD, null!, args), ).to.be.eql(payload); }); it('should return a message payload object with parameter extraction', () => { @@ -28,19 +28,21 @@ describe('RpcParamsFactory', () => { describe(`RpcParamtype.CONTEXT`, () => { it('should return a ctx object', () => { expect( - factory.exchangeKeyForValue(RpcParamtype.CONTEXT, null, args), + factory.exchangeKeyForValue(RpcParamtype.CONTEXT, null!, args), ).to.be.eql(ctx); }); }); }); describe('when key is not available', () => { it('should return null', () => { - expect(factory.exchangeKeyForValue(-1, null, [])).to.be.eql(null); + expect(factory.exchangeKeyForValue(-1, null!, [])).to.be.eql(null); }); }); describe('when args are not available', () => { it('should return null', () => { - expect(factory.exchangeKeyForValue(null, null, null)).to.be.eql(null); + expect(factory.exchangeKeyForValue(null!, null!, null!)).to.be.eql( + null, + ); }); }); }); diff --git a/packages/microservices/test/json-socket/connection.spec.ts b/packages/microservices/test/json-socket/connection.spec.ts index 8fb18f2e707..a482bd279c1 100644 --- a/packages/microservices/test/json-socket/connection.spec.ts +++ b/packages/microservices/test/json-socket/connection.spec.ts @@ -16,31 +16,31 @@ describe('JsonSocket connection', () => { return done(error); } - expect(clientSocket['isClosed']).to.be.false; - expect(serverSocket['isClosed']).to.be.false; + expect(clientSocket!['isClosed']).to.be.false; + expect(serverSocket!['isClosed']).to.be.false; Promise.all([ new Promise(callback => { - clientSocket.sendMessage({ type: 'ping' }, callback); + clientSocket!.sendMessage({ type: 'ping' }, callback); }), new Promise(callback => { - clientSocket.on(MESSAGE_EVENT, (message: string) => { + clientSocket!.on(MESSAGE_EVENT, (message: string) => { expect(message).to.deep.equal({ type: 'pong' }); callback(); }); }), new Promise(callback => { - serverSocket.on(MESSAGE_EVENT, (message: string) => { + serverSocket!.on(MESSAGE_EVENT, (message: string) => { expect(message).to.deep.equal({ type: 'ping' }); - serverSocket.sendMessage({ type: 'pong' }, callback); + serverSocket!.sendMessage({ type: 'pong' }, callback); }); }), ]) .then(() => { - expect(clientSocket['isClosed']).to.equal(false); - expect(serverSocket['isClosed']).to.equal(false); - clientSocket.end(); - server.close(done); + expect(clientSocket!['isClosed']).to.equal(false); + expect(serverSocket!['isClosed']).to.equal(false); + clientSocket!.end(); + server!.close(done); }) .catch(e => done(e)); }, @@ -52,30 +52,30 @@ describe('JsonSocket connection', () => { if (err) { return done(err); } - expect(clientSocket['isClosed']).to.equal(false); - expect(serverSocket['isClosed']).to.equal(false); + expect(clientSocket!['isClosed']).to.equal(false); + expect(serverSocket!['isClosed']).to.equal(false); Promise.all([ new Promise(callback => { - clientSocket.sendMessage(longPayload, callback); + clientSocket!.sendMessage(longPayload, callback); }), new Promise(callback => { - clientSocket.on(MESSAGE_EVENT, (message: { type: 'pong' }) => { + clientSocket!.on(MESSAGE_EVENT, (message: { type: 'pong' }) => { expect(message).to.deep.equal({ type: 'pong' }); callback(); }); }), new Promise(callback => { - serverSocket.on(MESSAGE_EVENT, (message: { type: 'pong' }) => { + serverSocket!.on(MESSAGE_EVENT, (message: { type: 'pong' }) => { expect(message).to.deep.equal(longPayload); - serverSocket.sendMessage({ type: 'pong' }, callback); + serverSocket!.sendMessage({ type: 'pong' }, callback); }); }), ]) .then(() => { - expect(clientSocket['isClosed']).to.equal(false); - expect(serverSocket['isClosed']).to.equal(false); - clientSocket.end(); - server.close(done); + expect(clientSocket!['isClosed']).to.equal(false); + expect(serverSocket!['isClosed']).to.equal(false); + clientSocket!.end(); + server!.close(done); }) .catch(e => done(e)); }); @@ -94,14 +94,14 @@ describe('JsonSocket connection', () => { .map( i => new Promise(resolve => - clientSocket.sendMessage({ number: i }, resolve), + clientSocket!.sendMessage({ number: i }, resolve), ), ), ).then(_ => callback()), ), new Promise(callback => { let lastNumber = 0; - serverSocket.on(MESSAGE_EVENT, (message: { number: number }) => { + serverSocket!.on(MESSAGE_EVENT, (message: { number: number }) => { expect(message.number).to.deep.equal(lastNumber + 1); lastNumber = message.number; if (lastNumber === 100) { @@ -111,8 +111,8 @@ describe('JsonSocket connection', () => { }), ]) .then(() => { - clientSocket.end(); - server.close(done); + clientSocket!.end(); + server!.close(done); }) .catch(e => done(e)); }); @@ -125,20 +125,20 @@ describe('JsonSocket connection', () => { } new Promise(callback => { - serverSocket.end(); + serverSocket!.end(); setTimeout(callback, 10); }) .then( () => new Promise(callback => { - expect(clientSocket['isClosed']).to.equal(true); - expect(serverSocket['isClosed']).to.equal(true); + expect(clientSocket!['isClosed']).to.equal(true); + expect(serverSocket!['isClosed']).to.equal(true); callback(); }), ) .then(() => { - clientSocket.end(); - server.close(done); + clientSocket!.end(); + server!.close(done); }) .catch(e => done(e)); }); @@ -151,18 +151,18 @@ describe('JsonSocket connection', () => { } new Promise(callback => { - clientSocket.end(); + clientSocket!.end(); setTimeout(callback, 10); }) .then( () => new Promise(callback => { - expect(clientSocket['isClosed']).to.equal(true); - expect(serverSocket['isClosed']).to.equal(true); + expect(clientSocket!['isClosed']).to.equal(true); + expect(serverSocket!['isClosed']).to.equal(true); callback(); }), ) - .then(() => server.close(done)) + .then(() => server!.close(done)) .catch(e => done(e)); }); }); @@ -176,16 +176,16 @@ describe('JsonSocket connection', () => { server.once('connection', socket => { const serverSocket = new JsonSocket(socket); - serverSocket.once('end', () => { + serverSocket!.once('end', () => { setTimeout(() => { - expect(serverSocket['isClosed']).to.equal(true); - expect(clientSocket['isClosed']).to.equal(true); + expect(serverSocket!['isClosed']).to.equal(true); + expect(clientSocket!['isClosed']).to.equal(true); - clientSocket.on(TcpEventsMap.CONNECT, () => { + clientSocket!.on(TcpEventsMap.CONNECT, () => { setTimeout(() => { - expect(clientSocket['isClosed']).to.equal(false); + expect(clientSocket!['isClosed']).to.equal(false); - clientSocket.end(); + clientSocket!.end(); server.close(done); }, 10); }); @@ -196,11 +196,11 @@ describe('JsonSocket connection', () => { } const port2 = (address2 as AddressInfo).port; - clientSocket.connect(port2, ip); + clientSocket!.connect(port2, ip); }, 10); }); - clientSocket.end(); + clientSocket!.end(); }); const address1 = server.address(); @@ -209,7 +209,7 @@ describe('JsonSocket connection', () => { } const port1 = (address1 as AddressInfo).port; - clientSocket.connect(port1, ip); + clientSocket!.connect(port1, ip); }); server.listen(); }); diff --git a/packages/microservices/test/json-socket/helpers.ts b/packages/microservices/test/json-socket/helpers.ts index 1e11859108a..d09fcf279f0 100644 --- a/packages/microservices/test/json-socket/helpers.ts +++ b/packages/microservices/test/json-socket/helpers.ts @@ -63,7 +63,7 @@ export function createServerAndClient( return callback(serverErr); } - createClient(server, (clientErr, clientSocket, serverSocket) => { + createClient(server!, (clientErr, clientSocket, serverSocket) => { if (clientErr) { return callback(clientErr); } @@ -74,7 +74,7 @@ export function createServerAndClient( } export function range(start: number, end: number) { - const r = []; + const r = [] as number[]; for (let i = start; i <= end; i++) { r.push(i); } diff --git a/packages/microservices/test/json-socket/listener-chaining.spec.ts b/packages/microservices/test/json-socket/listener-chaining.spec.ts index c1d41efa48b..24f92061889 100644 --- a/packages/microservices/test/json-socket/listener-chaining.spec.ts +++ b/packages/microservices/test/json-socket/listener-chaining.spec.ts @@ -12,18 +12,18 @@ describe('JsonSocket chaining', () => { return done(err); } - expect(clientSocket.on(MESSAGE_EVENT, () => {})).to.be.instanceof( + expect(clientSocket!.on(MESSAGE_EVENT, () => {})).to.be.instanceof( JsonSocket, ); - expect(clientSocket.on(TcpEventsMap.CONNECT, () => {})).to.deep.equal( + expect(clientSocket!.on(TcpEventsMap.CONNECT, () => {})).to.deep.equal( clientSocket, ); expect( - clientSocket.on(MESSAGE_EVENT, () => {}).on('end', () => {}), + clientSocket!.on(MESSAGE_EVENT, () => {}).on('end', () => {}), ).to.deep.equal(clientSocket); - clientSocket.end(); - server.close(done); + clientSocket!.end(); + server!.close(done); }); }); }); diff --git a/packages/microservices/test/listeners-controller.spec.ts b/packages/microservices/test/listeners-controller.spec.ts index a0faa82c350..18fc28dd2b5 100644 --- a/packages/microservices/test/listeners-controller.spec.ts +++ b/packages/microservices/test/listeners-controller.spec.ts @@ -281,7 +281,7 @@ describe('ListenersController', () => { patterns: ['findOne'], methodKey: 'find', isEventHandler: false, - targetCallback: null, + targetCallback: null!, extras: { qos: 2 }, }; const transportId = Transport.MQTT; diff --git a/packages/microservices/test/listeners-metadata-explorer.spec.ts b/packages/microservices/test/listeners-metadata-explorer.spec.ts index b4c5c10e2a4..079beeffbe3 100644 --- a/packages/microservices/test/listeners-metadata-explorer.spec.ts +++ b/packages/microservices/test/listeners-metadata-explorer.spec.ts @@ -84,7 +84,7 @@ describe('ListenerMetadataExplorer', () => { test, Object.getPrototypeOf(test), 'testMessage', - ); + )!; expect(metadata).to.have.keys([ 'isEventHandler', 'methodKey', @@ -101,7 +101,7 @@ describe('ListenerMetadataExplorer', () => { test, Object.getPrototypeOf(test), 'testMultipleMessage', - ); + )!; expect(metadata).to.have.keys([ 'isEventHandler', 'methodKey', @@ -122,7 +122,7 @@ describe('ListenerMetadataExplorer', () => { test, Object.getPrototypeOf(test), 'testEvent', - ); + )!; expect(metadata).to.have.keys([ 'isEventHandler', 'methodKey', @@ -139,7 +139,7 @@ describe('ListenerMetadataExplorer', () => { test, Object.getPrototypeOf(test), 'testMultipleEvent', - ); + )!; expect(metadata).to.have.keys([ 'isEventHandler', 'methodKey', diff --git a/packages/microservices/test/module/clients.module.spec.ts b/packages/microservices/test/module/clients.module.spec.ts index 4b85be39a7f..454b8f2803b 100644 --- a/packages/microservices/test/module/clients.module.spec.ts +++ b/packages/microservices/test/module/clients.module.spec.ts @@ -26,7 +26,7 @@ describe('ClientsModule', () => { expect(dynamicModule.module).to.be.eql(ClientsModule); }); it('should return an expected providers array', () => { - const provider = dynamicModule.providers.find( + const provider = dynamicModule.providers!.find( p => 'useValue' in p && p.provide === 'test', ) as ValueProvider; expect(provider).to.not.be.undefined; @@ -56,7 +56,7 @@ describe('ClientsModule', () => { expect(dynamicModule.exports).to.be.eq(dynamicModule.providers); expect(dynamicModule.providers).to.be.have.length(1); - const provider = dynamicModule.providers[0] as FactoryProvider; + const provider = dynamicModule.providers![0] as FactoryProvider; expect(provider.provide).to.be.eql('test'); expect(provider.inject).to.be.deep.eq([]); expect(provider.useFactory).to.be.an.instanceOf(Function); @@ -82,7 +82,8 @@ describe('ClientsModule', () => { expect(dynamicModule.imports).to.be.deep.eq([]); expect(dynamicModule.providers).to.be.have.length(2); - const classTestProvider = dynamicModule.providers[0] as FactoryProvider; + const classTestProvider = dynamicModule + .providers![0] as FactoryProvider; expect(classTestProvider.provide).to.be.eql('classTest'); expect(classTestProvider.inject).to.be.deep.eq([ClientOptionService]); expect(classTestProvider.useFactory).to.be.an.instanceOf(Function); @@ -98,7 +99,7 @@ describe('ClientsModule', () => { createClientOptions: sinon.spy(), }; try { - await (dynamicModule.providers[0] as any).useFactory(optionsFactory); + await (dynamicModule.providers![0] as any).useFactory(optionsFactory); } catch (e) { console.log(e); } @@ -114,7 +115,8 @@ describe('ClientsModule', () => { dynamicModule = ClientsModule.registerAsync([asyncOptions as any]); expect(dynamicModule.providers).to.have.length(1); expect(dynamicModule.imports).to.be.deep.eq([]); - const classTestProvider = dynamicModule.providers[0] as FactoryProvider; + const classTestProvider = dynamicModule + .providers![0] as FactoryProvider; expect(classTestProvider.useFactory).to.be.an.instanceOf(Function); }); }); diff --git a/packages/microservices/test/server/server-grpc.spec.ts b/packages/microservices/test/server/server-grpc.spec.ts index 7955349eea5..6f1e40888e8 100644 --- a/packages/microservices/test/server/server-grpc.spec.ts +++ b/packages/microservices/test/server/server-grpc.spec.ts @@ -731,7 +731,7 @@ describe('ServerGrpc', () => { write: sinon.spy(() => true), }; - await fn(call as any, null); + await fn(call as any, null!); expect(call.write.called).to.be.true; expect(call.end.called).to.be.true; diff --git a/packages/microservices/test/server/server-kafka.spec.ts b/packages/microservices/test/server/server-kafka.spec.ts index 1eb7c33e664..a80489a9f25 100644 --- a/packages/microservices/test/server/server-kafka.spec.ts +++ b/packages/microservices/test/server/server-kafka.spec.ts @@ -265,8 +265,8 @@ describe('ServerKafka', () => { it('should call "handleMessage"', async () => { const handleMessageStub = sinon .stub(server, 'handleMessage') - .callsFake(() => null); - await server.getMessageHandler()(null); + .callsFake(() => null!); + await server.getMessageHandler()(null!); expect(handleMessageStub.called).to.be.true; }); }); @@ -287,7 +287,7 @@ describe('ServerKafka', () => { .callsFake(async () => []); }); it(`should return function`, () => { - expect(typeof server.getPublisher(null, null, correlationId)).to.be.eql( + expect(typeof server.getPublisher(null!, null!, correlationId)).to.be.eql( 'function', ); }); @@ -393,7 +393,9 @@ describe('ServerKafka', () => { await server.handleMessage(payload); expect( getPublisherSpy.calledWith({ - id: payload.message.headers[KafkaHeaders.CORRELATION_ID].toString(), + id: payload.message!.headers![ + KafkaHeaders.CORRELATION_ID + ]!.toString(), err: NO_MESSAGE_HANDLER, }), ).to.be.true; @@ -453,7 +455,7 @@ describe('ServerKafka', () => { response: messageValue, }, replyTopic, - undefined, + undefined!, correlationId, ); diff --git a/packages/microservices/test/server/server-mqtt.spec.ts b/packages/microservices/test/server/server-mqtt.spec.ts index ad5858c1444..aa601021d66 100644 --- a/packages/microservices/test/server/server-mqtt.spec.ts +++ b/packages/microservices/test/server/server-mqtt.spec.ts @@ -103,11 +103,11 @@ describe('ServerMqtt', () => { it('should call "handleMessage"', async () => { const handleMessageStub = sinon .stub(server, 'handleMessage') - .callsFake(() => null); + .callsFake(() => null!); await server.getMessageHandler(untypedServer.mqttClient)( - null, - null, - null, + null!, + null!, + null!, ); expect(handleMessageStub.called).to.be.true; }); diff --git a/packages/microservices/test/server/server-nats.spec.ts b/packages/microservices/test/server/server-nats.spec.ts index eb7e5d5569e..ef5a62800ad 100644 --- a/packages/microservices/test/server/server-nats.spec.ts +++ b/packages/microservices/test/server/server-nats.spec.ts @@ -140,13 +140,13 @@ describe('ServerNats', () => { }); describe('getMessageHandler', () => { it(`should return function`, () => { - expect(typeof server.getMessageHandler(null)).to.be.eql('function'); + expect(typeof server.getMessageHandler(null!)).to.be.eql('function'); }); describe('handler', () => { it('should call "handleMessage"', async () => { const handleMessageStub = sinon .stub(server, 'handleMessage') - .callsFake(() => null); + .callsFake(() => null!); await server.getMessageHandler('')('' as any, ''); expect(handleMessageStub.called).to.be.true; }); diff --git a/packages/microservices/test/server/server-redis.spec.ts b/packages/microservices/test/server/server-redis.spec.ts index e892f897828..fa8940002c3 100644 --- a/packages/microservices/test/server/server-redis.spec.ts +++ b/packages/microservices/test/server/server-redis.spec.ts @@ -223,9 +223,9 @@ describe('ServerRedis', () => { describe('getClientOptions', () => { it('should return options object with "retryStrategy" and call "createRetryStrategy"', () => { const createSpy = sinon.spy(server, 'createRetryStrategy'); - const { retryStrategy } = server.getClientOptions(); + const { retryStrategy } = server.getClientOptions()!; try { - retryStrategy(0); + retryStrategy!(0); } catch { // Ignore } diff --git a/packages/microservices/test/server/server-tcp.spec.ts b/packages/microservices/test/server/server-tcp.spec.ts index 597a5f4e1c2..072e768acf1 100644 --- a/packages/microservices/test/server/server-tcp.spec.ts +++ b/packages/microservices/test/server/server-tcp.spec.ts @@ -21,7 +21,7 @@ describe('ServerTCP', () => { sinon.stub(server, 'getSocketInstance' as any).callsFake(() => socket); }); it('should bind message and error events to handler', () => { - server.bindHandler(null); + server.bindHandler(null!); expect(socket.on.calledTwice).to.be.true; }); }); diff --git a/packages/microservices/test/server/server.spec.ts b/packages/microservices/test/server/server.spec.ts index 3b970ac5080..3c7fe801fc3 100644 --- a/packages/microservices/test/server/server.spec.ts +++ b/packages/microservices/test/server/server.spec.ts @@ -9,7 +9,7 @@ class TestServer extends Server { EventCallback extends Function = Function, >(event: EventKey, callback: EventCallback) {} public unwrap(): T { - return null; + return null!; } public listen(callback: () => void) {} public close() {} diff --git a/packages/microservices/test/utils/transform-pattern.utils.spec.ts b/packages/microservices/test/utils/transform-pattern.utils.spec.ts index 3825a4c4dc1..4ea4b842374 100644 --- a/packages/microservices/test/utils/transform-pattern.utils.spec.ts +++ b/packages/microservices/test/utils/transform-pattern.utils.spec.ts @@ -44,7 +44,7 @@ describe('transformPatternToRoute', () => { controller: 'app', id: 150, }, - ]; + ] as MsPattern[]; const expectedResults = [ JSON.stringify(testPatterns[0]), @@ -71,7 +71,7 @@ describe('transformPatternToRoute', () => { use: { p1: 'path1', p2: 'path2', id: 160 }, controller: 'app', }, - ]; + ] as MsPattern[]; const expectedResults = [ JSON.stringify(testPatterns[0]), @@ -98,7 +98,7 @@ describe('transformPatternToRoute', () => { use: { p1: 'path1', p2: { pp1: 'ppath1' } }, controller: { p1: { pp1: 'ppath1', id: 180 } }, }, - ]; + ] as MsPattern[]; const expectedResults = [ JSON.stringify(testPatterns[0]), 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 7ac73e63d46..63aaf2330b2 100644 --- a/packages/platform-express/test/multer/multer/multer.module.spec.ts +++ b/packages/platform-express/test/multer/multer/multer.module.spec.ts @@ -1,8 +1,8 @@ +import { FactoryProvider } from '@nestjs/common'; import { expect } from 'chai'; import * as sinon from 'sinon'; import { MULTER_MODULE_OPTIONS } from '../../../multer/files.constants'; import { MulterModule } from '../../../multer/multer.module'; -import { FactoryProvider } from '@nestjs/common'; describe('MulterModule', () => { describe('register', () => { @@ -16,7 +16,7 @@ describe('MulterModule', () => { expect(dynamicModule.imports).to.be.undefined; expect(dynamicModule.exports).to.include(MULTER_MODULE_OPTIONS); - const moduleOptionsProvider = dynamicModule.providers.find( + const moduleOptionsProvider = dynamicModule.providers!.find( p => 'useFactory' in p && p.provide === MULTER_MODULE_OPTIONS, ) as FactoryProvider; expect(moduleOptionsProvider).to.not.be.undefined; @@ -76,7 +76,7 @@ describe('MulterModule', () => { const optionsFactory = { createMulterOptions: sinon.spy(), }; - await (dynamicModule.providers[0] as any).useFactory(optionsFactory); + await (dynamicModule.providers![0] as any).useFactory(optionsFactory); expect(optionsFactory.createMulterOptions.called).to.be.true; }); }); diff --git a/packages/platform-express/test/multer/multer/multer.utils.spec.ts b/packages/platform-express/test/multer/multer/multer.utils.spec.ts index e6462e4093d..be409795aaf 100644 --- a/packages/platform-express/test/multer/multer/multer.utils.spec.ts +++ b/packages/platform-express/test/multer/multer/multer.utils.spec.ts @@ -5,8 +5,8 @@ import { } from '@nestjs/common'; import { expect } from 'chai'; import { - multerExceptions, busboyExceptions, + multerExceptions, } from '../../../multer/multer/multer.constants'; import { transformException } from '../../../multer/multer/multer.utils'; @@ -63,7 +63,7 @@ describe('transformException', () => { message: multerExceptions.LIMIT_UNEXPECTED_FILE, field: 'foo', }; - expect(transformException(err as any).message).to.equal( + expect(transformException(err as any)!.message).to.equal( `${multerExceptions.LIMIT_UNEXPECTED_FILE} - foo`, ); }); diff --git a/packages/websockets/test/context/exception-filters.context.spec.ts b/packages/websockets/test/context/exception-filters.context.spec.ts index 1f9f588dd83..d58730c1e35 100644 --- a/packages/websockets/test/context/exception-filters.context.spec.ts +++ b/packages/websockets/test/context/exception-filters.context.spec.ts @@ -6,7 +6,6 @@ import { NestContainer } from '../../../core/injector/container'; import { ExceptionFiltersContext } from '../../context/exception-filters-context'; describe('ExceptionFiltersContext', () => { - let moduleName: string; let exceptionFilter: ExceptionFiltersContext; class CustomException {} @@ -16,7 +15,6 @@ describe('ExceptionFiltersContext', () => { } beforeEach(() => { - moduleName = 'Test'; exceptionFilter = new ExceptionFiltersContext(new NestContainer() as any); }); describe('create', () => { diff --git a/packages/websockets/test/context/ws-context-creator.spec.ts b/packages/websockets/test/context/ws-context-creator.spec.ts index 516d362fab0..37b0b28359f 100644 --- a/packages/websockets/test/context/ws-context-creator.spec.ts +++ b/packages/websockets/test/context/ws-context-creator.spec.ts @@ -144,7 +144,7 @@ describe('WsContextCreator', () => { describe('createGuardsFn', () => { it('should throw exception when "tryActivate" returns false', () => { - const guardsFn = contextCreator.createGuardsFn([null], null, null); + const guardsFn = contextCreator.createGuardsFn([null], null!, null!)!; sinon.stub(guardsConsumer, 'tryActivate').callsFake(async () => false); guardsFn([]).catch(err => expect(err).to.not.be.undefined); }); @@ -211,12 +211,12 @@ describe('WsContextCreator', () => { { index: 1, type: 'test', - data: null, + data: null!, pipes: [], extractValue: () => null, }, ], - ); + )!; await pipesFn([]); expect(pipesFn).to.be.a('function'); }); diff --git a/packages/websockets/test/exceptions/ws-exceptions-handler.spec.ts b/packages/websockets/test/exceptions/ws-exceptions-handler.spec.ts index b624e9478ae..c1b54ba4a2c 100644 --- a/packages/websockets/test/exceptions/ws-exceptions-handler.spec.ts +++ b/packages/websockets/test/exceptions/ws-exceptions-handler.spec.ts @@ -121,13 +121,13 @@ describe('WsExceptionsHandler', () => { expect((handler as any).filters).to.be.eql(filters); }); it('should throw exception when passed argument is not an array', () => { - expect(() => handler.setCustomFilters(null)).to.throw(); + expect(() => handler.setCustomFilters(null!)).to.throw(); }); }); describe('invokeCustomFilters', () => { describe('when filters array is empty', () => { it('should return false', () => { - expect(handler.invokeCustomFilters(null, null)).to.be.false; + expect(handler.invokeCustomFilters(null, null!)).to.be.false; }); }); describe('when filters array is not empty', () => { @@ -143,7 +143,7 @@ describe('WsExceptionsHandler', () => { (handler as any).filters = filters; }); it('should call funcSpy', () => { - handler.invokeCustomFilters(new TestException(), null); + handler.invokeCustomFilters(new TestException(), null!); expect(funcSpy.notCalled).to.be.false; }); it('should call funcSpy with exception and response passed as an arguments', () => { @@ -154,17 +154,17 @@ describe('WsExceptionsHandler', () => { expect(funcSpy.calledWith(exception, res)).to.be.true; }); it('should return true', () => { - expect(handler.invokeCustomFilters(new TestException(), null)).to.be + expect(handler.invokeCustomFilters(new TestException(), null!)).to.be .true; }); }); describe('when filter does not exists in filters array', () => { it('should not call funcSpy', () => { - handler.invokeCustomFilters(new TestException(), null); + handler.invokeCustomFilters(new TestException(), null!); expect(funcSpy.notCalled).to.be.true; }); it('should return false', () => { - expect(handler.invokeCustomFilters(new TestException(), null)).to.be + expect(handler.invokeCustomFilters(new TestException(), null!)).to.be .false; }); }); diff --git a/packages/websockets/test/factories/ws-params-factory.spec.ts b/packages/websockets/test/factories/ws-params-factory.spec.ts index 1a449edfc08..a0e95883bf5 100644 --- a/packages/websockets/test/factories/ws-params-factory.spec.ts +++ b/packages/websockets/test/factories/ws-params-factory.spec.ts @@ -16,7 +16,7 @@ describe('WsParamsFactory', () => { describe(`WsParamtype.PAYLOAD`, () => { it('should return a message payload object', () => { expect( - factory.exchangeKeyForValue(WsParamtype.PAYLOAD, null, args), + factory.exchangeKeyForValue(WsParamtype.PAYLOAD, null!, args), ).to.be.eql(data); }); it('should return a message payload object with parameter extraction', () => { @@ -28,19 +28,21 @@ describe('WsParamsFactory', () => { describe(`WsParamtype.SOCKET`, () => { it('should return a connected socket object', () => { expect( - factory.exchangeKeyForValue(WsParamtype.SOCKET, null, args), + factory.exchangeKeyForValue(WsParamtype.SOCKET, null!, args), ).to.be.eql(client); }); }); }); describe('when key is not available', () => { it('should return null', () => { - expect(factory.exchangeKeyForValue(-1, null, [])).to.be.eql(null); + expect(factory.exchangeKeyForValue(-1, null!, [])).to.be.eql(null); }); }); describe('when args are not available', () => { it('should return null', () => { - expect(factory.exchangeKeyForValue(null, null, null)).to.be.eql(null); + expect(factory.exchangeKeyForValue(null!, null!, null!)).to.be.eql( + null, + ); }); }); }); diff --git a/packages/websockets/test/gateway-metadata-explorer.spec.ts b/packages/websockets/test/gateway-metadata-explorer.spec.ts index cfef62f0c76..d36979575f9 100644 --- a/packages/websockets/test/gateway-metadata-explorer.spec.ts +++ b/packages/websockets/test/gateway-metadata-explorer.spec.ts @@ -60,7 +60,7 @@ describe('GatewayMetadataExplorer', () => { expect(metadata).to.eq(null); }); it(`should return message mapping properties when "isMessageMapping" metadata is not undefined`, () => { - const metadata = instance.exploreMethodMetadata(test, 'test'); + const metadata = instance.exploreMethodMetadata(test, 'test')!; expect(metadata).to.have.keys(['callback', 'message', 'methodName']); expect(metadata.message).to.eql(message); }); diff --git a/packages/websockets/test/socket-server-provider.spec.ts b/packages/websockets/test/socket-server-provider.spec.ts index 9b9711299f6..a9d1649db63 100644 --- a/packages/websockets/test/socket-server-provider.spec.ts +++ b/packages/websockets/test/socket-server-provider.spec.ts @@ -38,7 +38,7 @@ describe('SocketServerProvider', () => { const server = { test: 'test' }; mockContainer.expects('getOneByConfig').returns(server); - const result = instance.scanForSocketServer({ namespace: null }, port); + const result = instance.scanForSocketServer({ namespace: null! }, port); expect(createSocketServerSpy.called).to.be.false; expect(result).to.eq(server); diff --git a/packages/websockets/test/web-sockets-controller.spec.ts b/packages/websockets/test/web-sockets-controller.spec.ts index 03d48b0f37a..576228a9b03 100644 --- a/packages/websockets/test/web-sockets-controller.spec.ts +++ b/packages/websockets/test/web-sockets-controller.spec.ts @@ -47,7 +47,7 @@ describe('WebSocketsController', () => { beforeEach(() => { config = new ApplicationConfig(new NoopAdapter()); - provider = new SocketServerProvider(null, config); + provider = new SocketServerProvider(null!, config); graphInspector = new GraphInspector(new NestContainer()); mockProvider = sinon.mock(provider); @@ -187,12 +187,12 @@ describe('WebSocketsController', () => { { methodName: 'findOne', message: 'find', - callback: null, + callback: null!, }, { methodName: 'create', message: 'insert', - callback: null, + callback: null!, }, ]; const insertEntrypointDefinitionSpy = sinon.spy( @@ -337,7 +337,7 @@ describe('WebSocketsController', () => { instance, gateway, handlers, - null, + null!, connection, ); fn(client); @@ -345,7 +345,7 @@ describe('WebSocketsController', () => { it('should return function', () => { expect( - instance.getConnectionHandler(null, null, null, null, null), + instance.getConnectionHandler(null!, null!, null!, null!, null!), ).to.be.a('function'); }); it('should call "next" method of connection object with expected argument', () => { From 7d3e5c1a38e8703156da0ce4cb9e0672e401c121 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 26 Nov 2024 14:39:51 +0100 Subject: [PATCH 091/122] build: use strict null checks part 5 --- integration/auto-mock/test/bar.service.spec.ts | 1 + integration/auto-mock/tsconfig.json | 1 + integration/cors/tsconfig.json | 1 + integration/discovery/src/webhooks.explorer.ts | 6 +++--- integration/discovery/tsconfig.json | 1 + integration/graphql-code-first/tsconfig.json | 1 + .../src/cats/cats-request-scoped.service.ts | 2 +- .../src/cats/cats.service.ts | 2 +- integration/graphql-schema-first/tsconfig.json | 1 + integration/hello-world/tsconfig.json | 1 + integration/hooks/tsconfig.json | 1 + .../circular.module.ts | 2 +- integration/injector/tsconfig.json | 1 + integration/inspector/tsconfig.json | 1 + integration/lazy-modules/tsconfig.json | 1 + .../microservices/e2e/concurrent-kafka.spec.ts | 2 +- .../microservices/e2e/sum-kafka.spec.ts | 2 +- .../kafka-concurrent.controller.ts | 2 +- .../microservices/src/mqtt/mqtt.controller.ts | 4 ++-- integration/microservices/tsconfig.json | 1 + integration/module-utils/tsconfig.json | 1 + integration/mongoose/tsconfig.json | 1 + .../nest-application/app-locals/tsconfig.json | 1 + .../nest-application/get-url/tsconfig.json | 1 + .../global-prefix/tsconfig.json | 1 + .../nest-application/listen/tsconfig.json | 1 + .../raw-body/src/express.controller.ts | 2 +- .../raw-body/src/fastify.controller.ts | 2 +- .../nest-application/raw-body/tsconfig.json | 1 + integration/repl/tsconfig.json | 1 + .../src/durable/durable-context-id.strategy.ts | 2 +- .../src/hello/guards/request-scoped.guard.ts | 2 +- .../hello/interceptors/logging.interceptor.ts | 2 +- .../scopes/src/hello/users/user-by-id.pipe.ts | 2 +- .../src/msvc/guards/request-scoped.guard.ts | 2 +- .../msvc/interceptors/logging.interceptor.ts | 2 +- integration/scopes/tsconfig.json | 1 + integration/send-files/tsconfig.json | 1 + integration/typeorm/tsconfig.json | 1 + .../e2e/custom-versioning-fastify.spec.ts | 2 +- .../versioning/e2e/custom-versioning.spec.ts | 4 ++-- integration/versioning/tsconfig.json | 1 + .../websockets/e2e/error-gateway.spec.ts | 2 +- integration/websockets/tsconfig.json | 1 + packages/common/exceptions/http.exception.ts | 4 ++-- .../configurable-module.builder.ts | 2 +- packages/common/pipes/parse-enum.pipe.ts | 2 +- packages/common/pipes/validation.pipe.ts | 2 +- packages/core/injector/injector.ts | 2 +- .../lazy-module-loader/lazy-module-loader.ts | 2 +- packages/core/inspector/graph-inspector.ts | 2 +- packages/core/middleware/middleware-module.ts | 2 +- packages/core/middleware/utils.ts | 4 ++-- packages/core/repl/repl-context.ts | 2 +- .../core/router/router-execution-context.ts | 2 +- packages/core/scanner.ts | 4 ++-- .../helpers/provider-classifier.spec.ts | 2 +- packages/microservices/client/client-kafka.ts | 2 +- packages/microservices/client/client-nats.ts | 10 +++++----- packages/microservices/client/client-proxy.ts | 2 +- .../exceptions/base-rpc-exception-filter.ts | 2 -- .../microservices/exceptions/rpc-exception.ts | 5 +++-- packages/microservices/listeners-controller.ts | 2 +- .../microservices/server/server-factory.ts | 2 +- packages/microservices/server/server-redis.ts | 2 +- packages/microservices/server/server.ts | 2 +- .../test/client/client-kafka.spec.ts | 2 +- .../test/client/client-mqtt.spec.ts | 2 +- .../test/client/client-nats.spec.ts | 2 +- .../test/client/client-redis.spec.ts | 2 +- .../test/json-socket/connection.spec.ts | 18 +++++++++--------- .../test/server/server-kafka.spec.ts | 6 ++---- .../adapters/express-adapter.ts | 2 +- .../adapters/fastify-adapter.ts | 2 +- packages/websockets/errors/ws-exception.ts | 5 +++-- 75 files changed, 98 insertions(+), 75 deletions(-) diff --git a/integration/auto-mock/test/bar.service.spec.ts b/integration/auto-mock/test/bar.service.spec.ts index 5c83431676f..c004bbf67fe 100644 --- a/integration/auto-mock/test/bar.service.spec.ts +++ b/integration/auto-mock/test/bar.service.spec.ts @@ -4,6 +4,7 @@ import * as chaiAsPromised from 'chai-as-promised'; import * as sinon from 'sinon'; import { BarService } from '../src/bar.service'; import { FooService } from '../src/foo.service'; + chai.use(chaiAsPromised); const { expect } = chai; diff --git a/integration/auto-mock/tsconfig.json b/integration/auto-mock/tsconfig.json index 18d4bbcd669..2d3b89de293 100644 --- a/integration/auto-mock/tsconfig.json +++ b/integration/auto-mock/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/integration/cors/tsconfig.json b/integration/cors/tsconfig.json index cef623d14c9..4a0f01e0ec4 100644 --- a/integration/cors/tsconfig.json +++ b/integration/cors/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/integration/discovery/src/webhooks.explorer.ts b/integration/discovery/src/webhooks.explorer.ts index cbf854dce07..d449950a542 100644 --- a/integration/discovery/src/webhooks.explorer.ts +++ b/integration/discovery/src/webhooks.explorer.ts @@ -17,17 +17,17 @@ export class WebhooksExplorer { const { name } = this.discoveryService.getMetadataByDecorator( Webhook, wrapper, - ); + )!; return { name, handlers: this.metadataScanner - .getAllMethodNames(wrapper.metatype.prototype) + .getAllMethodNames(wrapper.metatype!.prototype) .map(methodName => { const { event } = this.discoveryService.getMetadataByDecorator( WebhookHandler, wrapper, methodName, - ); + )!; return { methodName, event, diff --git a/integration/discovery/tsconfig.json b/integration/discovery/tsconfig.json index cef623d14c9..4a0f01e0ec4 100644 --- a/integration/discovery/tsconfig.json +++ b/integration/discovery/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/integration/graphql-code-first/tsconfig.json b/integration/graphql-code-first/tsconfig.json index cef623d14c9..4a0f01e0ec4 100644 --- a/integration/graphql-code-first/tsconfig.json +++ b/integration/graphql-code-first/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/integration/graphql-schema-first/src/cats/cats-request-scoped.service.ts b/integration/graphql-schema-first/src/cats/cats-request-scoped.service.ts index 3d6e193f41c..ebb88880d4d 100644 --- a/integration/graphql-schema-first/src/cats/cats-request-scoped.service.ts +++ b/integration/graphql-schema-first/src/cats/cats-request-scoped.service.ts @@ -20,6 +20,6 @@ export class CatsRequestScopedService { } findOneById(id: number): Cat { - return this.cats.find(cat => cat.id === id); + return this.cats.find(cat => cat.id === id)!; } } diff --git a/integration/graphql-schema-first/src/cats/cats.service.ts b/integration/graphql-schema-first/src/cats/cats.service.ts index 56f362529cd..a529301e6b5 100644 --- a/integration/graphql-schema-first/src/cats/cats.service.ts +++ b/integration/graphql-schema-first/src/cats/cats.service.ts @@ -20,6 +20,6 @@ export class CatsService { } findOneById(id: number): Cat { - return this.cats.find(cat => cat.id === id); + return this.cats.find(cat => cat.id === id)!; } } diff --git a/integration/graphql-schema-first/tsconfig.json b/integration/graphql-schema-first/tsconfig.json index cef623d14c9..4a0f01e0ec4 100644 --- a/integration/graphql-schema-first/tsconfig.json +++ b/integration/graphql-schema-first/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/integration/hello-world/tsconfig.json b/integration/hello-world/tsconfig.json index cef623d14c9..4a0f01e0ec4 100644 --- a/integration/hello-world/tsconfig.json +++ b/integration/hello-world/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/integration/hooks/tsconfig.json b/integration/hooks/tsconfig.json index cef623d14c9..4a0f01e0ec4 100644 --- a/integration/hooks/tsconfig.json +++ b/integration/hooks/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/integration/injector/src/circular-structure-dynamic-module/circular.module.ts b/integration/injector/src/circular-structure-dynamic-module/circular.module.ts index 3833f0d3b0a..6172fb2c5be 100644 --- a/integration/injector/src/circular-structure-dynamic-module/circular.module.ts +++ b/integration/injector/src/circular-structure-dynamic-module/circular.module.ts @@ -6,7 +6,7 @@ export class CircularModule { const a = { module: CircularModule, providers: [InputService], - b: null, + b: null as any, }; a.b = a; return a; diff --git a/integration/injector/tsconfig.json b/integration/injector/tsconfig.json index cef623d14c9..4a0f01e0ec4 100644 --- a/integration/injector/tsconfig.json +++ b/integration/injector/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/integration/inspector/tsconfig.json b/integration/inspector/tsconfig.json index cef623d14c9..4a0f01e0ec4 100644 --- a/integration/inspector/tsconfig.json +++ b/integration/inspector/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/integration/lazy-modules/tsconfig.json b/integration/lazy-modules/tsconfig.json index cef623d14c9..4a0f01e0ec4 100644 --- a/integration/lazy-modules/tsconfig.json +++ b/integration/lazy-modules/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/integration/microservices/e2e/concurrent-kafka.spec.ts b/integration/microservices/e2e/concurrent-kafka.spec.ts index 86be67f77ee..11dd0dbb733 100644 --- a/integration/microservices/e2e/concurrent-kafka.spec.ts +++ b/integration/microservices/e2e/concurrent-kafka.spec.ts @@ -100,7 +100,7 @@ describe.skip('Kafka concurrent', function () { } } - if (topicMetadata && topicMetadata.topics.length > 0) { + if (topicMetadata! && topicMetadata.topics.length > 0) { // we have topics, how many partitions do they have? for (const topic of topicMetadata.topics) { if (topic.partitions.length < numbersOfServers) { diff --git a/integration/microservices/e2e/sum-kafka.spec.ts b/integration/microservices/e2e/sum-kafka.spec.ts index d01e8d498b3..4ae28b67440 100644 --- a/integration/microservices/e2e/sum-kafka.spec.ts +++ b/integration/microservices/e2e/sum-kafka.spec.ts @@ -123,7 +123,7 @@ describe.skip('Kafka transport', function () { }); it(`/POST (sync command create user) Concurrency Test`, async () => { - const promises = []; + const promises = [] as Array>; for (let concurrencyKey = 0; concurrencyKey < 100; concurrencyKey++) { const innerUserDto = JSON.parse(JSON.stringify(userDto)); innerUserDto.name += `+${concurrencyKey}`; diff --git a/integration/microservices/src/kafka-concurrent/kafka-concurrent.controller.ts b/integration/microservices/src/kafka-concurrent/kafka-concurrent.controller.ts index a0ede418f36..4816b4f13b2 100644 --- a/integration/microservices/src/kafka-concurrent/kafka-concurrent.controller.ts +++ b/integration/microservices/src/kafka-concurrent/kafka-concurrent.controller.ts @@ -17,7 +17,7 @@ import { SumDto } from './dto/sum.dto'; */ const explicitPartitioner = () => { return ({ message }: PartitionerArgs) => { - return parseFloat(message.headers.toPartition.toString()); + return parseFloat(message.headers!.toPartition!.toString()); }; }; diff --git a/integration/microservices/src/mqtt/mqtt.controller.ts b/integration/microservices/src/mqtt/mqtt.controller.ts index 72de41d5c41..96de341febd 100644 --- a/integration/microservices/src/mqtt/mqtt.controller.ts +++ b/integration/microservices/src/mqtt/mqtt.controller.ts @@ -138,7 +138,7 @@ export class MqttController { } @MessagePattern('wildcard-message/#') - wildcardMessageHandler(data: number[]): number { + wildcardMessageHandler(data: number[]): number | undefined { if ((data as any).response) { return; } @@ -186,7 +186,7 @@ export class MqttController { } @MessagePattern('$share/test-group/shared-wildcard-message/#') - sharedWildcardMessageHandler(data: number[]): number { + sharedWildcardMessageHandler(data: number[]): number | undefined { if ((data as any).response) { return; } diff --git a/integration/microservices/tsconfig.json b/integration/microservices/tsconfig.json index cef623d14c9..4a0f01e0ec4 100644 --- a/integration/microservices/tsconfig.json +++ b/integration/microservices/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/integration/module-utils/tsconfig.json b/integration/module-utils/tsconfig.json index 18d4bbcd669..2d3b89de293 100644 --- a/integration/module-utils/tsconfig.json +++ b/integration/module-utils/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/integration/mongoose/tsconfig.json b/integration/mongoose/tsconfig.json index cef623d14c9..4a0f01e0ec4 100644 --- a/integration/mongoose/tsconfig.json +++ b/integration/mongoose/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/integration/nest-application/app-locals/tsconfig.json b/integration/nest-application/app-locals/tsconfig.json index 5c1ce2f6ec2..259f2b525f8 100644 --- a/integration/nest-application/app-locals/tsconfig.json +++ b/integration/nest-application/app-locals/tsconfig.json @@ -11,6 +11,7 @@ "sourceMap": true, "allowJs": true, "outDir": "./dist", + "strictNullChecks": true, "paths": { "@nestjs/common": ["../../../packages/common"], "@nestjs/common/*": ["../../../packages/common/*"], diff --git a/integration/nest-application/get-url/tsconfig.json b/integration/nest-application/get-url/tsconfig.json index 5c1ce2f6ec2..259f2b525f8 100644 --- a/integration/nest-application/get-url/tsconfig.json +++ b/integration/nest-application/get-url/tsconfig.json @@ -11,6 +11,7 @@ "sourceMap": true, "allowJs": true, "outDir": "./dist", + "strictNullChecks": true, "paths": { "@nestjs/common": ["../../../packages/common"], "@nestjs/common/*": ["../../../packages/common/*"], diff --git a/integration/nest-application/global-prefix/tsconfig.json b/integration/nest-application/global-prefix/tsconfig.json index 5c1ce2f6ec2..259f2b525f8 100644 --- a/integration/nest-application/global-prefix/tsconfig.json +++ b/integration/nest-application/global-prefix/tsconfig.json @@ -11,6 +11,7 @@ "sourceMap": true, "allowJs": true, "outDir": "./dist", + "strictNullChecks": true, "paths": { "@nestjs/common": ["../../../packages/common"], "@nestjs/common/*": ["../../../packages/common/*"], diff --git a/integration/nest-application/listen/tsconfig.json b/integration/nest-application/listen/tsconfig.json index 5c1ce2f6ec2..259f2b525f8 100644 --- a/integration/nest-application/listen/tsconfig.json +++ b/integration/nest-application/listen/tsconfig.json @@ -11,6 +11,7 @@ "sourceMap": true, "allowJs": true, "outDir": "./dist", + "strictNullChecks": true, "paths": { "@nestjs/common": ["../../../packages/common"], "@nestjs/common/*": ["../../../packages/common/*"], diff --git a/integration/nest-application/raw-body/src/express.controller.ts b/integration/nest-application/raw-body/src/express.controller.ts index 5f504ede0a5..58521af2b5f 100644 --- a/integration/nest-application/raw-body/src/express.controller.ts +++ b/integration/nest-application/raw-body/src/express.controller.ts @@ -7,7 +7,7 @@ export class ExpressController { getRawBody(@Req() req: RawBodyRequest) { return { parsed: req.body, - raw: req.rawBody.toString(), + raw: req.rawBody!.toString(), }; } } diff --git a/integration/nest-application/raw-body/src/fastify.controller.ts b/integration/nest-application/raw-body/src/fastify.controller.ts index 3cdf8484e77..1c158985d47 100644 --- a/integration/nest-application/raw-body/src/fastify.controller.ts +++ b/integration/nest-application/raw-body/src/fastify.controller.ts @@ -7,7 +7,7 @@ export class FastifyController { getRawBody(@Req() req: RawBodyRequest) { return { parsed: req.body, - raw: req.rawBody.toString(), + raw: req.rawBody!.toString(), }; } } diff --git a/integration/nest-application/raw-body/tsconfig.json b/integration/nest-application/raw-body/tsconfig.json index 5c1ce2f6ec2..259f2b525f8 100644 --- a/integration/nest-application/raw-body/tsconfig.json +++ b/integration/nest-application/raw-body/tsconfig.json @@ -11,6 +11,7 @@ "sourceMap": true, "allowJs": true, "outDir": "./dist", + "strictNullChecks": true, "paths": { "@nestjs/common": ["../../../packages/common"], "@nestjs/common/*": ["../../../packages/common/*"], diff --git a/integration/repl/tsconfig.json b/integration/repl/tsconfig.json index cef623d14c9..4a0f01e0ec4 100644 --- a/integration/repl/tsconfig.json +++ b/integration/repl/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/integration/scopes/src/durable/durable-context-id.strategy.ts b/integration/scopes/src/durable/durable-context-id.strategy.ts index d4158f3e2af..c9dd94be014 100644 --- a/integration/scopes/src/durable/durable-context-id.strategy.ts +++ b/integration/scopes/src/durable/durable-context-id.strategy.ts @@ -9,7 +9,7 @@ export class DurableContextIdStrategy implements ContextIdStrategy { let tenantSubTreeId: ContextId; if (tenants.has(tenantId)) { - tenantSubTreeId = tenants.get(tenantId); + tenantSubTreeId = tenants.get(tenantId)!; } else { tenantSubTreeId = { id: +tenantId } as ContextId; tenants.set(tenantId, tenantSubTreeId); diff --git a/integration/scopes/src/hello/guards/request-scoped.guard.ts b/integration/scopes/src/hello/guards/request-scoped.guard.ts index 6124eb7d5f4..591f78adb20 100644 --- a/integration/scopes/src/hello/guards/request-scoped.guard.ts +++ b/integration/scopes/src/hello/guards/request-scoped.guard.ts @@ -10,7 +10,7 @@ import { Observable } from 'rxjs'; @Injectable({ scope: Scope.REQUEST }) export class Guard implements CanActivate { static COUNTER = 0; - static REQUEST_SCOPED_DATA = []; + static REQUEST_SCOPED_DATA = [] as number[]; constructor(@Inject('REQUEST_ID') private readonly requestId: number) { Guard.COUNTER++; diff --git a/integration/scopes/src/hello/interceptors/logging.interceptor.ts b/integration/scopes/src/hello/interceptors/logging.interceptor.ts index 30fa62d319e..2721a9ddcf5 100644 --- a/integration/scopes/src/hello/interceptors/logging.interceptor.ts +++ b/integration/scopes/src/hello/interceptors/logging.interceptor.ts @@ -11,7 +11,7 @@ import { Observable } from 'rxjs'; @Injectable({ scope: Scope.REQUEST }) export class Interceptor implements NestInterceptor { static COUNTER = 0; - static REQUEST_SCOPED_DATA = []; + static REQUEST_SCOPED_DATA = [] as number[]; constructor(@Inject('REQUEST_ID') private readonly requestId: number) { Interceptor.COUNTER++; diff --git a/integration/scopes/src/hello/users/user-by-id.pipe.ts b/integration/scopes/src/hello/users/user-by-id.pipe.ts index 385eedf2d8c..73d859bfaf9 100644 --- a/integration/scopes/src/hello/users/user-by-id.pipe.ts +++ b/integration/scopes/src/hello/users/user-by-id.pipe.ts @@ -9,7 +9,7 @@ import { UsersService } from './users.service'; @Injectable() export class UserByIdPipe implements PipeTransform { static COUNTER = 0; - static REQUEST_SCOPED_DATA = []; + static REQUEST_SCOPED_DATA = [] as number[]; constructor( @Inject('REQUEST_ID') private readonly requestId: number, diff --git a/integration/scopes/src/msvc/guards/request-scoped.guard.ts b/integration/scopes/src/msvc/guards/request-scoped.guard.ts index 6124eb7d5f4..591f78adb20 100644 --- a/integration/scopes/src/msvc/guards/request-scoped.guard.ts +++ b/integration/scopes/src/msvc/guards/request-scoped.guard.ts @@ -10,7 +10,7 @@ import { Observable } from 'rxjs'; @Injectable({ scope: Scope.REQUEST }) export class Guard implements CanActivate { static COUNTER = 0; - static REQUEST_SCOPED_DATA = []; + static REQUEST_SCOPED_DATA = [] as number[]; constructor(@Inject('REQUEST_ID') private readonly requestId: number) { Guard.COUNTER++; diff --git a/integration/scopes/src/msvc/interceptors/logging.interceptor.ts b/integration/scopes/src/msvc/interceptors/logging.interceptor.ts index 30fa62d319e..2721a9ddcf5 100644 --- a/integration/scopes/src/msvc/interceptors/logging.interceptor.ts +++ b/integration/scopes/src/msvc/interceptors/logging.interceptor.ts @@ -11,7 +11,7 @@ import { Observable } from 'rxjs'; @Injectable({ scope: Scope.REQUEST }) export class Interceptor implements NestInterceptor { static COUNTER = 0; - static REQUEST_SCOPED_DATA = []; + static REQUEST_SCOPED_DATA = [] as number[]; constructor(@Inject('REQUEST_ID') private readonly requestId: number) { Interceptor.COUNTER++; diff --git a/integration/scopes/tsconfig.json b/integration/scopes/tsconfig.json index cef623d14c9..4a0f01e0ec4 100644 --- a/integration/scopes/tsconfig.json +++ b/integration/scopes/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/integration/send-files/tsconfig.json b/integration/send-files/tsconfig.json index cef623d14c9..4a0f01e0ec4 100644 --- a/integration/send-files/tsconfig.json +++ b/integration/send-files/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/integration/typeorm/tsconfig.json b/integration/typeorm/tsconfig.json index cef623d14c9..4a0f01e0ec4 100644 --- a/integration/typeorm/tsconfig.json +++ b/integration/typeorm/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/integration/versioning/e2e/custom-versioning-fastify.spec.ts b/integration/versioning/e2e/custom-versioning-fastify.spec.ts index 0deaf4e59b7..a428136a67a 100644 --- a/integration/versioning/e2e/custom-versioning-fastify.spec.ts +++ b/integration/versioning/e2e/custom-versioning-fastify.spec.ts @@ -14,7 +14,7 @@ describe('Custom Versioning (fastify)', () => { .flatMap(v => v.split(',')) .map(header => header.match(/v(\d+\.?\d*)\+json$/)) .filter(match => match && match.length) - .map(matchArray => matchArray[1]) + .map(matchArray => matchArray![1]) .sort() .reverse(); diff --git a/integration/versioning/e2e/custom-versioning.spec.ts b/integration/versioning/e2e/custom-versioning.spec.ts index 9cff09d2f77..73e56c41c2c 100644 --- a/integration/versioning/e2e/custom-versioning.spec.ts +++ b/integration/versioning/e2e/custom-versioning.spec.ts @@ -11,11 +11,11 @@ describe('Custom Versioning', () => { ?.split(',') .map(header => header.match(/v(\d+\.?\d*)\+json$/)) .filter(match => match && match.length) - .map(matchArray => matchArray[1]) + .map(matchArray => matchArray![1]) .sort() .reverse(); - return versions; + return versions!; }; let app: INestApplication; diff --git a/integration/versioning/tsconfig.json b/integration/versioning/tsconfig.json index cef623d14c9..4a0f01e0ec4 100644 --- a/integration/versioning/tsconfig.json +++ b/integration/versioning/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/integration/websockets/e2e/error-gateway.spec.ts b/integration/websockets/e2e/error-gateway.spec.ts index 852488a9fc7..5e5335a00b3 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 = testingModule.createNestApplication(); await app.listen(3000); }); diff --git a/integration/websockets/tsconfig.json b/integration/websockets/tsconfig.json index cef623d14c9..4a0f01e0ec4 100644 --- a/integration/websockets/tsconfig.json +++ b/integration/websockets/tsconfig.json @@ -10,6 +10,7 @@ "target": "ES2021", "sourceMap": true, "allowJs": true, + "strictNullChecks": true, "outDir": "./dist", "paths": { "@nestjs/common": ["../../packages/common"], diff --git a/packages/common/exceptions/http.exception.ts b/packages/common/exceptions/http.exception.ts index fe162c6a779..8b21b9a392f 100644 --- a/packages/common/exceptions/http.exception.ts +++ b/packages/common/exceptions/http.exception.ts @@ -139,7 +139,7 @@ export class HttpException extends IntrinsicException { if (isString(arg0) || Array.isArray(arg0) || isNumber(arg0)) { return { - message: arg0!, + message: arg0, error: arg1 as string, statusCode: statusCode!, }; @@ -153,7 +153,7 @@ export class HttpException extends IntrinsicException { ): string { return isString(descriptionOrOptions) ? descriptionOrOptions - : descriptionOrOptions?.description!; + : (descriptionOrOptions?.description as string); } public static getHttpExceptionOptionsFrom( diff --git a/packages/common/module-utils/configurable-module.builder.ts b/packages/common/module-utils/configurable-module.builder.ts index 1376a498b01..cec0ea6ae7d 100644 --- a/packages/common/module-utils/configurable-module.builder.ts +++ b/packages/common/module-utils/configurable-module.builder.ts @@ -269,7 +269,7 @@ export class ConfigurableModuleBuilder< const moduleOptions = {}; const extrasKeys = Object.keys(extras); - Object.keys(input!) + Object.keys(input as object) .filter(key => !extrasKeys.includes(key)) .forEach(key => { moduleOptions[key] = input[key]; diff --git a/packages/common/pipes/parse-enum.pipe.ts b/packages/common/pipes/parse-enum.pipe.ts index 58bdea58303..47f3c263abe 100644 --- a/packages/common/pipes/parse-enum.pipe.ts +++ b/packages/common/pipes/parse-enum.pipe.ts @@ -77,7 +77,7 @@ export class ParseEnumPipe implements PipeTransform { } protected isEnum(value: T): boolean { - const enumValues = Object.keys(this.enumType!).map( + const enumValues = Object.keys(this.enumType as object).map( item => this.enumType[item], ); return enumValues.includes(value); diff --git a/packages/common/pipes/validation.pipe.ts b/packages/common/pipes/validation.pipe.ts index 7bdf15a486e..b1cb1b74bac 100644 --- a/packages/common/pipes/validation.pipe.ts +++ b/packages/common/pipes/validation.pipe.ts @@ -215,7 +215,7 @@ export class ValidationPipe implements PipeTransform { } protected toEmptyIfNil(value: T): R | object { - return isNil(value) ? {} : value!; + return isNil(value) ? {} : (value as object); } protected stripProtoKeys(value: any) { diff --git a/packages/core/injector/injector.ts b/packages/core/injector/injector.ts index 0847943b7ae..af02e0555df 100644 --- a/packages/core/injector/injector.ts +++ b/packages/core/injector/injector.ts @@ -365,7 +365,7 @@ export class Injector { return item; }; return [ - wrapper.inject?.map?.(mapFactoryProviderInjectArray)!, + wrapper.inject?.map?.(mapFactoryProviderInjectArray) as any[], optionalDependenciesIds, ]; } diff --git a/packages/core/injector/lazy-module-loader/lazy-module-loader.ts b/packages/core/injector/lazy-module-loader/lazy-module-loader.ts index 8e8edeb453d..b949a1b74cc 100644 --- a/packages/core/injector/lazy-module-loader/lazy-module-loader.ts +++ b/packages/core/injector/lazy-module-loader/lazy-module-loader.ts @@ -40,7 +40,7 @@ export class LazyModuleLoader { moduleClassOrDynamicDefinition, ); const moduleInstance = this.modulesContainer.get(token)!; - return moduleInstance && this.getTargetModuleRef(moduleInstance)!; + return moduleInstance && this.getTargetModuleRef(moduleInstance); } const lazyModulesContainer = this.createLazyModulesContainer(moduleInstances); diff --git a/packages/core/inspector/graph-inspector.ts b/packages/core/inspector/graph-inspector.ts index 5ae1b89b480..bf79028a6db 100644 --- a/packages/core/inspector/graph-inspector.ts +++ b/packages/core/inspector/graph-inspector.ts @@ -219,7 +219,7 @@ export class GraphInspector { targetClassName: target.name, sourceClassToken: source.token, targetClassToken: target.token, - targetModuleName: target.host?.name!, + targetModuleName: target.host?.name as string, keyOrIndex, injectionType, }, diff --git a/packages/core/middleware/middleware-module.ts b/packages/core/middleware/middleware-module.ts index 605122dfe1b..0f9351f0b1e 100644 --- a/packages/core/middleware/middleware-module.ts +++ b/packages/core/middleware/middleware-module.ts @@ -338,7 +338,7 @@ export class MiddlewareModule< } private getContextId(request: unknown, isTreeDurable: boolean): ContextId { - const contextId = ContextIdFactory.getByRequest(request!); + const contextId = ContextIdFactory.getByRequest(request as object); if (!request![REQUEST_CONTEXT_ID]) { Object.defineProperty(request, REQUEST_CONTEXT_ID, { value: contextId, diff --git a/packages/core/middleware/utils.ts b/packages/core/middleware/utils.ts index 3b6568d991b..87ffb28d57a 100644 --- a/packages/core/middleware/utils.ts +++ b/packages/core/middleware/utils.ts @@ -112,8 +112,8 @@ export function isMiddlewareRouteExcluded( if (excludedRoutes.length <= 0) { return false; } - const reqMethod = httpAdapter.getRequestMethod?.(req)!; - const originalUrl = httpAdapter.getRequestUrl?.(req)!; + const reqMethod = httpAdapter.getRequestMethod!(req); + const originalUrl = httpAdapter.getRequestUrl!(req); const queryParamsIndex = originalUrl ? originalUrl.indexOf('?') : -1; const pathname = queryParamsIndex >= 0 diff --git a/packages/core/repl/repl-context.ts b/packages/core/repl/repl-context.ts index a22c46f5c6f..f4a2fcd9162 100644 --- a/packages/core/repl/repl-context.ts +++ b/packages/core/repl/repl-context.ts @@ -115,7 +115,7 @@ export class ReplContext { return typeof token !== 'string' ? typeof token === 'function' ? token.name - : token?.toString()! + : (token?.toString() as string) : `"${token}"`; } diff --git a/packages/core/router/router-execution-context.ts b/packages/core/router/router-execution-context.ts index f73ab40bda7..d1b2610412c 100644 --- a/packages/core/router/router-execution-context.ts +++ b/packages/core/router/router-execution-context.ts @@ -447,7 +447,7 @@ export class RouterExecutionContext { result, (res as any).raw || res, (req as any).raw || req, - { additionalHeaders: res.getHeaders?.()! }, + { additionalHeaders: res.getHeaders!() }, ); }; } diff --git a/packages/core/scanner.ts b/packages/core/scanner.ts index 6c109ea7d48..e96bc2b6a7e 100644 --- a/packages/core/scanner.ts +++ b/packages/core/scanner.ts @@ -314,13 +314,13 @@ export class DependenciesScanner { ), ); methodInjectables.forEach(methodInjectable => { - methodInjectable.metadata!.forEach(injectable => + methodInjectable.metadata.forEach(injectable => this.insertInjectable( injectable, token, component, ENHANCER_KEY_TO_SUBTYPE_MAP[metadataKey], - methodInjectable.methodKey!, + methodInjectable.methodKey, ), ); }); diff --git a/packages/core/test/injector/helpers/provider-classifier.spec.ts b/packages/core/test/injector/helpers/provider-classifier.spec.ts index 5da20b4dd57..cd7e9a6b10a 100644 --- a/packages/core/test/injector/helpers/provider-classifier.spec.ts +++ b/packages/core/test/injector/helpers/provider-classifier.spec.ts @@ -37,7 +37,7 @@ describe('provider classifier', () => { it('should return false if provider is undefined', () => { const classProvider = undefined!; - expect(isClassProvider(classProvider as ClassProvider)!).to.be.false; + expect(isClassProvider(classProvider)).to.be.false; }); }); diff --git a/packages/microservices/client/client-kafka.ts b/packages/microservices/client/client-kafka.ts index dc25d8ddfa3..98334016a23 100644 --- a/packages/microservices/client/client-kafka.ts +++ b/packages/microservices/client/client-kafka.ts @@ -78,7 +78,7 @@ export class ClientKafka 'No producer initialized. Please, call the "connect" method first.', ); } - return this._producer!; + return this._producer; } constructor(protected readonly options: Required['options']) { diff --git a/packages/microservices/client/client-nats.ts b/packages/microservices/client/client-nats.ts index 8559bf3d4af..665666e3d72 100644 --- a/packages/microservices/client/client-nats.ts +++ b/packages/microservices/client/client-nats.ts @@ -20,8 +20,8 @@ let natsPackage = {} as any; // type Client = import('nats').NatsConnection; // type NatsMsg = import('nats').Msg; -type Client = any; -type NatsMsg = any; +type Client = Record; +type NatsMsg = Record; /** * @publicApi @@ -216,12 +216,12 @@ export class ClientNats extends ClientProxy { callback, ); - const subscription = this.natsClient.subscribe(inbox, { + const subscription = this.natsClient!.subscribe(inbox, { callback: subscriptionHandler, }); const headers = this.mergeHeaders(serializedPacket.headers); - this.natsClient.publish(channel, serializedPacket.data, { + this.natsClient!.publish(channel, serializedPacket.data, { reply: inbox, headers, }); @@ -240,7 +240,7 @@ export class ClientNats extends ClientProxy { return new Promise((resolve, reject) => { try { - this.natsClient.publish(pattern, serializedPacket.data, { + this.natsClient!.publish(pattern, serializedPacket.data, { headers, }); resolve(); diff --git a/packages/microservices/client/client-proxy.ts b/packages/microservices/client/client-proxy.ts index 769eb5d0f2f..e2d12463e54 100644 --- a/packages/microservices/client/client-proxy.ts +++ b/packages/microservices/client/client-proxy.ts @@ -198,7 +198,7 @@ export abstract class ClientProxy< prop: Attribute, defaultValue: DefaultValue = undefined as DefaultValue, ) { - return obj && prop in obj ? obj![prop] : defaultValue; + return obj && prop in obj ? (obj as any)[prop] : defaultValue; } protected normalizePattern(pattern: MsPattern): string { diff --git a/packages/microservices/exceptions/base-rpc-exception-filter.ts b/packages/microservices/exceptions/base-rpc-exception-filter.ts index d057dfbc5e2..5773502a5f4 100644 --- a/packages/microservices/exceptions/base-rpc-exception-filter.ts +++ b/packages/microservices/exceptions/base-rpc-exception-filter.ts @@ -1,5 +1,3 @@ - -/* eslint-disable prefer-spread */ import { ArgumentsHost, IntrinsicException, diff --git a/packages/microservices/exceptions/rpc-exception.ts b/packages/microservices/exceptions/rpc-exception.ts index 5a4bad658da..107574a74ee 100644 --- a/packages/microservices/exceptions/rpc-exception.ts +++ b/packages/microservices/exceptions/rpc-exception.ts @@ -18,8 +18,9 @@ export class RpcException extends Error { ) { this.message = (this.error as Record).message; } else if (this.constructor) { - this.message = - this.constructor!.name!.match(/[A-Z][a-z]+|[0-9]+/g)!.join(' '); + this.message = this.constructor.name + .match(/[A-Z][a-z]+|[0-9]+/g)! + .join(' '); } } diff --git a/packages/microservices/listeners-controller.ts b/packages/microservices/listeners-controller.ts index 27cb5eae323..4d78c18d786 100644 --- a/packages/microservices/listeners-controller.ts +++ b/packages/microservices/listeners-controller.ts @@ -167,7 +167,7 @@ export class ListenersController { { type: 'microservice', methodName: definition.methodKey, - className: instanceWrapper.metatype?.name!, + className: instanceWrapper.metatype?.name as string, classNodeId: instanceWrapper.id, metadata: { key: definition.patterns.toString(), diff --git a/packages/microservices/server/server-factory.ts b/packages/microservices/server/server-factory.ts index 0701f9b07a5..5376fbd2288 100644 --- a/packages/microservices/server/server-factory.ts +++ b/packages/microservices/server/server-factory.ts @@ -32,7 +32,7 @@ export class ServerFactory { case Transport.MQTT: return new ServerMqtt(options as Required['options']); case Transport.GRPC: - return new ServerGrpc(options as Required['options']); + return new ServerGrpc(options); case Transport.KAFKA: return new ServerKafka(options as Required['options']); case Transport.RMQ: diff --git a/packages/microservices/server/server-redis.ts b/packages/microservices/server/server-redis.ts index 9ee9b4be6f8..f355f5fa353 100644 --- a/packages/microservices/server/server-redis.ts +++ b/packages/microservices/server/server-redis.ts @@ -75,7 +75,7 @@ export class ServerRedis extends Server { } public start(callback?: () => void) { - Promise.all([this.subClient.connect(), this.pubClient.connect()]) + void Promise.all([this.subClient.connect(), this.pubClient.connect()]) .then(() => { this.bindEvents(this.subClient, this.pubClient); callback?.(); diff --git a/packages/microservices/server/server.ts b/packages/microservices/server/server.ts index 723eba661db..dfa4483811e 100644 --- a/packages/microservices/server/server.ts +++ b/packages/microservices/server/server.ts @@ -219,7 +219,7 @@ export abstract class Server< prop: Attribute, defaultValue: DefaultValue = undefined as DefaultValue, ) { - return obj && prop in obj ? obj![prop] : defaultValue; + return obj && prop in obj ? (obj as any)[prop] : defaultValue; } protected handleError(error: string) { diff --git a/packages/microservices/test/client/client-kafka.spec.ts b/packages/microservices/test/client/client-kafka.spec.ts index 773df074da6..138dad43a09 100644 --- a/packages/microservices/test/client/client-kafka.spec.ts +++ b/packages/microservices/test/client/client-kafka.spec.ts @@ -687,7 +687,7 @@ describe('ClientKafka', () => { assignPacketIdStub = sinon .stub(client as any, 'assignPacketId') .callsFake(packet => - Object.assign(packet!, { + Object.assign(packet as object, { id: correlationId, }), ); diff --git a/packages/microservices/test/client/client-mqtt.spec.ts b/packages/microservices/test/client/client-mqtt.spec.ts index a5f389e38f6..56a3b5e5e76 100644 --- a/packages/microservices/test/client/client-mqtt.spec.ts +++ b/packages/microservices/test/client/client-mqtt.spec.ts @@ -58,7 +58,7 @@ describe('ClientMqtt', () => { connectSpy = sinon.stub(client, 'connect'); assignStub = sinon .stub(client, 'assignPacketId' as any) - .callsFake(packet => Object.assign(packet!, { id })); + .callsFake(packet => Object.assign(packet as object, { id })); }); afterEach(() => { connectSpy.restore(); diff --git a/packages/microservices/test/client/client-nats.spec.ts b/packages/microservices/test/client/client-nats.spec.ts index 1009544b23c..c818351fe36 100644 --- a/packages/microservices/test/client/client-nats.spec.ts +++ b/packages/microservices/test/client/client-nats.spec.ts @@ -88,7 +88,7 @@ describe('ClientNats', () => { callback = sinon.spy(); assignStub = sinon .stub(client, 'assignPacketId' as any) - .callsFake(packet => Object.assign(packet!, { id })); + .callsFake(packet => Object.assign(packet as object, { id })); subscription = client['publish'](msg, callback); subscription(); diff --git a/packages/microservices/test/client/client-redis.spec.ts b/packages/microservices/test/client/client-redis.spec.ts index b46a7dbc9af..149f8da9bec 100644 --- a/packages/microservices/test/client/client-redis.spec.ts +++ b/packages/microservices/test/client/client-redis.spec.ts @@ -93,7 +93,7 @@ describe('ClientRedis', () => { callback = sinon.spy(); assignStub = sinon .stub(client, 'assignPacketId' as any) - .callsFake(packet => Object.assign(packet!, { id })); + .callsFake(packet => Object.assign(packet as object, { id })); getReplyPatternStub = sinon .stub(client, 'getReplyPattern') diff --git a/packages/microservices/test/json-socket/connection.spec.ts b/packages/microservices/test/json-socket/connection.spec.ts index a482bd279c1..195788c84e0 100644 --- a/packages/microservices/test/json-socket/connection.spec.ts +++ b/packages/microservices/test/json-socket/connection.spec.ts @@ -176,16 +176,16 @@ describe('JsonSocket connection', () => { server.once('connection', socket => { const serverSocket = new JsonSocket(socket); - serverSocket!.once('end', () => { + serverSocket.once('end', () => { setTimeout(() => { - expect(serverSocket!['isClosed']).to.equal(true); - expect(clientSocket!['isClosed']).to.equal(true); + expect(serverSocket['isClosed']).to.equal(true); + expect(clientSocket['isClosed']).to.equal(true); - clientSocket!.on(TcpEventsMap.CONNECT, () => { + clientSocket.on(TcpEventsMap.CONNECT, () => { setTimeout(() => { - expect(clientSocket!['isClosed']).to.equal(false); + expect(clientSocket['isClosed']).to.equal(false); - clientSocket!.end(); + clientSocket.end(); server.close(done); }, 10); }); @@ -196,11 +196,11 @@ describe('JsonSocket connection', () => { } const port2 = (address2 as AddressInfo).port; - clientSocket!.connect(port2, ip); + clientSocket.connect(port2, ip); }, 10); }); - clientSocket!.end(); + clientSocket.end(); }); const address1 = server.address(); @@ -209,7 +209,7 @@ describe('JsonSocket connection', () => { } const port1 = (address1 as AddressInfo).port; - clientSocket!.connect(port1, ip); + clientSocket.connect(port1, ip); }); server.listen(); }); diff --git a/packages/microservices/test/server/server-kafka.spec.ts b/packages/microservices/test/server/server-kafka.spec.ts index a80489a9f25..f00082b3c88 100644 --- a/packages/microservices/test/server/server-kafka.spec.ts +++ b/packages/microservices/test/server/server-kafka.spec.ts @@ -393,9 +393,7 @@ describe('ServerKafka', () => { await server.handleMessage(payload); expect( getPublisherSpy.calledWith({ - id: payload.message!.headers![ - KafkaHeaders.CORRELATION_ID - ]!.toString(), + id: payload.message.headers![KafkaHeaders.CORRELATION_ID]!.toString(), err: NO_MESSAGE_HANDLER, }), ).to.be.true; @@ -455,7 +453,7 @@ describe('ServerKafka', () => { response: messageValue, }, replyTopic, - undefined!, + '', correlationId, ); diff --git a/packages/platform-express/adapters/express-adapter.ts b/packages/platform-express/adapters/express-adapter.ts index b56ed16f2b9..ec27a19542b 100644 --- a/packages/platform-express/adapters/express-adapter.ts +++ b/packages/platform-express/adapters/express-adapter.ts @@ -268,7 +268,7 @@ export class ExpressAdapter extends AbstractHttpAdapter< options?: Omit, ): this { const parserOptions = getBodyParserOptions(rawBody, options); - const parser = bodyparser[type](parserOptions!); + const parser = bodyparser[type](parserOptions); this.use(parser); diff --git a/packages/platform-fastify/adapters/fastify-adapter.ts b/packages/platform-fastify/adapters/fastify-adapter.ts index 7562cfc3d56..c832397368d 100644 --- a/packages/platform-fastify/adapters/fastify-adapter.ts +++ b/packages/platform-fastify/adapters/fastify-adapter.ts @@ -428,7 +428,7 @@ export class FastifyAdapter< response.statusCode = statusCode; return response; } - return (response as TReply).code(statusCode); + return (response as { code: Function }).code(statusCode); } public end(response: TReply, message?: string) { diff --git a/packages/websockets/errors/ws-exception.ts b/packages/websockets/errors/ws-exception.ts index b20f6499144..f6eddd845de 100644 --- a/packages/websockets/errors/ws-exception.ts +++ b/packages/websockets/errors/ws-exception.ts @@ -15,8 +15,9 @@ export class WsException extends Error { ) { this.message = (this.error as Record).message; } else if (this.constructor) { - this.message = - this.constructor!.name!.match(/[A-Z][a-z]+|[0-9]+/g)!.join(' '); + this.message = this.constructor.name + .match(/[A-Z][a-z]+|[0-9]+/g)! + .join(' '); } } From e8bc2580e7c2d5227b63633234b5e9c0069ee396 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 26 Nov 2024 14:56:42 +0100 Subject: [PATCH 092/122] chore: minore fixes --- packages/core/router/router-execution-context.ts | 2 +- packages/microservices/server/server-kafka.ts | 4 ++-- packages/microservices/test/server/server-kafka.spec.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/core/router/router-execution-context.ts b/packages/core/router/router-execution-context.ts index d1b2610412c..d1e98383402 100644 --- a/packages/core/router/router-execution-context.ts +++ b/packages/core/router/router-execution-context.ts @@ -447,7 +447,7 @@ export class RouterExecutionContext { result, (res as any).raw || res, (req as any).raw || req, - { additionalHeaders: res.getHeaders!() }, + { additionalHeaders: res.getHeaders?.() as any }, ); }; } diff --git a/packages/microservices/server/server-kafka.ts b/packages/microservices/server/server-kafka.ts index ba6ef9052cb..4b7b50b7f77 100644 --- a/packages/microservices/server/server-kafka.ts +++ b/packages/microservices/server/server-kafka.ts @@ -286,7 +286,7 @@ export class ServerKafka extends Server { public async sendMessage( message: OutgoingResponse, replyTopic: string, - replyPartition: string, + replyPartition: string | undefined | null, correlationId: string, ): Promise { const outgoingMessage = await this.serializer.serialize(message.response); @@ -339,7 +339,7 @@ export class ServerKafka extends Server { } public assignReplyPartition( - replyPartition: string, + replyPartition: string | null | undefined, outgoingMessage: Message, ) { if (isNil(replyPartition)) { diff --git a/packages/microservices/test/server/server-kafka.spec.ts b/packages/microservices/test/server/server-kafka.spec.ts index f00082b3c88..5878e33be95 100644 --- a/packages/microservices/test/server/server-kafka.spec.ts +++ b/packages/microservices/test/server/server-kafka.spec.ts @@ -453,7 +453,7 @@ describe('ServerKafka', () => { response: messageValue, }, replyTopic, - '', + undefined, correlationId, ); From 2e0de4a9e16893f42b18df9b3d0d2704334c216f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 26 Nov 2024 15:06:21 +0100 Subject: [PATCH 093/122] ci: update node versions matrix --- .circleci/config.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ae3a765f05d..c11009190e1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -6,16 +6,16 @@ parameters: default: false legacy-node-version: type: string - default: '14.21.3' + default: '18.20' maintenance-node-version: type: string - default: '16.20' + default: '20.5' active-node-version: type: string - default: '18.17' + default: '22.11' current-node-version: type: string - default: '20.5' + default: '23.3' aliases: - &restore-cache @@ -121,7 +121,7 @@ jobs: lint: working_directory: ~/nest docker: - - image: cimg/node:<< pipeline.parameters.maintenance-node-version >> + - image: cimg/node:<< pipeline.parameters.current-node-version >> steps: - checkout - *restore-cache From 7e774b12a55b3d0c621fb9aa9001d6eb2f8f5fb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 26 Nov 2024 15:12:49 +0100 Subject: [PATCH 094/122] ci: use active node version for lint --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index c11009190e1..283dc87cbff 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -121,7 +121,7 @@ jobs: lint: working_directory: ~/nest docker: - - image: cimg/node:<< pipeline.parameters.current-node-version >> + - image: cimg/node:<< pipeline.parameters.active-node-version >> steps: - checkout - *restore-cache From 93150409b9b6768632068df764f8c13ef713ce39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 26 Nov 2024 15:22:51 +0100 Subject: [PATCH 095/122] test: error messages for node above v20 (json socket) --- .../test/json-socket/message-parsing.spec.ts | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/microservices/test/json-socket/message-parsing.spec.ts b/packages/microservices/test/json-socket/message-parsing.spec.ts index 6b08e03c62b..e42fa42a57b 100644 --- a/packages/microservices/test/json-socket/message-parsing.spec.ts +++ b/packages/microservices/test/json-socket/message-parsing.spec.ts @@ -109,7 +109,7 @@ describe('JsonSocket message parsing', () => { describe('Error handling', () => { describe('JSON Error', () => { - const errorMsgNodeBelowV20 = `Could not parse JSON: Unexpected end of JSON input\nRequest data: "Hel`; + const errorMsgNodeAboveV20 = `Could not parse JSON: Unterminated string in JSON at position 4 (line 1 column 5)\nRequest data: "Hel`; const errorMsg = `Could not parse JSON: Unterminated string in JSON at position 4\nRequest data: "Hel`; const packetString = '4#"Hel'; const packet = Buffer.from(packetString); @@ -118,7 +118,7 @@ describe('JsonSocket message parsing', () => { try { socket['handleData']('4#"Hel'); } catch (err) { - expect([errorMsgNodeBelowV20, errorMsg]).to.include(err.message); + expect([errorMsgNodeAboveV20, errorMsg]).to.include(err.message); } expect(messages.length).to.deep.equal(0); expect(socket['buffer']).to.deep.equal(''); @@ -138,13 +138,14 @@ describe('JsonSocket message parsing', () => { ).to.be.true; } catch (err) { expect( - socketEmitSpy.calledOnceWithExactly( + socketEmitSpy.calledWithExactly( TcpEventsMap.ERROR, - errorMsgNodeBelowV20, + errorMsgNodeAboveV20, ), ).to.be.true; + } finally { + socketEmitSpy.restore(); } - socketEmitSpy.restore(); }); it(`should send a FIN packet`, () => { @@ -180,10 +181,15 @@ describe('JsonSocket message parsing', () => { socket['onData'](packet); - expect( - socketEmitSpy.calledOnceWithExactly(TcpEventsMap.ERROR, errorMsg), - ).to.be.true; - socketEmitSpy.restore(); + try { + expect( + socketEmitSpy.calledOnceWithExactly(TcpEventsMap.ERROR, errorMsg), + ).to.be.true; + } catch { + // Do nothing + } finally { + socketEmitSpy.restore(); + } }); it(`should send a FIN packet`, () => { From f94ef9044f8bb4b02d0b634a14040541c19b6701 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Wed, 27 Nov 2024 08:37:58 +0100 Subject: [PATCH 096/122] test: ignore floating request promises (done cb) --- integration/microservices/e2e/sum-kafka.spec.ts | 2 +- integration/microservices/e2e/sum-mqtt.spec.ts | 10 +++++----- integration/microservices/e2e/sum-nats.spec.ts | 2 +- integration/microservices/e2e/sum-redis.spec.ts | 2 +- integration/microservices/e2e/sum-rmq.spec.ts | 2 +- integration/microservices/e2e/sum-rpc-tls.spec.ts | 2 +- integration/microservices/e2e/sum-rpc.spec.ts | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/integration/microservices/e2e/sum-kafka.spec.ts b/integration/microservices/e2e/sum-kafka.spec.ts index 4ae28b67440..945210f87e8 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 => { - return request(server) + void 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 b69c3c63116..d1a457bcd41 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 => { - return request(server) + void request(server) .post('/notify') .send([1, 2, 3, 4, 5]) .end(() => { @@ -87,7 +87,7 @@ describe('MQTT transport', () => { }); it(`/POST (wildcard EVENT #)`, done => { - return request(server) + void request(server) .post('/wildcard-event') .send([1, 2, 3, 4, 5]) .end(() => { @@ -106,7 +106,7 @@ describe('MQTT transport', () => { }); it(`/POST (wildcard EVENT +)`, done => { - return request(server) + void 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 => { - return request(server) + void 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 => { - return request(server) + void 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 32e80e07d8a..99c8548edf1 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 => { - return request(server) + void 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 197aead4ca1..246c2e2709d 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 => { - return request(server) + void 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 9a389b94308..02ffa1db83c 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 => { - return request(server) + void 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 eb097f9b4eb..91c31626d00 100644 --- a/integration/microservices/e2e/sum-rpc-tls.spec.ts +++ b/integration/microservices/e2e/sum-rpc-tls.spec.ts @@ -109,7 +109,7 @@ describe('RPC TLS transport', () => { }); it(`/POST (event notification)`, done => { - return request(server) + void 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 e776f0be125..8e98fdceb4f 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 => { - return request(server) + void request(server) .post('/notify') .send([1, 2, 3, 4, 5]) .end(() => { From ab79649b91fc6b01e7b1c713cb2cf5a03a4e6e40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Wed, 27 Nov 2024 08:38:14 +0100 Subject: [PATCH 097/122] ci: run lint sequentially in ci --- .circleci/config.yml | 2 +- package.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 283dc87cbff..11cf2bf3ca2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -128,7 +128,7 @@ jobs: - *install-deps - run: name: Lint - command: npm run lint + command: npm run lint:ci integration_tests: working_directory: ~/nest diff --git a/package.json b/package.json index 70ef05554cc..f1f05a6377b 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "lint:integration": "eslint 'integration/*/{,!(node_modules)/**/}/*.ts'", "lint:packages": "eslint 'packages/**/**.ts' --ignore-pattern 'packages/**/*.spec.ts'", "lint:spec": "eslint 'packages/**/**.spec.ts'", + "lint:ci": "npm run lint:packages && npm run lint:integration && npm run lint:spec", "prerelease": "gulp copy-misc", "publish": "npm run prerelease && npm run build:prod && ./node_modules/.bin/lerna publish --force-publish --access public --exact -m \"chore(@nestjs) publish %s release\"", "prepublishOnly": "npm run changelog | pbcopy", From 4895e3bac1eff9e2da9c9c0d9ebd95af682aa0db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Wed, 27 Nov 2024 08:49:25 +0100 Subject: [PATCH 098/122] ci: increase max old space size for lint scripts --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index f1f05a6377b..2258f5b98be 100644 --- a/package.json +++ b/package.json @@ -37,9 +37,9 @@ "test:docker:down": "docker-compose -f integration/docker-compose.yml down", "lint": "concurrently 'npm run lint:packages' 'npm run lint:integration' 'npm run lint:spec'", "lint:fix": "concurrently 'npm run lint:packages -- --fix' 'npm run lint:integration -- --fix' 'npm run lint:spec -- --fix'", - "lint:integration": "eslint 'integration/*/{,!(node_modules)/**/}/*.ts'", - "lint:packages": "eslint 'packages/**/**.ts' --ignore-pattern 'packages/**/*.spec.ts'", - "lint:spec": "eslint 'packages/**/**.spec.ts'", + "lint:integration": "node --max-old-space-size=4096 ./node_modules/.bin/eslint 'integration/*/{,!(node_modules)/**/}/*.ts'", + "lint:packages": "node --max-old-space-size=4096 ./node_modules/.bin/eslint 'packages/**/**.ts' --ignore-pattern 'packages/**/*.spec.ts'", + "lint:spec": "node --max-old-space-size=4096 ./node_modules/.bin/eslint 'packages/**/**.spec.ts'", "lint:ci": "npm run lint:packages && npm run lint:integration && npm run lint:spec", "prerelease": "gulp copy-misc", "publish": "npm run prerelease && npm run build:prod && ./node_modules/.bin/lerna publish --force-publish --access public --exact -m \"chore(@nestjs) publish %s release\"", From a41781ac14eea27dbeb71050e88822c77c6613a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Wed, 27 Nov 2024 09:06:43 +0100 Subject: [PATCH 099/122] ci: update lint integration script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2258f5b98be..72b75c5b46e 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "test:docker:down": "docker-compose -f integration/docker-compose.yml down", "lint": "concurrently 'npm run lint:packages' 'npm run lint:integration' 'npm run lint:spec'", "lint:fix": "concurrently 'npm run lint:packages -- --fix' 'npm run lint:integration -- --fix' 'npm run lint:spec -- --fix'", - "lint:integration": "node --max-old-space-size=4096 ./node_modules/.bin/eslint 'integration/*/{,!(node_modules)/**/}/*.ts'", + "lint:integration": "node --max-old-space-size=4096 ./node_modules/.bin/eslint 'integration/**/*.ts'", "lint:packages": "node --max-old-space-size=4096 ./node_modules/.bin/eslint 'packages/**/**.ts' --ignore-pattern 'packages/**/*.spec.ts'", "lint:spec": "node --max-old-space-size=4096 ./node_modules/.bin/eslint 'packages/**/**.spec.ts'", "lint:ci": "npm run lint:packages && npm run lint:integration && npm run lint:spec", From 356469bfcc85c77fa42d4941ab66dcd7370593e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Wed, 27 Nov 2024 09:29:39 +0100 Subject: [PATCH 100/122] ci: run spec and packages lint in parallel --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 72b75c5b46e..164df1efad5 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "lint:integration": "node --max-old-space-size=4096 ./node_modules/.bin/eslint 'integration/**/*.ts'", "lint:packages": "node --max-old-space-size=4096 ./node_modules/.bin/eslint 'packages/**/**.ts' --ignore-pattern 'packages/**/*.spec.ts'", "lint:spec": "node --max-old-space-size=4096 ./node_modules/.bin/eslint 'packages/**/**.spec.ts'", - "lint:ci": "npm run lint:packages && npm run lint:integration && npm run lint:spec", + "lint:ci": "concurrently 'npm run lint:packages' 'npm run lint:spec'", "prerelease": "gulp copy-misc", "publish": "npm run prerelease && npm run build:prod && ./node_modules/.bin/lerna publish --force-publish --access public --exact -m \"chore(@nestjs) publish %s release\"", "prepublishOnly": "npm run changelog | pbcopy", From 11f8a4a216b157cabdf6ee0c4e19b24d381ff77c Mon Sep 17 00:00:00 2001 From: mag123c Date: Wed, 27 Nov 2024 16:30:24 +0900 Subject: [PATCH 101/122] feat(common): add error messages for file validators --- packages/common/pipes/file/file-type.validator.ts | 5 ++++- .../common/pipes/file/max-file-size.validator.ts | 5 ++++- .../test/pipes/file/file-type.validator.spec.ts | 14 ++++++++++++++ .../pipes/file/max-file-size.validator.spec.ts | 13 +++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/packages/common/pipes/file/file-type.validator.ts b/packages/common/pipes/file/file-type.validator.ts index e18ae156075..a47f134e92c 100644 --- a/packages/common/pipes/file/file-type.validator.ts +++ b/packages/common/pipes/file/file-type.validator.ts @@ -20,7 +20,10 @@ export class FileTypeValidator extends FileValidator< FileTypeValidatorOptions, IFile > { - buildErrorMessage(): string { + buildErrorMessage(file?: IFile): string { + if (file?.mimetype) { + return `Validation failed (current file type is ${file.mimetype}, expected type is ${this.validationOptions.fileType})`; + } return `Validation failed (expected type is ${this.validationOptions.fileType})`; } diff --git a/packages/common/pipes/file/max-file-size.validator.ts b/packages/common/pipes/file/max-file-size.validator.ts index 024bc532411..c8307de1dc6 100644 --- a/packages/common/pipes/file/max-file-size.validator.ts +++ b/packages/common/pipes/file/max-file-size.validator.ts @@ -17,7 +17,7 @@ export class MaxFileSizeValidator extends FileValidator< MaxFileSizeValidatorOptions, IFile > { - buildErrorMessage(): string { + buildErrorMessage(file?: IFile): string { if ('message' in this.validationOptions) { if (typeof this.validationOptions.message === 'function') { return this.validationOptions.message(this.validationOptions.maxSize); @@ -26,6 +26,9 @@ export class MaxFileSizeValidator extends FileValidator< return this.validationOptions.message!; } + if (file?.size) { + return `Validation failed (current file size is ${file.size}, expected size is less than ${this.validationOptions.maxSize})`; + } return `Validation failed (expected size is less than ${this.validationOptions.maxSize})`; } diff --git a/packages/common/test/pipes/file/file-type.validator.spec.ts b/packages/common/test/pipes/file/file-type.validator.spec.ts index 0daf2b5d27d..8ac3e971ae9 100644 --- a/packages/common/test/pipes/file/file-type.validator.spec.ts +++ b/packages/common/test/pipes/file/file-type.validator.spec.ts @@ -93,5 +93,19 @@ describe('FileTypeValidator', () => { `Validation failed (expected type is ${fileType})`, ); }); + + it('should include the file type in the error message when a file is provided', () => { + const currentFileType = 'image/png'; + const fileType = 'image/jpeg'; + const fileTypeValidator = new FileTypeValidator({ + fileType, + }); + + const file = { mimetype: currentFileType } as any; + + expect(fileTypeValidator.buildErrorMessage(file)).to.equal( + `Validation failed (current file type is ${currentFileType}, expected type is ${fileType})`, + ); + }); }); }); diff --git a/packages/common/test/pipes/file/max-file-size.validator.spec.ts b/packages/common/test/pipes/file/max-file-size.validator.spec.ts index 8bc6c2ea1bf..a98f377aece 100644 --- a/packages/common/test/pipes/file/max-file-size.validator.spec.ts +++ b/packages/common/test/pipes/file/max-file-size.validator.spec.ts @@ -60,5 +60,18 @@ describe('MaxFileSizeValidator', () => { `Validation failed (expected size is less than ${oneKb})`, ); }); + + it('should include the file size in the error message when a file is provided', () => { + const currentFileSize = oneKb + 1; + const maxFileSizeValidator = new MaxFileSizeValidator({ + maxSize: oneKb, + }); + + const file = { size: currentFileSize } as any; + + expect(maxFileSizeValidator.buildErrorMessage(file)).to.equal( + `Validation failed (current file size is ${currentFileSize}, expected size is less than ${oneKb})`, + ); + }); }); }); From e2893f951c7086ea9fbe0c0d74f3182f0f4f1487 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Wed, 27 Nov 2024 10:06:07 +0100 Subject: [PATCH 102/122] chore: add non null assertions --- packages/core/injector/instance-wrapper.ts | 2 +- packages/core/middleware/middleware-module.ts | 2 +- packages/platform-socket.io/adapters/io-adapter.ts | 2 +- packages/websockets/socket-module.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/core/injector/instance-wrapper.ts b/packages/core/injector/instance-wrapper.ts index 17d09a20169..7e55d10ef59 100644 --- a/packages/core/injector/instance-wrapper.ts +++ b/packages/core/injector/instance-wrapper.ts @@ -176,7 +176,7 @@ export class InstanceWrapper { } public removeInstanceByInquirerId(contextId: ContextId, inquirerId: string) { - const collection = this.transientMap.get(inquirerId); + const collection = this.transientMap!.get(inquirerId); if (!collection) { return; } diff --git a/packages/core/middleware/middleware-module.ts b/packages/core/middleware/middleware-module.ts index 064747c7981..15e41c49b89 100644 --- a/packages/core/middleware/middleware-module.ts +++ b/packages/core/middleware/middleware-module.ts @@ -349,7 +349,7 @@ export class MiddlewareModule< const requestProviderValue = isTreeDurable ? contextId.payload - : Object.assign(request, contextId.payload); + : Object.assign(request!, contextId.payload); this.container.registerRequestProvider(requestProviderValue, contextId); } return contextId; diff --git a/packages/platform-socket.io/adapters/io-adapter.ts b/packages/platform-socket.io/adapters/io-adapter.ts index 3241398fd94..ab08fde131a 100644 --- a/packages/platform-socket.io/adapters/io-adapter.ts +++ b/packages/platform-socket.io/adapters/io-adapter.ts @@ -83,7 +83,7 @@ export class IoAdapter extends AbstractWsAdapter { return { data: payload }; } - public close(server: Server) { + public async close(server: Server): Promise { if (this.forceCloseConnections && server.httpServer === this.httpServer) { return; } diff --git a/packages/websockets/socket-module.ts b/packages/websockets/socket-module.ts index f72b3498059..e4bd7dece32 100644 --- a/packages/websockets/socket-module.ts +++ b/packages/websockets/socket-module.ts @@ -119,7 +119,7 @@ export class SocketModule< const adapter = this.applicationConfig.getIoAdapter(); if (adapter) { (adapter as AbstractWsAdapter).forceCloseConnections = - forceCloseConnections; + forceCloseConnections!; this.isAdapterInitialized = true; return; } From 74789282d1dda112571628fe5b87c453553c940f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Wed, 27 Nov 2024 10:06:57 +0100 Subject: [PATCH 103/122] chore: update minimum node version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b7e87b23312..481f24fb461 100644 --- a/package.json +++ b/package.json @@ -179,7 +179,7 @@ "ws": "8.18.0" }, "engines": { - "node": ">= 16" + "node": ">= 20" }, "collective": { "type": "opencollective", From 74e318c930f9f33451b15715df1f729fd19a978e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Wed, 27 Nov 2024 10:23:47 +0100 Subject: [PATCH 104/122] test: add not null assertion --- packages/microservices/test/client/client-kafka.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/microservices/test/client/client-kafka.spec.ts b/packages/microservices/test/client/client-kafka.spec.ts index b47efb95b87..773a9859027 100644 --- a/packages/microservices/test/client/client-kafka.spec.ts +++ b/packages/microservices/test/client/client-kafka.spec.ts @@ -1,4 +1,6 @@ import { expect } from 'chai'; +import { Producer } from 'kafkajs'; +import { Observable } from 'rxjs'; import * as sinon from 'sinon'; import { ClientKafka } from '../../client/client-kafka'; import { NO_MESSAGE_HANDLER } from '../../constants'; @@ -9,8 +11,6 @@ import { EachMessagePayload, KafkaMessage, } from '../../external/kafka.interface'; -import { Observable } from 'rxjs'; -import { Producer } from 'kafkajs'; describe('ClientKafka', () => { const topic = 'test.topic'; @@ -638,7 +638,7 @@ describe('ClientKafka', () => { }); it('should return Observable with error', () => { - const err$ = client.emitBatch(null, null); + const err$ = client.emitBatch(null, null!); expect(err$).to.be.instanceOf(Observable); }); }); From cf17e4d5217f7a1fc39377c38669bcd4f92d29e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Wed, 27 Nov 2024 11:04:51 +0100 Subject: [PATCH 105/122] chore: mqtt updates, integration test improvements --- integration/docker-compose.yml | 1 + .../e2e/disconnected-client.spec.ts | 3 ++- .../src/disconnected.controller.ts | 5 ++++- packages/microservices/client/client-mqtt.ts | 18 +++++++++++------- packages/microservices/constants.ts | 1 + 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/integration/docker-compose.yml b/integration/docker-compose.yml index 6e4b6718f25..e328060e621 100644 --- a/integration/docker-compose.yml +++ b/integration/docker-compose.yml @@ -27,6 +27,7 @@ services: mysql: image: mysql:8.3.0 environment: + MYSQL_ROOT_HOST: '%' MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: test ports: diff --git a/integration/microservices/e2e/disconnected-client.spec.ts b/integration/microservices/e2e/disconnected-client.spec.ts index 35b65dfb6b3..706c2e05918 100644 --- a/integration/microservices/e2e/disconnected-client.spec.ts +++ b/integration/microservices/e2e/disconnected-client.spec.ts @@ -2,10 +2,11 @@ import { INestApplication } from '@nestjs/common'; import { Transport } from '@nestjs/microservices'; import { Test } from '@nestjs/testing'; import * as request from 'supertest'; +import { App } from 'supertest/types'; import { DisconnectedClientController } from '../src/disconnected.controller'; describe('Disconnected client', () => { - let server; + let server: App; let app: INestApplication; beforeEach(async () => { diff --git a/integration/microservices/src/disconnected.controller.ts b/integration/microservices/src/disconnected.controller.ts index db38fab77aa..fed84ce6f55 100644 --- a/integration/microservices/src/disconnected.controller.ts +++ b/integration/microservices/src/disconnected.controller.ts @@ -7,7 +7,7 @@ import { } from '@nestjs/common'; import { ClientProxyFactory } from '@nestjs/microservices'; import { Observable, throwError } from 'rxjs'; -import { catchError } from 'rxjs/operators'; +import { catchError, tap } from 'rxjs/operators'; @Controller() export class DisconnectedClientController { @@ -31,6 +31,9 @@ export class DisconnectedClientController { : new InternalServerErrorException(), ); }), + tap({ + error: () => client.close(), + }), ); } } diff --git a/packages/microservices/client/client-mqtt.ts b/packages/microservices/client/client-mqtt.ts index 9a18ead2731..6d3a49a74ed 100644 --- a/packages/microservices/client/client-mqtt.ts +++ b/packages/microservices/client/client-mqtt.ts @@ -2,7 +2,7 @@ import { Logger } from '@nestjs/common/services/logger.service'; import { loadPackage } from '@nestjs/common/utils/load-package.util'; import { EmptyError, fromEvent, lastValueFrom, merge, Observable } from 'rxjs'; import { first, map, share, tap } from 'rxjs/operators'; -import { ECONNREFUSED, MQTT_DEFAULT_URL } from '../constants'; +import { ECONNREFUSED, ENOTFOUND, MQTT_DEFAULT_URL } from '../constants'; import { MqttEvents, MqttEventsMap, MqttStatus } from '../events/mqtt.events'; import { MqttOptions, ReadPacket, WritePacket } from '../interfaces'; import { @@ -55,8 +55,10 @@ export class ClientMqtt extends ClientProxy { return `${pattern}/reply`; } - public close() { - this.mqttClient && this.mqttClient.end(); + public async close() { + if (this.mqttClient) { + await this.mqttClient.endAsync(); + } this.mqttClient = null; this.connectionPromise = null; this.pendingEventListeners = []; @@ -113,10 +115,12 @@ export class ClientMqtt extends ClientProxy { } public registerErrorListener(client: MqttClient) { - client.on( - MqttEventsMap.ERROR, - (err: any) => err.code !== ECONNREFUSED && this.logger.error(err), - ); + client.on(MqttEventsMap.ERROR, (err: any) => { + if (err.code === ECONNREFUSED || err.code === ENOTFOUND) { + return; + } + this.logger.error(err); + }); } public registerOfflineListener(client: MqttClient) { diff --git a/packages/microservices/constants.ts b/packages/microservices/constants.ts index 610f98adeb4..8344cf1c238 100644 --- a/packages/microservices/constants.ts +++ b/packages/microservices/constants.ts @@ -25,6 +25,7 @@ export const RQM_DEFAULT_NO_ASSERT = false; export const ECONNREFUSED = 'ECONNREFUSED'; export const CONN_ERR = 'CONN_ERR'; export const EADDRINUSE = 'EADDRINUSE'; +export const ENOTFOUND = 'ENOTFOUND'; export const PATTERN_METADATA = 'microservices:pattern'; export const PATTERN_EXTRAS_METADATA = 'microservices:pattern_extras'; From ca70f0754cc98548967f872d8856ab5bcea8efa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Wed, 27 Nov 2024 11:05:18 +0100 Subject: [PATCH 106/122] chore(deps): update package.json --- package-lock.json | 634 ++++++++++++++++++++++--- package.json | 4 +- packages/platform-express/package.json | 2 +- 3 files changed, 560 insertions(+), 80 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8cdf4dc2e35..d23ced4d28f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "class-transformer": "0.5.1", "class-validator": "0.14.1", "cors": "2.8.5", - "express": "4.21.1", + "express": "5.0.1", "fast-json-stringify": "6.0.0", "fast-safe-stringify": "2.1.1", "iterare": "1.2.1", @@ -53,7 +53,7 @@ "@types/chai-as-promised": "7.1.8", "@types/cors": "2.8.17", "@types/eslint__js": "8.42.3", - "@types/express": "4.17.21", + "@types/express": "5.0.0", "@types/gulp": "4.0.17", "@types/http-errors": "2.0.4", "@types/mocha": "10.0.10", @@ -130,7 +130,7 @@ "ws": "8.18.0" }, "engines": { - "node": ">= 16" + "node": ">= 20" }, "funding": { "type": "opencollective", @@ -397,6 +397,183 @@ "@apollo/server": "^4.0.0" } }, + "node_modules/@apollo/server/node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@apollo/server/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@apollo/server/node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@apollo/server/node_modules/express": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/@apollo/server/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@apollo/server/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@apollo/server/node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@apollo/server/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/@apollo/server/node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@apollo/server/node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@apollo/server/node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@apollo/server/node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/@apollo/server/node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", @@ -8270,13 +8447,14 @@ "dev": true }, "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz", + "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", + "@types/express-serve-static-core": "^5.0.0", "@types/qs": "*", "@types/serve-static": "*" } @@ -8293,6 +8471,19 @@ "@types/send": "*" } }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.2.tgz", + "integrity": "sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, "node_modules/@types/glob-stream": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-8.0.2.tgz", @@ -9612,9 +9803,10 @@ } }, "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", + "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==", + "license": "MIT" }, "node_modules/array-ify": { "version": "1.0.0", @@ -10930,6 +11122,7 @@ "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -12529,6 +12722,7 @@ "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, "dependencies": { "safe-buffer": "5.2.1" }, @@ -13941,7 +14135,8 @@ "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true }, "node_modules/cookiejar": { "version": "2.1.4", @@ -15255,6 +15450,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -16467,6 +16663,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -16657,44 +16854,135 @@ "dev": true }, "node_modules/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.0.1.tgz", + "integrity": "sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==", + "license": "MIT", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", + "accepts": "^2.0.0", + "body-parser": "^2.0.1", + "content-disposition": "^1.0.0", "content-type": "~1.0.4", "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", + "cookie-signature": "^1.2.1", + "debug": "4.3.6", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", + "finalhandler": "^2.0.0", + "fresh": "2.0.0", "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", + "merge-descriptors": "^2.0.0", "methods": "~1.1.2", + "mime-types": "^3.0.0", "on-finished": "2.4.1", + "once": "1.4.0", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", + "router": "^2.0.0", "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", + "send": "^1.1.0", + "serve-static": "^2.1.0", "setprototypeof": "1.2.0", "statuses": "2.0.1", - "type-is": "~1.6.18", + "type-is": "^2.0.0", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 18" + } + }, + "node_modules/express/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/body-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.0.2.tgz", + "integrity": "sha512-SNMk0OONlQ01uk8EPeiBvTW7W4ovpL5b1O3t1sjpPgfxOQ6BqQJ6XjxinDPR79Z6HdcD5zBBwr5ssiTlgdNztQ==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "3.1.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.5.2", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "^3.0.0", + "type-is": "~1.6.18" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/express/node_modules/body-parser/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/body-parser/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/body-parser/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/body-parser/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/express/node_modules/cookie": { @@ -16705,10 +16993,129 @@ "node": ">= 0.6" } }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + "node_modules/express/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/express/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/express/node_modules/iconv-lite": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", + "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/express/node_modules/mime-db": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", + "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/mime-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.0.tgz", + "integrity": "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.53.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/express/node_modules/type-is": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.0.tgz", + "integrity": "sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/type-is/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, "node_modules/ext": { "version": "1.7.0", @@ -17199,12 +17606,13 @@ "dev": true }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.0.0.tgz", + "integrity": "sha512-MX6Zo2adDViYh+GcxxB1dpO43eypOGUOL12rLCOTMQv/DfIbpSJUy4oQIIZhVZkH9e+bZWKMon0XHFEju16tkQ==", + "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~2.0.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -17215,6 +17623,15 @@ "node": ">= 0.8" } }, + "node_modules/finalhandler/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", @@ -17673,11 +18090,12 @@ } }, "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/from": { @@ -21072,6 +21490,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -25863,9 +26282,13 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -25910,6 +26333,8 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -28384,7 +28809,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -28988,6 +29412,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -29966,6 +30391,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -29974,6 +30400,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -31108,6 +31535,39 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/router": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.0.0.tgz", + "integrity": "sha512-dIM5zVoG8xhC6rnSN8uoAgFARwTE7BQs8YwHEvK0VCmfxQXMaOuA1uiR1IPwsW7JyK5iTt7Od/TC9StasS2NPQ==", + "license": "MIT", + "dependencies": { + "array-flatten": "3.0.0", + "is-promise": "4.0.0", + "methods": "~1.1.2", + "parseurl": "~1.3.3", + "path-to-regexp": "^8.0.0", + "setprototypeof": "1.2.0", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/router/node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/router/node_modules/path-to-regexp": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -31343,40 +31803,59 @@ } }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.1.0.tgz", + "integrity": "sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==", + "license": "MIT", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "debug": "^4.3.5", + "destroy": "^1.2.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "http-errors": "^2.0.0", + "mime-types": "^2.1.35", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" } }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/send/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": ">= 0.8" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/send/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, "node_modules/send/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==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/seq-queue": { "version": "0.0.5", @@ -31394,17 +31873,18 @@ } }, "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.1.0.tgz", + "integrity": "sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==", + "license": "MIT", "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" } }, "node_modules/set-blocking": { @@ -34318,6 +34798,7 @@ "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -35619,8 +36100,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "2.4.3", diff --git a/package.json b/package.json index 481f24fb461..b2b0b281ba5 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "class-transformer": "0.5.1", "class-validator": "0.14.1", "cors": "2.8.5", - "express": "4.21.1", + "express": "5.0.1", "fast-json-stringify": "6.0.0", "fast-safe-stringify": "2.1.1", "iterare": "1.2.1", @@ -102,7 +102,7 @@ "@types/chai-as-promised": "7.1.8", "@types/cors": "2.8.17", "@types/eslint__js": "8.42.3", - "@types/express": "4.17.21", + "@types/express": "5.0.0", "@types/gulp": "4.0.17", "@types/http-errors": "2.0.4", "@types/mocha": "10.0.10", diff --git a/packages/platform-express/package.json b/packages/platform-express/package.json index 3e832130f9d..5291574b919 100644 --- a/packages/platform-express/package.json +++ b/packages/platform-express/package.json @@ -20,7 +20,7 @@ "dependencies": { "body-parser": "1.20.3", "cors": "2.8.5", - "express": "4.21.1", + "express": "5.0.1", "multer": "1.4.4-lts.1", "tslib": "2.7.0" }, From ca76e698f45701cfa604576d83103e736f025ce8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Wed, 27 Nov 2024 12:18:27 +0100 Subject: [PATCH 107/122] test(microservices): fix client mqtt unit test (use endasync) --- .../microservices/test/client/client-mqtt.spec.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/microservices/test/client/client-mqtt.spec.ts b/packages/microservices/test/client/client-mqtt.spec.ts index 56a3b5e5e76..35845b66855 100644 --- a/packages/microservices/test/client/client-mqtt.spec.ts +++ b/packages/microservices/test/client/client-mqtt.spec.ts @@ -32,7 +32,7 @@ describe('ClientMqtt', () => { unsubscribeSpy: sinon.SinonSpy, connectSpy: sinon.SinonStub, assignStub: sinon.SinonStub, - mqttClient; + mqttClient: any; const id = '1'; beforeEach(() => { @@ -234,15 +234,15 @@ describe('ClientMqtt', () => { let endSpy: sinon.SinonSpy; beforeEach(() => { endSpy = sinon.spy(); - untypedClient.mqttClient = { end: endSpy }; + untypedClient.mqttClient = { endAsync: endSpy }; }); - it('should close "pub" when it is not null', () => { - client.close(); + it('should close "pub" when it is not null', async () => { + await client.close(); expect(endSpy.called).to.be.true; }); - it('should not close "pub" when it is null', () => { + it('should not close "pub" when it is null', async () => { untypedClient.mqttClient = null; - client.close(); + await client.close(); expect(endSpy.called).to.be.false; }); }); From 6e0f891f48d5eb0f86e3d299e68d02f9982b6dc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Wed, 27 Nov 2024 12:18:43 +0100 Subject: [PATCH 108/122] style: address lint errors and warnings --- integration/websockets/e2e/gateway.spec.ts | 6 +++--- packages/core/middleware/middleware-module.ts | 2 +- packages/core/nest-application-context.ts | 1 + packages/core/test/nest-application-context.spec.ts | 6 +++--- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/integration/websockets/e2e/gateway.spec.ts b/integration/websockets/e2e/gateway.spec.ts index 8b7e71faea6..8b46a22ac64 100644 --- a/integration/websockets/e2e/gateway.spec.ts +++ b/integration/websockets/e2e/gateway.spec.ts @@ -103,9 +103,9 @@ describe('WebSocketGateway', () => { describe('shared server for WS and Long-Running connections', () => { afterEach(() => {}); it('should block application shutdown', function (done) { - let eventSource; + let eventSource: EventSource; - (async () => { + void (async () => { this.timeout(30000); setTimeout(() => { @@ -136,7 +136,7 @@ describe('WebSocketGateway', () => { eventSource.onerror = reject; }); - app.close(); + await app.close(); })(); }); diff --git a/packages/core/middleware/middleware-module.ts b/packages/core/middleware/middleware-module.ts index 15e41c49b89..4f7a8796e7a 100644 --- a/packages/core/middleware/middleware-module.ts +++ b/packages/core/middleware/middleware-module.ts @@ -349,7 +349,7 @@ export class MiddlewareModule< const requestProviderValue = isTreeDurable ? contextId.payload - : Object.assign(request!, contextId.payload); + : Object.assign(request as object, contextId.payload); this.container.registerRequestProvider(requestProviderValue, contextId); } return contextId; diff --git a/packages/core/nest-application-context.ts b/packages/core/nest-application-context.ts index 5d3d897bf64..b3ba11fefd8 100644 --- a/packages/core/nest-application-context.ts +++ b/packages/core/nest-application-context.ts @@ -253,6 +253,7 @@ export class NestApplicationContext< if (this.isInitialized) { return this; } + /* eslint-disable-next-line no-async-promise-executor */ this.initializationPromise = new Promise(async (resolve, reject) => { try { await this.callInitHook(); diff --git a/packages/core/test/nest-application-context.spec.ts b/packages/core/test/nest-application-context.spec.ts index a712b5e2573..4fd31794a8e 100644 --- a/packages/core/test/nest-application-context.spec.ts +++ b/packages/core/test/nest-application-context.spec.ts @@ -1,13 +1,13 @@ import { InjectionToken, Provider, Scope } from '@nestjs/common'; import { expect } from 'chai'; import * as sinon from 'sinon'; +import { setTimeout } from 'timers/promises'; import { ContextIdFactory } from '../helpers/context-id-factory'; import { NestContainer } from '../injector/container'; import { Injector } from '../injector/injector'; import { InstanceLoader } from '../injector/instance-loader'; import { GraphInspector } from '../inspector/graph-inspector'; import { NestApplicationContext } from '../nest-application-context'; -import { setTimeout } from 'timers/promises'; describe('NestApplicationContext', () => { class A {} @@ -135,10 +135,10 @@ describe('NestApplicationContext', () => { process.on(signal, ignoreProcessSignal); const deferredShutdown = async () => { - setTimeout(1); + await setTimeout(1); process.kill(process.pid, signal); }; - Promise.all([applicationContext.init(), deferredShutdown()]); + void Promise.all([applicationContext.init(), deferredShutdown()]); await clock.nextAsync(); expect(onModuleInitStub.called).to.be.false; From 5ca5c74c2421f2ba767f7e9189f18d51e8613afd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Wed, 27 Nov 2024 12:39:49 +0100 Subject: [PATCH 109/122] ci: use node 20.18 as the maintenance version --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 11cf2bf3ca2..7e6c5ec1af3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -9,7 +9,7 @@ parameters: default: '18.20' maintenance-node-version: type: string - default: '20.5' + default: '20.18' active-node-version: type: string default: '22.11' From f9c578680cbe090a13c02f1bc75021aeeedfa97d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Wed, 27 Nov 2024 13:34:42 +0100 Subject: [PATCH 110/122] style: address lint errors --- packages/microservices/client/client-mqtt.ts | 4 ++-- packages/microservices/serializers/mqtt-record.serializer.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/microservices/client/client-mqtt.ts b/packages/microservices/client/client-mqtt.ts index a0985cca22f..b3f774f1fe2 100644 --- a/packages/microservices/client/client-mqtt.ts +++ b/packages/microservices/client/client-mqtt.ts @@ -235,7 +235,7 @@ export class ClientMqtt extends ClientProxy { const options = isObject(packet?.data) && packet.data instanceof MqttRecord - ? (packet.data as MqttRecord)?.options + ? packet.data.options : undefined; delete packet?.data?.options; const serializedPacket: string | Buffer = @@ -271,7 +271,7 @@ export class ClientMqtt extends ClientProxy { const pattern = this.normalizePattern(packet.pattern); const options = isObject(packet?.data) && packet.data instanceof MqttRecord - ? (packet.data as MqttRecord)?.options + ? packet.data.options : undefined; delete packet?.data?.options; diff --git a/packages/microservices/serializers/mqtt-record.serializer.ts b/packages/microservices/serializers/mqtt-record.serializer.ts index 892bb45bf4f..b6797709b54 100644 --- a/packages/microservices/serializers/mqtt-record.serializer.ts +++ b/packages/microservices/serializers/mqtt-record.serializer.ts @@ -5,7 +5,7 @@ import { MqttRecord } from '../record-builders'; export class MqttRecordSerializer implements Serializer { serialize(packet: ReadPacket): string { if (isObject(packet?.data) && packet.data instanceof MqttRecord) { - const record = packet.data as MqttRecord; + const record = packet.data; return JSON.stringify({ ...packet, data: record.data, From 7f142e9399edee1358c2abb7ccfd0572fba96bc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 28 Nov 2024 11:28:56 +0100 Subject: [PATCH 111/122] feat: add legacy route converter, update tests --- .../e2e/exclude-middleware-fastify.spec.ts | 37 +- .../e2e/exclude-middleware.spec.ts | 39 +- .../hello-world/e2e/express-instance.spec.ts | 3 +- .../hello-world/e2e/middleware-class.spec.ts | 2 +- .../e2e/middleware-fastify.spec.ts | 32 +- .../hello-world/e2e/middleware.spec.ts | 14 +- .../global-prefix/e2e/global-prefix.spec.ts | 2 +- .../global-prefix/src/app.module.ts | 16 +- package-lock.json | 15871 +++++++++------- package.json | 12 +- .../middleware/route-info-path-extractor.ts | 4 +- packages/core/middleware/utils.ts | 31 +- packages/core/package.json | 2 +- .../core/router/legacy-route-converter.ts | 53 + packages/core/router/router-explorer.ts | 29 +- packages/core/test/middleware/utils.spec.ts | 23 +- .../test/router/route-path-factory.spec.ts | 10 +- .../adapters/express-adapter.ts | 17 +- .../adapters/fastify-adapter.ts | 69 +- packages/platform-fastify/package.json | 2 +- 20 files changed, 9283 insertions(+), 6985 deletions(-) create mode 100644 packages/core/router/legacy-route-converter.ts diff --git a/integration/hello-world/e2e/exclude-middleware-fastify.spec.ts b/integration/hello-world/e2e/exclude-middleware-fastify.spec.ts index 2622d4cd0dd..ab36bdb74ca 100644 --- a/integration/hello-world/e2e/exclude-middleware-fastify.spec.ts +++ b/integration/hello-world/e2e/exclude-middleware-fastify.spec.ts @@ -50,6 +50,16 @@ class TestController { return RETURN_VALUE; } + @Get('legacy-wildcard/overview') + testLegacyWildcard() { + return RETURN_VALUE; + } + + @Get('splat-wildcard/overview') + testSplatWildcard() { + return RETURN_VALUE; + } + @Get('overview/:id') overviewById() { return RETURN_VALUE; @@ -64,10 +74,17 @@ class TestModule { configure(consumer: MiddlewareConsumer) { consumer .apply((req, res, next) => res.end(MIDDLEWARE_VALUE)) - .exclude('test', 'overview/:id', 'wildcard/(.*)', { - path: 'middleware', - method: RequestMethod.POST, - }) + .exclude( + 'test', + 'overview/:id', + 'wildcard/*', + 'legacy-wildcard/(.*)', + 'splat-wildcard/*splat', + { + path: 'middleware', + method: RequestMethod.POST, + }, + ) .forRoutes('*'); } } @@ -126,6 +143,18 @@ describe('Exclude middleware (fastify)', () => { .expect(200, RETURN_VALUE); }); + it(`should exclude "/legacy-wildcard/overview" endpoint (by wildcard, legacy syntax)`, () => { + return request(app.getHttpServer()) + .get('/legacy-wildcard/overview') + .expect(200, RETURN_VALUE); + }); + + it(`should exclude "/splat-wildcard/overview" endpoint (by wildcard, new syntax)`, () => { + return request(app.getHttpServer()) + .get('/splat-wildcard/overview') + .expect(200, RETURN_VALUE); + }); + afterEach(async () => { await app.close(); }); diff --git a/integration/hello-world/e2e/exclude-middleware.spec.ts b/integration/hello-world/e2e/exclude-middleware.spec.ts index 3fad028d09b..e5f4befc628 100644 --- a/integration/hello-world/e2e/exclude-middleware.spec.ts +++ b/integration/hello-world/e2e/exclude-middleware.spec.ts @@ -41,6 +41,16 @@ class TestController { return RETURN_VALUE; } + @Get('legacy-wildcard/overview') + testLegacyWildcard() { + return RETURN_VALUE; + } + + @Get('splat-wildcard/overview') + testSplatWildcard() { + return RETURN_VALUE; + } + @Get('overview/:id') overviewById() { return RETURN_VALUE; @@ -60,12 +70,19 @@ class TestModule { configure(consumer: MiddlewareConsumer) { consumer .apply((req, res, next) => res.send(MIDDLEWARE_VALUE)) - .exclude('test', 'overview/:id', 'wildcard/(.*)', { - path: 'middleware', - method: RequestMethod.POST, - }) + .exclude( + 'test', + 'overview/:id', + 'wildcard/*', + 'legacy-wildcard/(.*)', + 'splat-wildcard/*splat', + { + path: 'middleware', + method: RequestMethod.POST, + }, + ) .exclude('multiple/exclude') - .forRoutes('*'); + .forRoutes('*path'); } } @@ -116,6 +133,18 @@ describe('Exclude middleware', () => { .expect(200, RETURN_VALUE); }); + it(`should exclude "/legacy-wildcard/overview" endpoint (by wildcard, legacy syntax)`, () => { + return request(app.getHttpServer()) + .get('/legacy-wildcard/overview') + .expect(200, RETURN_VALUE); + }); + + it(`should exclude "/splat-wildcard/overview" endpoint (by wildcard, new syntax)`, () => { + return request(app.getHttpServer()) + .get('/splat-wildcard/overview') + .expect(200, RETURN_VALUE); + }); + it(`should exclude "/multiple/exclude" endpoint`, () => { return request(app.getHttpServer()) .get('/multiple/exclude') diff --git a/integration/hello-world/e2e/express-instance.spec.ts b/integration/hello-world/e2e/express-instance.spec.ts index 6529cb664f9..f035a42704d 100644 --- a/integration/hello-world/e2e/express-instance.spec.ts +++ b/integration/hello-world/e2e/express-instance.spec.ts @@ -3,10 +3,11 @@ import { ExpressAdapter } from '@nestjs/platform-express'; import { Test } from '@nestjs/testing'; import * as express from 'express'; import * as request from 'supertest'; +import { App } from 'supertest/types'; import { AppModule } from '../src/app.module'; describe('Hello world (express instance)', () => { - let server; + let server: App; let app: INestApplication; beforeEach(async () => { diff --git a/integration/hello-world/e2e/middleware-class.spec.ts b/integration/hello-world/e2e/middleware-class.spec.ts index e71a12ec5ea..49896423608 100644 --- a/integration/hello-world/e2e/middleware-class.spec.ts +++ b/integration/hello-world/e2e/middleware-class.spec.ts @@ -8,9 +8,9 @@ import { RequestMethod, } from '@nestjs/common'; import { Test } from '@nestjs/testing'; +import { Response } from 'express'; import * as request from 'supertest'; import { AppModule } from '../src/app.module'; -import { Response } from 'express'; const INCLUDED_VALUE = 'test_included'; const RETURN_VALUE = 'test'; diff --git a/integration/hello-world/e2e/middleware-fastify.spec.ts b/integration/hello-world/e2e/middleware-fastify.spec.ts index a0d9d9f211e..c2f6883d172 100644 --- a/integration/hello-world/e2e/middleware-fastify.spec.ts +++ b/integration/hello-world/e2e/middleware-fastify.spec.ts @@ -15,9 +15,9 @@ import { } from '@nestjs/platform-fastify'; import { Test } from '@nestjs/testing'; import { expect } from 'chai'; -import { AppModule } from '../src/app.module'; -import * as request from 'supertest'; import { FastifyRequest } from 'fastify'; +import * as request from 'supertest'; +import { AppModule } from '../src/app.module'; describe('Middleware (FastifyAdapter)', () => { let app: NestFastifyApplication; @@ -37,6 +37,11 @@ describe('Middleware (FastifyAdapter)', () => { return RETURN_VALUE; } + @Get('legacy_style_wildcard/wildcard_nested') + legacy_style_wildcard() { + return RETURN_VALUE; + } + @Get('test') test() { return RETURN_VALUE; @@ -76,9 +81,13 @@ describe('Middleware (FastifyAdapter)', () => { .apply((req, res, next) => res.end(INCLUDED_VALUE)) .forRoutes({ path: 'tests/included', method: RequestMethod.POST }) .apply((req, res, next) => res.end(REQ_URL_VALUE)) - .forRoutes('req/url/(.*)') + .forRoutes('req/url/*') .apply((req, res, next) => res.end(WILDCARD_VALUE)) - .forRoutes('express_style_wildcard/*', 'tests/(.*)') + .forRoutes( + 'express_style_wildcard/*', + 'tests/*path', + 'legacy_style_wildcard/(.*)', + ) .apply((req, res, next) => res.end(QUERY_VALUE)) .forRoutes('query') .apply((req, res, next) => next()) @@ -87,7 +96,7 @@ describe('Middleware (FastifyAdapter)', () => { .forRoutes(TestController) .apply((req, res, next) => res.end(RETURN_VALUE)) .exclude({ path: QUERY_VALUE, method: -1 as any }) - .forRoutes('(.*)'); + .forRoutes('*'); } } @@ -101,7 +110,7 @@ describe('Middleware (FastifyAdapter)', () => { await app.init(); }); - it(`forRoutes((.*))`, () => { + it(`forRoutes(*)`, () => { return app .inject({ method: 'GET', @@ -143,7 +152,7 @@ describe('Middleware (FastifyAdapter)', () => { .then(({ payload }) => expect(payload).to.be.eql(QUERY_VALUE)); }); - it(`forRoutes(tests/(.*))`, () => { + it(`forRoutes(tests/*path)`, () => { return app .inject({ method: 'GET', @@ -161,6 +170,15 @@ describe('Middleware (FastifyAdapter)', () => { .then(({ payload }) => expect(payload).to.be.eql(WILDCARD_VALUE)); }); + it(`forRoutes(legacy_style_wildcard/*)`, () => { + return app + .inject({ + method: 'GET', + url: '/legacy_style_wildcard/wildcard_nested', + }) + .then(({ payload }) => expect(payload).to.be.eql(WILDCARD_VALUE)); + }); + it(`forRoutes(req/url/)`, () => { const reqUrl = '/test'; return app diff --git a/integration/hello-world/e2e/middleware.spec.ts b/integration/hello-world/e2e/middleware.spec.ts index 4d0fb315b2c..6d349d83162 100644 --- a/integration/hello-world/e2e/middleware.spec.ts +++ b/integration/hello-world/e2e/middleware.spec.ts @@ -26,6 +26,11 @@ class TestController { return RETURN_VALUE; } + @Get('legacy-wildcard/overview') + legacyWildcard() { + return RETURN_VALUE; + } + @Get('exclude') exclude() { return EXCLUDE_VALUE; @@ -40,7 +45,7 @@ class TestModule { configure(consumer: MiddlewareConsumer) { consumer .apply((req, res, next) => res.send(WILDCARD_VALUE)) - .forRoutes('tests/*') + .forRoutes('tests/*path', 'legacy-wildcard/*') .apply((req, res, next) => res.send(SCOPED_VALUE)) .exclude('exclude') .forRoutes(TestController) @@ -86,6 +91,13 @@ describe('Middleware', () => { .expect(200, WILDCARD_VALUE); }); + it(`forRoutes(legacy-wildcard/*)`, async () => { + app = await createApp(); + return request(app.getHttpServer()) + .get('/legacy-wildcard/overview') + .expect(200, WILDCARD_VALUE); + }); + afterEach(async () => { await app.close(); }); diff --git a/integration/nest-application/global-prefix/e2e/global-prefix.spec.ts b/integration/nest-application/global-prefix/e2e/global-prefix.spec.ts index 76acf712137..3364e29efa9 100644 --- a/integration/nest-application/global-prefix/e2e/global-prefix.spec.ts +++ b/integration/nest-application/global-prefix/e2e/global-prefix.spec.ts @@ -127,7 +127,7 @@ describe('Global prefix', () => { await request(server) .get('/api/test/params') - .expect(200, { '0': 'params', tenantId: 'test' }); + .expect(200, { tenantId: 'test', path: ['params'] }); }); it(`should execute middleware only once`, async () => { diff --git a/integration/nest-application/global-prefix/src/app.module.ts b/integration/nest-application/global-prefix/src/app.module.ts index 65ba2236cd7..61a1b0407fc 100644 --- a/integration/nest-application/global-prefix/src/app.module.ts +++ b/integration/nest-application/global-prefix/src/app.module.ts @@ -16,24 +16,30 @@ export class AppModule { .apply((req, res, next) => res.status(201).end(MIDDLEWARE_VALUE)) .forRoutes({ path: MIDDLEWARE_VALUE, method: RequestMethod.POST }) .apply((req, res, next) => res.end(MIDDLEWARE_PARAM_VALUE)) - .forRoutes({ path: MIDDLEWARE_VALUE + '/*', method: RequestMethod.GET }) + .forRoutes({ + path: MIDDLEWARE_VALUE + '/*path', + method: RequestMethod.GET, + }) .apply((req, res, next) => res.status(201).end(MIDDLEWARE_PARAM_VALUE)) - .forRoutes({ path: MIDDLEWARE_VALUE + '/*', method: RequestMethod.POST }) + .forRoutes({ + path: MIDDLEWARE_VALUE + '/*path', + method: RequestMethod.POST, + }) .apply((req, res, next) => { req.extras = { data: 'Data attached in middleware' }; next(); }) - .forRoutes({ path: '*', method: RequestMethod.GET }) + .forRoutes({ path: '*path', method: RequestMethod.GET }) .apply((req, res, next) => { req.middlewareParams = req.params; next(); }) - .forRoutes({ path: '*', method: RequestMethod.GET }) + .forRoutes({ path: '*path', method: RequestMethod.GET }) .apply((req, res, next) => { this.count += 1; req.count = this.count; next(); }) - .forRoutes('*'); + .forRoutes('*path'); } } diff --git a/package-lock.json b/package-lock.json index d23ced4d28f..cfd654a2801 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "fast-safe-stringify": "2.1.1", "iterare": "1.2.1", "object-hash": "3.0.0", - "path-to-regexp": "3.2.0", + "path-to-regexp": "8.2.0", "reflect-metadata": "0.2.2", "rxjs": "7.8.1", "socket.io": "4.8.1", @@ -35,10 +35,10 @@ "@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", - "@fastify/multipart": "8.3.0", + "@fastify/cors": "10.0.1", + "@fastify/formbody": "8.0.1", + "@fastify/middie": "9.0.2", + "@fastify/multipart": "9.0.1", "@fastify/static": "7.0.4", "@fastify/view": "9.1.0", "@grpc/grpc-js": "1.12.2", @@ -83,7 +83,7 @@ "eslint-plugin-prettier": "5.2.1", "eventsource": "2.0.2", "fancy-log": "2.0.0", - "fastify": "4.28.1", + "fastify": "5.1.0", "globals": "15.12.0", "graphql": "16.9.0", "graphql-subscriptions": "2.0.0", @@ -142,6 +142,7 @@ "resolved": "https://registry.npmjs.org/@acuminous/bitsyntax/-/bitsyntax-0.1.2.tgz", "integrity": "sha512-29lUK80d1muEQqiUsSo+3A0yP6CdspgC95EnKBMi22Xlwt79i/En4Vr67+cXhU+cZjbti3TgGGC5wy1stIywVQ==", "dev": true, + "license": "MIT", "dependencies": { "buffer-more-ints": "~1.0.0", "debug": "^4.3.4", @@ -151,40 +152,12 @@ "node": ">=0.8" } }, - "node_modules/@acuminous/bitsyntax/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/@acuminous/bitsyntax/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/@acuminous/bitsyntax/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/@alcalzone/ansi-tokenize": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@alcalzone/ansi-tokenize/-/ansi-tokenize-0.1.3.tgz", "integrity": "sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^4.0.0" @@ -198,6 +171,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -205,23 +179,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@alcalzone/ansi-tokenize/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -230,21 +193,12 @@ "node": ">=6.0.0" } }, - "node_modules/@ampproject/remapping/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, "node_modules/@apollo/cache-control-types": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@apollo/cache-control-types/-/cache-control-types-1.0.3.tgz", "integrity": "sha512-F17/vCp7QVwom9eG7ToauIKdAxpSoadsJnqIfyryLFSkLSOEqu+eC5Z3N8OXcUVStuOMcNHlyraRsA6rRICu4g==", "dev": true, + "license": "MIT", "peerDependencies": { "graphql": "14.x || 15.x || 16.x" } @@ -254,6 +208,7 @@ "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.11.10.tgz", "integrity": "sha512-IfGc+X4il0rDqVQBBWdxIKM+ciDCiDzBq9+Bg9z4tJMi87uF6po4v+ddiac1wP0ARgVPsFwEIGxK7jhN4pW8jg==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", @@ -293,22 +248,13 @@ } } }, - "node_modules/@apollo/client/node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/@apollo/protobufjs": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.7.tgz", "integrity": "sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==", "dev": true, "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -333,6 +279,7 @@ "resolved": "https://registry.npmjs.org/@apollo/server/-/server-4.11.2.tgz", "integrity": "sha512-WUTHY7DDek8xAMn4Woa9Bl8duQUDzRYQkosX/d1DtCsBWESZyApR7ndnI5d6+W4KSTtqBHhJFkusEI7CWuIJXg==", "dev": true, + "license": "MIT", "dependencies": { "@apollo/cache-control-types": "^1.0.3", "@apollo/server-gateway-interface": "^1.1.1", @@ -371,6 +318,7 @@ "resolved": "https://registry.npmjs.org/@apollo/server-gateway-interface/-/server-gateway-interface-1.1.1.tgz", "integrity": "sha512-pGwCl/po6+rxRmDMFgozKQo2pbsSwE91TpsDBAOgf74CRDPXHHtM88wbwjab0wMMZh95QfR45GGyDIdhY24bkQ==", "dev": true, + "license": "MIT", "dependencies": { "@apollo/usage-reporting-protobuf": "^4.1.1", "@apollo/utils.fetcher": "^2.0.0", @@ -387,6 +335,7 @@ "integrity": "sha512-PBDtKI/chJ+hHeoJUUH9Kuqu58txQl00vUGuxqiC9XcReulIg7RjsyD0G1u3drX4V709bxkL5S0nTeXfRHD0qA==", "deprecated": "The use of GraphQL Playground in Apollo Server was supported in previous versions, but this is no longer the case as of December 31, 2022. This package exists for v4 migration purposes only. We do not intend to resolve security issues or other bugs with this package if they arise, so please migrate away from this to [Apollo Server's default Explorer](https://www.apollographql.com/docs/apollo-server/api/plugin/landing-pages) as soon as possible.", "dev": true, + "license": "MIT", "dependencies": { "@apollographql/graphql-playground-html": "1.6.29" }, @@ -410,6 +359,20 @@ "@types/serve-static": "*" } }, + "node_modules/@apollo/server/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/@apollo/server/node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -427,6 +390,23 @@ "node": ">= 0.6" } }, + "node_modules/@apollo/server/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@apollo/server/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, "node_modules/@apollo/server/node_modules/express": { "version": "4.21.1", "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", @@ -509,12 +489,51 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@apollo/server/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==", + "node_modules/@apollo/server/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "license": "MIT" + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@apollo/server/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@apollo/server/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@apollo/server/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, "node_modules/@apollo/server/node_modules/path-to-regexp": { "version": "0.1.10", @@ -523,6 +542,27 @@ "dev": true, "license": "MIT" }, + "node_modules/@apollo/server/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/@apollo/server/node_modules/send": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", @@ -583,6 +623,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -592,6 +633,7 @@ "resolved": "https://registry.npmjs.org/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.1.1.tgz", "integrity": "sha512-u40dIUePHaSKVshcedO7Wp+mPiZsaU6xjv9J+VyxpoU/zL6Jle+9zWeG98tr/+SZ0nZ4OXhrbb8SNr0rAPpIDA==", "dev": true, + "license": "MIT", "dependencies": { "@apollo/protobufjs": "1.2.7" } @@ -601,6 +643,7 @@ "resolved": "https://registry.npmjs.org/@apollo/utils.createhash/-/utils.createhash-2.0.1.tgz", "integrity": "sha512-fQO4/ZOP8LcXWvMNhKiee+2KuKyqIcfHrICA+M4lj/h/Lh1H10ICcUtk6N/chnEo5HXu0yejg64wshdaiFitJg==", "dev": true, + "license": "MIT", "dependencies": { "@apollo/utils.isnodelike": "^2.0.1", "sha.js": "^2.4.11" @@ -614,6 +657,7 @@ "resolved": "https://registry.npmjs.org/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-2.0.1.tgz", "integrity": "sha512-EsPIBqsSt2BwDsv8Wu76LK5R1KtsVkNoO4b0M5aK0hx+dGg9xJXuqlr7Fo34Dl+y83jmzn+UvEW+t1/GP2melA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -626,6 +670,7 @@ "resolved": "https://registry.npmjs.org/@apollo/utils.fetcher/-/utils.fetcher-2.0.1.tgz", "integrity": "sha512-jvvon885hEyWXd4H6zpWeN3tl88QcWnHp5gWF5OPF34uhvoR+DFqcNxs9vrRaBBSY3qda3Qe0bdud7tz2zGx1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -635,6 +680,7 @@ "resolved": "https://registry.npmjs.org/@apollo/utils.isnodelike/-/utils.isnodelike-2.0.1.tgz", "integrity": "sha512-w41XyepR+jBEuVpoRM715N2ZD0xMD413UiJx8w5xnAZD2ZkSJnMJBoIzauK83kJpSgNuR6ywbV29jG9NmxjK0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -644,6 +690,7 @@ "resolved": "https://registry.npmjs.org/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-2.1.1.tgz", "integrity": "sha512-qVo5PvUUMD8oB9oYvq4ViCjYAMWnZ5zZwEjNF37L2m1u528x5mueMlU+Cr1UinupCgdB78g+egA1G98rbJ03Vw==", "dev": true, + "license": "MIT", "dependencies": { "@apollo/utils.logger": "^2.0.1", "lru-cache": "^7.14.1" @@ -657,6 +704,7 @@ "resolved": "https://registry.npmjs.org/@apollo/utils.logger/-/utils.logger-2.0.1.tgz", "integrity": "sha512-YuplwLHaHf1oviidB7MxnCXAdHp3IqYV8n0momZ3JfLniae92eYqMIx+j5qJFX6WKJPs6q7bczmV4lXIsTu5Pg==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -666,6 +714,7 @@ "resolved": "https://registry.npmjs.org/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-2.0.1.tgz", "integrity": "sha512-9M4LUXV/fQBh8vZWlLvb/HyyhjJ77/I5ZKu+NBWV/BmYGyRmoEP9EVAy7LCVoY3t8BDcyCAGfxJaLFCSuQkPUg==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -678,6 +727,7 @@ "resolved": "https://registry.npmjs.org/@apollo/utils.removealiases/-/utils.removealiases-2.0.1.tgz", "integrity": "sha512-0joRc2HBO4u594Op1nev+mUF6yRnxoUH64xw8x3bX7n8QBDYdeYgY4tF0vJReTy+zdn2xv6fMsquATSgC722FA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -690,6 +740,7 @@ "resolved": "https://registry.npmjs.org/@apollo/utils.sortast/-/utils.sortast-2.0.1.tgz", "integrity": "sha512-eciIavsWpJ09za1pn37wpsCGrQNXUhM0TktnZmHwO+Zy9O4fu/WdB4+5BvVhFiZYOXvfjzJUcc+hsIV8RUOtMw==", "dev": true, + "license": "MIT", "dependencies": { "lodash.sortby": "^4.7.0" }, @@ -705,6 +756,7 @@ "resolved": "https://registry.npmjs.org/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-2.0.1.tgz", "integrity": "sha512-QJs7HtzXS/JIPMKWimFnUMK7VjkGQTzqD9bKD1h3iuPAqLsxd0mUNVbkYOPTsDhUKgcvUOfOqOJWYohAKMvcSA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -717,6 +769,7 @@ "resolved": "https://registry.npmjs.org/@apollo/utils.usagereporting/-/utils.usagereporting-2.1.0.tgz", "integrity": "sha512-LPSlBrn+S17oBy5eWkrRSGb98sWmnEzo3DPTZgp8IQc8sJe0prDgDuppGq4NeQlpoqEHz0hQeYHAOA0Z3aQsxQ==", "dev": true, + "license": "MIT", "dependencies": { "@apollo/usage-reporting-protobuf": "^4.1.0", "@apollo/utils.dropunuseddefinitions": "^2.0.1", @@ -737,6 +790,7 @@ "resolved": "https://registry.npmjs.org/@apollo/utils.withrequired/-/utils.withrequired-2.0.1.tgz", "integrity": "sha512-YBDiuAX9i1lLc6GeTy1m7DGLFn/gMnvXqlalOIMjM7DeOgIacEjjfwPqb0M1CQ2v11HhR15d1NmxJoRCfrNqcA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -746,6 +800,7 @@ "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.29.tgz", "integrity": "sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA==", "dev": true, + "license": "MIT", "dependencies": { "xss": "^1.0.8" } @@ -755,6 +810,7 @@ "resolved": "https://registry.npmjs.org/@artilleryio/int-commons/-/int-commons-2.12.0.tgz", "integrity": "sha512-2DVvB0txMlu7iCiipbHapif81K/8HKzGFR+ezkICzwWGotyzp9QcZXMmyfJgmgsWkVUWGOWX48ZTLmSINH+bQw==", "dev": true, + "license": "MPL-2.0", "dependencies": { "async": "^2.6.4", "cheerio": "^1.0.0-rc.10", @@ -769,34 +825,30 @@ "node": ">=18.0.0" } }, - "node_modules/@artilleryio/int-commons/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/@artilleryio/int-commons/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "ms": "^2.1.3" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=6.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@artilleryio/int-commons/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/@artilleryio/int-core": { "version": "2.16.0", "resolved": "https://registry.npmjs.org/@artilleryio/int-core/-/int-core-2.16.0.tgz", "integrity": "sha512-dWtwjg33TpP7DIVuRHstRCZm4o3iNFg+qSxL1FrJ70DreK1cDFn4fNv9t3iOsoQ/dEnQtoybuTF5m2Cbq+9ssA==", "dev": true, + "license": "MPL-2.0", "dependencies": { "@artilleryio/int-commons": "2.12.0", "@artilleryio/sketches-js": "^2.1.1", @@ -829,75 +881,12 @@ "ws": "^7.5.7" } }, - "node_modules/@artilleryio/int-core/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@artilleryio/int-core/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@artilleryio/int-core/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@artilleryio/int-core/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@artilleryio/int-core/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/@artilleryio/int-core/node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, "node_modules/@artilleryio/int-core/node_modules/form-data": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz", "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -907,43 +896,27 @@ "node": ">= 6" } }, - "node_modules/@artilleryio/int-core/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@artilleryio/int-core/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/@artilleryio/int-core/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@artilleryio/int-core/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/@artilleryio/int-core/node_modules/tough-cookie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", - "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", + "node_modules/@artilleryio/int-core/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { - "tldts": "^6.1.32" + "mime-db": "1.52.0" }, "engines": { - "node": ">=16" + "node": ">= 0.6" } }, "node_modules/@artilleryio/int-core/node_modules/uuid": { @@ -951,6 +924,7 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -960,6 +934,7 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -980,13 +955,15 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@artilleryio/sketches-js/-/sketches-js-2.1.1.tgz", "integrity": "sha512-H3D50vDb37E3NGYXY0eUFAm5++moElaqoAu0MWYZhgzaA3IT2E67bRCL8U4LKHuVf/MgDZk14uawIjc4WVjOUQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/@aws-crypto/sha256-browser": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", @@ -997,11 +974,39 @@ "tslib": "^2.6.2" } }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -1015,6 +1020,7 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -1029,6 +1035,7 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" } @@ -1038,17 +1045,46 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -1058,17 +1094,18 @@ } }, "node_modules/@aws-sdk/client-cloudwatch": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.696.0.tgz", - "integrity": "sha512-DDDqTr8i1pZZYAGeEp8Tddqu+v/JrIuN1rTsr31ogv4oxkVt0J1sZ02OCEXS1aq4zKb9ZvxQC+IipzwOWKcbKg==", + "version": "3.699.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch/-/client-cloudwatch-3.699.0.tgz", + "integrity": "sha512-/rd6N9wdNoOIo5tuYyJnxJsOHvOEJ75kGbi4FTjsAgHZyEQQxGMwISZnDbV0OKysVDqrVTIwKIWNCYH+/QG37g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.696.0", - "@aws-sdk/client-sts": "3.696.0", + "@aws-sdk/client-sso-oidc": "3.699.0", + "@aws-sdk/client-sts": "3.699.0", "@aws-sdk/core": "3.696.0", - "@aws-sdk/credential-provider-node": "3.696.0", + "@aws-sdk/credential-provider-node": "3.699.0", "@aws-sdk/middleware-host-header": "3.696.0", "@aws-sdk/middleware-logger": "3.696.0", "@aws-sdk/middleware-recursion-detection": "3.696.0", @@ -1112,17 +1149,18 @@ } }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.696.0.tgz", - "integrity": "sha512-K+FovETWjiAjzwrN7niY31ZuUn3YqVGXwzNBdzr1Y/E7S/jaJTN0WrcsSsH9etI76qFUhtPmUCXXWfC+xEll3A==", + "version": "3.699.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.699.0.tgz", + "integrity": "sha512-9tFt+we6AIvj/f1+nrLHuCWcQmyfux5gcBSOy9d9+zIG56YxGEX7S9TaZnybogpVV8A0BYWml36WvIHS9QjIpA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.696.0", - "@aws-sdk/client-sts": "3.696.0", + "@aws-sdk/client-sso-oidc": "3.699.0", + "@aws-sdk/client-sts": "3.699.0", "@aws-sdk/core": "3.696.0", - "@aws-sdk/credential-provider-node": "3.696.0", + "@aws-sdk/credential-provider-node": "3.699.0", "@aws-sdk/middleware-host-header": "3.696.0", "@aws-sdk/middleware-logger": "3.696.0", "@aws-sdk/middleware-recursion-detection": "3.696.0", @@ -1168,6 +1206,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.696.0.tgz", "integrity": "sha512-q5TTkd08JS0DOkHfUL853tuArf7NrPeqoS5UOvqJho8ibV9Ak/a/HO4kNvy9Nj3cib/toHYHsQIEtecUPSUUrQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -1213,15 +1252,16 @@ } }, "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.696.0.tgz", - "integrity": "sha512-ikxQ3mo86d1mAq5zTaQAh8rLBERwL+I4MUYu/IVYW2hhl9J2SDsl0SgnKeXQG6S8zWuHcBO587zsZaRta1MQ/g==", + "version": "3.699.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.699.0.tgz", + "integrity": "sha512-u8a1GorY5D1l+4FQAf4XBUC1T10/t7neuwT21r0ymrtMFSK2a9QqVHKMoLkvavAwyhJnARSBM9/UQC797PFOFw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.696.0", - "@aws-sdk/credential-provider-node": "3.696.0", + "@aws-sdk/credential-provider-node": "3.699.0", "@aws-sdk/middleware-host-header": "3.696.0", "@aws-sdk/middleware-logger": "3.696.0", "@aws-sdk/middleware-recursion-detection": "3.696.0", @@ -1262,20 +1302,21 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.696.0" + "@aws-sdk/client-sts": "^3.699.0" } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.696.0.tgz", - "integrity": "sha512-eJOxR8/UyI7kGSRyE751Ea7MKEzllQs7eNveDJy9OP4t/jsN/P19HJ1YHeA1np40JRTUBfqa6WLAAiIXsk8rkg==", + "version": "3.699.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.699.0.tgz", + "integrity": "sha512-++lsn4x2YXsZPIzFVwv3fSUVM55ZT0WRFmPeNilYIhZClxHLmVAWKH4I55cY9ry60/aTKYjzOXkWwyBKGsGvQg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.696.0", + "@aws-sdk/client-sso-oidc": "3.699.0", "@aws-sdk/core": "3.696.0", - "@aws-sdk/credential-provider-node": "3.696.0", + "@aws-sdk/credential-provider-node": "3.699.0", "@aws-sdk/middleware-host-header": "3.696.0", "@aws-sdk/middleware-logger": "3.696.0", "@aws-sdk/middleware-recursion-detection": "3.696.0", @@ -1321,6 +1362,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.696.0.tgz", "integrity": "sha512-3c9III1k03DgvRZWg8vhVmfIXPG6hAciN9MzQTzqGngzWAELZF/WONRTRQuDFixVtarQatmLHYVw/atGeA2Byw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.696.0", "@smithy/core": "^2.5.3", @@ -1339,12 +1381,13 @@ } }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.696.0.tgz", - "integrity": "sha512-MUSDXuISfKNICkxvXEcF4G9w3eb5KrqjQnRd8TuFTuw6ksk3JZFx99LZadOIPBqIAKi7AESNZsqD93vE+F/d3g==", + "version": "3.699.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.699.0.tgz", + "integrity": "sha512-iuaTnudaBfEET+o444sDwf71Awe6UiZfH+ipUPmswAi2jZDwdFF1nxMKDEKL8/LV5WpXsdKSfwgS0RQeupURew==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-cognito-identity": "3.696.0", + "@aws-sdk/client-cognito-identity": "3.699.0", "@aws-sdk/types": "3.696.0", "@smithy/property-provider": "^3.1.9", "@smithy/types": "^3.7.1", @@ -1359,6 +1402,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.696.0.tgz", "integrity": "sha512-T9iMFnJL7YTlESLpVFT3fg1Lkb1lD+oiaIC8KMpepb01gDUBIpj9+Y+pA/cgRWW0yRxmkDXNazAE2qQTVFGJzA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.696.0", "@aws-sdk/types": "3.696.0", @@ -1375,6 +1419,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.696.0.tgz", "integrity": "sha512-GV6EbvPi2eq1+WgY/o2RFA3P7HGmnkIzCNmhwtALFlqMroLYWKE7PSeHw66Uh1dFQeVESn0/+hiUNhu1mB0emA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.696.0", "@aws-sdk/types": "3.696.0", @@ -1392,16 +1437,17 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.696.0.tgz", - "integrity": "sha512-9WsZZofjPjNAAZhIh7c7FOhLK8CR3RnGgUm1tdZzV6ZSM1BuS2m6rdwIilRxAh3fxxKDkmW/r/aYmmCYwA+AYA==", + "version": "3.699.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.699.0.tgz", + "integrity": "sha512-dXmCqjJnKmG37Q+nLjPVu22mNkrGHY8hYoOt3Jo9R2zr5MYV7s/NHsCHr+7E+BZ+tfZYLRPeB1wkpTeHiEcdRw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.696.0", "@aws-sdk/credential-provider-env": "3.696.0", "@aws-sdk/credential-provider-http": "3.696.0", "@aws-sdk/credential-provider-process": "3.696.0", - "@aws-sdk/credential-provider-sso": "3.696.0", + "@aws-sdk/credential-provider-sso": "3.699.0", "@aws-sdk/credential-provider-web-identity": "3.696.0", "@aws-sdk/types": "3.696.0", "@smithy/credential-provider-imds": "^3.2.6", @@ -1414,20 +1460,21 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.696.0" + "@aws-sdk/client-sts": "^3.699.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.696.0.tgz", - "integrity": "sha512-8F6y5FcfRuMJouC5s207Ko1mcVvOXReBOlJmhIwE4QH1CnO/CliIyepnAZrRQ659mo5wIuquz6gXnpYbitEVMg==", + "version": "3.699.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.699.0.tgz", + "integrity": "sha512-MmEmNDo1bBtTgRmdNfdQksXu4uXe66s0p1hi1YPrn1h59Q605eq/xiWbGL6/3KdkViH6eGUuABeV2ODld86ylg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/credential-provider-env": "3.696.0", "@aws-sdk/credential-provider-http": "3.696.0", - "@aws-sdk/credential-provider-ini": "3.696.0", + "@aws-sdk/credential-provider-ini": "3.699.0", "@aws-sdk/credential-provider-process": "3.696.0", - "@aws-sdk/credential-provider-sso": "3.696.0", + "@aws-sdk/credential-provider-sso": "3.699.0", "@aws-sdk/credential-provider-web-identity": "3.696.0", "@aws-sdk/types": "3.696.0", "@smithy/credential-provider-imds": "^3.2.6", @@ -1445,6 +1492,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.696.0.tgz", "integrity": "sha512-mL1RcFDe9sfmyU5K1nuFkO8UiJXXxLX4JO1gVaDIOvPqwStpUAwi3A1BoeZhWZZNQsiKI810RnYGo0E0WB/hUA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.696.0", "@aws-sdk/types": "3.696.0", @@ -1458,14 +1506,15 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.696.0.tgz", - "integrity": "sha512-4SSZ9Nk08JSu4/rX1a+dEac/Ims1HCXfV7YLUe5LGdtRLSKRoQQUy+hkFaGYoSugP/p1UfUPl3BuTO9Vv8z1pA==", + "version": "3.699.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.699.0.tgz", + "integrity": "sha512-Ekp2cZG4pl9D8+uKWm4qO1xcm8/MeiI8f+dnlZm8aQzizeC+aXYy9GyoclSf6daK8KfRPiRfM7ZHBBL5dAfdMA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-sso": "3.696.0", "@aws-sdk/core": "3.696.0", - "@aws-sdk/token-providers": "3.696.0", + "@aws-sdk/token-providers": "3.699.0", "@aws-sdk/types": "3.696.0", "@smithy/property-provider": "^3.1.9", "@smithy/shared-ini-file-loader": "^3.1.10", @@ -1481,6 +1530,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.696.0.tgz", "integrity": "sha512-XJ/CVlWChM0VCoc259vWguFUjJDn/QwDqHwbx+K9cg3v6yrqXfK5ai+p/6lx0nQpnk4JzPVeYYxWRpaTsGC9rg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.696.0", "@aws-sdk/types": "3.696.0", @@ -1496,22 +1546,23 @@ } }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.696.0.tgz", - "integrity": "sha512-PMTRGII2x38DwkkbgLyOEEAaOInl1NasrGVcBfVxIL94Upln95Op+8e84kWROr4blLZcZUL6GTJuQrJ2ZtfEyw==", + "version": "3.699.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.699.0.tgz", + "integrity": "sha512-jBjOntl9zN9Nvb0jmbMGRbiTzemDz64ij7W6BDavxBJRZpRoNeN0QCz6RolkCyXnyUJjo5mF2unY2wnv00A+LQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-cognito-identity": "3.696.0", + "@aws-sdk/client-cognito-identity": "3.699.0", "@aws-sdk/client-sso": "3.696.0", - "@aws-sdk/client-sts": "3.696.0", + "@aws-sdk/client-sts": "3.699.0", "@aws-sdk/core": "3.696.0", - "@aws-sdk/credential-provider-cognito-identity": "3.696.0", + "@aws-sdk/credential-provider-cognito-identity": "3.699.0", "@aws-sdk/credential-provider-env": "3.696.0", "@aws-sdk/credential-provider-http": "3.696.0", - "@aws-sdk/credential-provider-ini": "3.696.0", - "@aws-sdk/credential-provider-node": "3.696.0", + "@aws-sdk/credential-provider-ini": "3.699.0", + "@aws-sdk/credential-provider-node": "3.699.0", "@aws-sdk/credential-provider-process": "3.696.0", - "@aws-sdk/credential-provider-sso": "3.696.0", + "@aws-sdk/credential-provider-sso": "3.699.0", "@aws-sdk/credential-provider-web-identity": "3.696.0", "@aws-sdk/types": "3.696.0", "@smithy/credential-provider-imds": "^3.2.6", @@ -1528,6 +1579,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.696.0.tgz", "integrity": "sha512-zELJp9Ta2zkX7ELggMN9qMCgekqZhFC5V2rOr4hJDEb/Tte7gpfKSObAnw/3AYiVqt36sjHKfdkoTsuwGdEoDg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.696.0", "@smithy/protocol-http": "^4.1.7", @@ -1543,6 +1595,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.696.0.tgz", "integrity": "sha512-KhkHt+8AjCxcR/5Zp3++YPJPpFQzxpr+jmONiT/Jw2yqnSngZ0Yspm5wGoRx2hS1HJbyZNuaOWEGuJoxLeBKfA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.696.0", "@smithy/types": "^3.7.1", @@ -1557,6 +1610,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.696.0.tgz", "integrity": "sha512-si/maV3Z0hH7qa99f9ru2xpS5HlfSVcasRlNUXKSDm611i7jFMWwGNLUOXFAOLhXotPX5G3Z6BLwL34oDeBMug==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.696.0", "@smithy/protocol-http": "^4.1.7", @@ -1572,6 +1626,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.696.0.tgz", "integrity": "sha512-Lvyj8CTyxrHI6GHd2YVZKIRI5Fmnugt3cpJo0VrKKEgK5zMySwEZ1n4dqPK6czYRWKd5+WnYHYAuU+Wdk6Jsjw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "3.696.0", "@aws-sdk/types": "3.696.0", @@ -1590,6 +1645,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.696.0.tgz", "integrity": "sha512-7EuH142lBXjI8yH6dVS/CZeiK/WZsmb/8zP6bQbVYpMrppSTgB3MzZZdxVZGzL5r8zPQOU10wLC4kIMy0qdBVQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.696.0", "@smithy/node-config-provider": "^3.1.11", @@ -1603,10 +1659,11 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.696.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.696.0.tgz", - "integrity": "sha512-fvTcMADrkwRdNwVmJXi2pSPf1iizmUqczrR1KusH4XehI/KybS4U6ViskRT0v07vpxwL7x+iaD/8fR0PUu5L/g==", + "version": "3.699.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.699.0.tgz", + "integrity": "sha512-kuiEW9DWs7fNos/SM+y58HCPhcIzm1nEZLhe2/7/6+TvAYLuEWURYsbK48gzsxXlaJ2k/jGY3nIsA7RptbMOwA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.696.0", "@smithy/property-provider": "^3.1.9", @@ -1618,7 +1675,7 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.696.0" + "@aws-sdk/client-sso-oidc": "^3.699.0" } }, "node_modules/@aws-sdk/types": { @@ -1626,6 +1683,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.696.0.tgz", "integrity": "sha512-9rTvUJIAj5d3//U5FDPWGJ1nFJLuWb30vugGOrWk7aNZ6y9tuA3PI7Cc9dP8WEXKVyK1vuuk8rSFP2iqXnlgrw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -1639,6 +1697,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.696.0.tgz", "integrity": "sha512-T5s0IlBVX+gkb9g/I6CLt4yAZVzMSiGnbUqWihWsHvQR1WOoIcndQy/Oz/IJXT9T2ipoy7a80gzV6a5mglrioA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.696.0", "@smithy/types": "^3.7.1", @@ -1654,6 +1713,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.693.0.tgz", "integrity": "sha512-ttrag6haJLWABhLqtg1Uf+4LgHWIMOVSYL+VYZmAp2v4PUGOwWmWQH0Zk8RM7YuQcLfH/EoR72/Yxz6A4FKcuw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -1666,6 +1726,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.696.0.tgz", "integrity": "sha512-Z5rVNDdmPOe6ELoM5AhF/ja5tSjbe6ctSctDPb0JdDf4dT0v2MfwhJKzXju2RzX8Es/77Glh7MlaXLE0kCB9+Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.696.0", "@smithy/types": "^3.7.1", @@ -1678,6 +1739,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.696.0.tgz", "integrity": "sha512-KhKqcfyXIB0SCCt+qsu4eJjsfiOrNzK5dCV7RAW2YIpp+msxGUUX0NdRE9rkzjiv+3EMktgJm3eEIS+yxtlVdQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@aws-sdk/middleware-user-agent": "3.696.0", "@aws-sdk/types": "3.696.0", @@ -1702,6 +1764,7 @@ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.2.0" }, @@ -1714,6 +1777,7 @@ "resolved": "https://registry.npmjs.org/@azure/arm-containerinstance/-/arm-containerinstance-9.1.0.tgz", "integrity": "sha512-N9T3/HJwWXvJuz7tin+nO+DYYCTGHILJ5Die3TtdF8Wd1ITfXGqB0vY/wOnspUu/AGojhaIKGmawAfPdw2kX8w==", "dev": true, + "license": "MIT", "dependencies": { "@azure/abort-controller": "^1.0.0", "@azure/core-auth": "^1.3.0", @@ -1732,6 +1796,7 @@ "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.9.0.tgz", "integrity": "sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==", "dev": true, + "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-util": "^1.11.0", @@ -1746,6 +1811,7 @@ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, @@ -1758,6 +1824,7 @@ "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.2.tgz", "integrity": "sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==", "dev": true, + "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.4.0", @@ -1776,6 +1843,7 @@ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, @@ -1788,6 +1856,7 @@ "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.1.2.tgz", "integrity": "sha512-5MnV1yqzZwgNLLjlizsU3QqOeQChkIXw781Fwh1xdAqJR5AA32IUaq6xv1BICJvfbHoa+JYcaij2HFkhLbNTJQ==", "dev": true, + "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-client": "^1.3.0", @@ -1802,6 +1871,7 @@ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, @@ -1814,6 +1884,7 @@ "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.2.tgz", "integrity": "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==", "dev": true, + "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-util": "^1.2.0", @@ -1829,6 +1900,7 @@ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, @@ -1841,6 +1913,7 @@ "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.6.2.tgz", "integrity": "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, @@ -1849,10 +1922,11 @@ } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.18.0.tgz", - "integrity": "sha512-QSoGUp4Eq/gohEFNJaUOwTN7BCc2nHTjjbm75JT0aD7W65PWM1H/tItz0GsABn22uaKyGxiMhWQLt2r+FGU89Q==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.18.1.tgz", + "integrity": "sha512-/wS73UEDrxroUEVywEm7J0p2c+IIiVxyfigCGfsKvCxxCET4V/Hef2aURqltrXMRjNmdmt5IuOgIpl8f6xdO5A==", "dev": true, + "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.8.0", @@ -1872,6 +1946,7 @@ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, @@ -1879,40 +1954,12 @@ "node": ">=18.0.0" } }, - "node_modules/@azure/core-rest-pipeline/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@azure/core-rest-pipeline/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/@azure/core-rest-pipeline/node_modules/https-proxy-agent": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -1921,17 +1968,12 @@ "node": ">= 14" } }, - "node_modules/@azure/core-rest-pipeline/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/@azure/core-tracing": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.2.0.tgz", "integrity": "sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, @@ -1944,6 +1986,7 @@ "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.11.0.tgz", "integrity": "sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==", "dev": true, + "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", "tslib": "^2.6.2" @@ -1957,6 +2000,7 @@ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, @@ -1969,6 +2013,7 @@ "resolved": "https://registry.npmjs.org/@azure/core-xml/-/core-xml-1.4.4.tgz", "integrity": "sha512-J4FYAqakGXcbfeZjwjMzjNcpcH4E+JtEBv+xcV1yL0Ydn/6wbQfeFKTCHh9wttAi0lmajHw7yBbHPRG+YHckZQ==", "dev": true, + "license": "MIT", "dependencies": { "fast-xml-parser": "^4.4.1", "tslib": "^2.6.2" @@ -1982,6 +2027,7 @@ "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.5.0.tgz", "integrity": "sha512-EknvVmtBuSIic47xkOqyNabAme0RYTw52BTMz8eBgU1ysTyMrD1uOoM+JdS0J/4Yfp98IBT3osqq3BfwSaNaGQ==", "dev": true, + "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.9.0", @@ -2007,6 +2053,7 @@ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, @@ -2019,6 +2066,7 @@ "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.4.tgz", "integrity": "sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, @@ -2031,6 +2079,7 @@ "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.27.0.tgz", "integrity": "sha512-+b4ZKSD8+vslCtVRVetkegEhOFMLP3rxDWJY212ct+2r6jVg6OSQKc1Qz3kCoXo0FgwaXkb+76TMZfpHp8QtgA==", "dev": true, + "license": "MIT", "dependencies": { "@azure/msal-common": "14.16.0" }, @@ -2043,6 +2092,7 @@ "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.16.0.tgz", "integrity": "sha512-1KOZj9IpcDSwpNiQNjt0jDYZpQvNZay7QAEi/5DLubay40iGYtLzya/jbjRPLyOTZhEKyL1MzPuw2HqBCjceYA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -2052,6 +2102,7 @@ "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.16.2.tgz", "integrity": "sha512-An7l1hEr0w1HMMh1LU+rtDtqL7/jw74ORlc9Wnh06v7TU/xpG39/Zdr1ZJu3QpjUfKJ+E0/OXMW8DRSWTlh7qQ==", "dev": true, + "license": "MIT", "dependencies": { "@azure/msal-common": "14.16.0", "jsonwebtoken": "^9.0.0", @@ -2066,6 +2117,7 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -2075,6 +2127,7 @@ "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.26.0.tgz", "integrity": "sha512-SriLPKezypIsiZ+TtlFfE46uuBIap2HeaQVS78e1P7rz5OSbq0rsd52WE1mC5f7vAeLiXqv7I7oRhL3WFZEw3Q==", "dev": true, + "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.4.0", @@ -2099,6 +2152,7 @@ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, @@ -2111,6 +2165,7 @@ "resolved": "https://registry.npmjs.org/@azure/storage-queue/-/storage-queue-12.25.0.tgz", "integrity": "sha512-uoobHFbH/o7wIul/sCm32X2YFq6zb1XpNdpKIms9I60mwG3BBaOpEs5pgQV5a5ONG5WMSHlo8E1dNFB5ZZIa1g==", "dev": true, + "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.1.2", "@azure/core-auth": "^1.4.0", @@ -2133,6 +2188,7 @@ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, @@ -2145,6 +2201,7 @@ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", @@ -2159,6 +2216,7 @@ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2168,6 +2226,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.0", @@ -2193,34 +2252,19 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/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/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/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/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -2230,6 +2274,7 @@ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.26.2", "@babel/types": "^7.26.0", @@ -2241,21 +2286,12 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, "node_modules/@babel/helper-compilation-targets": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.25.9", "@babel/helper-validator-option": "^7.25.9", @@ -2272,6 +2308,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -2281,6 +2318,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -2289,13 +2327,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@babel/helper-module-imports": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.9", "@babel/types": "^7.25.9" @@ -2309,6 +2349,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9", @@ -2326,6 +2367,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2335,6 +2377,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2344,6 +2387,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2353,6 +2397,7 @@ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.25.9", "@babel/types": "^7.26.0" @@ -2366,6 +2411,7 @@ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.26.0" }, @@ -2381,6 +2427,7 @@ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", "dev": true, + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2393,6 +2440,7 @@ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.25.9", "@babel/parser": "^7.25.9", @@ -2407,6 +2455,7 @@ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.25.9", "@babel/generator": "^7.25.9", @@ -2420,43 +2469,22 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/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/@babel/traverse/node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/@babel/traverse/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/@babel/types": { "version": "7.26.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" @@ -2469,19 +2497,22 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz", "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@codechecks/client": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/@codechecks/client/-/client-0.1.12.tgz", "integrity": "sha512-2GHHvhO3kaOyxFXxOaiznlY8ARmz33/p+WQdhc2y6wzWw5eOl2wSwg1eZxx3LsWlAnB963Y4bd1YjZcGIhKRzA==", "dev": true, + "license": "MIT", "dependencies": { "bluebird": "^3.5.3", "chalk": "^2.4.2", @@ -2511,89 +2542,25 @@ "node": ">=6" } }, - "node_modules/@codechecks/client/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@codechecks/client/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@codechecks/client/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@codechecks/client/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@codechecks/client/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/@codechecks/client/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/@codechecks/client/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=4" + "node": ">=0.3.1" } }, - "node_modules/@codechecks/client/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/@codechecks/client/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@codechecks/client/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, "node_modules/@codechecks/client/node_modules/ts-node": { @@ -2601,6 +2568,7 @@ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", "dev": true, + "license": "MIT", "dependencies": { "arg": "^4.1.0", "diff": "^4.0.1", @@ -2626,6 +2594,7 @@ "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.1.90" @@ -2636,6 +2605,7 @@ "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.5.0.tgz", "integrity": "sha512-gaGqSliGwB86MDmAAKAtV9SV1SHdmN8pnGq4EJU4+hLisQ7IFfx4jvU4s+pk6tl0+9bv6yT+CaZkufOinkSJIQ==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/format": "^19.5.0", "@commitlint/lint": "^19.5.0", @@ -2657,6 +2627,7 @@ "resolved": "https://registry.npmjs.org/@commitlint/config-angular/-/config-angular-19.5.0.tgz", "integrity": "sha512-EPQBuSK4uVNUj2HhWSJjmfHqgPpST//h07oIzcPK2FauFGGGX0Vt+kzNxnQRDEEUvSAHDRNTDWNaFv66Hlle6A==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/config-angular-type-enum": "^19.5.0" }, @@ -2669,6 +2640,7 @@ "resolved": "https://registry.npmjs.org/@commitlint/config-angular-type-enum/-/config-angular-type-enum-19.5.0.tgz", "integrity": "sha512-4/6xrkElCSBb7+6oZXlBJ/zytkxXgmTg5gk1Voj3GAWShTivtWrPtDYvHmF858WhA695YKgxMHEPNN74UFkK8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=v18" } @@ -2678,6 +2650,7 @@ "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.5.0.tgz", "integrity": "sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/types": "^19.5.0", "ajv": "^8.11.0" @@ -2691,6 +2664,7 @@ "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.5.0.tgz", "integrity": "sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/types": "^19.5.0", "lodash.camelcase": "^4.3.0", @@ -2708,6 +2682,7 @@ "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.5.0.tgz", "integrity": "sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg==", "dev": true, + "license": "MIT", "engines": { "node": ">=v18" } @@ -2717,6 +2692,7 @@ "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.5.0.tgz", "integrity": "sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/types": "^19.5.0", "chalk": "^5.3.0" @@ -2730,6 +2706,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -2742,6 +2719,7 @@ "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.6.0.tgz", "integrity": "sha512-Ov6iBgxJQFR9koOupDPHvcHU9keFupDgtB3lObdEZDroiG4jj1rzky60fbQozFKVYRTUdrBGICHG0YVmRuAJmw==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/types": "^19.5.0", "semver": "^7.6.0" @@ -2750,23 +2728,12 @@ "node": ">=v18" } }, - "node_modules/@commitlint/is-ignored/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/@commitlint/lint": { "version": "19.6.0", "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.6.0.tgz", "integrity": "sha512-LRo7zDkXtcIrpco9RnfhOKeg8PAnE3oDDoalnrVU/EVaKHYBWYL1DlRR7+3AWn0JiBqD8yKOfetVxJGdEtZ0tg==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/is-ignored": "^19.6.0", "@commitlint/parse": "^19.5.0", @@ -2782,6 +2749,7 @@ "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.5.0.tgz", "integrity": "sha512-INOUhkL/qaKqwcTUvCE8iIUf5XHsEPCLY9looJ/ipzi7jtGhgmtH7OOFiNvwYgH7mA8osUWOUDV8t4E2HAi4xA==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/config-validator": "^19.5.0", "@commitlint/execute-rule": "^19.5.0", @@ -2803,6 +2771,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -2815,6 +2784,7 @@ "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.5.0.tgz", "integrity": "sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=v18" } @@ -2824,6 +2794,7 @@ "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.5.0.tgz", "integrity": "sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/types": "^19.5.0", "conventional-changelog-angular": "^7.0.0", @@ -2838,6 +2809,7 @@ "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.5.0.tgz", "integrity": "sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/top-level": "^19.5.0", "@commitlint/types": "^19.5.0", @@ -2854,6 +2826,7 @@ "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.5.0.tgz", "integrity": "sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/config-validator": "^19.5.0", "@commitlint/types": "^19.5.0", @@ -2871,6 +2844,7 @@ "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.6.0.tgz", "integrity": "sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/ensure": "^19.5.0", "@commitlint/message": "^19.5.0", @@ -2886,6 +2860,7 @@ "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.5.0.tgz", "integrity": "sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=v18" } @@ -2895,6 +2870,7 @@ "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.5.0.tgz", "integrity": "sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^7.0.0" }, @@ -2907,6 +2883,7 @@ "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.5.0.tgz", "integrity": "sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==", "dev": true, + "license": "MIT", "dependencies": { "@types/conventional-commits-parser": "^5.0.0", "chalk": "^5.3.0" @@ -2920,6 +2897,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -2932,6 +2910,7 @@ "resolved": "https://registry.npmjs.org/@conventional-changelog/git-client/-/git-client-1.0.1.tgz", "integrity": "sha512-PJEqBwAleffCMETaVm/fUgHldzBE35JFk3/9LL6NUA5EXa3qednu+UT6M7E5iBu3zIQZCULYIiZ90fBYHt6xUw==", "dev": true, + "license": "MIT", "dependencies": { "@types/semver": "^7.5.5", "semver": "^7.5.2" @@ -2952,23 +2931,12 @@ } } }, - "node_modules/@conventional-changelog/git-client/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/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -2976,11 +2944,23 @@ "node": ">=12" } }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@dependents/detective-less": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-4.1.0.tgz", "integrity": "sha512-KrkT6qO5NxqNfy68sBl6CTSoJ4SNDIS5iQArkibhlbGU4LaDukZ3q2HIkh8aUKDio6o4itU4xDR7t82Y2eP1Bg==", "dev": true, + "license": "MIT", "dependencies": { "gonzales-pe": "^4.3.0", "node-source-walk": "^6.0.1" @@ -2994,6 +2974,7 @@ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.4.3" }, @@ -3007,23 +2988,12 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/@eslint-community/regexpp": { "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" } @@ -3057,6 +3027,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3072,42 +3043,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/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/@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, - "license": "BSD-2-Clause", - "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" - } + "license": "Python-2.0" }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "14.0.0", @@ -3127,6 +3064,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -3138,25 +3076,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/@eslint/eslintrc/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/@eslint/eslintrc/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, "node_modules/@eslint/js": { "version": "9.15.0", @@ -3173,141 +3094,110 @@ "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz", "integrity": "sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/@fastify/ajv-compiler": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.6.0.tgz", - "integrity": "sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==", - "dev": true, - "dependencies": { - "ajv": "^8.11.0", - "ajv-formats": "^2.1.1", - "fast-uri": "^2.0.0" - } - }, - "node_modules/@fastify/ajv-compiler/node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-4.0.1.tgz", + "integrity": "sha512-DxrBdgsjNLP0YM6W5Hd6/Fmj43S8zMKiFJYgi+Ri3htTGAowPVG/tG1wpnWLMjufEnehRivUCKZ1pLDIoZdTuw==", "dev": true, + "license": "MIT", "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "ajv": "^8.12.0", + "ajv-formats": "^3.0.1", + "fast-uri": "^3.0.0" } }, "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.0.0.tgz", + "integrity": "sha512-83rnH2nCvclWaPQQKvkJ2pdOjG4TZyEVuFDnlOF6KP08lDaaceVyw/W63mDuafQT+MKHCvXIPpE5uYWeM0rT4w==", "dev": true, - "engines": { - "node": ">=14" - } + "license": "MIT" }, "node_modules/@fastify/cors": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@fastify/cors/-/cors-9.0.1.tgz", - "integrity": "sha512-YY9Ho3ovI+QHIL2hW+9X4XqQjXLjJqsU+sMV/xFsxZkE8p3GNnYVFpoOxF7SsP5ZL76gwvbo3V9L+FIekBGU4Q==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@fastify/cors/-/cors-10.0.1.tgz", + "integrity": "sha512-O8JIf6448uQbOgzSkCqhClw6gFTAqrdfeA6R3fc/3gwTJGUp7gl8/3tbNB+6INuu4RmgVOq99BmvdGbtu5pgOA==", "dev": true, + "license": "MIT", "dependencies": { - "fastify-plugin": "^4.0.0", - "mnemonist": "0.39.6" + "fastify-plugin": "^5.0.0", + "mnemonist": "0.39.8" } }, "node_modules/@fastify/deepmerge": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@fastify/deepmerge/-/deepmerge-1.3.0.tgz", - "integrity": "sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@fastify/deepmerge/-/deepmerge-2.0.0.tgz", + "integrity": "sha512-fsaybTGDyQ5KpPsplQqb9yKdCf2x/pbNpMNk8Tvp3rRz7lVcupKysH4b2ELMN2P4Hak1+UqTYdTj/u4FNV2p0g==", + "dev": true, + "license": "MIT" }, "node_modules/@fastify/error": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", - "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==", - "dev": true - }, - "node_modules/@fastify/fast-json-stringify-compiler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", - "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@fastify/error/-/error-4.0.0.tgz", + "integrity": "sha512-OO/SA8As24JtT1usTUTKgGH7uLvhfwZPwlptRi2Dp5P4KKmJI3gvsZ8MIHnNwDs4sLf/aai5LzTyl66xr7qMxA==", "dev": true, - "dependencies": { - "fast-json-stringify": "^5.7.0" - } + "license": "MIT" }, - "node_modules/@fastify/fast-json-stringify-compiler/node_modules/fast-json-stringify": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.16.1.tgz", - "integrity": "sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==", + "node_modules/@fastify/fast-json-stringify-compiler": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.0.1.tgz", + "integrity": "sha512-f2d3JExJgFE3UbdFcpPwqNUEoHWmt8pAKf8f+9YuLESdefA0WgqxeT6DrGL4Yrf/9ihXNSKOqpjEmurV405meA==", "dev": true, + "license": "MIT", "dependencies": { - "@fastify/merge-json-schemas": "^0.1.0", - "ajv": "^8.10.0", - "ajv-formats": "^3.0.1", - "fast-deep-equal": "^3.1.3", - "fast-uri": "^2.1.0", - "json-schema-ref-resolver": "^1.0.1", - "rfdc": "^1.2.0" + "fast-json-stringify": "^6.0.0" } }, "node_modules/@fastify/formbody": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@fastify/formbody/-/formbody-7.4.0.tgz", - "integrity": "sha512-H3C6h1GN56/SMrZS8N2vCT2cZr7mIHzBHzOBa5OPpjfB/D6FzP9mMpE02ZzrFX0ANeh0BAJdoXKOF2e7IbV+Og==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@fastify/formbody/-/formbody-8.0.1.tgz", + "integrity": "sha512-LPrcadSIK8TrQk510Zdj56fnw7cyHq0/PW0YHGGM8ycGL4X7XAex+FKcwpzB4i5lF9eykc71a4EtcO9AEoByqw==", "dev": true, + "license": "MIT", "dependencies": { - "fast-querystring": "^1.0.0", - "fastify-plugin": "^4.0.0" + "fast-querystring": "^1.1.2", + "fastify-plugin": "^5.0.0" } }, "node_modules/@fastify/merge-json-schemas": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" } }, "node_modules/@fastify/middie": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@fastify/middie/-/middie-8.3.1.tgz", - "integrity": "sha512-qrQ8U3iCdjNum3+omnIvAyz21ifFx+Pp5jYW7PJJ7b9ueKTCPXsH6vEvaZQrjEZvOpTnWte+CswfBODWD0NqYQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@fastify/middie/-/middie-9.0.2.tgz", + "integrity": "sha512-MHvAhUBxrefkpx4A8HtjOjAdlaCtY8j19PC6ORfm7KPMb/dklDeqBqR4xPRTtcBRPZUYq2jAJJWQCB4eO+dtKw==", "dev": true, + "license": "MIT", "dependencies": { - "@fastify/error": "^3.2.0", - "fastify-plugin": "^4.0.0", - "path-to-regexp": "^6.1.0", + "@fastify/error": "^4.0.0", + "fastify-plugin": "^5.0.0", + "path-to-regexp": "^8.1.0", "reusify": "^1.0.4" } }, - "node_modules/@fastify/middie/node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "dev": true - }, "node_modules/@fastify/multipart": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@fastify/multipart/-/multipart-8.3.0.tgz", - "integrity": "sha512-A8h80TTyqUzaMVH0Cr9Qcm6RxSkVqmhK/MVBYHYeRRSUbUYv08WecjWKSlG2aSnD4aGI841pVxAjC+G1GafUeQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@fastify/multipart/-/multipart-9.0.1.tgz", + "integrity": "sha512-vt2gOCw/O4EwpN4KlLVJxth4iQlDf7T5ggw2Db2C+UbO2WJBG7y0jEBvu/HT6JIW/lBYaqrrUy9MmTpCKgXEpw==", "dev": true, + "license": "MIT", "dependencies": { - "@fastify/busboy": "^2.1.0", - "@fastify/deepmerge": "^1.0.0", - "@fastify/error": "^3.0.0", - "fastify-plugin": "^4.0.0", - "secure-json-parse": "^2.4.0", - "stream-wormhole": "^1.1.0" + "@fastify/busboy": "^3.0.0", + "@fastify/deepmerge": "^2.0.0", + "@fastify/error": "^4.0.0", + "fastify-plugin": "^5.0.0", + "secure-json-parse": "^3.0.0" } }, "node_modules/@fastify/send": { @@ -3315,6 +3205,7 @@ "resolved": "https://registry.npmjs.org/@fastify/send/-/send-2.1.0.tgz", "integrity": "sha512-yNYiY6sDkexoJR0D8IDy3aRP3+L4wdqCpvx5WP+VtEU58sn7USmKynBzDQex5X42Zzvw2gNzzYgP90UfWShLFA==", "dev": true, + "license": "MIT", "dependencies": { "@lukeed/ms": "^2.0.1", "escape-html": "~1.0.3", @@ -3323,23 +3214,12 @@ "mime": "^3.0.0" } }, - "node_modules/@fastify/send/node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/@fastify/static": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/@fastify/static/-/static-7.0.4.tgz", "integrity": "sha512-p2uKtaf8BMOZWLs6wu+Ihg7bWNBdjNgCwDza4MJtTqg+5ovKmcbgbR9Xs5/smZ1YISfzKOCNYmZV8LaCj+eJ1Q==", "dev": true, + "license": "MIT", "dependencies": { "@fastify/accept-negotiator": "^1.0.0", "@fastify/send": "^2.0.0", @@ -3354,15 +3234,24 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, + "node_modules/@fastify/static/node_modules/fastify-plugin": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.5.1.tgz", + "integrity": "sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@fastify/static/node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -3383,6 +3272,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -3393,27 +3283,47 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@fastify/static/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/@fastify/view": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/@fastify/view/-/view-9.1.0.tgz", "integrity": "sha512-jRTGDljs/uB2p8bf6c1x4stGjP7H84VQkhbtDgCx55Mxf9Fplud5UZIHubvL4BTTX8jNYEzP1FpNAOBi7vibxg==", "dev": true, + "license": "MIT", "dependencies": { "fastify-plugin": "^4.0.0", "toad-cache": "^3.7.0" } }, + "node_modules/@fastify/view/node_modules/fastify-plugin": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.5.1.tgz", + "integrity": "sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@graphql-tools/merge": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.4.2.tgz", "integrity": "sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/utils": "^9.2.1", "tslib": "^2.4.0" @@ -3427,6 +3337,7 @@ "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.19.tgz", "integrity": "sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/merge": "^8.4.1", "@graphql-tools/utils": "^9.2.1", @@ -3442,6 +3353,7 @@ "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "tslib": "^2.4.0" @@ -3455,6 +3367,7 @@ "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", "dev": true, + "license": "MIT", "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } @@ -3464,6 +3377,7 @@ "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.12.2.tgz", "integrity": "sha512-bgxdZmgTrJZX50OjyVwz3+mNEnCTNkh3cIqGPWVNeW9jX6bn1ZkU80uPd+67/ZpIJIjRQ9qaHCjhavyoWYxumg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@grpc/proto-loader": "^0.7.13", "@js-sdsl/ordered-map": "^4.4.2" @@ -3477,6 +3391,7 @@ "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", @@ -3494,13 +3409,15 @@ "version": "5.2.3", "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/@gulp-sourcemaps/identity-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-2.0.1.tgz", "integrity": "sha512-Tb+nSISZku+eQ4X1lAkevcQa+jknn/OVUgZ3XCxEKIsLsqYuPoJwJOPQeaOk75X3WPftb29GWY1eqE7GLsXb1Q==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^6.4.1", "normalize-path": "^3.0.0", @@ -3517,6 +3434,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -3524,57 +3442,12 @@ "node": ">=0.4.0" } }, - "node_modules/@gulp-sourcemaps/identity-map/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/@gulp-sourcemaps/identity-map/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/@gulp-sourcemaps/identity-map/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@gulp-sourcemaps/identity-map/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/@gulp-sourcemaps/identity-map/node_modules/through2": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.4", "readable-stream": "2 || 3" @@ -3585,6 +3458,7 @@ "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", "integrity": "sha512-o/EatdaGt8+x2qpb0vFLC/2Gug/xYPRXb6a+ET1wGYKozKN3krDWC/zZFZAtrzxJHuDL12mwdfEFKcKMNvc55A==", "dev": true, + "license": "MIT", "dependencies": { "normalize-path": "^2.0.1", "through2": "^2.0.3" @@ -3598,6 +3472,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, + "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -3610,6 +3485,7 @@ "resolved": "https://registry.npmjs.org/@gulpjs/messages/-/messages-1.1.0.tgz", "integrity": "sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } @@ -3619,6 +3495,7 @@ "resolved": "https://registry.npmjs.org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz", "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==", "dev": true, + "license": "MIT", "dependencies": { "is-negated-glob": "^1.0.0" }, @@ -3630,13 +3507,15 @@ "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@hapi/topo": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -3647,6 +3526,7 @@ "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", @@ -3656,34 +3536,12 @@ "node": ">=10.10.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==", - "dev": true, - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "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/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -3697,13 +3555,15 @@ "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 + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@hutson/parse-repository-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-5.0.0.tgz", "integrity": "sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.13.0" } @@ -3712,13 +3572,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@improved/node/-/node-1.1.1.tgz", "integrity": "sha512-ePDxG9UuU9Kobk90ZUjtmDW8IT9U7aRb1/Rl9683MRNM+ur0ocHL2v7TPH2ajTiVSBUFbbeW8vKIt9jrb0JIAA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@inquirer/checkbox": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.0.2.tgz", "integrity": "sha512-+gznPl8ip8P8HYHYecDtUtdsh1t2jvb+sWCD72GAiZ9m45RqwrLmReDaqdC0umQfamtFXVRoMVJ2/qINKGm9Tg==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.0", "@inquirer/figures": "^1.0.8", @@ -3733,26 +3595,12 @@ "@types/node": ">=18" } }, - "node_modules/@inquirer/checkbox/node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@inquirer/confirm": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.0.2.tgz", "integrity": "sha512-KJLUHOaKnNCYzwVbryj3TNBxyZIrr56fR5N45v6K9IPrbT6B7DcudBMfylkV1A8PUdJE15mybkEQyp2/ZUpxUA==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.0", "@inquirer/type": "^3.0.1" @@ -3769,6 +3617,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.0.tgz", "integrity": "sha512-I+ETk2AL+yAVbvuKx5AJpQmoaWhpiTFOg/UJb7ZkMAK4blmtG8ATh5ct+T/8xNld0CZG/2UhtkdMwpgvld92XQ==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/figures": "^1.0.8", "@inquirer/type": "^3.0.1", @@ -3784,38 +3633,48 @@ "node": ">=18" } }, - "node_modules/@inquirer/core/node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/@inquirer/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@inquirer/core/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/@inquirer/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "engines": { - "node": ">=14" + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=7.0.0" } }, + "node_modules/@inquirer/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/@inquirer/core/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -3830,6 +3689,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.1.0.tgz", "integrity": "sha512-K1gGWsxEqO23tVdp5MT3H799OZ4ER1za7Dlc8F4um0W7lwSv0KGR/YyrUEyimj0g7dXZd8XknM/5QA2/Uy+TbA==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.0", "@inquirer/type": "^3.0.1", @@ -3847,6 +3707,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.2.tgz", "integrity": "sha512-WdgCX1cUtinz+syKyZdJomovULYlKUWZbVYZzhf+ZeeYf4htAQ3jLymoNs3koIAKfZZl3HUBb819ClCBfyznaw==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.0", "@inquirer/type": "^3.0.1", @@ -3864,6 +3725,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.8.tgz", "integrity": "sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } @@ -3873,6 +3735,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.0.2.tgz", "integrity": "sha512-yCLCraigU085EcdpIVEDgyfGv4vBiE4I+k1qRkc9C5dMjWF42ADMGy1RFU94+eZlz4YlkmFsiyHZy0W1wdhaNg==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.0", "@inquirer/type": "^3.0.1" @@ -3889,6 +3752,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.2.tgz", "integrity": "sha512-MKQhYofdUNk7eqJtz52KvM1dH6R93OMrqHduXCvuefKrsiMjHiMwjc3NZw5Imm2nqY7gWd9xdhYrtcHMJQZUxA==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.0", "@inquirer/type": "^3.0.1" @@ -3905,6 +3769,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.2.tgz", "integrity": "sha512-tQXGSu7IO07gsYlGy3VgXRVsbOWqFBMbqAUrJSc1PDTQQ5Qdm+QVwkP0OC0jnUZ62D19iPgXOMO+tnWG+HhjNQ==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.0", "@inquirer/type": "^3.0.1", @@ -3917,26 +3782,12 @@ "@types/node": ">=18" } }, - "node_modules/@inquirer/password/node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@inquirer/prompts": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.1.0.tgz", "integrity": "sha512-5U/XiVRH2pp1X6gpNAjWOglMf38/Ys522ncEHIKT1voRUvSj/DQnR22OVxHnwu5S+rCFaUiPQ57JOtMFQayqYA==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/checkbox": "^4.0.2", "@inquirer/confirm": "^5.0.2", @@ -3961,6 +3812,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.2.tgz", "integrity": "sha512-3XGcskMoVF8H0Dl1S5TSZ3rMPPBWXRcM0VeNVsS4ByWeWjSeb0lPqfnBg6N7T0608I1B2bSVnbi2cwCrmOD1Yw==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.0", "@inquirer/type": "^3.0.1", @@ -3978,6 +3830,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.2.tgz", "integrity": "sha512-Zv4FC7w4dJ13BOJfKRQCICQfShinGjb1bCEIHxTSnjj2telu3+3RHwHubPG9HyD4aix5s+lyAMEK/wSFD75HLA==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.0", "@inquirer/figures": "^1.0.8", @@ -3996,6 +3849,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.0.2.tgz", "integrity": "sha512-uSWUzaSYAEj0hlzxa1mUB6VqrKaYx0QxGBLZzU4xWFxaSyGaXxsSE4OSOwdU24j0xl8OajgayqFXW0l2bkl2kg==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.0", "@inquirer/figures": "^1.0.8", @@ -4010,26 +3864,12 @@ "@types/node": ">=18" } }, - "node_modules/@inquirer/select/node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@inquirer/type": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.1.tgz", "integrity": "sha512-+ksJMIy92sOAiAccGpcKZUc3bYO07cADnscIxHBknEm3uNts3movSmBofc1908BNy5edKscxYeAdaX1NXkHS6A==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -4041,13 +3881,15 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -4065,6 +3907,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -4077,6 +3920,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -4088,13 +3932,15 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -4107,50 +3953,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@isaacs/cliui/node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/@isaacs/cliui/node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@isaacs/cliui/node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -4161,30 +3969,12 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -4197,72 +3987,55 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@isaacs/ts-node-temp-fork-for-pr-2009": { + "version": "10.9.7", + "resolved": "https://registry.npmjs.org/@isaacs/ts-node-temp-fork-for-pr-2009/-/ts-node-temp-fork-for-pr-2009-10.9.7.tgz", + "integrity": "sha512-9f0bhUr9TnwwpgUhEpr3FjxSaH/OHaARkE2F9fM0lS4nIs2GNerrvGwQz493dk0JKlTaGYVrKbq36vA/whZ34g==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node14": "*", + "@tsconfig/node16": "*", + "@tsconfig/node18": "*", + "@tsconfig/node20": "*", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1" }, - "engines": { - "node": ">=8" + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=4.2" }, - "engines": { - "node": ">=8" + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/@isaacs/ts-node-temp-fork-for-pr-2009/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">=8" + "node": ">=0.3.1" } }, "node_modules/@istanbuljs/load-nyc-config": { @@ -4270,6 +4043,7 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -4281,20 +4055,12 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -4308,6 +4074,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -4320,6 +4087,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -4335,6 +4103,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -4342,20 +4111,12 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4365,6 +4126,7 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4374,6 +4136,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -4383,21 +4146,12 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -4407,6 +4161,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -4415,16 +4170,18 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@js-sdsl/ordered-map": { @@ -4432,6 +4189,7 @@ "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/js-sdsl" @@ -4442,6 +4200,7 @@ "resolved": "https://registry.npmjs.org/@jsep-plugin/assignment/-/assignment-1.3.0.tgz", "integrity": "sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.16.0" }, @@ -4454,6 +4213,7 @@ "resolved": "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.4.tgz", "integrity": "sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.16.0" }, @@ -4465,6 +4225,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "license": "MIT", "engines": { "node": ">=8" } @@ -4474,6 +4235,7 @@ "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.2.tgz", "integrity": "sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4483,6 +4245,7 @@ "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.9.tgz", "integrity": "sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==", "dev": true, + "license": "MIT", "dependencies": { "sparse-bitfield": "^3.0.3" } @@ -4492,6 +4255,7 @@ "resolved": "https://registry.npmjs.org/@nestjs/apollo/-/apollo-12.2.1.tgz", "integrity": "sha512-Det66rvMZwXSxwSkMBdTd+jqVyQRDRT+GJh/CU25PR3bM4n7BpdBTzW0XR3Eoi5oyas1YB4cUxa7nR5Iy37lag==", "dev": true, + "license": "MIT", "dependencies": { "@apollo/server-plugin-landing-page-graphql-playground": "4.0.0", "iterall": "1.3.0", @@ -4524,13 +4288,15 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@nestjs/graphql": { "version": "12.2.1", "resolved": "https://registry.npmjs.org/@nestjs/graphql/-/graphql-12.2.1.tgz", "integrity": "sha512-eXbme7RcecXaz6pZOc3uR9gR7AEAS20BTkzToWab4ExdDJRLhd7ua4C/uNEPUK+82HbNfd3h3z4Mes29N2R+/w==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/merge": "9.0.8", "@graphql-tools/schema": "10.0.7", @@ -4577,6 +4343,7 @@ "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.8.tgz", "integrity": "sha512-RG9NEp4fi0MoFi0te4ahqTMYuavQnXlpEZxxMomdCa6CI5tfekcVm/rsLF5Zt8O4HY+esDt9+4dCL+aOKvG79w==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/utils": "^10.5.5", "tslib": "^2.4.0" @@ -4593,6 +4360,7 @@ "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.7.tgz", "integrity": "sha512-Cz1o+rf9cd3uMgG+zI9HlM5mPlnHQUlk/UQRZyUlPDfT+944taLaokjvj7AI6GcOFVf4f2D11XthQp+0GY31jQ==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/merge": "^9.0.8", "@graphql-tools/utils": "^10.5.5", @@ -4611,6 +4379,7 @@ "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.5.5.tgz", "integrity": "sha512-LF/UDWmMT0mnobL2UZETwYghV7HYBzNaGj0SAkCYOMy/C3+6sQdbcTksnoFaKR9XIVD78jNXEGfivbB8Zd+cwA==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "cross-inspect": "1.0.1", @@ -4628,7 +4397,8 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@nestjs/graphql/node_modules/uuid": { "version": "10.0.0", @@ -4639,6 +4409,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -4648,6 +4419,7 @@ "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.5.tgz", "integrity": "sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg==", "dev": true, + "license": "MIT", "peerDependencies": { "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", "class-transformer": "^0.4.0 || ^0.5.0", @@ -4668,6 +4440,7 @@ "resolved": "https://registry.npmjs.org/@nestjs/mongoose/-/mongoose-10.1.0.tgz", "integrity": "sha512-1ExAnZUfh2QffEaGjqYGgVPy/sYBQCVLCLqVgkcClKx/BCd0QNgND8MB70lwyobp3nm/+nbGQqBpu9F3/hgOCw==", "dev": true, + "license": "MIT", "peerDependencies": { "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", "@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0", @@ -4680,6 +4453,7 @@ "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-10.0.2.tgz", "integrity": "sha512-H738bJyydK4SQkRCTeh1aFBxoO1E9xdL/HaLGThwrqN95os5mEyAtK7BLADOS+vldP4jDZ2VQPLj4epWwRqCeQ==", "dev": true, + "license": "MIT", "dependencies": { "uuid": "9.0.1" }, @@ -4700,6 +4474,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -4709,6 +4484,7 @@ "resolved": "https://registry.npmjs.org/@ngneat/falso/-/falso-7.2.0.tgz", "integrity": "sha512-283EXBFd05kCbGuGSXgmvhCsQYEYzvD/eJaE7lxd05qRB0tgREvZX7TRlJ1KSp8nHxoK6Ws029G1Y30mt4IVAA==", "dev": true, + "license": "MIT", "dependencies": { "seedrandom": "3.0.5", "uuid": "8.3.2" @@ -4719,6 +4495,7 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -4728,6 +4505,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -4741,6 +4519,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -4750,6 +4529,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -4763,6 +4543,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", "dev": true, + "license": "ISC", "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", @@ -4774,40 +4555,12 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@npmcli/agent/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/@npmcli/agent/node_modules/https-proxy-agent": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -4820,36 +4573,33 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - }, - "node_modules/@npmcli/agent/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 + "dev": true, + "license": "ISC" }, - "node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", "dev": true, + "license": "MIT", "dependencies": { - "semver": "^7.3.5" + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 14" } }, - "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" } }, "node_modules/@npmcli/git": { @@ -4857,6 +4607,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^7.0.0", "ini": "^4.1.3", @@ -4877,6 +4628,7 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -4886,6 +4638,7 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16" } @@ -4894,25 +4647,15 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - }, - "node_modules/@npmcli/git/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" - } + "license": "ISC" }, "node_modules/@npmcli/git/node_modules/which": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -4928,6 +4671,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", "dev": true, + "license": "ISC", "dependencies": { "npm-bundled": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" @@ -4945,6 +4689,7 @@ "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, + "license": "MIT", "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -4958,6 +4703,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -4971,6 +4717,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -4986,6 +4733,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -4995,6 +4743,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.1.tgz", "integrity": "sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/git": "^5.0.0", "glob": "^10.2.2", @@ -5013,6 +4762,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -5022,6 +4772,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -5042,6 +4793,7 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", "dev": true, + "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -5051,6 +4803,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -5061,16 +4814,14 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/package-json/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/@npmcli/package-json/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, - "bin": { - "semver": "bin/semver.js" - }, + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" } }, "node_modules/@npmcli/promise-spawn": { @@ -5078,6 +4829,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", "dev": true, + "license": "ISC", "dependencies": { "which": "^4.0.0" }, @@ -5090,6 +4842,7 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16" } @@ -5099,6 +4852,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -5114,6 +4868,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-1.1.0.tgz", "integrity": "sha512-PfnWuOkQgu7gCbnSsAisaX7hKOdZ4wSAhAzH3/ph5dSGau52kCRrMMGbiSQLwyTZpgldkZ49b0brkOr1AzGBHQ==", "dev": true, + "license": "ISC", "engines": { "node": "^16.14.0 || >=18.0.0" } @@ -5123,6 +4878,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.4.tgz", "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^3.0.0", "@npmcli/package-json": "^5.0.0", @@ -5139,6 +4895,7 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16" } @@ -5148,6 +4905,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -5162,6 +4920,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "consola": "^2.15.0", @@ -5175,11 +4934,73 @@ "npm": ">=5.0.0" } }, + "node_modules/@nuxtjs/opencollective/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@nuxtjs/opencollective/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@nuxtjs/opencollective/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@nuxtjs/opencollective/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/@nuxtjs/opencollective/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@oclif/core": { "version": "4.0.33", "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.0.33.tgz", "integrity": "sha512-NoTDwJ2L/ywpsSjcN7jAAHf3m70Px4Yim2SJrm16r70XpnfbNOdlj1x0HEJ0t95gfD+p/y5uy+qPT/VXTh/1gw==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.2", "ansis": "^3.3.2", @@ -5204,52 +5025,22 @@ "node": ">=18.0.0" } }, - "node_modules/@oclif/core/node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@oclif/core/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, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, - "node_modules/@oclif/core/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/@oclif/core/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, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -5260,44 +5051,12 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@oclif/core/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/@oclif/core/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/@oclif/core/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/@oclif/plugin-help": { "version": "6.2.18", "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.2.18.tgz", "integrity": "sha512-mDYOl8RmldLkOg9i9YKgyBlpcyi/bNySoIVHJ2EJd2qCmZaXRKQKRW2Zkx92bwjik8jfs/A3EFI+p4DsrXi57g==", "dev": true, + "license": "MIT", "dependencies": { "@oclif/core": "^4" }, @@ -5306,10 +5065,11 @@ } }, "node_modules/@oclif/plugin-not-found": { - "version": "3.2.28", - "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.28.tgz", - "integrity": "sha512-ObkesXE8F4Hj/AzOCQGI39hqDqm+MfaqY5ByG77uhSkMI4dMaDcPjXZSj1Ftn2mkhZiRk70YN3wTCG4HO/8gqw==", + "version": "3.2.29", + "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.29.tgz", + "integrity": "sha512-TOS46arY8+YK30ks+mvLXwLq4YElMygXKsb8VPdYxUTvbn3yS9fpZ+4IjBo/IM4sZ88D51iXkNZFWt/nItT1Sg==", "dev": true, + "license": "MIT", "dependencies": { "@inquirer/prompts": "^7.1.0", "@oclif/core": "^4", @@ -5325,6 +5085,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=8.0.0" } @@ -5334,6 +5095,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.41.2.tgz", "integrity": "sha512-JEV2RAqijAFdWeT6HddYymfnkiRu2ASxoTBr4WsnGJhOjWZkEy6vp+Sx9ozr1NaIODOa2HUyckExIqQjn6qywQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.0.0" }, @@ -5346,6 +5108,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.28.0.tgz", "integrity": "sha512-igcl4Ve+F1N2063PJUkesk/GkYyuGIWinYkSyAFTnIj3gzrOgvOA4k747XNdL47HRRL1w/qh7UW8NDuxOLvKFA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14" }, @@ -5358,6 +5121,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.15.2.tgz", "integrity": "sha512-+gBv15ta96WqkHZaPpcDHiaz0utiiHZVfm2YOYSqFGrUaJpPkMoSuLBB58YFQGi6Rsb9EHos84X6X5+9JspmLw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/semantic-conventions": "1.15.2" }, @@ -5373,6 +5137,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.15.2.tgz", "integrity": "sha512-CjbOKwk2s+3xPIMcd5UNYQzsf+v94RczbdNix9/kQh38WiQkM90sUOi3if8eyHFgiBjBjhwXrA7W3ydiSQP9mw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -5382,6 +5147,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.41.2.tgz", "integrity": "sha512-gQuCcd5QSMkfi1XIriWAoak/vaRvFzpvtzh2hjziIvbnA3VtoGD3bDb2dzEzOA1iSWO0/tHwnBsSmmUZsETyOA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.15.2", @@ -5403,6 +5169,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.15.2.tgz", "integrity": "sha512-xmMRLenT9CXmm5HMbzpZ1hWhaUowQf8UB4jMjFlAxx1QzQcsD3KFNAVX/CAWzFPtllTyTplrA4JrQ7sCH3qmYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/semantic-conventions": "1.15.2" @@ -5419,6 +5186,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.15.2.tgz", "integrity": "sha512-9aIlcX8GnhcsAHW/Wl8bzk4ZnWTpNlLtud+fxUfBtFATu6OZ6TrGrF4JkT9EVrnoxwtPIDtjHdEsSjOqisY/iA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/resources": "1.15.2", @@ -5436,6 +5204,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.15.2.tgz", "integrity": "sha512-CjbOKwk2s+3xPIMcd5UNYQzsf+v94RczbdNix9/kQh38WiQkM90sUOi3if8eyHFgiBjBjhwXrA7W3ydiSQP9mw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -5445,6 +5214,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.41.2.tgz", "integrity": "sha512-+YeIcL4nuldWE89K8NBLImpXCvih04u1MBnn8EzvoywG2TKR5JC3CZEPepODIxlsfGSgP8W5khCEP1NHZzftYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/otlp-exporter-base": "0.41.2", @@ -5464,6 +5234,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.15.2.tgz", "integrity": "sha512-xmMRLenT9CXmm5HMbzpZ1hWhaUowQf8UB4jMjFlAxx1QzQcsD3KFNAVX/CAWzFPtllTyTplrA4JrQ7sCH3qmYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/semantic-conventions": "1.15.2" @@ -5480,6 +5251,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.15.2.tgz", "integrity": "sha512-9aIlcX8GnhcsAHW/Wl8bzk4ZnWTpNlLtud+fxUfBtFATu6OZ6TrGrF4JkT9EVrnoxwtPIDtjHdEsSjOqisY/iA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/resources": "1.15.2", @@ -5497,6 +5269,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.15.2.tgz", "integrity": "sha512-CjbOKwk2s+3xPIMcd5UNYQzsf+v94RczbdNix9/kQh38WiQkM90sUOi3if8eyHFgiBjBjhwXrA7W3ydiSQP9mw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -5506,6 +5279,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.41.2.tgz", "integrity": "sha512-OLNs6wF84uhxn8TJ8Bv1q2ltdJqjKA9oUEtICcUDDzXIiztPxZ9ur/4xdMk9T3ZJeFMfrhj8eYDkpETBy+fjCg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/exporter-metrics-otlp-http": "0.41.2", @@ -5527,6 +5301,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.15.2.tgz", "integrity": "sha512-xmMRLenT9CXmm5HMbzpZ1hWhaUowQf8UB4jMjFlAxx1QzQcsD3KFNAVX/CAWzFPtllTyTplrA4JrQ7sCH3qmYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/semantic-conventions": "1.15.2" @@ -5543,6 +5318,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.15.2.tgz", "integrity": "sha512-9aIlcX8GnhcsAHW/Wl8bzk4ZnWTpNlLtud+fxUfBtFATu6OZ6TrGrF4JkT9EVrnoxwtPIDtjHdEsSjOqisY/iA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/resources": "1.15.2", @@ -5560,6 +5336,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.15.2.tgz", "integrity": "sha512-CjbOKwk2s+3xPIMcd5UNYQzsf+v94RczbdNix9/kQh38WiQkM90sUOi3if8eyHFgiBjBjhwXrA7W3ydiSQP9mw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -5569,6 +5346,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.43.0.tgz", "integrity": "sha512-h/oofzwyONMcAeBXD6+E6+foFQg9CPadBFcKAGoMIyVSK7iZgtK5DLEwAF4jz5MhfxWNmwZjHXFRc0GqCRx/tA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.17.0", @@ -5589,6 +5367,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.43.0.tgz", "integrity": "sha512-0CXMOYPXgAdLM2OzVkiUfAL6QQwWVhnMfUXCqLsITY42FZ9TxAhZIHkoc4mfVxvPuXsBnRYGR8UQZX86p87z4A==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.0.0" }, @@ -5601,6 +5380,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.17.0.tgz", "integrity": "sha512-tfnl3h+UefCgx1aeN2xtrmr6BmdWGKXypk0pflQR0urFS40aE88trnkOMc2HTJZbMrqEEl4HsaBeFhwLVXsrJg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/semantic-conventions": "1.17.0" }, @@ -5616,6 +5396,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.43.0.tgz", "integrity": "sha512-LXNtRFVuPRXB9q0qdvrLikQ3NtT9Jmv255Idryz3RJPhOh/Fa03sBASQoj3D55OH3xazmA90KFHfhJ/d8D8y4A==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.17.0" }, @@ -5631,6 +5412,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.43.0.tgz", "integrity": "sha512-oOpqtDJo9BBa1+nD6ID1qZ55ZdTwEwSSn2idMobw8jmByJKaanVLdr9SJKsn5T9OBqo/c5QY2brMf0TNZkobJQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.17.0", @@ -5649,6 +5431,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.43.0.tgz", "integrity": "sha512-KXYmgzWdVBOD5NvPmGW1nEMJjyQ8gK3N8r6pi4HvmEhTp0v4T13qDSax4q0HfsqmbPJR355oqQSJUnu1dHNutw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/api-logs": "0.43.0", "@opentelemetry/core": "1.17.0", @@ -5669,6 +5452,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.17.0.tgz", "integrity": "sha512-+u0ciVnj8lhuL/qGRBPeVYvk7fL+H/vOddfvmOeJaA1KC+5/3UED1c9KoZQlRsNT5Kw1FaK8LkY2NVLYfOVZQw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.17.0", "@opentelemetry/semantic-conventions": "1.17.0" @@ -5685,6 +5469,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.43.0.tgz", "integrity": "sha512-JyJ2BBRKm37Mc4cSEhFmsMl5ASQn1dkGhEWzAAMSlhPtLRTv5PfvJwhR+Mboaic/eDLAlciwsgijq8IFlf6IgQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.17.0", "@opentelemetry/resources": "1.17.0" @@ -5702,6 +5487,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.17.0.tgz", "integrity": "sha512-HlWM27yGmYuwCoVRe3yg2PqKnIsq0kEF0HQgvkeDWz2NYkq9fFaSspR6kvjxUTbghAlZrabiqbgyKoYpYaXS3w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.17.0", "@opentelemetry/resources": "1.17.0", @@ -5719,6 +5505,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.17.0.tgz", "integrity": "sha512-2T5HA1/1iE36Q9eg6D4zYlC4Y4GcycI1J6NsHPKZY9oWfAxWsoYnRlkPfUqyY5XVtocCo/xHpnJvGNHwzT70oQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.17.0", "@opentelemetry/resources": "1.17.0", @@ -5736,6 +5523,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.17.0.tgz", "integrity": "sha512-+fguCd2d8d2qruk0H0DsCEy2CTK3t0Tugg7MhZ/UQMvmewbZLNnJ6heSYyzIZWG5IPfAXzoj4f4F/qpM7l4VBA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -5745,6 +5533,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.41.2.tgz", "integrity": "sha512-Y0fGLipjZXLMelWtlS1/MDtrPxf25oM408KukRdkN31a1MEFo4h/ZkNwS7ZfmqHGUa+4rWRt2bi6JBiqy7Ytgw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/otlp-exporter-base": "0.41.2", @@ -5764,6 +5553,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.15.2.tgz", "integrity": "sha512-xmMRLenT9CXmm5HMbzpZ1hWhaUowQf8UB4jMjFlAxx1QzQcsD3KFNAVX/CAWzFPtllTyTplrA4JrQ7sCH3qmYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/semantic-conventions": "1.15.2" @@ -5780,6 +5570,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.15.2.tgz", "integrity": "sha512-BEaxGZbWtvnSPchV98qqqqa96AOcb41pjgvhfzDij10tkBhIu9m0Jd6tZ1tJB5ZHfHbTffqYVYE0AOGobec/EQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/resources": "1.15.2", @@ -5797,6 +5588,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.15.2.tgz", "integrity": "sha512-CjbOKwk2s+3xPIMcd5UNYQzsf+v94RczbdNix9/kQh38WiQkM90sUOi3if8eyHFgiBjBjhwXrA7W3ydiSQP9mw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -5806,6 +5598,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.41.2.tgz", "integrity": "sha512-IGZga9IIckqYE3IpRE9FO9G5umabObIrChlXUHYpMJtDgx797dsb3qXCvLeuAwB+HoB8NsEZstlzmLnoa6/HmA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/otlp-exporter-base": "0.41.2", @@ -5826,6 +5619,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.15.2.tgz", "integrity": "sha512-xmMRLenT9CXmm5HMbzpZ1hWhaUowQf8UB4jMjFlAxx1QzQcsD3KFNAVX/CAWzFPtllTyTplrA4JrQ7sCH3qmYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/semantic-conventions": "1.15.2" @@ -5842,6 +5636,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.15.2.tgz", "integrity": "sha512-BEaxGZbWtvnSPchV98qqqqa96AOcb41pjgvhfzDij10tkBhIu9m0Jd6tZ1tJB5ZHfHbTffqYVYE0AOGobec/EQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/resources": "1.15.2", @@ -5859,6 +5654,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.15.2.tgz", "integrity": "sha512-CjbOKwk2s+3xPIMcd5UNYQzsf+v94RczbdNix9/kQh38WiQkM90sUOi3if8eyHFgiBjBjhwXrA7W3ydiSQP9mw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -5868,6 +5664,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.28.0.tgz", "integrity": "sha512-AMwr3eGXaPEH7gk8yhcUcen31VXy1yU5VJETu0pCfGpggGCYmhm0FKgYBpL5/vlIgQJWU/sW2vIjCL7aSilpKg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.28.0", "@opentelemetry/resources": "1.28.0", @@ -5886,6 +5683,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.28.0.tgz", "integrity": "sha512-ZLwRMV+fNDpVmF2WYUdBHlq0eOWtEaUJSusrzjGnBt7iSRvfjFE3RXYUZJrqou/wIDWV0DwQ5KIfYe9WXg9Xqw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/semantic-conventions": "1.27.0" }, @@ -5901,6 +5699,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -5910,6 +5709,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.41.2.tgz", "integrity": "sha512-pfwa6d+Dax3itZcGWiA0AoXeVaCuZbbqUTsCtOysd2re8C2PWXNxDONUfBWsn+KgxAdi+ljwTjJGiaVLDaIEvQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2" }, @@ -5925,6 +5725,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.41.2.tgz", "integrity": "sha512-OErK8dYjXG01XIMIpmOV2SzL9ctkZ0Nyhf2UumICOAKtgLvR5dG1JMlsNVp8Jn0RzpsKc6Urv7JpP69wzRXN+A==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "^1.7.1", "@opentelemetry/core": "1.15.2", @@ -5943,6 +5744,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-proto-exporter-base/-/otlp-proto-exporter-base-0.41.2.tgz", "integrity": "sha512-BxmEMiP6tHiFroe5/dTt9BsxCci7BTLtF7A6d4DKHLiLweWWZxQ9l7hON7qt/IhpKrQcAFD1OzZ1Gq2ZkNzhCw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/otlp-exporter-base": "0.41.2", @@ -5960,6 +5762,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.41.2.tgz", "integrity": "sha512-jJbPwB0tNu2v+Xi0c/v/R3YBLJKLonw1p+v3RVjT2VfzeUyzSp/tBeVdY7RZtL6dzZpA9XSmp8UEfWIFQo33yA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/api-logs": "0.41.2", "@opentelemetry/core": "1.15.2", @@ -5980,6 +5783,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.15.2.tgz", "integrity": "sha512-xmMRLenT9CXmm5HMbzpZ1hWhaUowQf8UB4jMjFlAxx1QzQcsD3KFNAVX/CAWzFPtllTyTplrA4JrQ7sCH3qmYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/semantic-conventions": "1.15.2" @@ -5996,6 +5800,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.15.2.tgz", "integrity": "sha512-9aIlcX8GnhcsAHW/Wl8bzk4ZnWTpNlLtud+fxUfBtFATu6OZ6TrGrF4JkT9EVrnoxwtPIDtjHdEsSjOqisY/iA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/resources": "1.15.2", @@ -6013,6 +5818,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.15.2.tgz", "integrity": "sha512-BEaxGZbWtvnSPchV98qqqqa96AOcb41pjgvhfzDij10tkBhIu9m0Jd6tZ1tJB5ZHfHbTffqYVYE0AOGobec/EQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/resources": "1.15.2", @@ -6030,6 +5836,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.15.2.tgz", "integrity": "sha512-CjbOKwk2s+3xPIMcd5UNYQzsf+v94RczbdNix9/kQh38WiQkM90sUOi3if8eyHFgiBjBjhwXrA7W3ydiSQP9mw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -6039,6 +5846,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.28.0.tgz", "integrity": "sha512-cIyXSVJjGeTICENN40YSvLDAq4Y2502hGK3iN7tfdynQLKWb3XWZQEkPc+eSx47kiy11YeFAlYkEfXwR1w8kfw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.28.0", "@opentelemetry/semantic-conventions": "1.27.0" @@ -6055,6 +5863,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.28.0.tgz", "integrity": "sha512-ZLwRMV+fNDpVmF2WYUdBHlq0eOWtEaUJSusrzjGnBt7iSRvfjFE3RXYUZJrqou/wIDWV0DwQ5KIfYe9WXg9Xqw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/semantic-conventions": "1.27.0" }, @@ -6070,6 +5879,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -6079,6 +5889,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.41.2.tgz", "integrity": "sha512-smqKIw0tTW15waj7BAPHFomii5c3aHnSE4LQYTszGoK5P9nZs8tEAIpu15UBxi3aG31ZfsLmm4EUQkjckdlFrw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/resources": "1.15.2" @@ -6096,6 +5907,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.15.2.tgz", "integrity": "sha512-xmMRLenT9CXmm5HMbzpZ1hWhaUowQf8UB4jMjFlAxx1QzQcsD3KFNAVX/CAWzFPtllTyTplrA4JrQ7sCH3qmYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.15.2", "@opentelemetry/semantic-conventions": "1.15.2" @@ -6112,6 +5924,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.15.2.tgz", "integrity": "sha512-CjbOKwk2s+3xPIMcd5UNYQzsf+v94RczbdNix9/kQh38WiQkM90sUOi3if8eyHFgiBjBjhwXrA7W3ydiSQP9mw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -6121,6 +5934,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.28.0.tgz", "integrity": "sha512-43tqMK/0BcKTyOvm15/WQ3HLr0Vu/ucAl/D84NO7iSlv6O4eOprxSHa3sUtmYkaZWHqdDJV0AHVz/R6u4JALVQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.28.0", "@opentelemetry/resources": "1.28.0" @@ -6137,6 +5951,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.28.0.tgz", "integrity": "sha512-ZLwRMV+fNDpVmF2WYUdBHlq0eOWtEaUJSusrzjGnBt7iSRvfjFE3RXYUZJrqou/wIDWV0DwQ5KIfYe9WXg9Xqw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/semantic-conventions": "1.27.0" }, @@ -6152,6 +5967,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -6161,6 +5977,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.28.0.tgz", "integrity": "sha512-ceUVWuCpIao7Y5xE02Xs3nQi0tOGmMea17ecBdwtCvdo9ekmO+ijc9RFDgfifMl7XCBf41zne/1POM3LqSTZDA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "1.28.0", "@opentelemetry/resources": "1.28.0", @@ -6178,6 +5995,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.28.0.tgz", "integrity": "sha512-ZLwRMV+fNDpVmF2WYUdBHlq0eOWtEaUJSusrzjGnBt7iSRvfjFE3RXYUZJrqou/wIDWV0DwQ5KIfYe9WXg9Xqw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@opentelemetry/semantic-conventions": "1.27.0" }, @@ -6193,6 +6011,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -6202,6 +6021,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14" } @@ -6211,6 +6031,7 @@ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -6235,6 +6056,7 @@ "integrity": "sha512-SnDBEmw0h4XpbHcWR8T0LgLj1Cqn8Cvql+Nahot2zBud945z+MYXH3WVPvMI5U37WsWAgw9Cj7pZ6oL7haKrhg==", "dev": true, "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "playwright-core": "1.49.0" }, @@ -6247,6 +6069,7 @@ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.49.0.tgz", "integrity": "sha512-DMulbwQURa8rNIQrf94+jPJQ4FmOVdpE5ZppRNvWVjvhC+6sOeo28r8MgIpQRYouXRtt/FCCXU7zn20jnHR4Qw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "playwright": "1.49.0" }, @@ -6257,67 +6080,40 @@ "node": ">=18" } }, - "node_modules/@playwright/test/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/@playwright/test/node_modules/playwright": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.0.tgz", - "integrity": "sha512-eKpmys0UFDnfNb3vfsf8Vx2LEOtflgRebl0Im2eQQnYMA4Aqd+Zw8bEOB+7ZKvN76901mRnqdsiOGKxzVTbi7A==", - "dev": true, - "dependencies": { - "playwright-core": "1.49.0" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/base64": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/codegen": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/fetch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -6327,37 +6123,43 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/path": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/pool": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/utf8": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@redis/bloom": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz", "integrity": "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==", "dev": true, + "license": "MIT", "peerDependencies": { "@redis/client": "^1.0.0" } @@ -6367,6 +6169,7 @@ "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.6.0.tgz", "integrity": "sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg==", "dev": true, + "license": "MIT", "dependencies": { "cluster-key-slot": "1.1.2", "generic-pool": "3.9.0", @@ -6381,6 +6184,7 @@ "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.1.1.tgz", "integrity": "sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==", "dev": true, + "license": "MIT", "peerDependencies": { "@redis/client": "^1.0.0" } @@ -6390,6 +6194,7 @@ "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.7.tgz", "integrity": "sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==", "dev": true, + "license": "MIT", "peerDependencies": { "@redis/client": "^1.0.0" } @@ -6399,6 +6204,7 @@ "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.2.0.tgz", "integrity": "sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==", "dev": true, + "license": "MIT", "peerDependencies": { "@redis/client": "^1.0.0" } @@ -6408,6 +6214,7 @@ "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.1.0.tgz", "integrity": "sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==", "dev": true, + "license": "MIT", "peerDependencies": { "@redis/client": "^1.0.0" } @@ -6416,13 +6223,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@sideway/address": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -6431,19 +6240,22 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@sideway/pinpoint": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@sigstore/bundle": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@sigstore/protobuf-specs": "^0.3.2" }, @@ -6456,6 +6268,7 @@ "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^16.14.0 || >=18.0.0" } @@ -6465,6 +6278,7 @@ "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^16.14.0 || >=18.0.0" } @@ -6474,6 +6288,7 @@ "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.0.0", @@ -6486,11 +6301,236 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/@sigstore/sign/node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@sigstore/sign/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/@sigstore/sign/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sigstore/sign/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@sigstore/tuf": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@sigstore/protobuf-specs": "^0.3.2", "tuf-js": "^2.2.1" @@ -6504,6 +6544,7 @@ "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.1.0", @@ -6518,6 +6559,7 @@ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -6530,6 +6572,7 @@ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } @@ -6539,6 +6582,7 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -6548,6 +6592,7 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1" } @@ -6557,6 +6602,7 @@ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", "lodash.get": "^4.4.2", @@ -6567,13 +6613,15 @@ "version": "0.7.3", "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", - "dev": true + "dev": true, + "license": "(Unlicense OR Apache-2.0)" }, "node_modules/@smithy/abort-controller": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.8.tgz", "integrity": "sha512-+3DOBcUn5/rVjlxGvUPKc416SExarAQ+Qe0bqk30YSUjbepwpS7QN0cyKUSifvLJhdMZ0WPzPP5ymut0oonrpQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -6587,6 +6635,7 @@ "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.12.tgz", "integrity": "sha512-YAJP9UJFZRZ8N+UruTeq78zkdjUHmzsY62J4qKWZ4SXB4QXJ/+680EfXXgkYA2xj77ooMqtUY9m406zGNqwivQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^3.1.11", "@smithy/types": "^3.7.1", @@ -6603,6 +6652,7 @@ "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.5.4.tgz", "integrity": "sha512-iFh2Ymn2sCziBRLPuOOxRPkuCx/2gBdXtBGuCUFLUe6bWYjKnhHyIPqGeNkLZ5Aco/5GjebRTBFiWID3sDbrKw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/middleware-serde": "^3.0.10", "@smithy/protocol-http": "^4.1.7", @@ -6622,6 +6672,7 @@ "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.7.tgz", "integrity": "sha512-cEfbau+rrWF8ylkmmVAObOmjbTIzKyUC5TkBL58SbLywD0RCBC4JAUKbmtSm2w5KUJNRPGgpGFMvE2FKnuNlWQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^3.1.11", "@smithy/property-provider": "^3.1.10", @@ -6638,6 +6689,7 @@ "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.1.tgz", "integrity": "sha512-bH7QW0+JdX0bPBadXt8GwMof/jz0H28I84hU1Uet9ISpzUqXqRQ3fEZJ+ANPOhzSEczYvANNl3uDQDYArSFDtA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^4.1.7", "@smithy/querystring-builder": "^3.0.10", @@ -6651,6 +6703,7 @@ "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.10.tgz", "integrity": "sha512-3zWGWCHI+FlJ5WJwx73Mw2llYR8aflVyZN5JhoqLxbdPZi6UyKSdCeXAWJw9ja22m6S6Tzz1KZ+kAaSwvydi0g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.1", "@smithy/util-buffer-from": "^3.0.0", @@ -6661,51 +6714,28 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/hash-node/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "dev": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/hash-node/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "dev": true, - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/@smithy/invalid-dependency": { "version": "3.0.10", "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.10.tgz", "integrity": "sha512-Lp2L65vFi+cj0vFMu2obpPW69DU+6O5g3086lmI4XcnRCG8PxvpWC7XyaVwJCxsZFzueHjXnrOH/E0pl0zikfA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" } }, "node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/middleware-compression": { @@ -6713,6 +6743,7 @@ "resolved": "https://registry.npmjs.org/@smithy/middleware-compression/-/middleware-compression-3.1.4.tgz", "integrity": "sha512-hA2vYNr9k2oB8oqBiC3Hd8bq4ORypgDOeok36V4l2d46xKJkfYkycdyIhl+z3KJQ62T/85Q4SY0A4Uhu8V/noA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/core": "^2.5.4", "@smithy/is-array-buffer": "^3.0.0", @@ -6729,23 +6760,12 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/middleware-compression/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "dev": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/@smithy/middleware-content-length": { "version": "3.0.12", "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.12.tgz", "integrity": "sha512-1mDEXqzM20yywaMDuf5o9ue8OkJ373lSPbaSjyEvkWdqELhFMyNNgKGWL/rCSf4KME8B+HlHKuR8u9kRj8HzEQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^4.1.7", "@smithy/types": "^3.7.1", @@ -6760,6 +6780,7 @@ "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.4.tgz", "integrity": "sha512-TybiW2LA3kYVd3e+lWhINVu1o26KJbBwOpADnf0L4x/35vLVica77XVR5hvV9+kWeTGeSJ3IHTcYxbRxlbwhsg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/core": "^2.5.4", "@smithy/middleware-serde": "^3.0.10", @@ -6779,6 +6800,7 @@ "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.28.tgz", "integrity": "sha512-vK2eDfvIXG1U64FEUhYxoZ1JSj4XFbYWkK36iz02i3pFwWiDz1Q7jKhGTBCwx/7KqJNk4VS7d7cDLXFOvP7M+g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^3.1.11", "@smithy/protocol-http": "^4.1.7", @@ -6803,6 +6825,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -6812,6 +6835,7 @@ "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.10.tgz", "integrity": "sha512-MnAuhh+dD14F428ubSJuRnmRsfOpxSzvRhaGVTvd/lrUDE3kxzCCmH8lnVTvoNQnV2BbJ4c15QwZ3UdQBtFNZA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -6825,6 +6849,7 @@ "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.10.tgz", "integrity": "sha512-grCHyoiARDBBGPyw2BeicpjgpsDFWZZxptbVKb3CRd/ZA15F/T6rZjCCuBUjJwdck1nwUuIxYtsS4H9DDpbP5w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -6838,6 +6863,7 @@ "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.11.tgz", "integrity": "sha512-URq3gT3RpDikh/8MBJUB+QGZzfS7Bm6TQTqoh4CqE8NBuyPkWa5eUXj0XFcFfeZVgg3WMh1u19iaXn8FvvXxZw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^3.1.10", "@smithy/shared-ini-file-loader": "^3.1.11", @@ -6853,6 +6879,7 @@ "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.1.tgz", "integrity": "sha512-fr+UAOMGWh6bn4YSEezBCpJn9Ukp9oR4D32sCjCo7U81evE11YePOQ58ogzyfgmjIO79YeOdfXXqr0jyhPQeMg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^3.1.8", "@smithy/protocol-http": "^4.1.7", @@ -6869,6 +6896,7 @@ "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.10.tgz", "integrity": "sha512-n1MJZGTorTH2DvyTVj+3wXnd4CzjJxyXeOgnTlgNVFxaaMeT4OteEp4QrzF8p9ee2yg42nvyVK6R/awLCakjeQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -6882,6 +6910,7 @@ "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.7.tgz", "integrity": "sha512-FP2LepWD0eJeOTm0SjssPcgqAlDFzOmRXqXmGhfIM52G7Lrox/pcpQf6RP4F21k0+O12zaqQt5fCDOeBtqY6Cg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -6895,6 +6924,7 @@ "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.10.tgz", "integrity": "sha512-nT9CQF3EIJtIUepXQuBFb8dxJi3WVZS3XfuDksxSCSn+/CzZowRLdhDn+2acbBv8R6eaJqPupoI/aRFIImNVPQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.1", "@smithy/util-uri-escape": "^3.0.0", @@ -6909,6 +6939,7 @@ "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.10.tgz", "integrity": "sha512-Oa0XDcpo9SmjhiDD9ua2UyM3uU01ZTuIrNdZvzwUTykW1PM8o2yJvMh1Do1rY5sUQg4NDV70dMi0JhDx4GyxuQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -6922,6 +6953,7 @@ "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.10.tgz", "integrity": "sha512-zHe642KCqDxXLuhs6xmHVgRwy078RfqxP2wRDpIyiF8EmsWXptMwnMwbVa50lw+WOGNrYm9zbaEg0oDe3PTtvQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.1" }, @@ -6934,6 +6966,7 @@ "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.11.tgz", "integrity": "sha512-AUdrIZHFtUgmfSN4Gq9nHu3IkHMa1YDcN+s061Nfm+6pQ0mJy85YQDB0tZBCmls0Vuj22pLwDPmL92+Hvfwwlg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -6947,6 +6980,7 @@ "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.3.tgz", "integrity": "sha512-pPSQQ2v2vu9vc8iew7sszLd0O09I5TRc5zhY71KA+Ao0xYazIG+uLeHbTJfIWGO3BGVLiXjUr3EEeCcEQLjpWQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", "@smithy/protocol-http": "^4.1.7", @@ -6961,23 +6995,12 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/signature-v4/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "dev": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/@smithy/smithy-client": { "version": "3.4.5", "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.4.5.tgz", "integrity": "sha512-k0sybYT9zlP79sIKd1XGm4TmK0AS1nA2bzDHXx7m0nGi3RQ8dxxQUs4CPkSmQTKAo+KF9aINU3KzpGIpV7UoMw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/core": "^2.5.4", "@smithy/middleware-endpoint": "^3.2.4", @@ -6996,6 +7019,7 @@ "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.1.tgz", "integrity": "sha512-XKLcLXZY7sUQgvvWyeaL/qwNPp6V3dWcUjqrQKjSb+tzYiCy340R/c64LV5j+Tnb2GhmunEX0eou+L+m2hJNYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -7008,6 +7032,7 @@ "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.10.tgz", "integrity": "sha512-j90NUalTSBR2NaZTuruEgavSdh8MLirf58LoGSk4AtQfyIymogIhgnGUU2Mga2bkMkpSoC9gxb74xBXL5afKAQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/querystring-parser": "^3.0.10", "@smithy/types": "^3.7.1", @@ -7019,6 +7044,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-utf8": "^3.0.0", @@ -7028,36 +7054,12 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-base64/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "dev": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-base64/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "dev": true, - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/@smithy/util-body-length-browser": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" } @@ -7067,6 +7069,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -7075,16 +7078,17 @@ } }, "node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-config-provider": { @@ -7092,6 +7096,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -7104,6 +7109,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.28.tgz", "integrity": "sha512-6bzwAbZpHRFVJsOztmov5PGDmJYsbNSoIEfHSJJyFLzfBGCCChiO3od9k7E/TLgrCsIifdAbB9nqbVbyE7wRUw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^3.1.10", "@smithy/smithy-client": "^3.4.5", @@ -7120,6 +7126,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.28.tgz", "integrity": "sha512-78ENJDorV1CjOQselGmm3+z7Yqjj5HWCbjzh0Ixuq736dh1oEnD9sAttSBNSLlpZsX8VQnmERqA2fEFlmqWn8w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/config-resolver": "^3.0.12", "@smithy/credential-provider-imds": "^3.2.7", @@ -7138,6 +7145,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.6.tgz", "integrity": "sha512-mFV1t3ndBh0yZOJgWxO9J/4cHZVn5UG1D8DeCc6/echfNkeEJWu9LD7mgGH5fHrEdR7LDoWw7PQO6QiGpHXhgA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^3.1.11", "@smithy/types": "^3.7.1", @@ -7152,6 +7160,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -7164,6 +7173,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.10.tgz", "integrity": "sha512-eJO+/+RsrG2RpmY68jZdwQtnfsxjmPxzMlQpnHKjFPwrYqvlcT+fHdT+ZVwcjlWSrByOhGr9Ff2GG17efc192A==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.7.1", "tslib": "^2.6.2" @@ -7177,6 +7187,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.10.tgz", "integrity": "sha512-1l4qatFp4PiU6j7UsbasUHL2VU023NRB/gfaa1M0rDqVrRN4g3mCArLRyH3OuktApA4ye+yjWQHjdziunw2eWA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/service-error-classification": "^3.0.10", "@smithy/types": "^3.7.1", @@ -7191,6 +7202,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.3.1.tgz", "integrity": "sha512-Ff68R5lJh2zj+AUTvbAU/4yx+6QPRzg7+pI7M1FbtQHcRIp7xvguxVsQBKyB3fwiOwhAKu0lnNyYBaQfSW6TNw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/fetch-http-handler": "^4.1.1", "@smithy/node-http-handler": "^3.3.1", @@ -7205,36 +7217,12 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-stream/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "dev": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-stream/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "dev": true, - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/@smithy/util-uri-escape": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -7247,6 +7235,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" @@ -7255,36 +7244,12 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-utf8/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "dev": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "dev": true, - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/@smithy/util-waiter": { "version": "3.1.9", "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.9.tgz", "integrity": "sha512-/aMXPANhMOlMPjfPtSrDfPeVP8l56SJlz93xeiLmhLe5xvlXA5T3abZ2ilEsDEPeY9T/wnN/vNGn9wa1SbufWA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^3.1.8", "@smithy/types": "^3.7.1", @@ -7297,19 +7262,22 @@ "node_modules/@socket.io/component-emitter": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", - "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==" + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" }, "node_modules/@sqltools/formatter": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, + "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.0" }, @@ -7322,6 +7290,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/after/-/after-1.1.31.tgz", "integrity": "sha512-531NkYOls9PvqfnLsEDRzIWwjynoFRbUVq7pTYuA3PRIw4Ka7jA9uUjILeUurcWjaHrQNzUua0jj/Yu94f6YYw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "is-actual-promise": "^1.0.1" }, @@ -7337,6 +7306,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/after-each/-/after-each-2.0.8.tgz", "integrity": "sha512-btkpQ/BhmRyG50rezduxEZb3pMJblECvTQa41+U2ln2te1prDTlllHlpq4lOjceUksl8KFF1avDqcBqIqPzneQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "function-loop": "^4.0.0" }, @@ -7352,6 +7322,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/asserts/-/asserts-2.0.8.tgz", "integrity": "sha512-57VrI0p2kAqfgHHUwowDvd31eTfDHw3HO4FSSVUCvngPGWa96R6eH9gXa9fNig4qIp4Dup+nI7gJlJfU0R80SA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@tapjs/stack": "2.0.1", "is-actual-promise": "^1.0.1", @@ -7373,6 +7344,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/before/-/before-2.0.8.tgz", "integrity": "sha512-22ZdGSn/zOKf8J8cb3yfw5R4I/ozdHEDKL8lBWon/zsxxMMvaRTgOtFXEjb4RE+5SDrqQ4NM7ZRYPGhE7T97dw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "is-actual-promise": "^1.0.1" }, @@ -7388,6 +7360,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/before-each/-/before-each-2.0.8.tgz", "integrity": "sha512-Xjgk8/fuP7iFa5CYjFDl05p5PZGRe//VyHJNuYNzWpF1K9PNMtVdlmwplfpFmbrNrw/bIPq7R6LuiPmTBgzuOw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "function-loop": "^4.0.0" }, @@ -7403,6 +7376,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/chdir/-/chdir-1.1.4.tgz", "integrity": "sha512-axXkT5kWp2/X8l6inKyrqzUhqgvsgrWI8/0xLAdmirpFZ8H6gFxrl763Ozdm27EAmkLnnnWgFITPqUQCuB/tMA==", "dev": true, + "license": "BlueOak-1.0.0", "engines": { "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, @@ -7415,6 +7389,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/config/-/config-3.1.6.tgz", "integrity": "sha512-5gkDMSLXL5798bbCdX4RdLpB4OUQeu9TXftzKmL1+1T2xbcd4q7zfDnCfOB9zTk50x2f04+4h6Q7Z1NcSKIspg==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@tapjs/core": "2.1.6", "@tapjs/test": "2.2.4", @@ -7440,6 +7415,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -7447,23 +7423,12 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@tapjs/config/node_modules/polite-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/polite-json/-/polite-json-4.0.1.tgz", - "integrity": "sha512-8LI5ZeCPBEb4uBbcYKNVwk4jgqNx1yHReWoW4H4uUihWlSqZsUDfSITrRhjliuPgxsNPFhNSudGO2Zu4cbWinQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@tapjs/core": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/@tapjs/core/-/core-2.1.6.tgz", "integrity": "sha512-NYMp0bl52DxXfcLmivMKvOIE14aaB9qJjdHeUbs6GZ9yxgD5w0yeiOT+gWEL+1PzZgGWRxSFEpghID1YfXAc4w==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@tapjs/processinfo": "^3.1.8", "@tapjs/stack": "2.0.1", @@ -7487,20 +7452,19 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, - "node_modules/@tapjs/core/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/@tapjs/core/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16 || 14 >=14.17" } }, "node_modules/@tapjs/error-serdes": { @@ -7508,6 +7472,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/error-serdes/-/error-serdes-2.0.1.tgz", "integrity": "sha512-P+M4rtcfkDsUveKKmoRNF+07xpbPnRY5KrstIUOnyn483clQ7BJhsnWr162yYNCsyOj4zEfZmAJI1f8Bi7h/ZA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "minipass": "^7.0.4" }, @@ -7518,11 +7483,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@tapjs/error-serdes/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/@tapjs/filter": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/@tapjs/filter/-/filter-2.0.8.tgz", "integrity": "sha512-/ps6nOS3CTh1WLfCjJnU7tS4PH4KFgEasFSVPCIFN+BasyoqDapzj4JKIlzQvppZOGTQadKH3wUakafZl7uz8w==", "dev": true, + "license": "BlueOak-1.0.0", "engines": { "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, @@ -7538,6 +7514,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/fixture/-/fixture-2.0.8.tgz", "integrity": "sha512-LJnjeAMSozPFXzu+wQw2HJsjA9djHbTcyeMnsgiRL/Q8ffcLqAawV3SN6XKdDLdWYUg3e1fXhHspnbsouZj+xA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "mkdirp": "^3.0.0", "rimraf": "^5.0.5" @@ -7552,11 +7529,69 @@ "@tapjs/core": "2.1.6" } }, + "node_modules/@tapjs/fixture/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tapjs/fixture/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@tapjs/fixture/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@tapjs/fixture/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/@tapjs/fixture/node_modules/mkdirp": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -7567,11 +7602,28 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@tapjs/fixture/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@tapjs/intercept": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/@tapjs/intercept/-/intercept-2.0.8.tgz", "integrity": "sha512-OF2Q35jtZ20bwV4hRNoca7vqIrzPFR3JR25G2rGru+fgPmq4heN0RLoh0d1O34AbrtXqra2lXkacMB/DPgb01A==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@tapjs/after": "1.1.31", "@tapjs/stack": "2.0.1" @@ -7588,6 +7640,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/mock/-/mock-2.1.6.tgz", "integrity": "sha512-bNXKrjg/r+i/gfKij5Oo/5Md2DvGNHPSRCHQmjz3VQjpyxqK7S1FGcR0kyqJ8Nof6Wc8yIhpNOCuibj19200IQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@tapjs/after": "1.1.31", "@tapjs/stack": "2.0.1", @@ -7609,6 +7662,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/node-serialize/-/node-serialize-2.0.8.tgz", "integrity": "sha512-92oqhkmIz5wr0yRs1CPQfim5JSwHPSmoDWnQmJlYUZsY1OYgYouQm3ifnPkqK/9hJpVYzlZEQmefxehxbs2WNQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@tapjs/error-serdes": "2.0.1", "@tapjs/stack": "2.0.1", @@ -7629,6 +7683,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/processinfo/-/processinfo-3.1.8.tgz", "integrity": "sha512-FIriEB+qqArPhmVYc1PZwRHD99myRdl7C9Oe/uts04Q2LOxQ5MEmqP9XOP8vVYzpDOYwmL8OmL6eOYt9eZlQKQ==", "dev": true, + "license": "ISC", "dependencies": { "pirates": "^4.0.5", "process-on-spawn": "^1.0.0", @@ -7639,23 +7694,12 @@ "node": ">=16.17" } }, - "node_modules/@tapjs/processinfo/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@tapjs/processinfo/node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -7665,6 +7709,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/reporter/-/reporter-2.0.8.tgz", "integrity": "sha512-tZn5ZHIrFwjbi59djtdXHBwgSIZSBXdJpz2i9CZ9HEC1nFhWtIr2Jczvrz4ScfixUgA0GNFirz+q+9iA4IFMvw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@tapjs/config": "3.1.6", "@tapjs/stack": "2.0.1", @@ -7695,6 +7740,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -7702,17 +7748,22 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@tapjs/reporter/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/@tapjs/reporter/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } }, "node_modules/@tapjs/run": { "version": "2.1.7", "resolved": "https://registry.npmjs.org/@tapjs/run/-/run-2.1.7.tgz", "integrity": "sha512-Hk41E68f1x4eLBm6Rrxx4ARzZzrjwaLbKThb16+f3bGYiajmqAvBdeyNEoQpEWmW+Sv2HSlueOk2SS2P4fyetg==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@tapjs/after": "1.1.31", "@tapjs/before": "2.0.8", @@ -7754,11 +7805,26 @@ "@tapjs/core": "2.1.6" } }, + "node_modules/@tapjs/run/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@tapjs/run/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, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -7768,6 +7834,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -7780,6 +7847,7 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -7804,6 +7872,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -7819,11 +7888,25 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@tapjs/run/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/@tapjs/run/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16" } @@ -7833,6 +7916,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -7843,11 +7927,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@tapjs/run/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/@tapjs/run/node_modules/mkdirp": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -7863,6 +7958,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -7870,25 +7966,17 @@ "node": ">=8.10.0" } }, - "node_modules/@tapjs/run/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/@tapjs/run/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@tapjs/run/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" + "bin": { + "rimraf": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -7899,6 +7987,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -7914,6 +8003,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/snapshot/-/snapshot-2.0.8.tgz", "integrity": "sha512-L0vtqWKkgnQt/XNQkvHOme9Np7ffteCNf1P0F9mz2YiJion4er1nv6pZuJoKVxXFQsbNd2k+LGyx0Iw+bIzwFg==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "is-actual-promise": "^1.0.1", "tcompare": "7.0.1", @@ -7934,6 +8024,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/spawn/-/spawn-2.0.8.tgz", "integrity": "sha512-vCYwynIYJNijY87uHFANe+gCu9rdGoe4GOBmghl6kwDy7eISmcN/FW5TlmrjePMNhTvrDMeYqOIAzqh3WRYmPA==", "dev": true, + "license": "BlueOak-1.0.0", "engines": { "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, @@ -7946,6 +8037,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/stack/-/stack-2.0.1.tgz", "integrity": "sha512-3rKbZkRkLeJl9ilV/6b80YfI4C4+OYf7iEz5/d0MIVhmVvxv0ttIy5JnZutAc4Gy9eRp5Ne5UTAIFOVY5k36cg==", "dev": true, + "license": "BlueOak-1.0.0", "engines": { "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, @@ -7958,6 +8050,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/stdin/-/stdin-2.0.8.tgz", "integrity": "sha512-tW/exLXuDqjtH2wjptiPHXBahkdSyoppxDY56l9MG4tiz66dMN6NTCZFvQxp7+3t+lsQKqJp/74z8T/ayp+vZA==", "dev": true, + "license": "BlueOak-1.0.0", "engines": { "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, @@ -7970,6 +8063,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/test/-/test-2.2.4.tgz", "integrity": "sha512-QIgq2BhMpwO9SN8I0qlwZYXAllO4xWCfJ0MgAGhc+J7p69B5p9dDNPmyOreHeXWMmk6VlNj3oWveoXb5Zn9xZQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/ts-node-temp-fork-for-pr-2009": "^10.9.7", "@tapjs/after": "1.1.31", @@ -8010,51 +8104,12 @@ "@tapjs/core": "2.1.6" } }, - "node_modules/@tapjs/test/node_modules/@isaacs/ts-node-temp-fork-for-pr-2009": { - "version": "10.9.7", - "resolved": "https://registry.npmjs.org/@isaacs/ts-node-temp-fork-for-pr-2009/-/ts-node-temp-fork-for-pr-2009-10.9.7.tgz", - "integrity": "sha512-9f0bhUr9TnwwpgUhEpr3FjxSaH/OHaARkE2F9fM0lS4nIs2GNerrvGwQz493dk0JKlTaGYVrKbq36vA/whZ34g==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node14": "*", - "@tsconfig/node16": "*", - "@tsconfig/node18": "*", - "@tsconfig/node20": "*", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=4.2" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, "node_modules/@tapjs/test/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, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -8064,6 +8119,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -8084,6 +8140,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8094,11 +8151,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@tapjs/test/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/@tapjs/test/node_modules/mkdirp": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -8109,11 +8177,28 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@tapjs/test/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@tapjs/test/node_modules/typescript": { "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8127,6 +8212,7 @@ "resolved": "https://registry.npmjs.org/@tapjs/typescript/-/typescript-1.4.13.tgz", "integrity": "sha512-MNs7zlhM6G3pNUIjkKXDxgNCwCGZt2bUCGtVunSTDVIrKiUlHAl4QSjQ1oTjumHlCi9gFIWiwFAvpHekzFti0w==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/ts-node-temp-fork-for-pr-2009": "^10.9.7" }, @@ -8137,51 +8223,12 @@ "@tapjs/core": "2.1.6" } }, - "node_modules/@tapjs/typescript/node_modules/@isaacs/ts-node-temp-fork-for-pr-2009": { - "version": "10.9.7", - "resolved": "https://registry.npmjs.org/@isaacs/ts-node-temp-fork-for-pr-2009/-/ts-node-temp-fork-for-pr-2009-10.9.7.tgz", - "integrity": "sha512-9f0bhUr9TnwwpgUhEpr3FjxSaH/OHaARkE2F9fM0lS4nIs2GNerrvGwQz493dk0JKlTaGYVrKbq36vA/whZ34g==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node14": "*", - "@tsconfig/node16": "*", - "@tsconfig/node18": "*", - "@tsconfig/node20": "*", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=4.2" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, "node_modules/@tapjs/worker": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/@tapjs/worker/-/worker-2.0.8.tgz", "integrity": "sha512-AySf2kV6OHvwgD3DrLdT2az2g4hRdoRtKsFCLdZo3jOoKte+ft/IQJEnOW7CPT0RYUskS3elv6eabYgSyTH4tg==", "dev": true, + "license": "BlueOak-1.0.0", "engines": { "node": "16 >=16.17.0 || 18 >= 18.6.0 || >=20" }, @@ -8194,6 +8241,7 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -8203,6 +8251,7 @@ "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.25.0.tgz", "integrity": "sha512-kMnZz+vGGHi4GoHnLmMhGNjm44kGtKUXGnOvrKmMwAuvNjM/PgKVGfUnL7IDvK7Jb2QQ82jq3Zmp04Gy+r3Dkg==", "dev": true, + "license": "MIT", "dependencies": { "minimatch": "^9.0.4", "path-browserify": "^1.0.1", @@ -8214,6 +8263,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -8223,6 +8273,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8237,43 +8288,50 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "14.1.2", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-14.1.2.tgz", "integrity": "sha512-1vncsbfCZ3TBLPxesRYz02Rn7SNJfbLoDVkcZ7F/ixOV6nwxwgdhD1mdPcc5YQ413qBJ8CvMxXMFfJ7oawjo7Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "16.1.3", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-16.1.3.tgz", "integrity": "sha512-9nTOUBn+EMKO6rtSZJk+DcqsfgtlERGT9XPJ5PRj/HNENPCBY1yu/JEj5wT6GLtbCLBO2k46SeXDaY0pjMqypw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node18": { "version": "18.2.4", "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-18.2.4.tgz", "integrity": "sha512-5xxU8vVs9/FNcvm3gE07fPbn9tl6tqGGWA9tSlwsUEkBxtRnTsNmwrV8gasZ9F/EobaSv9+nu8AxUKccw77JpQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node20": { "version": "20.1.4", "resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.4.tgz", "integrity": "sha512-sqgsT69YFeLWf5NtJ4Xq/xAF8p4ZQHlmGW74Nu2tD4+g5fAsposc4ZfaaPixVu4y01BEiDCWLRDCvDM5JOsRxg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tufjs/canonical-json": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", "dev": true, + "license": "MIT", "engines": { "node": "^16.14.0 || >=18.0.0" } @@ -8283,6 +8341,7 @@ "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", "dev": true, + "license": "MIT", "dependencies": { "@tufjs/canonical-json": "2.0.0", "minimatch": "^9.0.4" @@ -8296,6 +8355,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -8305,6 +8365,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8320,6 +8381,7 @@ "resolved": "https://registry.npmjs.org/@types/amqplib/-/amqplib-0.10.5.tgz", "integrity": "sha512-/cSykxROY7BWwDoi4Y4/jLAuZTshZxd8Ey1QYa/VaXriMotBDoou7V/twJiOSHzU6t1Kp1AHAUXGCgqq+6DNeg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -8329,6 +8391,7 @@ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -8338,13 +8401,15 @@ "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/bytes/-/bytes-3.1.4.tgz", "integrity": "sha512-A0uYgOj3zNc4hNjHc5lYUfJQ/HVyBXiUMKdXd7ysclaE6k9oJdavQzODHuwjpUu2/boCP8afjQYi8z/GtvNCWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/cacheable-request": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -8356,13 +8421,15 @@ "version": "4.3.16", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz", "integrity": "sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/chai-as-promised": { "version": "7.1.8", "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", "dev": true, + "license": "MIT", "dependencies": { "@types/chai": "*" } @@ -8372,15 +8439,17 @@ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/conventional-commits-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", + "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -8388,30 +8457,25 @@ "node_modules/@types/cookie": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "license": "MIT" }, "node_modules/@types/cookiejar": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/cors": { "version": "2.8.17", "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/cors/node_modules/@types/node": { - "version": "22.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.1.tgz", - "integrity": "sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==", - "dependencies": { - "undici-types": "~6.19.8" - } - }, "node_modules/@types/eslint": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", @@ -8444,7 +8508,8 @@ "version": "1.20.4", "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz", "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/express": { "version": "5.0.0", @@ -8464,6 +8529,7 @@ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -8489,6 +8555,7 @@ "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-8.0.2.tgz", "integrity": "sha512-kyuRfGE+yiSJWzSO3t74rXxdZNdYfLcllO0IUha4eX1fl40pm9L02Q/TEc3mykTLjoWz4STBNwYnUWdFu3I0DA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/picomatch": "*", @@ -8500,6 +8567,7 @@ "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.17.tgz", "integrity": "sha512-+pKQynu2C/HS16kgmDlAicjtFYP8kaa86eE9P0Ae7GB5W29we/E2TIdbOWtEZD5XkpY+jr8fyqfwO6SWZecLpQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/undertaker": ">=1.2.6", @@ -8507,11 +8575,26 @@ "chokidar": "^3.3.1" } }, + "node_modules/@types/gulp/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@types/gulp/node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -8531,11 +8614,25 @@ "fsevents": "~2.3.2" } }, + "node_modules/@types/gulp/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/@types/gulp/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -8547,19 +8644,22 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", @@ -8572,13 +8672,15 @@ "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -8587,31 +8689,35 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/methods": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/mocha": { "version": "10.0.10", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { "version": "22.9.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", - "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~6.19.8" } @@ -8621,6 +8727,7 @@ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "form-data": "^4.0.0" @@ -8630,47 +8737,47 @@ "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/picomatch": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-3.0.1.tgz", "integrity": "sha512-1MRgzpzY0hOp9pW/kLRxeQhUWwil6gnrUYd3oEpeYBqp/FexhaCPv3F8LsYr47gtUU45fO2cm1dbwkSrHEo8Uw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/qs": { "version": "6.9.17", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/readable-stream": { "version": "4.0.18", "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.18.tgz", "integrity": "sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "safe-buffer": "~5.1.1" } }, - "node_modules/@types/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/@types/responselike": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -8679,13 +8786,15 @@ "version": "7.5.8", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, + "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -8696,6 +8805,7 @@ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/node": "*", @@ -8707,6 +8817,7 @@ "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.3.tgz", "integrity": "sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==", "dev": true, + "license": "MIT", "dependencies": { "@types/sinonjs__fake-timers": "*" } @@ -8715,13 +8826,15 @@ "version": "8.1.5", "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/streamx": { "version": "2.9.5", "resolved": "https://registry.npmjs.org/@types/streamx/-/streamx-2.9.5.tgz", "integrity": "sha512-IHYsa6jYrck8VEdSwpY141FTTf6D7boPeMq9jy4qazNrFMA4VbRz/sw5LSsfR7jwdDcx0QKWkUexZvsWBC2eIQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -8731,6 +8844,7 @@ "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz", "integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/cookiejar": "^2.1.5", "@types/methods": "^1.1.4", @@ -8743,6 +8857,7 @@ "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz", "integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==", "dev": true, + "license": "MIT", "dependencies": { "@types/methods": "^1.1.4", "@types/superagent": "^8.1.0" @@ -8753,6 +8868,7 @@ "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.11.tgz", "integrity": "sha512-j1Z0V2ByRHr8ZK7eOeGq0LGkkdthNFW0uAZGY22iRkNQNL9/vAV0yFPr1QN3FM/peY5bxs9P+1f0PYJTQVa5iA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/undertaker-registry": "*", @@ -8763,18 +8879,21 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/@types/undertaker-registry/-/undertaker-registry-1.0.4.tgz", "integrity": "sha512-tW77pHh2TU4uebWXWeEM5laiw8BuJ7pyJYDh6xenOs75nhny2kVgwYbegJ4BoLMYsIrXaBpKYaPdYO3/udG+hg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/validator": { "version": "13.12.2", "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.12.2.tgz", - "integrity": "sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA==" + "integrity": "sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA==", + "license": "MIT" }, "node_modules/@types/vinyl": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz", "integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==", "dev": true, + "license": "MIT", "dependencies": { "@types/expect": "^1.20.4", "@types/node": "*" @@ -8785,6 +8904,7 @@ "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-3.0.5.tgz", "integrity": "sha512-ckYz9giHgV6U10RFuf9WsDQ3X86EFougapxHmmoxLK7e6ICQqO8CE+4V/3lBN148V5N1pb4nQMmMjyScleVsig==", "dev": true, + "license": "MIT", "dependencies": { "@types/glob-stream": "*", "@types/node": "*", @@ -8795,13 +8915,15 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/whatwg-url": { "version": "11.0.5", "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/webidl-conversions": "*" } @@ -8811,6 +8933,7 @@ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz", "integrity": "sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -8820,6 +8943,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.15.0.tgz", "integrity": "sha512-+zkm9AR1Ds9uLWN3fkoeXgFppaQ+uEVtfOV62dDmsy9QCNqlRHWNEck4yarvRNrvRcHQLGfqBNui3cimoz8XAg==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.15.0", @@ -8848,84 +8972,63 @@ } } }, - "node_modules/@typescript-eslint/parser": { + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { "version": "8.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.15.0.tgz", - "integrity": "sha512-7n59qFpghG4uazrF9qtGKBZXn7Oz4sOMm8dwNWDQY96Xlm2oX67eipqcblDj+oY1lLCbf1oltMZFpUso66Kl1A==", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.15.0.tgz", + "integrity": "sha512-n3Gt8Y/KyJNe0S3yDCD2RVKrHBC4gTUcLTebVBXacPy091E6tNspFLKRXlk3hwT4G55nfr1n2AdFqi/XMxzmPQ==", "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" - }, + "license": "MIT", "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/parser/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/@typescript-eslint/eslint-plugin/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, + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "@typescript-eslint/types": "8.15.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": ">=6.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/parser/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/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==", + "node_modules/@typescript-eslint/eslint-plugin/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, - "dependencies": { - "@typescript-eslint/types": "8.15.0", - "@typescript-eslint/visitor-keys": "8.15.0" - }, + "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/eslint" } }, - "node_modules/@typescript-eslint/type-utils": { + "node_modules/@typescript-eslint/parser": { "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==", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.15.0.tgz", + "integrity": "sha512-7n59qFpghG4uazrF9qtGKBZXn7Oz4sOMm8dwNWDQY96Xlm2oX67eipqcblDj+oY1lLCbf1oltMZFpUso66Kl1A==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { + "@typescript-eslint/scope-manager": "8.15.0", + "@typescript-eslint/types": "8.15.0", "@typescript-eslint/typescript-estree": "8.15.0", - "@typescript-eslint/utils": "8.15.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "@typescript-eslint/visitor-keys": "8.15.0", + "debug": "^4.3.4" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -8943,34 +9046,12 @@ } } }, - "node_modules/@typescript-eslint/type-utils/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/type-utils/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/types": { + "node_modules/@typescript-eslint/parser/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, + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -8979,11 +9060,12 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/typescript-estree": { + "node_modules/@typescript-eslint/parser/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, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "8.15.0", "@typescript-eslint/visitor-keys": "8.15.0", @@ -9007,37 +9089,244 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "node_modules/@typescript-eslint/parser/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, + "license": "MIT", + "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/parser/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, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/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/@typescript-eslint/parser/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": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@typescript-eslint/parser/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, + "license": "ISC", "dependencies": { - "ms": "^2.1.3" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=6.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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, + "license": "MIT", + "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/scope-manager/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, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/scope-manager/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, + "license": "MIT", + "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/scope-manager/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": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/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, + "license": "MIT", + "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": { - "supports-color": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/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, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/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, + "license": "BSD-2-Clause", + "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/typescript-estree/node_modules/minimatch": { + "node_modules/@typescript-eslint/type-utils/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, + "license": "MIT", + "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/type-utils/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils/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": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/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, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -9048,22 +9337,46 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/typescript-estree/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/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } }, - "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==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@typescript-eslint/utils": { @@ -9071,6 +9384,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.15.0.tgz", "integrity": "sha512-k82RI9yGhr0QM3Dnq+egEpz9qB6Un+WLYhmoNcvl8ltMEededhh7otBVVIDDsEEttauwdY/hQoSsOv13lxrFzQ==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "8.15.0", @@ -9093,11 +9407,55 @@ } } }, - "node_modules/@typescript-eslint/visitor-keys": { + "node_modules/@typescript-eslint/utils/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, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/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, + "license": "BSD-2-Clause", + "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/utils/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, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "8.15.0", "eslint-visitor-keys": "^4.2.0" @@ -9110,17 +9468,76 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/utils/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/utils/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": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@typescript-eslint/utils/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@wry/caches": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@wry/caches/-/caches-1.0.1.tgz", "integrity": "sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "tslib": "^2.3.0" @@ -9134,6 +9551,7 @@ "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.7.4.tgz", "integrity": "sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "tslib": "^2.3.0" @@ -9147,6 +9565,7 @@ "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.5.7.tgz", "integrity": "sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "tslib": "^2.3.0" @@ -9160,6 +9579,7 @@ "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.5.0.tgz", "integrity": "sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "tslib": "^2.3.0" @@ -9173,6 +9593,7 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -9182,6 +9603,7 @@ "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, + "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -9193,25 +9615,37 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, "engines": { "node": ">= 0.6" } }, + "node_modules/accepts/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "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" }, @@ -9224,6 +9658,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -9233,6 +9668,7 @@ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.11.0" }, @@ -9244,48 +9680,28 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } + "license": "MIT" }, - "node_modules/agent-base/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/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "debug": "^4.3.4" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 14" } }, - "node_modules/agent-base/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/agentkeepalive": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", "dev": true, + "license": "MIT", "dependencies": { "humanize-ms": "^1.2.1" }, @@ -9298,6 +9714,7 @@ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, + "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -9311,6 +9728,7 @@ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -9319,6 +9737,7 @@ "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -9334,6 +9753,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -9346,16 +9766,12 @@ } } }, - "node_modules/ajv/node_modules/fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==" - }, "node_modules/amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", "dev": true, + "license": "BSD-3-Clause OR MIT", "engines": { "node": ">=0.4.2" } @@ -9365,6 +9781,7 @@ "resolved": "https://registry.npmjs.org/amqp-connection-manager/-/amqp-connection-manager-4.1.14.tgz", "integrity": "sha512-1km47dIvEr0HhMUazqovSvNwIlSvDX2APdUpULaINtHpiki1O+cLRaTeXb/jav4OLtH+k6GBXx5gsKOT9kcGKQ==", "dev": true, + "license": "MIT", "dependencies": { "promise-breaker": "^6.0.0" }, @@ -9381,6 +9798,7 @@ "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.10.5.tgz", "integrity": "sha512-Dx5zmy0Ur+Q7LPPdhz+jx5IzmJBoHd15tOeAfQ8SuvEtyPJ20hBemhOBA4b1WeORCRa0ENM/kHCzmem1w/zHvQ==", "dev": true, + "license": "MIT", "dependencies": { "@acuminous/bitsyntax": "^0.1.2", "buffer-more-ints": "~1.0.0", @@ -9395,6 +9813,7 @@ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -9404,6 +9823,7 @@ "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", "integrity": "sha512-eCjan3AVo/SxZ0/MyIYRtkpxIu/H3xZN7URr1vXVrISxeyz8fUFz0FJziamK4sS8I+t35y4rHg1b2PklyBe/7A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -9412,12 +9832,19 @@ } }, "node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-gray": { @@ -9425,6 +9852,7 @@ "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", "dev": true, + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -9437,6 +9865,7 @@ "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", "integrity": "sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", "dev": true, + "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -9445,26 +9874,26 @@ } }, "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, "node_modules/ansi-wrap": { @@ -9472,6 +9901,7 @@ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9480,12 +9910,14 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ansis": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.3.2.tgz", "integrity": "sha512-cFthbBlt+Oi0i9Pv/j6YdVWJh54CtjGACaMPCIrEV4Ha7HWsIjXDwseYV79TIL0B4+KfSwD5S70PeQDkPUd1rA==", + "license": "ISC", "engines": { "node": ">=15" } @@ -9494,59 +9926,152 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, + "license": "ISC", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/app-module-path": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", - "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==", - "dev": true - }, - "node_modules/app-root-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", - "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", - "dev": true, - "engines": { - "node": ">= 6.0.0" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" } }, - "node_modules/append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", + "node_modules/anymatch/node_modules/arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==", "dev": true, + "license": "MIT", "dependencies": { - "buffer-equal": "^1.0.0" + "arr-flatten": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/append-field": { + "node_modules/anymatch/node_modules/braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch/node_modules/micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/app-module-path": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", + "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/app-root-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", + "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/append-field": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/append-transform": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, + "license": "MIT", "dependencies": { "default-require-extensions": "^3.0.0" }, @@ -9558,13 +10083,15 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/archiver": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", "dev": true, + "license": "MIT", "dependencies": { "archiver-utils": "^2.1.0", "async": "^3.2.4", @@ -9583,6 +10110,7 @@ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", "dev": true, + "license": "MIT", "dependencies": { "glob": "^7.1.4", "graceful-fs": "^4.2.0", @@ -9599,17 +10127,12 @@ "node": ">= 6" } }, - "node_modules/archiver-utils/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/archiver-utils/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -9620,17 +10143,12 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/archiver-utils/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/archiver-utils/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -9639,36 +10157,15 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true - }, - "node_modules/archiver/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } + "license": "MIT" }, "node_modules/archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/are-we-there-yet": { "version": "1.1.7", @@ -9676,22 +10173,18 @@ "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "deprecated": "This package is no longer supported.", "dev": true, + "license": "ISC", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" } }, - "node_modules/are-we-there-yet/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/are-we-there-yet/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -9702,17 +10195,12 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/are-we-there-yet/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/are-we-there-yet/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -9721,13 +10209,15 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -9737,6 +10227,7 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9746,6 +10237,7 @@ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9755,6 +10247,7 @@ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9764,6 +10257,7 @@ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -9780,6 +10274,7 @@ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9789,6 +10284,7 @@ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9798,6 +10294,7 @@ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9812,13 +10309,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/array-includes": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -9839,6 +10338,7 @@ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9848,6 +10348,7 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -9857,6 +10358,7 @@ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9866,6 +10368,7 @@ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", "integrity": "sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9875,6 +10378,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -9895,6 +10399,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -9913,6 +10418,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -9931,6 +10437,7 @@ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -9953,6 +10460,7 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9962,39 +10470,18 @@ "resolved": "https://registry.npmjs.org/arrivals/-/arrivals-2.1.2.tgz", "integrity": "sha512-g3+rxhxUen2H4+PPBOz6U6pkQ4esBuQPna1rPskgK1jamBdDZeoppyB2vPUM/l0ccunwRrq4r2rKgCvc2FnrFA==", "dev": true, + "license": "ISC", "dependencies": { "debug": "^4.0.1", "nanotimer": "0.3.14" } }, - "node_modules/arrivals/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/arrivals/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/artillery": { "version": "2.0.21", "resolved": "https://registry.npmjs.org/artillery/-/artillery-2.0.21.tgz", "integrity": "sha512-4viCw0LQnuc9SyGiBlMbvdfGbNZxQao3twRmyEqF7aIiWx4Vfn8ag3uVxo8tNUzInf6sMcTESm0RSUe9jl768w==", "dev": true, + "license": "MPL-2.0", "dependencies": { "@artilleryio/int-commons": "2.12.0", "@artilleryio/int-core": "2.16.0", @@ -10059,6 +10546,7 @@ "resolved": "https://registry.npmjs.org/artillery-engine-playwright/-/artillery-engine-playwright-1.18.0.tgz", "integrity": "sha512-+BJhiiJIiCC+mtXuxdvmKNb8Kj+NXXsZs75SeLILukytg3ZMRhEWFbL7FnfizhzGqh/b2WGvOOjQYUV/OkRt9w==", "dev": true, + "license": "MPL-2.0", "dependencies": { "@playwright/browser-chromium": "^1.48.0", "@playwright/test": "^1.48.0", @@ -10066,66 +10554,12 @@ "playwright": "^1.48.0" } }, - "node_modules/artillery-engine-playwright/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/artillery-engine-playwright/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/artillery-engine-playwright/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/artillery-engine-playwright/node_modules/playwright": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.0.tgz", - "integrity": "sha512-eKpmys0UFDnfNb3vfsf8Vx2LEOtflgRebl0Im2eQQnYMA4Aqd+Zw8bEOB+7ZKvN76901mRnqdsiOGKxzVTbi7A==", - "dev": true, - "dependencies": { - "playwright-core": "1.49.0" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, "node_modules/artillery-plugin-apdex": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/artillery-plugin-apdex/-/artillery-plugin-apdex-1.12.0.tgz", "integrity": "sha512-RFwfXjSY7ELCMSBrLy5MiXt5WhseLDNrwXwOgbHOvR+40ULhtSb0N+EcC3Kxoxcn6MzPX9414RkS0Kj2e6TmIw==", "dev": true, + "license": "MPL-2.0", "dependencies": { "tap": "^19.0.2" } @@ -10135,146 +10569,108 @@ "resolved": "https://registry.npmjs.org/artillery-plugin-ensure/-/artillery-plugin-ensure-1.15.0.tgz", "integrity": "sha512-iUq+eTatH/jSrGy6SF/l50q5R+yMKiRfLh5S4lVJGq6Tf7FLgYNu7JelybJyTVUxUZcG0kyxHGmPcxnM78PAjQ==", "dev": true, + "license": "MPL-2.0", "dependencies": { "chalk": "^2.4.2", "debug": "^4.3.3", "filtrex": "^2.2.3" } }, - "node_modules/artillery-plugin-ensure/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/artillery-plugin-ensure/node_modules/filtrex": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/filtrex/-/filtrex-2.2.3.tgz", + "integrity": "sha512-TL12R6SckvJdZLibXqyp4D//wXZNyCalVYGqaWwQk9zucq9dRxmrJV4oyuRq4PHFHCeV5ZdzncIc/Ybqv1Lr6Q==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "node_modules/artillery-plugin-ensure/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/artillery-plugin-expect": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/artillery-plugin-expect/-/artillery-plugin-expect-2.15.0.tgz", + "integrity": "sha512-hVo628Y6Z/LiWG3frUl1GIwUqLBOlaiCxepsVkY/kN4KSX0FQV+SyWrGgzIw+eE0KDivWIUfnN93zhain9hotw==", "dev": true, + "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "chalk": "^4.1.2", + "debug": "^4.3.2", + "jmespath": "^0.16.0", + "lodash": "^4.17.21" }, "engines": { - "node": ">=4" - } - }, - "node_modules/artillery-plugin-ensure/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" + "node": ">= 14.17.6" } }, - "node_modules/artillery-plugin-ensure/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/artillery-plugin-ensure/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/artillery-plugin-expect/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6.0" + "node": ">=8" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/artillery-plugin-ensure/node_modules/filtrex": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/filtrex/-/filtrex-2.2.3.tgz", - "integrity": "sha512-TL12R6SckvJdZLibXqyp4D//wXZNyCalVYGqaWwQk9zucq9dRxmrJV4oyuRq4PHFHCeV5ZdzncIc/Ybqv1Lr6Q==", - "dev": true - }, - "node_modules/artillery-plugin-ensure/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/artillery-plugin-ensure/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/artillery-plugin-ensure/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/artillery-plugin-expect/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/artillery-plugin-expect": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/artillery-plugin-expect/-/artillery-plugin-expect-2.15.0.tgz", - "integrity": "sha512-hVo628Y6Z/LiWG3frUl1GIwUqLBOlaiCxepsVkY/kN4KSX0FQV+SyWrGgzIw+eE0KDivWIUfnN93zhain9hotw==", + "node_modules/artillery-plugin-expect/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.1.2", - "debug": "^4.3.2", - "jmespath": "^0.16.0", - "lodash": "^4.17.21" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 14.17.6" + "node": ">=7.0.0" } }, - "node_modules/artillery-plugin-expect/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/artillery-plugin-expect/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, + "license": "MIT" + }, + "node_modules/artillery-plugin-expect/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=8" } }, - "node_modules/artillery-plugin-expect/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/artillery-plugin-fake-data": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/artillery-plugin-fake-data/-/artillery-plugin-fake-data-1.12.0.tgz", "integrity": "sha512-fsYIQCsJSR9Jw/RFcqUfReHUpDBN4ddnqtaxkuwtpSUfVyqDFuiOIR7QYIsqBFfq1JNSkw2Op47Ol0tNFpZ5fA==", "dev": true, + "license": "MPL-2.0", "dependencies": { "@ngneat/falso": "^7.1.1" } @@ -10284,38 +10680,17 @@ "resolved": "https://registry.npmjs.org/artillery-plugin-metrics-by-endpoint/-/artillery-plugin-metrics-by-endpoint-1.15.0.tgz", "integrity": "sha512-I95bvm4jG67lPYlQwSQZNcKajZee7YtezCVVWBN47tkrFDUDqdaba3dGCI8O+9H9kE5dm0s7WdzyfvUZZCxE+A==", "dev": true, + "license": "MPL-2.0", "dependencies": { "debug": "^4.3.2" } }, - "node_modules/artillery-plugin-metrics-by-endpoint/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/artillery-plugin-metrics-by-endpoint/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/artillery-plugin-publish-metrics": { "version": "2.26.0", "resolved": "https://registry.npmjs.org/artillery-plugin-publish-metrics/-/artillery-plugin-publish-metrics-2.26.0.tgz", "integrity": "sha512-qI3S3AgkF2PVkP5POxubehju6onMl3HPq9WTGYK29gp3MaSSf/s+5i2UNjkAEmdrO2fqBnhanSo+Df8ffuC0eA==", "dev": true, + "license": "MPL-2.0", "dependencies": { "@aws-sdk/client-cloudwatch": "^3.370.0", "@opentelemetry/api": "^1.4.1", @@ -10344,46 +10719,12 @@ "uuid": "^8.3.2" } }, - "node_modules/artillery-plugin-publish-metrics/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/artillery-plugin-publish-metrics/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/artillery-plugin-publish-metrics/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/artillery-plugin-publish-metrics/node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -10393,58 +10734,24 @@ "resolved": "https://registry.npmjs.org/artillery-plugin-slack/-/artillery-plugin-slack-1.10.0.tgz", "integrity": "sha512-3foLJ/fkLeCl5P2tZ43d+hKzikNYvtiWWYaxGaGfKpBlNchKSXmiPh4ZpPur/VzKynnA5IjnG4eagSbf/tZ+Wg==", "dev": true, + "license": "MPL-2.0", "dependencies": { "debug": "^4.3.4", "got": "^11.8.5" } }, - "node_modules/artillery-plugin-slack/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/artillery-plugin-slack/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/artillery/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/artillery/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/artillery/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">=4" + "node": ">= 8" } }, "node_modules/artillery/node_modules/chokidar": { @@ -10452,6 +10759,7 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -10471,87 +10779,25 @@ "fsevents": "~2.3.2" } }, - "node_modules/artillery/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/artillery/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { - "color-name": "1.1.3" + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/artillery/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/artillery/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/artillery/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/artillery/node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/artillery/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/artillery/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/artillery/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/artillery/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/artillery/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -10559,65 +10805,19 @@ "node": ">=8.10.0" } }, - "node_modules/artillery/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, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/artillery/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/artillery/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/artillery/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, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": "~2.1.0" } @@ -10627,6 +10827,7 @@ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } @@ -10636,6 +10837,7 @@ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -10645,6 +10847,7 @@ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10654,6 +10857,7 @@ "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-5.0.0.tgz", "integrity": "sha512-JvqziE0Wc0rXQfma0HZC/aY7URXHFuZV84fJRtP8u+lhp0JYCNd5wJzVXP45t0PH0Mej3ynlzvdyITYIu0G4LQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -10663,6 +10867,7 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.14" } @@ -10672,6 +10877,7 @@ "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.2", @@ -10692,13 +10898,15 @@ "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/async-hook-domain": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-4.0.1.tgz", "integrity": "sha512-bSktexGodAjfHWIrSrrqxqWzf1hWBZBpmPNZv+TYUMyWa2eoefFc6q6H1+KtdHYSz35lrhWdmXt/XK9wNEZvww==", "dev": true, + "license": "ISC", "engines": { "node": ">=16" } @@ -10707,13 +10915,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/async-retry": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", "dev": true, + "license": "MIT", "dependencies": { "retry": "0.13.1" } @@ -10723,6 +10933,7 @@ "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-2.0.0.tgz", "integrity": "sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==", "dev": true, + "license": "MIT", "dependencies": { "async-done": "^2.0.0" }, @@ -10735,6 +10946,7 @@ "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.4.4", "once": "^1.4.0", @@ -10748,13 +10960,15 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true, + "license": "(MIT OR Apache-2.0)", "bin": { "atob": "bin/atob.js" }, @@ -10767,6 +10981,7 @@ "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -10776,6 +10991,7 @@ "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-5.0.1.tgz", "integrity": "sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -10788,6 +11004,7 @@ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -10799,12 +11016,13 @@ } }, "node_modules/avvio": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.4.0.tgz", - "integrity": "sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-9.1.0.tgz", + "integrity": "sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==", "dev": true, + "license": "MIT", "dependencies": { - "@fastify/error": "^3.3.0", + "@fastify/error": "^4.0.0", "fastq": "^1.17.1" } }, @@ -10814,6 +11032,7 @@ "integrity": "sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw==", "dev": true, "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "buffer": "4.9.2", "events": "1.1.1", @@ -10830,43 +11049,22 @@ "node": ">= 10.0.0" } }, - "node_modules/aws-sdk/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, "node_modules/aws-sdk/node_modules/events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.x" } }, - "node_modules/aws-sdk/node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "node_modules/aws-sdk/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/aws-sdk/node_modules/uuid": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -10876,6 +11074,7 @@ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "*" } @@ -10885,6 +11084,7 @@ "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6.0.0" } @@ -10893,13 +11093,15 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/axios": { "version": "0.27.2", "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", "dev": true, + "license": "MIT", "dependencies": { "follow-redirects": "^1.14.9", "form-data": "^4.0.0" @@ -10910,6 +11112,7 @@ "resolved": "https://registry.npmjs.org/bach/-/bach-2.0.1.tgz", "integrity": "sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==", "dev": true, + "license": "MIT", "dependencies": { "async-done": "^2.0.0", "async-settle": "^2.0.0", @@ -10924,6 +11127,7 @@ "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.4.4", "once": "^1.4.0", @@ -10937,19 +11141,22 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", "integrity": "sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bare-events": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", "dev": true, + "license": "Apache-2.0", "optional": true }, "node_modules/base": { @@ -10957,6 +11164,7 @@ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, + "license": "MIT", "dependencies": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -10975,6 +11183,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^1.0.0" }, @@ -10987,6 +11196,7 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, + "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" @@ -11013,12 +11223,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "license": "MIT", "engines": { "node": "^4.5.0 || >= 5.9" } @@ -11028,15 +11240,24 @@ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tweetnacl": "^0.14.3" } }, + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true, + "license": "Unlicense" + }, "node_modules/beeper": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", "integrity": "sha512-3vqtKL1N45I5dV0RdssXZG7X6pCqQrWPNOlBPZPrd+QkE2HEhR57Z04m0KtpbsZH73j+a3F8UD1TQnn+ExTvIA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11046,6 +11267,7 @@ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -11055,6 +11277,7 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -11067,6 +11290,7 @@ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "file-uri-to-path": "1.0.0" @@ -11076,53 +11300,98 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/bl/-/bl-6.0.16.tgz", + "integrity": "sha512-V/kz+z2Mx5/6qDfRCilmrukUXcXuCoXKg3/3hDvzKKoSUx8CJKudfIoT29XZc3UE9xBvxs5qictiHdprwtteEg==", "dev": true, + "license": "MIT", "dependencies": { - "buffer": "^5.5.0", + "@types/readable-stream": "^4.0.0", + "buffer": "^6.0.3", "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "readable-stream": "^4.2.0" } }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/bl/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/bl/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/bl/node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -11142,23 +11411,43 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -11169,6 +11458,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -11180,13 +11470,15 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz", "integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/browserslist": { "version": "4.24.2", @@ -11207,6 +11499,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "caniuse-lite": "^1.0.30001669", "electron-to-chromium": "^1.5.41", @@ -11225,32 +11518,21 @@ "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.0.tgz", "integrity": "sha512-ROchNosXMJD2cbQGm84KoP7vOGPO6/bOAW0veMMbzhXLqoZptcaYRVLitwvuhwhjjpU1qP4YZRWLhgETdgqUQw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=16.20.1" } }, "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "node_modules/buffer-crc32": { @@ -11258,6 +11540,7 @@ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -11267,6 +11550,7 @@ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4" }, @@ -11278,19 +11562,22 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/buffer-more-ints": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz", "integrity": "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/busboy": { "version": "0.2.14", @@ -11305,11 +11592,39 @@ "node": ">=0.8.0" } }, + "node_modules/busboy/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/busboy/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/busboy/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true, + "license": "MIT" + }, "node_modules/byline": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11318,6 +11633,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -11327,6 +11643,7 @@ "resolved": "https://registry.npmjs.org/c8/-/c8-9.1.0.tgz", "integrity": "sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg==", "dev": true, + "license": "ISC", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@istanbuljs/schema": "^0.1.3", @@ -11352,6 +11669,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -11368,6 +11686,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -11383,6 +11702,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -11398,6 +11718,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -11413,15 +11734,27 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/c8/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/c8/node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -11430,73 +11763,89 @@ } }, "node_modules/cacache": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", - "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "dev": true, + "license": "ISC", "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 10" } }, - "node_modules/cacache/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==", + "node_modules/cacache/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { - "balanced-match": "^1.0.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/cacache/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "aggregate-error": "^3.0.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/cacache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "glob": "^7.1.3" }, - "engines": { - "node": ">=16 || 14 >=14.17" + "bin": { + "rimraf": "bin.js" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -11507,6 +11856,7 @@ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, + "license": "MIT", "dependencies": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -11527,6 +11877,7 @@ "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-5.7.6.tgz", "integrity": "sha512-wBxnBHjDxF1RXpHCBD6HGvKER003Ts7IIm0CHpggliHzN1RZditb7rXoduE1rplc2DEFYKxhLKgFuchXMJje9w==", "dev": true, + "license": "MIT", "dependencies": { "eventemitter3": "^5.0.1", "lodash.clonedeep": "^4.5.0", @@ -11542,6 +11893,7 @@ "resolved": "https://registry.npmjs.org/cache-manager-redis-store/-/cache-manager-redis-store-3.0.1.tgz", "integrity": "sha512-o560kw+dFqusC9lQJhcm6L2F2fMKobJ5af+FoR2PdnMVdpQ3f3Bz6qzvObTGyvoazQJxjQNWgMQeChP4vRTuXQ==", "dev": true, + "license": "MIT", "dependencies": { "redis": "^4.3.1" }, @@ -11553,19 +11905,22 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cache-manager/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.6.0" } @@ -11575,6 +11930,7 @@ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dev": true, + "license": "MIT", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -11593,6 +11949,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -11608,6 +11965,7 @@ "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, + "license": "MIT", "dependencies": { "hasha": "^5.0.0", "make-dir": "^3.0.0", @@ -11618,35 +11976,19 @@ "node": ">=8" } }, - "node_modules/caching-transform/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caching-transform/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/caching-transform/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" - } + "license": "ISC" }, "node_modules/caching-transform/node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -11658,6 +12000,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -11677,17 +12020,19 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/camelcase-keys": { @@ -11695,6 +12040,7 @@ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", "integrity": "sha512-Ej37YKYbFUI8QiYlvj9YHb6/Z60dZyPJW0Cs8sFilMbd2lP0bw3ylAq9yJkK4lcTA2dID5fG8LjmJYbO7kWb7Q==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^4.1.0", "map-obj": "^2.0.0", @@ -11704,19 +12050,30 @@ "node": ">=4" } }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/camelcase-keys/node_modules/quick-lru": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", "integrity": "sha512-tRS7sTgyxMXtLum8L65daJnHUhfDUgboRdcWW2bR9vBfrj2+O5HSMbQOJfJJjIVSPFqbBCF37FpwWXGitDc5tA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001683", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001683.tgz", - "integrity": "sha512-iqmNnThZ0n70mNwvxpEC2nBJ037ZHZUoBI5Gorh1Mw6IlEAZujEoU1tXA628iZfzm7R9FvFzxbfdgml82a3k8Q==", + "version": "1.0.30001684", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", + "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", "dev": true, "funding": [ { @@ -11731,13 +12088,15 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/capture-stack-trace": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz", "integrity": "sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" }, @@ -11750,6 +12109,7 @@ "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", "dev": true, + "license": "MIT", "dependencies": { "ansicolors": "~0.3.2", "redeyed": "~2.1.0" @@ -11762,13 +12122,15 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/chai": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", "dev": true, + "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", @@ -11787,6 +12149,7 @@ "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", "dev": true, + "license": "WTFPL", "dependencies": { "check-error": "^1.0.2" }, @@ -11795,31 +12158,56 @@ } }, "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=10" + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": ">=4" } }, "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/check-error": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "license": "MIT", "dependencies": { "get-func-name": "^2.0.2" }, @@ -11832,6 +12220,7 @@ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz", "integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==", "dev": true, + "license": "MIT", "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", @@ -11857,6 +12246,7 @@ "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", @@ -11874,6 +12264,7 @@ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } @@ -11883,6 +12274,7 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", "dev": true, + "license": "MIT", "dependencies": { "readdirp": "^4.0.1" }, @@ -11898,6 +12290,7 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -11913,6 +12306,7 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } @@ -11922,6 +12316,7 @@ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.8.0.tgz", "integrity": "sha512-pK8gzfu55/lHzIpQ1givIbWfn3eXnU7SfxqIwVgnn5jEM6j4ZJYjpFqFs4iSBPNedzRMmfjYjuQhu657WAXHXw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", "glob": "^7.0.0", @@ -11937,18 +12332,21 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/class-transformer": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", - "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", + "license": "MIT" }, "node_modules/class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -11959,22 +12357,11 @@ "node": ">=0.10.0" } }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/class-validator": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.1.tgz", "integrity": "sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==", + "license": "MIT", "dependencies": { "@types/validator": "^13.11.8", "libphonenumber-js": "^1.10.53", @@ -11986,6 +12373,7 @@ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "4.0.0" }, @@ -12001,6 +12389,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -12013,6 +12402,7 @@ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -12025,6 +12415,7 @@ "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.4.0.tgz", "integrity": "sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w==", "dev": true, + "license": "ISC", "dependencies": { "ansi-regex": "^2.1.1", "d": "1", @@ -12034,28 +12425,17 @@ "timers-ext": "^0.1.5" } }, - "node_modules/cli-color/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "dev": true, + "license": "MIT", "dependencies": { - "restore-cursor": "^4.0.0" + "restore-cursor": "^2.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, "node_modules/cli-highlight": { @@ -12063,6 +12443,7 @@ "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", "dev": true, + "license": "ISC", "dependencies": { "chalk": "^4.0.0", "highlight.js": "^10.7.1", @@ -12079,28 +12460,84 @@ "npm": ">=5.0.0" } }, + "node_modules/cli-highlight/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-highlight/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/cli-highlight/node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, + "node_modules/cli-highlight/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cli-highlight/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/cli-highlight/node_modules/parse5": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cli-highlight/node_modules/parse5-htmlparser2-tree-adapter": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, + "license": "MIT", "dependencies": { "parse5": "^6.0.1" } @@ -12109,13 +12546,28 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/cli-highlight/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/cli-highlight/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -12129,20 +12581,12 @@ "node": ">=10" } }, - "node_modules/cli-highlight/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/cli-spinners": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -12167,6 +12611,7 @@ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "dev": true, + "license": "MIT", "dependencies": { "string-width": "^4.2.0" }, @@ -12178,16 +12623,17 @@ } }, "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, + "license": "MIT", "dependencies": { "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" + "string-width": "^7.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -12198,6 +12644,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -12205,64 +12652,26 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/cli-truncate/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true, - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } + "license": "MIT" }, "node_modules/cli-truncate/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -12273,6 +12682,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -12288,6 +12698,7 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "dev": true, + "license": "ISC", "engines": { "node": ">= 12" } @@ -12297,6 +12708,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -12307,10 +12719,11 @@ } }, "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } @@ -12320,6 +12733,7 @@ "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -12329,6 +12743,7 @@ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" }, @@ -12341,6 +12756,7 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -12349,30 +12765,27 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cloneable-readable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "process-nextick-args": "^2.0.0", "readable-stream": "^2.3.5" } }, - "node_modules/cloneable-readable/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/cloneable-readable/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -12383,17 +12796,12 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/cloneable-readable/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/cloneable-readable/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -12403,6 +12811,7 @@ "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=0.10.0" } @@ -12412,6 +12821,7 @@ "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.1.0.tgz", "integrity": "sha512-A5C0Cyf2H8sKsHqX0tvIWRXw5/PK++3Dc0lDbsugr90nOECLLuSPahVQBG8pgmgiXgm/TzBWMqI2rWdZwHduAw==", "dev": true, + "license": "ISC", "dependencies": { "graceful-fs": "^4.1.2", "mkdirp": "~0.5.0" @@ -12421,13 +12831,15 @@ "version": "13.0.3", "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz", "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/code-excerpt": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", "dev": true, + "license": "MIT", "dependencies": { "convert-to-spaces": "^2.0.1" }, @@ -12440,6 +12852,7 @@ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -12449,6 +12862,7 @@ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", "dev": true, + "license": "MIT", "dependencies": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -12458,26 +12872,28 @@ } }, "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "color-name": "1.1.3" } }, "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" }, "node_modules/color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, + "license": "ISC", "bin": { "color-support": "bin.js" } @@ -12486,13 +12902,15 @@ "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/colors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.1.90" } @@ -12502,6 +12920,7 @@ "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", "dev": true, + "license": "MIT", "dependencies": { "strip-ansi": "^6.0.1", "wcwidth": "^1.0.0" @@ -12515,6 +12934,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -12528,6 +12948,7 @@ "integrity": "sha512-LBA9kSxtg2SA8itaBeuitpn4pZQOhGVP1dyU1cnXLYrBpF3sikaPhjWPqyqVh7oGpneI05RtJs9a0fftIEgXcA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "@improved/node": "^1.0.0" }, @@ -12539,25 +12960,29 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/commist": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/commist/-/commist-3.2.0.tgz", "integrity": "sha512-4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, + "license": "MIT", "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" @@ -12568,6 +12993,7 @@ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -12577,6 +13003,7 @@ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", "dev": true, + "license": "MIT", "dependencies": { "buffer-crc32": "^0.2.13", "crc32-stream": "^4.0.2", @@ -12587,34 +13014,12 @@ "node": ">= 10" } }, - "node_modules/compress-commons/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/compress-commons/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -12624,6 +13029,7 @@ "engines": [ "node >= 0.8" ], + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -12631,17 +13037,12 @@ "typedarray": "^0.0.6" } }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/concat-stream/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -12652,17 +13053,12 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/concat-stream/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -12672,6 +13068,7 @@ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.1.0.tgz", "integrity": "sha512-VxkzwMAn4LP7WyMnJNbHN5mKV9L2IbyDjpzemKr99sXNR3GqRNMMHdm7prV1ws9wg7ETj6WUkNOigZVsptwbgg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.2", "lodash": "^4.17.21", @@ -12692,37 +13089,91 @@ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, - "node_modules/concurrently/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/concurrently/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, + "node_modules/concurrently/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/consola": { "version": "2.15.3", "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "license": "MIT" }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -12730,10 +13181,32 @@ "node": ">= 0.6" } }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -12743,6 +13216,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-6.0.0.tgz", "integrity": "sha512-tuUH8H/19VjtD9Ig7l6TQRh+Z0Yt0NZ6w/cCkkyzUbGQTnUEmKfGtkC9gGfVgCfOL1Rzno5NgNF4KY8vR+Jo3w==", "dev": true, + "license": "MIT", "dependencies": { "conventional-changelog-angular": "^8.0.0", "conventional-changelog-atom": "^5.0.0", @@ -12765,6 +13239,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0" }, @@ -12777,6 +13252,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-5.0.0.tgz", "integrity": "sha512-WfzCaAvSCFPkznnLgLnfacRAzjgqjLUjvf3MftfsJzQdDICqkOOpcMtdJF3wTerxSpv2IAAjX8doM3Vozqle3g==", "dev": true, + "license": "ISC", "engines": { "node": ">=18" } @@ -12786,6 +13262,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-1.3.22.tgz", "integrity": "sha512-pnjdIJbxjkZ5VdAX/H1wndr1G10CY8MuZgnXuJhIHglOXfIrXygb7KZC836GW9uo1u8PjEIvIw/bKX0lOmOzZg==", "dev": true, + "license": "MIT", "dependencies": { "add-stream": "^1.0.0", "conventional-changelog": "^1.1.24", @@ -12802,6 +13279,7 @@ "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.4.tgz", "integrity": "sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q==", "dev": true, + "license": "MIT", "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^3.0.0" @@ -12812,6 +13290,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.24.tgz", "integrity": "sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==", "dev": true, + "license": "MIT", "dependencies": { "conventional-changelog-angular": "^1.6.6", "conventional-changelog-atom": "^0.2.8", @@ -12831,6 +13310,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz", "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^1.3.1", "q": "^1.5.1" @@ -12841,6 +13321,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz", "integrity": "sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" } @@ -12850,6 +13331,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz", "integrity": "sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" } @@ -12859,6 +13341,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz", "integrity": "sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==", "dev": true, + "license": "MIT", "dependencies": { "conventional-changelog-writer": "^3.0.9", "conventional-commits-parser": "^2.1.7", @@ -12880,6 +13363,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz", "integrity": "sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" } @@ -12889,6 +13373,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz", "integrity": "sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" } @@ -12898,6 +13383,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz", "integrity": "sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" } @@ -12907,6 +13393,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz", "integrity": "sha512-wbz5vVcvu/SPZTDFB21fF/xo5zFq6NQR42jhtUfOrrP1N/ZjNshhGb3expCGqHYdnUHzPevHeUafsVrdxVD5Og==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.4.1" } @@ -12916,6 +13403,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz", "integrity": "sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^1.3.1", "q": "^1.5.1" @@ -12925,13 +13413,15 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz", "integrity": "sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/conventional-changelog-cli/node_modules/conventional-changelog-writer": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz", "integrity": "sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==", "dev": true, + "license": "MIT", "dependencies": { "compare-func": "^1.3.1", "conventional-commits-filter": "^1.1.6", @@ -12953,6 +13443,7 @@ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz", "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==", "dev": true, + "license": "MIT", "dependencies": { "is-subset": "^0.1.1", "modify-values": "^1.0.0" @@ -12963,6 +13454,7 @@ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz", "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==", "dev": true, + "license": "MIT", "dependencies": { "is-text-path": "^1.0.0", "JSONStream": "^1.0.4", @@ -12981,6 +13473,7 @@ "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", "integrity": "sha512-jyweV/k0rbv2WK4r9KLayuBrSh2Py0tNmV7LBoSMH4hMQyrG8OPyIOWB2VEx4DJKXWmK4lopYMVvORlDt2S8Aw==", "dev": true, + "license": "MIT", "dependencies": { "number-is-nan": "^1.0.0" }, @@ -12993,6 +13486,7 @@ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -13002,6 +13496,7 @@ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", "integrity": "sha512-k4ELWeEU3uCcwub7+dWydqQBRjAjkV9L33HjVRG5Xo2QybI6ja/v+4W73SRi8ubCqJz0l9XsTP1NbewfyqaSlw==", "dev": true, + "license": "MIT", "dependencies": { "is-obj": "^1.0.0" }, @@ -13014,6 +13509,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^2.0.0" }, @@ -13026,6 +13522,7 @@ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz", "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==", "dev": true, + "license": "MIT", "dependencies": { "dargs": "^4.0.1", "lodash.template": "^4.0.2", @@ -13042,6 +13539,7 @@ "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz", "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==", "dev": true, + "license": "MIT", "dependencies": { "meow": "^4.0.0", "semver": "^5.5.0" @@ -13054,13 +13552,15 @@ "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/conventional-changelog-cli/node_modules/is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -13070,6 +13570,7 @@ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, + "license": "MIT", "dependencies": { "text-extensions": "^1.0.0" }, @@ -13077,11 +13578,29 @@ "node": ">=0.10.0" } }, + "node_modules/conventional-changelog-cli/node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/conventional-changelog-cli/node_modules/locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -13095,6 +13614,7 @@ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", "dev": true, + "license": "MIT", "dependencies": { "lodash._reinterpolate": "^3.0.0", "lodash.templatesettings": "^4.0.0" @@ -13105,6 +13625,7 @@ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", "dev": true, + "license": "MIT", "dependencies": { "lodash._reinterpolate": "^3.0.0" } @@ -13114,6 +13635,7 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", "dev": true, + "license": "MIT", "dependencies": { "camelcase-keys": "^4.0.0", "decamelize-keys": "^1.0.0", @@ -13129,11 +13651,65 @@ "node": ">=4" } }, + "node_modules/conventional-changelog-cli/node_modules/meow/node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-cli/node_modules/meow/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-cli/node_modules/meow/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-cli/node_modules/meow/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/conventional-changelog-cli/node_modules/meow/node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, + "license": "MIT", "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", @@ -13148,6 +13724,7 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^2.0.0", "read-pkg": "^3.0.0" @@ -13156,11 +13733,22 @@ "node": ">=4" } }, + "node_modules/conventional-changelog-cli/node_modules/meow/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/conventional-changelog-cli/node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -13173,6 +13761,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^1.0.0" }, @@ -13185,6 +13774,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^1.1.0" }, @@ -13192,11 +13782,22 @@ "node": ">=4" } }, + "node_modules/conventional-changelog-cli/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/conventional-changelog-cli/node_modules/parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, + "license": "MIT", "dependencies": { "error-ex": "^1.2.0" }, @@ -13209,29 +13810,34 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/conventional-changelog-cli/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", "dev": true, + "license": "MIT", "dependencies": { - "pify": "^3.0.0" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, "node_modules/conventional-changelog-cli/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, "node_modules/conventional-changelog-cli/node_modules/read-pkg": { @@ -13239,6 +13845,7 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", "dev": true, + "license": "MIT", "dependencies": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -13248,43 +13855,14 @@ "node": ">=0.10.0" } }, - "node_modules/conventional-changelog-cli/node_modules/read-pkg/node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-changelog-cli/node_modules/read-pkg/node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-changelog-cli/node_modules/read-pkg/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "node_modules/conventional-changelog-cli/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "engines": { - "node": ">=0.10.0" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, "node_modules/conventional-changelog-cli/node_modules/split2": { @@ -13292,6 +13870,7 @@ "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", "dev": true, + "license": "ISC", "dependencies": { "through2": "^2.0.2" } @@ -13301,6 +13880,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dev": true, + "license": "MIT", "dependencies": { "is-utf8": "^0.2.0" }, @@ -13313,6 +13893,7 @@ "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } @@ -13322,6 +13903,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-5.0.0.tgz", "integrity": "sha512-8gsBDI5Y3vrKUCxN6Ue8xr6occZ5nsDEc4C7jO/EovFGozx8uttCAyfhRrvoUAWi2WMm3OmYs+0mPJU7kQdYWQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=18" } @@ -13331,6 +13913,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-8.0.0.tgz", "integrity": "sha512-eOvlTO6OcySPyyyk8pKz2dP4jjElYunj9hn9/s0OB+gapTO8zwS9UQWrZ1pmF2hFs3vw1xhonOLGcGjy/zgsuA==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0" }, @@ -13343,6 +13926,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-8.0.0.tgz", "integrity": "sha512-EATUx5y9xewpEe10UEGNpbSHRC6cVZgO+hXQjofMqpy+gFIrcGvH3Fl6yk2VFKh7m+ffenup2N7SZJYpyD9evw==", "dev": true, + "license": "MIT", "dependencies": { "@hutson/parse-repository-url": "^5.0.0", "add-stream": "^1.0.0", @@ -13364,6 +13948,7 @@ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.0.0.tgz", "integrity": "sha512-TbsINLp48XeMXR8EvGjTnKGsZqBemisPoyWESlpRyR8lif0lcwzqz+NMtYSj1ooF/WYjSuu7wX0CtdeeMEQAmA==", "dev": true, + "license": "MIT", "dependencies": { "meow": "^13.0.0" }, @@ -13379,6 +13964,7 @@ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-5.0.0.tgz", "integrity": "sha512-I2ZXrXeOc0KrCvC7swqtIFXFN+rbjnC7b2T943tvemIOVNl+XP8YnA9UVwqFhzzLClnSA60KR/qEjLpXzs73Qg==", "dev": true, + "license": "MIT", "dependencies": { "@conventional-changelog/git-client": "^1.0.0", "meow": "^13.0.0" @@ -13390,23 +13976,12 @@ "node": ">=18" } }, - "node_modules/conventional-changelog-core/node_modules/meow": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", - "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/conventional-changelog-ember": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-5.0.0.tgz", "integrity": "sha512-RPflVfm5s4cSO33GH/Ey26oxhiC67akcxSKL8CLRT3kQX2W3dbE19sSOM56iFqUJYEwv9mD9r6k79weWe1urfg==", "dev": true, + "license": "ISC", "engines": { "node": ">=18" } @@ -13416,6 +13991,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-6.0.0.tgz", "integrity": "sha512-eiUyULWjzq+ybPjXwU6NNRflApDWlPEQEHvI8UAItYW/h22RKkMnOAtfCZxMmrcMO1OKUWtcf2MxKYMWe9zJuw==", "dev": true, + "license": "ISC", "engines": { "node": ">=18" } @@ -13425,6 +14001,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-5.0.0.tgz", "integrity": "sha512-D8Q6WctPkQpvr2HNCCmwU5GkX22BVHM0r4EW8vN0230TSyS/d6VQJDAxGb84lbg0dFjpO22MwmsikKL++Oo/oQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=18" } @@ -13434,6 +14011,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-6.0.0.tgz", "integrity": "sha512-2kxmVakyehgyrho2ZHBi90v4AHswkGzHuTaoH40bmeNqUt20yEkDOSpw8HlPBfvEQBwGtbE+5HpRwzj6ac2UfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=18" } @@ -13443,6 +14021,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz", "integrity": "sha512-V8sey4tE0nJUlWGi2PZKDMfawYLf/+F165xhhDjcIoTEJDxssVV5PMVzTQzjS6U/dEX85fWkur+bs6imOqkIng==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.4.1" } @@ -13452,6 +14031,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-5.0.0.tgz", "integrity": "sha512-gGNphSb/opc76n2eWaO6ma4/Wqu3tpa2w7i9WYqI6Cs2fncDSI2/ihOfMvXveeTTeld0oFvwMVNV+IYQIk3F3g==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0" }, @@ -13464,6 +14044,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-5.0.0.tgz", "integrity": "sha512-SetDSntXLk8Jh1NOAl1Gu5uLiCNSYenB5tm0YVeZKePRIgDW9lQImromTwLa3c/Gae298tsgOM+/CYT9XAl0NA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } @@ -13473,6 +14054,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-8.0.0.tgz", "integrity": "sha512-TQcoYGRatlAnT2qEWDON/XSfnVG38JzA7E0wcGScu7RElQBkg9WWgZd1peCWFcWDh1xfb2CfsrcvOn1bbSzztA==", "dev": true, + "license": "MIT", "dependencies": { "@types/semver": "^7.5.5", "conventional-commits-filter": "^5.0.0", @@ -13487,35 +14069,12 @@ "node": ">=18" } }, - "node_modules/conventional-changelog-writer/node_modules/meow": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", - "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-changelog-writer/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/conventional-changelog/node_modules/conventional-changelog-angular": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.0.0.tgz", "integrity": "sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0" }, @@ -13528,6 +14087,7 @@ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-5.0.0.tgz", "integrity": "sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } @@ -13537,6 +14097,7 @@ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", "dev": true, + "license": "MIT", "dependencies": { "is-text-path": "^2.0.0", "JSONStream": "^1.3.5", @@ -13550,11 +14111,25 @@ "node": ">=16" } }, + "node_modules/conventional-commits-parser/node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/conventional-recommended-bump": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-1.2.1.tgz", "integrity": "sha512-oJjG6DkRgtnr/t/VrPdzmf4XZv8c4xKVJrVT4zrSHd92KEL+EYxSbYoKq8lQ7U5yLMw7130wrcQTLRjM/T+d4w==", "dev": true, + "license": "MIT", "dependencies": { "concat-stream": "^1.4.10", "conventional-commits-filter": "^1.1.1", @@ -13573,6 +14148,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -13582,6 +14158,7 @@ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz", "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==", "dev": true, + "license": "MIT", "dependencies": { "is-subset": "^0.1.1", "modify-values": "^1.0.0" @@ -13592,6 +14169,7 @@ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz", "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==", "dev": true, + "license": "MIT", "dependencies": { "is-text-path": "^1.0.0", "JSONStream": "^1.0.4", @@ -13610,6 +14188,7 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", "dev": true, + "license": "MIT", "dependencies": { "camelcase-keys": "^4.0.0", "decamelize-keys": "^1.0.0", @@ -13625,11 +14204,26 @@ "node": ">=4" } }, + "node_modules/conventional-recommended-bump/node_modules/conventional-commits-parser/node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/conventional-recommended-bump/node_modules/dargs": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", "integrity": "sha512-jyweV/k0rbv2WK4r9KLayuBrSh2Py0tNmV7LBoSMH4hMQyrG8OPyIOWB2VEx4DJKXWmK4lopYMVvORlDt2S8Aw==", "dev": true, + "license": "MIT", "dependencies": { "number-is-nan": "^1.0.0" }, @@ -13642,6 +14236,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^2.0.0" }, @@ -13654,6 +14249,7 @@ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz", "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==", "dev": true, + "license": "MIT", "dependencies": { "dargs": "^4.0.1", "lodash.template": "^4.0.2", @@ -13670,6 +14266,7 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", "dev": true, + "license": "MIT", "dependencies": { "camelcase-keys": "^4.0.0", "decamelize-keys": "^1.0.0", @@ -13685,11 +14282,26 @@ "node": ">=4" } }, + "node_modules/conventional-recommended-bump/node_modules/git-raw-commits/node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/conventional-recommended-bump/node_modules/git-semver-tags": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz", "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==", "dev": true, + "license": "MIT", "dependencies": { "meow": "^4.0.0", "semver": "^5.5.0" @@ -13703,6 +14315,7 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", "dev": true, + "license": "MIT", "dependencies": { "camelcase-keys": "^4.0.0", "decamelize-keys": "^1.0.0", @@ -13718,17 +14331,33 @@ "node": ">=4" } }, + "node_modules/conventional-recommended-bump/node_modules/git-semver-tags/node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/conventional-recommended-bump/node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/conventional-recommended-bump/node_modules/indent-string": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", "dev": true, + "license": "MIT", "dependencies": { "repeating": "^2.0.0" }, @@ -13741,6 +14370,7 @@ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, + "license": "MIT", "dependencies": { "text-extensions": "^1.0.0" }, @@ -13753,6 +14383,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -13766,6 +14397,7 @@ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", "dev": true, + "license": "MIT", "dependencies": { "lodash._reinterpolate": "^3.0.0", "lodash.templatesettings": "^4.0.0" @@ -13776,6 +14408,7 @@ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", "dev": true, + "license": "MIT", "dependencies": { "lodash._reinterpolate": "^3.0.0" } @@ -13785,6 +14418,7 @@ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -13794,6 +14428,7 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", "dev": true, + "license": "MIT", "dependencies": { "camelcase-keys": "^2.0.0", "decamelize": "^1.1.2", @@ -13815,6 +14450,7 @@ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^2.0.0", "map-obj": "^1.0.0" @@ -13823,102 +14459,12 @@ "node": ">=0.10.0" } }, - "node_modules/conventional-recommended-bump/node_modules/meow/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-recommended-bump/node_modules/meow/node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-recommended-bump/node_modules/meow/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-recommended-bump/node_modules/meow/node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-recommended-bump/node_modules/meow/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-recommended-bump/node_modules/meow/node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/conventional-recommended-bump/node_modules/meow/node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/conventional-recommended-bump/node_modules/meow/node_modules/redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^2.1.0", "strip-indent": "^1.0.1" @@ -13932,6 +14478,7 @@ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -13941,6 +14488,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -13953,6 +14501,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^1.0.0" }, @@ -13965,6 +14514,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^1.1.0" }, @@ -13972,16 +14522,14 @@ "node": ">=4" } }, - "node_modules/conventional-recommended-bump/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "node_modules/conventional-recommended-bump/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, "node_modules/conventional-recommended-bump/node_modules/path-exists": { @@ -13989,6 +14537,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -13998,6 +14547,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^3.0.0" }, @@ -14005,20 +14555,12 @@ "node": ">=4" } }, - "node_modules/conventional-recommended-bump/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/conventional-recommended-bump/node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, + "license": "MIT", "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", @@ -14028,17 +14570,14 @@ "node": ">=4" } }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "node_modules/conventional-recommended-bump/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=4" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, "node_modules/conventional-recommended-bump/node_modules/split2": { @@ -14046,27 +14585,17 @@ "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", "dev": true, + "license": "ISC", "dependencies": { "through2": "^2.0.2" } }, - "node_modules/conventional-recommended-bump/node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/conventional-recommended-bump/node_modules/strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", "dev": true, + "license": "MIT", "dependencies": { "get-stdin": "^4.0.1" }, @@ -14082,32 +14611,35 @@ "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" }, "node_modules/convert-to-spaces": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/cookie": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", - "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", - "dev": true, + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", "engines": { - "node": ">=18" + "node": ">= 0.6" } }, "node_modules/cookie-parser": { @@ -14115,6 +14647,7 @@ "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.7.tgz", "integrity": "sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==", "dev": true, + "license": "MIT", "dependencies": { "cookie": "0.7.2", "cookie-signature": "1.0.6" @@ -14123,32 +14656,26 @@ "node": ">= 0.8.0" } }, - "node_modules/cookie-parser/node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cookiejar": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -14158,6 +14685,7 @@ "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-4.0.0.tgz", "integrity": "sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==", "dev": true, + "license": "MIT", "dependencies": { "each-props": "^3.0.0", "is-plain-object": "^5.0.0" @@ -14172,6 +14700,7 @@ "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==", "dev": true, "hasInstallScript": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -14181,12 +14710,14 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -14200,6 +14731,7 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, + "license": "MIT", "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", @@ -14226,6 +14758,7 @@ "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.1.0.tgz", "integrity": "sha512-7PtBB+6FdsOvZyJtlF3hEPpACq7RQX6BVGsgC7/lfVXnKMvNCu/XY3ykreqG5w/rBNdu2z8LCIKoF3kpHHdHlA==", "dev": true, + "license": "MIT", "dependencies": { "jiti": "^1.21.6" }, @@ -14242,13 +14775,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/cosmiconfig/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -14261,6 +14796,7 @@ "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz", "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "js-yaml": "^3.13.1", "lcov-parse": "^1.0.0", @@ -14280,6 +14816,7 @@ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "dev": true, + "license": "Apache-2.0", "bin": { "crc32": "bin/crc32.njs" }, @@ -14292,6 +14829,7 @@ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", "dev": true, + "license": "MIT", "dependencies": { "crc-32": "^1.2.0", "readable-stream": "^3.4.0" @@ -14300,34 +14838,12 @@ "node": ">= 10" } }, - "node_modules/crc32-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/crc32-stream/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/create-error-class": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", "integrity": "sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==", "dev": true, + "license": "MIT", "dependencies": { "capture-stack-trace": "^1.0.0" }, @@ -14339,13 +14855,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-inspect": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cross-inspect/-/cross-inspect-1.0.1.tgz", "integrity": "sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.4.0" }, @@ -14354,19 +14872,18 @@ } }, "node_modules/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "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": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=4.8" + "node": ">= 8" } }, "node_modules/css": { @@ -14374,6 +14891,7 @@ "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.4", "source-map": "^0.6.1", @@ -14385,6 +14903,7 @@ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -14401,6 +14920,7 @@ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -14412,19 +14932,22 @@ "version": "0.0.10", "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/csv-parse": { "version": "4.16.3", "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz", "integrity": "sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", "dev": true, + "license": "MIT", "dependencies": { "array-find-index": "^1.0.1" }, @@ -14437,6 +14960,7 @@ "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", "dev": true, + "license": "ISC", "dependencies": { "es5-ext": "^0.10.64", "type": "^2.7.2" @@ -14450,6 +14974,7 @@ "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -14462,6 +14987,7 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" }, @@ -14474,6 +15000,7 @@ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -14491,6 +15018,7 @@ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -14508,6 +15036,7 @@ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -14525,6 +15054,7 @@ "resolved": "https://registry.npmjs.org/datadog-metrics/-/datadog-metrics-0.9.3.tgz", "integrity": "sha512-BVsBX2t+4yA3tHs7DnB5H01cHVNiGJ/bHA8y6JppJDyXG7s2DLm6JaozPGpgsgVGd42Is1CHRG/yMDQpt877Xg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "3.1.0", "dogapi": "2.8.4" @@ -14535,15 +15065,24 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, + "node_modules/datadog-metrics/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, "node_modules/dateformat": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", "integrity": "sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -14552,14 +15091,24 @@ "version": "1.11.13", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/debug-fabulous": { @@ -14567,6 +15116,7 @@ "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz", "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "3.X", "memoizee": "0.4.X", @@ -14578,21 +15128,17 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/debug-fabulous/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/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -14602,6 +15148,7 @@ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, + "license": "MIT", "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" @@ -14618,6 +15165,7 @@ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -14627,6 +15175,7 @@ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } @@ -14636,6 +15185,7 @@ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -14650,13 +15200,15 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deep-eql": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "dev": true, + "license": "MIT", "dependencies": { "type-detect": "^4.0.0" }, @@ -14669,6 +15221,7 @@ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -14678,6 +15231,7 @@ "resolved": "https://registry.npmjs.org/deep-for-each/-/deep-for-each-3.0.0.tgz", "integrity": "sha512-pPN+0f8jlnNP+z90qqOdxGghJU5XM6oBDhvAR+qdQzjCg5pk/7VPPvKK1GqoXEFkHza6ZS+Otzzvmr0g3VUaKw==", "dev": true, + "license": "MIT", "dependencies": { "lodash.isplainobject": "^4.0.6" } @@ -14686,13 +15240,15 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/default-require-extensions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, + "license": "MIT", "dependencies": { "strip-bom": "^4.0.0" }, @@ -14708,6 +15264,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -14717,6 +15274,7 @@ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, + "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -14724,11 +15282,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, "node_modules/defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -14737,6 +15306,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -14754,6 +15324,7 @@ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -14763,6 +15334,7 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -14776,36 +15348,24 @@ } }, "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, + "license": "MIT", "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "is-descriptor": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -14814,13 +15374,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/delete-empty": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/delete-empty/-/delete-empty-3.0.0.tgz", "integrity": "sha512-ZUyiwo76W+DYnKsL3Kim6M/UOavPdBJgDYWOmuQhYaZvJH0AXAHbUNyEDtRbBra8wqqr686+63/0azfEk1ebUQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "^4.1.0", "minimist": "^1.2.0", @@ -14834,24 +15396,12 @@ "node": ">=10" } }, - "node_modules/delete-empty/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/denque": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=0.10" } @@ -14860,6 +15410,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -14869,6 +15420,7 @@ "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-10.0.9.tgz", "integrity": "sha512-dwc59FRIsht+HfnTVM0BCjJaEWxdq2YAvEDy4/Hn6CwS3CBWMtFnL3aZGAkQn3XCYxk/YcTDE4jX2Q7bFTwCjA==", "dev": true, + "license": "MIT", "dependencies": { "commander": "^10.0.1", "filing-cabinet": "^4.1.6", @@ -14887,6 +15439,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -14895,6 +15448,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -14905,6 +15459,7 @@ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -14914,6 +15469,7 @@ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -14923,6 +15479,7 @@ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", "integrity": "sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -14932,6 +15489,7 @@ "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-5.0.2.tgz", "integrity": "sha512-XFd/VEQ76HSpym80zxM68ieB77unNuoMwopU2TFT/ErUk5n4KvUTwW4beafAVUugrjV48l4BmmR0rh2MglBaiA==", "dev": true, + "license": "MIT", "dependencies": { "ast-module-types": "^5.0.0", "escodegen": "^2.0.0", @@ -14950,6 +15508,7 @@ "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-5.0.1.tgz", "integrity": "sha512-6nTvAZtpomyz/2pmEmGX1sXNjaqgMplhQkskq2MLrar0ZAIkHMrDhLXkRiK2mvbu9wSWr0V5/IfiTrZqAQMrmQ==", "dev": true, + "license": "MIT", "dependencies": { "ast-module-types": "^5.0.0", "node-source-walk": "^6.0.0" @@ -14963,6 +15522,7 @@ "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-4.0.1.tgz", "integrity": "sha512-k3Z5tB4LQ8UVHkuMrFOlvb3GgFWdJ9NqAa2YLUU/jTaWJIm+JJnEh4PsMc+6dfT223Y8ACKOaC0qcj7diIhBKw==", "dev": true, + "license": "MIT", "dependencies": { "node-source-walk": "^6.0.1" }, @@ -14975,6 +15535,7 @@ "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-6.1.3.tgz", "integrity": "sha512-7BRVvE5pPEvk2ukUWNQ+H2XOq43xENWbH0LcdCE14mwgTBEAMoAx+Fc1rdp76SmyZ4Sp48HlV7VedUnP6GA1Tw==", "dev": true, + "license": "MIT", "dependencies": { "is-url": "^1.2.4", "postcss": "^8.4.23", @@ -14984,11 +15545,41 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/detective-postcss/node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/detective-sass": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-5.0.3.tgz", "integrity": "sha512-YsYT2WuA8YIafp2RVF5CEfGhhyIVdPzlwQgxSjK+TUm3JoHP+Tcorbk3SfG0cNZ7D7+cYWa0ZBcvOaR0O8+LlA==", "dev": true, + "license": "MIT", "dependencies": { "gonzales-pe": "^4.3.0", "node-source-walk": "^6.0.1" @@ -15002,6 +15593,7 @@ "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-4.0.3.tgz", "integrity": "sha512-VYI6cHcD0fLokwqqPFFtDQhhSnlFWvU614J42eY6G0s8c+MBhi9QAWycLwIOGxlmD8I/XvGSOUV1kIDhJ70ZPg==", "dev": true, + "license": "MIT", "dependencies": { "gonzales-pe": "^4.3.0", "node-source-walk": "^6.0.1" @@ -15015,6 +15607,7 @@ "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-4.0.0.tgz", "integrity": "sha512-TfPotjhszKLgFBzBhTOxNHDsutIxx9GTWjrL5Wh7Qx/ydxKhwUrlSFeLIn+ZaHPF+h0siVBkAQSuy6CADyTxgQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -15024,6 +15617,7 @@ "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-11.2.0.tgz", "integrity": "sha512-ARFxjzizOhPqs1fYC/2NMC3N4jrQ6HvVflnXBTRqNEqJuXwyKLRr9CrJwkRcV/SnZt1sNXgsF6FPm0x57Tq0rw==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "^5.62.0", "ast-module-types": "^5.0.0", @@ -15034,115 +15628,12 @@ "node": "^14.14.0 || >=16.0.0" } }, - "node_modules/detective-typescript/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/detective-typescript/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/detective-typescript/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/detective-typescript/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/detective-typescript/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/detective-typescript/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/detective-typescript/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/dezalgo": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "dev": true, + "license": "ISC", "dependencies": { "asap": "^2.0.0", "wrappy": "1" @@ -15161,11 +15652,39 @@ "node": ">=0.8.0" } }, + "node_modules/dicer/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/dicer/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/dicer/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true, + "license": "MIT" + }, "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", + "integrity": "sha512-9wfm3RLzMp/PyTFWuw9liEzdlxsdGixCW0ZTU1XDmtlAkvpVXTPGF8KnfSs0hm3BPbg19OrUPPsRkHXoREpP1g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -15175,6 +15694,7 @@ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -15187,6 +15707,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -15199,6 +15720,7 @@ "resolved": "https://registry.npmjs.org/dogapi/-/dogapi-2.8.4.tgz", "integrity": "sha512-065fsvu5dB0o4+ENtLjZILvXMClDNH/yA9H6L8nsdcNiz9l0Hzpn7aQaCOPYXxqyzq4CRPOdwkFXUjDOXfRGbg==", "dev": true, + "license": "MIT", "dependencies": { "extend": "^3.0.2", "json-bigint": "^1.0.0", @@ -15215,6 +15737,7 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -15234,13 +15757,15 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -15256,6 +15781,7 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -15270,6 +15796,7 @@ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-obj": "^2.0.0" }, @@ -15282,6 +15809,7 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -15294,6 +15822,7 @@ "resolved": "https://registry.npmjs.org/driftless/-/driftless-2.0.3.tgz", "integrity": "sha512-hSDKsQphnL4O0XLAiyWQ8EiM9suXH0Qd4gMtwF86b5wygGV8r95w0JcA38FOmx9N3LjFCIHLG2winLPNken4Tg==", "dev": true, + "license": "MIT", "dependencies": { "present": "^0.0.3" } @@ -15303,6 +15832,7 @@ "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -15311,28 +15841,59 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/duplexer2": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", "dev": true, + "license": "BSD", "dependencies": { "readable-stream": "~1.1.9" } }, + "node_modules/duplexer2/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true, + "license": "MIT" + }, "node_modules/duplexer3": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -15340,17 +15901,12 @@ "stream-shift": "^1.0.0" } }, - "node_modules/duplexify/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/duplexify/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -15361,17 +15917,12 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/duplexify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/duplexify/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -15381,6 +15932,7 @@ "resolved": "https://registry.npmjs.org/each-props/-/each-props-3.0.0.tgz", "integrity": "sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-object": "^5.0.0", "object.defaults": "^1.1.0" @@ -15393,23 +15945,33 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, + "license": "MIT", "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, + "node_modules/ecc-jsbn/node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true, + "license": "MIT" + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" } @@ -15417,13 +15979,15 @@ "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -15435,16 +15999,18 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.64", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.64.tgz", - "integrity": "sha512-IXEuxU+5ClW2IGEYFC2T7szbyVgehupCWQe5GNh+H065CD6U6IFN0s4KeAMFGNmQolRU4IV7zGBWSYMmZ8uuqQ==", - "dev": true + "version": "1.5.66", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.66.tgz", + "integrity": "sha512-pI2QF6+i+zjPbqRzJwkMvtvkdI7MjVbSh2g8dlMguDJIXEPw+kwasS1Jl+YGPEBfGVxsVgGUratAKymPdPo2vQ==", + "dev": true, + "license": "ISC" }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/encodeurl": { "version": "2.0.0", @@ -15460,6 +16026,7 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -15470,6 +16037,7 @@ "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz", "integrity": "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==", "dev": true, + "license": "MIT", "dependencies": { "iconv-lite": "^0.6.3", "whatwg-encoding": "^3.1.1" @@ -15483,6 +16051,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -15495,6 +16064,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -15508,6 +16078,7 @@ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } @@ -15516,6 +16087,7 @@ "version": "6.6.2", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", + "license": "MIT", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -15537,6 +16109,7 @@ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.2.tgz", "integrity": "sha512-TAr+NKeoVTjEVW8P3iHguO1LO6RlUz9O5Y8o7EY0fU+gY1NYqas7NN3slpFtbXEsLMHk0h90fJMfKjRkQ0qUIw==", "dev": true, + "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", @@ -15545,34 +16118,12 @@ "xmlhttprequest-ssl": "~2.1.1" } }, - "node_modules/engine.io-client/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/engine.io-client/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/engine.io-client/node_modules/ws": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -15593,51 +16144,59 @@ "version": "5.2.3", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", "engines": { "node": ">=10.0.0" } }, - "node_modules/engine.io/node_modules/@types/node": { - "version": "22.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.1.tgz", - "integrity": "sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==", + "node_modules/engine.io/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", "dependencies": { - "undici-types": "~6.19.8" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/engine.io/node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "node_modules/engine.io/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/engine.io/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/engine.io/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "mime-db": "1.52.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 0.6" } }, - "node_modules/engine.io/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==" + "node_modules/engine.io/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, "node_modules/engine.io/node_modules/ws": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -15659,6 +16218,7 @@ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -15671,13 +16231,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz", "integrity": "sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -15690,6 +16252,7 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -15699,6 +16262,7 @@ "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -15710,13 +16274,15 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -15726,6 +16292,7 @@ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", @@ -15785,6 +16352,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -15796,6 +16364,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -15805,6 +16374,7 @@ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -15817,6 +16387,7 @@ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", @@ -15831,19 +16402,21 @@ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, + "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -15858,6 +16431,7 @@ "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", "dev": true, "hasInstallScript": true, + "license": "ISC", "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", @@ -15872,13 +16446,15 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dev": true, + "license": "MIT", "dependencies": { "d": "1", "es5-ext": "^0.10.35", @@ -15890,6 +16466,7 @@ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", "dev": true, + "license": "ISC", "dependencies": { "d": "^1.0.2", "ext": "^1.7.0" @@ -15903,6 +16480,7 @@ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", "dev": true, + "license": "ISC", "dependencies": { "d": "1", "es5-ext": "^0.10.46", @@ -15915,6 +16493,7 @@ "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.19.12.tgz", "integrity": "sha512-Zmc4hk6FibJZBcTx5/8K/4jT3/oG1vkGTEeKJUQFCUQKimD6Q7+adp/bdVQyYJFolMKaXkQnVZdV4O5ZaTYmyQ==", "dev": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -15927,6 +16506,7 @@ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -15934,13 +16514,15 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -15950,6 +16532,7 @@ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -15972,6 +16555,7 @@ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -16027,6 +16611,7 @@ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, + "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -16039,6 +16624,7 @@ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -16050,21 +16636,17 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/eslint-import-resolver-node/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/eslint-module-utils": { "version": "2.12.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -16082,21 +16664,17 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/eslint-module-utils/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/eslint-plugin-import": { "version": "2.31.0", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, + "license": "MIT", "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.8", @@ -16130,6 +16708,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -16139,6 +16718,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -16146,45 +16726,16 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/eslint-plugin-import/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/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, "node_modules/eslint-plugin-prettier": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", @@ -16221,6 +16772,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -16233,12 +16785,13 @@ } }, "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==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -16283,6 +16836,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -16294,48 +16848,72 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, - "node_modules/eslint/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint/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/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "color-name": "~1.1.4" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=7.0.0" } }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -16343,11 +16921,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/eslint/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -16360,6 +16944,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -16371,18 +16956,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/eslint/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -16404,6 +16977,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -16415,13 +16989,15 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eslint/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -16432,17 +17008,12 @@ "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 - }, "node_modules/eslint/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -16458,6 +17029,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -16473,53 +17045,24 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "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, - "engines": { - "node": ">=8" - } - }, - "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==", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -16533,26 +17076,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/eslint/node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -16565,6 +17094,7 @@ "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", "dev": true, + "license": "ISC", "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.62", @@ -16576,29 +17106,31 @@ } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "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.9.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.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/espree/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "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": "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" @@ -16609,6 +17141,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -16622,6 +17155,7 @@ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -16634,6 +17168,7 @@ "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": { "estraverse": "^5.2.0" }, @@ -16646,6 +17181,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -16655,6 +17191,7 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -16673,6 +17210,7 @@ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", "dev": true, + "license": "MIT", "dependencies": { "d": "1", "es5-ext": "~0.10.14" @@ -16683,6 +17221,7 @@ "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.5.tgz", "integrity": "sha512-vyibDcu5JL20Me1fP734QBH/kenBGLZap2n0+XXM7mvuUPzJ20Ydqj1aKcIeMdri1p+PU+4yAKugjN8KCVst+g==", "dev": true, + "license": "MIT", "dependencies": { "duplexer": "^0.1.1", "from": "^0.1.7", @@ -16698,21 +17237,24 @@ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", - "dev": true + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.x" } @@ -16722,6 +17264,7 @@ "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-2.0.3.tgz", "integrity": "sha512-f/qE2gImHRa4Cp2y1stEOSgw8wTFyUdVJX7G//bMwbaV9JqISFxg99NbmVQeP7YLnDUZ2un851jlaDrlpmGehQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -16731,6 +17274,7 @@ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.0.0" } @@ -16740,6 +17284,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -16753,11 +17298,92 @@ "node": ">=6" } }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA==", "dev": true, + "license": "MIT", "dependencies": { "is-posix-bracket": "^0.1.0" }, @@ -16770,6 +17396,7 @@ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^2.1.0" }, @@ -16782,6 +17409,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^2.1.0", "isobject": "^2.0.0", @@ -16798,6 +17426,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -16805,17 +17434,12 @@ "node": ">=0.10.0" } }, - "node_modules/expand-range/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/expand-range/node_modules/isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", "dev": true, + "license": "MIT", "dependencies": { "isarray": "1.0.0" }, @@ -16823,23 +17447,12 @@ "node": ">=0.10.0" } }, - "node_modules/expand-range/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, + "license": "MIT", "dependencies": { "homedir-polyfill": "^1.0.1" }, @@ -16851,7 +17464,8 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/express": { "version": "5.0.1", @@ -16896,19 +17510,6 @@ "node": ">= 18" } }, - "node_modules/express/node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/express/node_modules/body-parser": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.0.2.tgz", @@ -16939,15 +17540,6 @@ "ms": "2.0.0" } }, - "node_modules/express/node_modules/body-parser/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/express/node_modules/body-parser/node_modules/mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", @@ -16960,6 +17552,12 @@ "node": ">= 0.6" } }, + "node_modules/express/node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, "node_modules/express/node_modules/body-parser/node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -16989,6 +17587,7 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -17019,12 +17618,6 @@ } } }, - "node_modules/express/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, "node_modules/express/node_modules/iconv-lite": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", @@ -17038,34 +17631,19 @@ } }, "node_modules/express/node_modules/mime-db": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", - "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/mime-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.0.tgz", - "integrity": "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", - "dependencies": { - "mime-db": "^1.53.0" - }, "engines": { "node": ">= 0.6" } }, - "node_modules/express/node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } + "node_modules/express/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" }, "node_modules/express/node_modules/raw-body": { "version": "3.0.0", @@ -17094,6 +17672,26 @@ "node": ">=0.10.0" } }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/express/node_modules/type-is": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.0.tgz", @@ -17122,6 +17720,7 @@ "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dev": true, + "license": "ISC", "dependencies": { "type": "^2.7.2" } @@ -17130,13 +17729,15 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", "dev": true, + "license": "MIT", "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -17150,6 +17751,7 @@ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, + "license": "MIT", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -17164,6 +17766,7 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, + "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -17176,6 +17779,7 @@ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -17188,6 +17792,7 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -17199,13 +17804,15 @@ "dev": true, "engines": [ "node >=0.6.0" - ] + ], + "license": "MIT" }, "node_modules/fancy-log": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz", "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==", "dev": true, + "license": "MIT", "dependencies": { "color-support": "^1.1.3" }, @@ -17213,22 +17820,18 @@ "node": ">=10.13.0" } }, - "node_modules/fast-content-type-parse": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", - "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==", - "dev": true - }, "node_modules/fast-decode-uri-component": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", @@ -17241,13 +17844,15 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -17259,16 +17864,31 @@ "node": ">=8.6.0" } }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-json-stringify": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-6.0.0.tgz", "integrity": "sha512-FGMKZwniMTgZh7zQp9b6XnBVxUmKVahQLQeRQHqwYmPDqDhcEKZ3BaQsxelFFI5PY7nN71OEeiL47/zUWcYe1A==", + "license": "MIT", "dependencies": { "@fastify/merge-json-schemas": "^0.1.1", "ajv": "^8.12.0", @@ -17279,11 +17899,18 @@ "rfdc": "^1.2.0" } }, + "node_modules/fast-json-stringify/node_modules/fast-uri": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", + "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", + "license": "MIT" + }, "node_modules/fast-levenshtein": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", "dev": true, + "license": "MIT", "dependencies": { "fastest-levenshtein": "^1.0.7" } @@ -17293,6 +17920,7 @@ "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", "dev": true, + "license": "MIT", "dependencies": { "fast-decode-uri-component": "^1.0.1" } @@ -17302,6 +17930,7 @@ "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -17309,13 +17938,15 @@ "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "license": "MIT" }, "node_modules/fast-unique-numbers": { "version": "8.0.13", "resolved": "https://registry.npmjs.org/fast-unique-numbers/-/fast-unique-numbers-8.0.13.tgz", "integrity": "sha512-7OnTFAVPefgw2eBJ1xj2PGGR9FwYzSUso9decayHgCDX4sJkHLdcsYTytTg+tYv+wKF3U8gJuSBz2jJpQV4u/g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.8", "tslib": "^2.6.2" @@ -17325,9 +17956,10 @@ } }, "node_modules/fast-uri": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", - "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "license": "BSD-3-Clause" }, "node_modules/fast-xml-parser": { "version": "4.4.1", @@ -17344,6 +17976,7 @@ "url": "https://paypal.me/naturalintelligence" } ], + "license": "MIT", "dependencies": { "strnum": "^1.0.5" }, @@ -17356,14 +17989,15 @@ "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } }, "node_modules/fastify": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.28.1.tgz", - "integrity": "sha512-kFWUtpNr4i7t5vY2EJPCN2KgMVpuqfU4NjnJNCgiNB900oiDeYqaNDRcAfeBbOF5hGixixxcKnOU4KN9z6QncQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.1.0.tgz", + "integrity": "sha512-0SdUC5AoiSgMSc2Vxwv3WyKzyGMDJRAW/PgNsK1kZrnkO6MeqUIW9ovVg9F2UGIqtIcclYMyeJa4rK6OZc7Jxg==", "dev": true, "funding": [ { @@ -17375,89 +18009,45 @@ "url": "https://opencollective.com/fastify" } ], + "license": "MIT", "dependencies": { - "@fastify/ajv-compiler": "^3.5.0", - "@fastify/error": "^3.4.0", - "@fastify/fast-json-stringify-compiler": "^4.3.0", + "@fastify/ajv-compiler": "^4.0.0", + "@fastify/error": "^4.0.0", + "@fastify/fast-json-stringify-compiler": "^5.0.0", "abstract-logging": "^2.0.1", - "avvio": "^8.3.0", - "fast-content-type-parse": "^1.1.0", - "fast-json-stringify": "^5.8.0", - "find-my-way": "^8.0.0", - "light-my-request": "^5.11.0", + "avvio": "^9.0.0", + "fast-json-stringify": "^6.0.0", + "find-my-way": "^9.0.0", + "light-my-request": "^6.0.0", "pino": "^9.0.0", - "process-warning": "^3.0.0", + "process-warning": "^4.0.0", "proxy-addr": "^2.0.7", - "rfdc": "^1.3.0", + "rfdc": "^1.3.1", "secure-json-parse": "^2.7.0", - "semver": "^7.5.4", - "toad-cache": "^3.3.0" + "semver": "^7.6.0", + "toad-cache": "^3.7.0" } }, "node_modules/fastify-plugin": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.5.1.tgz", - "integrity": "sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==", - "dev": true - }, - "node_modules/fastify/node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fastify/node_modules/fast-json-stringify": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.16.1.tgz", - "integrity": "sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==", - "dev": true, - "dependencies": { - "@fastify/merge-json-schemas": "^0.1.0", - "ajv": "^8.10.0", - "ajv-formats": "^3.0.1", - "fast-deep-equal": "^3.1.3", - "fast-uri": "^2.1.0", - "json-schema-ref-resolver": "^1.0.1", - "rfdc": "^1.2.0" - } - }, - "node_modules/fastify/node_modules/light-my-request": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.14.0.tgz", - "integrity": "sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-5.0.1.tgz", + "integrity": "sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==", "dev": true, - "dependencies": { - "cookie": "^0.7.0", - "process-warning": "^3.0.0", - "set-cookie-parser": "^2.4.1" - } - }, - "node_modules/fastify/node_modules/process-warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", - "dev": true + "license": "MIT" }, - "node_modules/fastify/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/fastify/node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "license": "BSD-3-Clause" }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -17467,6 +18057,7 @@ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", "dev": true, + "license": "MIT", "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -17480,13 +18071,15 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.1.tgz", "integrity": "sha512-/exOvEuc+/iaUm105QIiOt4LpBdMTWsXxqR0HDF35vx3fmaKzw7354gTilCh5rkzEt8WYyG//ku3h3nRmd7CHQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -17499,6 +18092,7 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -17511,6 +18105,7 @@ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/filelist": { @@ -17518,6 +18113,7 @@ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } @@ -17527,6 +18123,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -17536,6 +18133,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -17548,6 +18146,7 @@ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", "integrity": "sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -17557,6 +18156,7 @@ "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-4.2.0.tgz", "integrity": "sha512-YZ21ryzRcyqxpyKggdYSoXx//d3sCJzM3lsYoaeg/FyXdADGJrUl+BW1KIglaVLJN5BBcMtWylkygY8zBp2MrQ==", "dev": true, + "license": "MIT", "dependencies": { "app-module-path": "^2.2.0", "commander": "^10.0.1", @@ -17583,15 +18183,32 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, + "node_modules/filing-cabinet/node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -17603,7 +18220,8 @@ "version": "0.5.4", "resolved": "https://registry.npmjs.org/filtrex/-/filtrex-0.5.4.tgz", "integrity": "sha512-2phGAjWOYRf96Al6s+w/hMjObP1cRyQ95hoZApjeFO75DXN4Flh9uuUAtL3LI4fkryLa2QWdA8MArvt0GMU0pA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/finalhandler": { "version": "2.0.0", @@ -17623,6 +18241,15 @@ "node": ">= 0.8" } }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, "node_modules/finalhandler/node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -17632,11 +18259,18 @@ "node": ">= 0.8" } }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, "node_modules/find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, + "license": "MIT", "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -17649,39 +18283,16 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/find-cache-dir/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/find-my-way": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.2.tgz", - "integrity": "sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.1.0.tgz", + "integrity": "sha512-Y5jIsuYR4BwWDYYQ2A/RWWE6gD8a0FMgtU+HOq1WKku+Cwdz8M1v8wcAmRXXM1/iqtoqg06v+LjAxMYbCjViMw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-querystring": "^1.0.0", - "safe-regex2": "^3.1.0" + "safe-regex2": "^4.0.0" }, "engines": { "node": ">=14" @@ -17692,6 +18303,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^7.2.0", "path-exists": "^5.0.0", @@ -17709,6 +18321,7 @@ "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz", "integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -17721,6 +18334,7 @@ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dev": true, + "license": "MIT", "dependencies": { "detect-file": "^1.0.0", "is-glob": "^4.0.3", @@ -17736,6 +18350,7 @@ "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", "dev": true, + "license": "MIT", "dependencies": { "expand-tilde": "^2.0.2", "is-plain-object": "^5.0.0", @@ -17752,6 +18367,7 @@ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", "integrity": "sha512-X8Z+b/0L4lToKYq+lwnKqi9X/Zek0NibLpsJgVsSxpoYq7JtiCtRb5HqKVEjEw/qAb/4AKKRLOwwKHlWNpm2Eg==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "^2.0.2" }, @@ -17759,17 +18375,12 @@ "node": ">=0.10.0" } }, - "node_modules/first-chunk-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/first-chunk-stream/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -17780,17 +18391,12 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/first-chunk-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/first-chunk-stream/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -17800,6 +18406,7 @@ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.13.0" } @@ -17809,6 +18416,7 @@ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, + "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } @@ -17818,6 +18426,7 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -17833,6 +18442,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -17847,29 +18457,26 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/flush-write-stream": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" } }, - "node_modules/flush-write-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/flush-write-stream/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -17880,17 +18487,12 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/flush-write-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/flush-write-stream/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -17906,6 +18508,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -17920,6 +18523,7 @@ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } @@ -17929,6 +18533,7 @@ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -17938,6 +18543,7 @@ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", "dev": true, + "license": "MIT", "dependencies": { "for-in": "^1.0.1" }, @@ -17950,6 +18556,7 @@ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -17961,82 +18568,12 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/foreground-child/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/foreground-child/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child/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, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/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, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "*" } @@ -18046,6 +18583,7 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -18055,11 +18593,35 @@ "node": ">= 6" } }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/formidable": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.2.tgz", "integrity": "sha512-Jqc1btCy3QzRbJaICGwKcBfGWuLADRerLzDqi2NwSt/UkXLsHJw2TVResiaoBufHVHy9aSgClOHCeJsSsFLTbg==", "dev": true, + "license": "MIT", "dependencies": { "dezalgo": "^1.0.4", "hexoid": "^2.0.0", @@ -18073,6 +18635,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -18082,6 +18645,7 @@ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", "dev": true, + "license": "MIT", "dependencies": { "map-cache": "^0.2.2" }, @@ -18102,7 +18666,8 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fromentries": { "version": "1.3.2", @@ -18122,19 +18687,22 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -18145,15 +18713,16 @@ } }, "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, + "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "minipass": "^3.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 8" } }, "node_modules/fs-mkdirp-stream": { @@ -18161,6 +18730,7 @@ "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.8", "streamx": "^2.12.0" @@ -18173,14 +18743,16 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -18193,6 +18765,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -18201,13 +18774,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-4.0.0.tgz", "integrity": "sha512-f34iQBedYF3XcI93uewZZOnyscDragxgTK/eTvVB74k3fCD0ZorOi5BV9GS4M8rz/JoNi0Kl3qX5Y9MH3S/CLQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/function.prototype.name": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -18226,6 +18801,7 @@ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -18236,6 +18812,7 @@ "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", "deprecated": "This package is no longer supported.", "dev": true, + "license": "ISC", "dependencies": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -18247,20 +18824,12 @@ "wide-align": "^1.1.0" } }, - "node_modules/gauge/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/gauge/node_modules/is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "dev": true, + "license": "MIT", "dependencies": { "number-is-nan": "^1.0.0" }, @@ -18268,11 +18837,19 @@ "node": ">=0.10.0" } }, + "node_modules/gauge/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/gauge/node_modules/string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, + "license": "MIT", "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -18287,6 +18864,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -18299,6 +18877,7 @@ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", "dev": true, + "license": "MIT", "dependencies": { "is-property": "^1.0.2" } @@ -18308,6 +18887,7 @@ "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz", "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -18317,6 +18897,7 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -18326,6 +18907,7 @@ "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-5.0.1.tgz", "integrity": "sha512-jb65zDeHyDjFR1loOVk0HQGM5WNwoGB8aLWy3LKCieMKol0/ProHkhO2X1JxojuN10vbz1qNn09MJ7tNp7qMzw==", "dev": true, + "license": "MIT", "dependencies": { "ast-module-types": "^5.0.0", "node-source-walk": "^6.0.1" @@ -18339,6 +18921,7 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -18348,6 +18931,7 @@ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -18360,6 +18944,7 @@ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -18368,6 +18953,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -18386,13 +18972,15 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -18402,6 +18990,7 @@ "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz", "integrity": "sha512-xPCyvcEOxCJDxhBfXDNH+zA7mIRGb2aY1gIUJWsZkpJbp1BLHl+/Sycg26Dv+ZbZAJkO61tzbBtqHUi30NGBvg==", "dev": true, + "license": "MIT", "dependencies": { "hosted-git-info": "^2.1.4", "meow": "^3.3.0", @@ -18418,6 +19007,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -18427,6 +19017,7 @@ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^2.0.0", "map-obj": "^1.0.0" @@ -18439,13 +19030,15 @@ "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/get-pkg-repo/node_modules/indent-string": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", "dev": true, + "license": "MIT", "dependencies": { "repeating": "^2.0.0" }, @@ -18458,6 +19051,7 @@ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -18467,6 +19061,7 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", "dev": true, + "license": "MIT", "dependencies": { "camelcase-keys": "^2.0.0", "decamelize": "^1.1.2", @@ -18488,6 +19083,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -18500,6 +19096,7 @@ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^2.1.0", "strip-indent": "^1.0.1" @@ -18508,11 +19105,22 @@ "node": ">=0.10.0" } }, + "node_modules/get-pkg-repo/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/get-pkg-repo/node_modules/strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", "dev": true, + "license": "MIT", "dependencies": { "get-stdin": "^4.0.1" }, @@ -18528,6 +19136,7 @@ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -18537,6 +19146,7 @@ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -18546,6 +19156,7 @@ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -18555,6 +19166,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -18567,6 +19179,7 @@ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -18584,6 +19197,7 @@ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -18593,6 +19207,7 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" } @@ -18602,6 +19217,7 @@ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", "dev": true, + "license": "MIT", "dependencies": { "dargs": "^8.0.0", "meow": "^12.0.1", @@ -18614,11 +19230,25 @@ "node": ">=16" } }, + "node_modules/git-raw-commits/node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/git-remote-origin-url": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", "dev": true, + "license": "MIT", "dependencies": { "gitconfiglocal": "^1.0.0", "pify": "^2.3.0" @@ -18627,11 +19257,22 @@ "node": ">=4" } }, + "node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/git-semver-tags": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-8.0.0.tgz", "integrity": "sha512-N7YRIklvPH3wYWAR2vysaqGLPRcpwQ0GKdlqTiVN5w1UmCdaeY3K8s6DMKRCh54DDdzyt/OAB6C8jgVtb7Y2Fg==", "dev": true, + "license": "MIT", "dependencies": { "@conventional-changelog/git-client": "^1.0.0", "meow": "^13.0.0" @@ -18643,23 +19284,12 @@ "node": ">=18" } }, - "node_modules/git-semver-tags/node_modules/meow": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", - "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", - "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/gitconfiglocal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", "dev": true, + "license": "BSD", "dependencies": { "ini": "^1.3.2" } @@ -18668,7 +19298,8 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/glob": { "version": "7.2.3", @@ -18676,6 +19307,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -18696,6 +19328,7 @@ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==", "dev": true, + "license": "MIT", "dependencies": { "glob-parent": "^2.0.0", "is-glob": "^2.0.0" @@ -18709,6 +19342,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^2.0.0" } @@ -18718,6 +19352,7 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -18727,6 +19362,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -18735,15 +19371,16 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/glob-stream": { @@ -18751,6 +19388,7 @@ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.2.tgz", "integrity": "sha512-R8z6eTB55t3QeZMmU1C+Gv+t5UnNRkA55c5yo67fAVfxODxieTwsjNG7utxS/73NdP1NbDgCrhVEg2h00y4fFw==", "dev": true, + "license": "MIT", "dependencies": { "@gulpjs/to-absolute-glob": "^4.0.0", "anymatch": "^3.1.3", @@ -18765,16 +19403,18 @@ "node": ">=10.13.0" } }, - "node_modules/glob-stream/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/glob-stream/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { - "is-glob": "^4.0.3" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">=10.13.0" + "node": ">= 8" } }, "node_modules/glob-watcher": { @@ -18782,6 +19422,7 @@ "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz", "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==", "dev": true, + "license": "MIT", "dependencies": { "async-done": "^2.0.0", "chokidar": "^3.5.3" @@ -18790,11 +19431,26 @@ "node": ">= 10.13.0" } }, + "node_modules/glob-watcher/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/glob-watcher/node_modules/async-done": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.4.4", "once": "^1.4.0", @@ -18809,6 +19465,7 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -18828,11 +19485,25 @@ "fsevents": "~2.3.2" } }, + "node_modules/glob-watcher/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/glob-watcher/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -18845,6 +19516,7 @@ "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", "dev": true, + "license": "MIT", "dependencies": { "ini": "4.1.1" }, @@ -18860,6 +19532,7 @@ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, + "license": "MIT", "dependencies": { "global-prefix": "^1.0.1", "is-windows": "^1.0.1", @@ -18874,6 +19547,7 @@ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, + "license": "MIT", "dependencies": { "expand-tilde": "^2.0.2", "homedir-polyfill": "^1.0.1", @@ -18889,7 +19563,21 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } }, "node_modules/globals": { "version": "15.12.0", @@ -18909,6 +19597,7 @@ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" @@ -18925,6 +19614,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -18945,6 +19635,7 @@ "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz", "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==", "dev": true, + "license": "MIT", "dependencies": { "sparkles": "^2.1.0" }, @@ -18957,6 +19648,7 @@ "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.5" }, @@ -18971,12 +19663,14 @@ "version": "3.6.1", "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.6.1.tgz", "integrity": "sha512-SJYemeX5GjDLPnadcmCNQePQHCS4Hl5fOcI/JawqDIYFhCmrtYAjcx/oTQx/Wi8UuCuZQhfvftbmPePPAYHFtA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -18989,6 +19683,7 @@ "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -19013,19 +19708,22 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/graphql": { "version": "16.9.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.9.0.tgz", "integrity": "sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } @@ -19035,6 +19733,7 @@ "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-2.0.0.tgz", "integrity": "sha512-s6k2b8mmt9gF9pEfkxsaO1lTxaySfKoEJzEfmwguBbQ//Oq23hIXCfR1hm4kdh5hnR20RdwB+s3BCb+0duHSZA==", "dev": true, + "license": "MIT", "dependencies": { "iterall": "^1.3.0" }, @@ -19047,6 +19746,7 @@ "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.1.0" }, @@ -19062,6 +19762,7 @@ "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-9.0.3.tgz", "integrity": "sha512-n2q1mtpfNVrQwysvoffw7RcqrD3EnqI+Wt480r2GZg0DmlkepNN/L6Dc8DofcecyHuJ09Fys/KXC45rPz3QXQA==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/schema": "^10.0.8", "tslib": "^2.4.0" @@ -19077,12 +19778,13 @@ } }, "node_modules/graphql-tools/node_modules/@graphql-tools/merge": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.9.tgz", - "integrity": "sha512-w9yaU7UMRQvtkTYZHo+c7cS7LO7rqc2H6g3k0aUs8VE9YlFYG1bYdxvEPM5bloaoVqr5TmbqIZqzl1CHeJKilQ==", + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.11.tgz", + "integrity": "sha512-AJL0XTozn31HoZN8tULzEkbDXyETA5vAFu4Q65kxJDu027p+auaNFYj/y51HP4BhMR4wykoteWyO7/VxKfdpiw==", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/utils": "^10.5.6", + "@graphql-tools/utils": "^10.6.1", "tslib": "^2.4.0" }, "engines": { @@ -19093,13 +19795,14 @@ } }, "node_modules/graphql-tools/node_modules/@graphql-tools/schema": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.8.tgz", - "integrity": "sha512-jkCSq+DdT6Rf/MN3oVz250AMFWZO0E5kh0C2K+kJfS80iBW7/7kLjiSbKz+WD9UBtsJPW2zyzKYC4ylU4jmnLw==", + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.10.tgz", + "integrity": "sha512-TSdDvwgk1Fq3URDuZBMCPXlWLpRpxwaQ+0KqvycVwoHozYnBRZ2Ql9HVgDKnebkGQKmIk2enSeku+ERKxxSG0g==", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/merge": "^9.0.9", - "@graphql-tools/utils": "^10.5.6", + "@graphql-tools/merge": "^9.0.11", + "@graphql-tools/utils": "^10.6.1", "tslib": "^2.4.0", "value-or-promise": "^1.0.12" }, @@ -19111,10 +19814,11 @@ } }, "node_modules/graphql-tools/node_modules/@graphql-tools/utils": { - "version": "10.5.6", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.5.6.tgz", - "integrity": "sha512-JAC44rhbLzXUHiltceyEpWkxmX4e45Dfg19wRFoA9EbDxQVbOzVNF76eEECdg0J1owFsJwfLqCwz7/6xzrovOw==", + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.6.1.tgz", + "integrity": "sha512-XHl0/DWkMf/8Dmw1F3RRoMPt6ZwU4J707YWcbPjS+49WZNoTVz6f+prQ4GuwZT8RqTPtrRawnGU93AV73ZLTfQ==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "cross-inspect": "1.0.1", @@ -19133,6 +19837,10 @@ "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.16.0.tgz", "integrity": "sha512-Ju2RCU2dQMgSKtArPbEtsK5gNLnsQyTNIo/T7cZNp96niC1x0KdJNZV0TIoilceBPQwfb5itrGl8pkFeOUMl4A==", "dev": true, + "license": "MIT", + "workspaces": [ + "website" + ], "engines": { "node": ">=10" }, @@ -19145,6 +19853,7 @@ "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.0.tgz", "integrity": "sha512-S8Z8066SSileaYw1S2N1I64IUc/myI2bqe2ihOBzO6+nKpvNSg7ZcWJt/AwF8LC/NVN+/QZ560Cb/5OPsyhkhg==", "dev": true, + "license": "MIT", "dependencies": { "glob-watcher": "^6.0.0", "gulp-cli": "^3.0.0", @@ -19163,6 +19872,7 @@ "resolved": "https://registry.npmjs.org/gulp-clang-format/-/gulp-clang-format-1.0.27.tgz", "integrity": "sha512-Jj4PGuNXKdqVCh9fijvL7wdzma5TQRJz1vv8FjOjnSkfq3s/mvbdE/jq+5HG1c/q+jcYkXTEGkYT3CrdnJOLaQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "clang-format": "^1.0.32", "fancy-log": "^1.3.2", @@ -19177,6 +19887,7 @@ "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", "dev": true, + "license": "MIT", "dependencies": { "ansi-gray": "^0.1.1", "color-support": "^1.1.3", @@ -19192,6 +19903,7 @@ "resolved": "https://registry.npmjs.org/gulp-clean/-/gulp-clean-0.4.0.tgz", "integrity": "sha512-DARK8rNMo4lHOFLGTiHEJdf19GuoBDHqGUaypz+fOhrvOs3iFO7ntdYtdpNxv+AzSJBx/JfypF0yEj9ks1IStQ==", "dev": true, + "license": "MIT", "dependencies": { "fancy-log": "^1.3.2", "plugin-error": "^0.1.2", @@ -19208,6 +19920,7 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", "integrity": "sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", "dev": true, + "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "array-slice": "^0.2.3" @@ -19221,6 +19934,7 @@ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", "integrity": "sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -19230,24 +19944,17 @@ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", "integrity": "sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-clean/node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/gulp-clean/node_modules/extend-shallow": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^1.1.0" }, @@ -19260,6 +19967,7 @@ "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", "dev": true, + "license": "MIT", "dependencies": { "ansi-gray": "^0.1.1", "color-support": "^1.1.3", @@ -19270,11 +19978,22 @@ "node": ">= 0.10" } }, + "node_modules/gulp-clean/node_modules/kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/gulp-clean/node_modules/plugin-error": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", "integrity": "sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", "dev": true, + "license": "MIT", "dependencies": { "ansi-cyan": "^0.1.1", "ansi-red": "^0.1.1", @@ -19286,43 +20005,128 @@ "node": ">=0.10.0" } }, - "node_modules/gulp-clean/node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "node_modules/gulp-cli": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.0.0.tgz", + "integrity": "sha512-RtMIitkT8DEMZZygHK2vEuLPqLPAFB4sntSxg4NoDta7ciwGZ18l7JuhCTiS5deOJi2IoK0btE+hs6R4sfj7AA==", "dev": true, + "license": "MIT", + "dependencies": { + "@gulpjs/messages": "^1.1.0", + "chalk": "^4.1.2", + "copy-props": "^4.0.0", + "gulplog": "^2.2.0", + "interpret": "^3.1.1", + "liftoff": "^5.0.0", + "mute-stdout": "^2.0.0", + "replace-homedir": "^2.0.0", + "semver-greatest-satisfied-range": "^2.0.0", + "string-width": "^4.2.3", + "v8flags": "^4.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, - "node_modules/gulp-clean/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/gulp-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "glob": "^7.1.3" + "color-convert": "^2.0.1" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/gulp-clean/node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "node_modules/gulp-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/gulp-cli/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/gulp-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/gulp-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/gulp-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gulp-cli/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, "node_modules/gulp-diff": { @@ -19330,6 +20134,7 @@ "resolved": "https://registry.npmjs.org/gulp-diff/-/gulp-diff-1.0.0.tgz", "integrity": "sha512-d4dwx2A1dzPTUS9kWl8WaWRhXshZHoQqbEy7x5tzDqN4V2C3dLh82BH7Plr10vjYtiqd+LitU0sX2f61mex3cQ==", "dev": true, + "license": "MIT", "dependencies": { "cli-color": "^1.0.0", "diff": "^2.0.2", @@ -19338,20 +20143,12 @@ "through2": "^2.0.0" } }, - "node_modules/gulp-diff/node_modules/diff": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", - "integrity": "sha512-9wfm3RLzMp/PyTFWuw9liEzdlxsdGixCW0ZTU1XDmtlAkvpVXTPGF8KnfSs0hm3BPbg19OrUPPsRkHXoREpP1g==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/gulp-sourcemaps": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-3.0.0.tgz", "integrity": "sha512-RqvUckJkuYqy4VaIH60RMal4ZtG0IbQ6PXMNkNsshEGJ9cldUPRb/YCgboYae+CLAs1HQNb4ADTKCx65HInquQ==", "dev": true, + "license": "ISC", "dependencies": { "@gulp-sourcemaps/identity-map": "^2.0.1", "@gulp-sourcemaps/map-sources": "^1.0.0", @@ -19374,6 +20171,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -19381,17 +20179,12 @@ "node": ">=0.4.0" } }, - "node_modules/gulp-sourcemaps/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/gulp-typescript": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-5.0.1.tgz", "integrity": "sha512-YuMMlylyJtUSHG1/wuSVTrZp60k1dMEFKYOvDf7OvbAJWrDtxxD4oZon4ancdWwzjj30ztiidhe4VXJniF0pIQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "^3.0.5", "plugin-error": "^1.0.1", @@ -19412,30 +20205,17 @@ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/gulp-typescript/node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/gulp-typescript/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, "node_modules/gulp-typescript/node_modules/fs-mkdirp-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.11", "through2": "^2.0.3" @@ -19444,41 +20224,12 @@ "node": ">= 0.10" } }, - "node_modules/gulp-typescript/node_modules/fs-mkdirp-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/gulp-typescript/node_modules/fs-mkdirp-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/gulp-typescript/node_modules/fs-mkdirp-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/gulp-typescript/node_modules/fs-mkdirp-stream/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -19489,6 +20240,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -19499,6 +20251,7 @@ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", "dev": true, + "license": "MIT", "dependencies": { "extend": "^3.0.0", "glob": "^7.1.1", @@ -19515,41 +20268,12 @@ "node": ">= 0.10" } }, - "node_modules/gulp-typescript/node_modules/glob-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/gulp-typescript/node_modules/glob-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/gulp-typescript/node_modules/glob-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/gulp-typescript/node_modules/is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.0" }, @@ -19557,17 +20281,12 @@ "node": ">=0.10.0" } }, - "node_modules/gulp-typescript/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/gulp-typescript/node_modules/lead": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", "dev": true, + "license": "MIT", "dependencies": { "flush-write-stream": "^1.0.2" }, @@ -19580,6 +20299,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, + "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -19592,6 +20312,7 @@ "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.3.2" }, @@ -19600,26 +20321,19 @@ } }, "node_modules/gulp-typescript/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/gulp-typescript/node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true, - "engines": { - "node": ">= 0.10" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "node_modules/gulp-typescript/node_modules/resolve-options": { @@ -19627,6 +20341,7 @@ "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", "dev": true, + "license": "MIT", "dependencies": { "value-or-function": "^3.0.0" }, @@ -19639,17 +20354,19 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">= 8" } }, "node_modules/gulp-typescript/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "safe-buffer": "~5.1.0" } }, "node_modules/gulp-typescript/node_modules/through2": { @@ -19657,6 +20374,7 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.4", "readable-stream": "2 || 3" @@ -19667,6 +20385,7 @@ "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", "dev": true, + "license": "MIT", "dependencies": { "through2": "^2.0.3" }, @@ -19674,41 +20393,12 @@ "node": ">= 0.10" } }, - "node_modules/gulp-typescript/node_modules/to-through/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/gulp-typescript/node_modules/to-through/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/gulp-typescript/node_modules/to-through/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/gulp-typescript/node_modules/to-through/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -19719,23 +20409,7 @@ "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-typescript/node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dev": true, - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -19745,6 +20419,7 @@ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", "dev": true, + "license": "MIT", "dependencies": { "fs-mkdirp-stream": "^1.0.0", "glob-stream": "^6.1.0", @@ -19768,41 +20443,12 @@ "node": ">= 0.10" } }, - "node_modules/gulp-typescript/node_modules/vinyl-fs/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/gulp-typescript/node_modules/vinyl-fs/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/gulp-typescript/node_modules/vinyl-fs/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/gulp-typescript/node_modules/vinyl-fs/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -19813,6 +20459,7 @@ "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", "dev": true, + "license": "MIT", "dependencies": { "append-buffer": "^1.0.2", "convert-source-map": "^1.5.0", @@ -19832,6 +20479,7 @@ "integrity": "sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw==", "deprecated": "gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5", "dev": true, + "license": "MIT", "dependencies": { "array-differ": "^1.0.0", "array-uniq": "^1.0.2", @@ -19856,20 +20504,12 @@ "node": ">=0.10" } }, - "node_modules/gulp-util/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/gulp-util/node_modules/ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -19879,6 +20519,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -19890,17 +20531,29 @@ "node": ">=0.10.0" } }, + "node_modules/gulp-util/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, "node_modules/gulp-util/node_modules/clone-stats": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/gulp-util/node_modules/fancy-log": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", "dev": true, + "license": "MIT", "dependencies": { "ansi-gray": "^0.1.1", "color-support": "^1.1.3", @@ -19916,6 +20569,7 @@ "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", "dev": true, + "license": "MIT", "dependencies": { "sparkles": "^1.0.0" }, @@ -19928,6 +20582,7 @@ "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", "integrity": "sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==", "dev": true, + "license": "MIT", "dependencies": { "glogg": "^1.0.0" }, @@ -19940,24 +20595,17 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-util/node_modules/replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/gulp-util/node_modules/sparkles": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -19967,6 +20615,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -19979,6 +20628,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -19988,6 +20638,7 @@ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", "integrity": "sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA==", "dev": true, + "license": "MIT", "dependencies": { "clone": "^1.0.0", "clone-stats": "^0.0.1", @@ -20002,6 +20653,7 @@ "resolved": "https://registry.npmjs.org/gulp-watch/-/gulp-watch-5.0.1.tgz", "integrity": "sha512-HnTSBdzAOFIT4wmXYPDUn783TaYAq9bpaN05vuZNP5eni3z3aRx0NAKbjhhMYtcq76x4R1wf4oORDGdlrEjuog==", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "1.1.0", "anymatch": "^1.3.0", @@ -20022,6 +20674,7 @@ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-wrap": "^0.1.0" }, @@ -20029,24 +20682,12 @@ "node": ">=0.10.0" } }, - "node_modules/gulp-watch/node_modules/anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "dependencies": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, - "node_modules/gulp-watch/node_modules/arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==", + "node_modules/gulp-watch/node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", "dev": true, - "dependencies": { - "arr-flatten": "^1.0.1" - }, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -20056,19 +20697,28 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/gulp-watch/node_modules/braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, + "license": "MIT", "dependencies": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "engines": { "node": ">=0.10.0" @@ -20079,6 +20729,7 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "^2.0.0", "async-each": "^1.0.1", @@ -20101,6 +20752,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, + "license": "ISC", "dependencies": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" @@ -20111,6 +20763,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, + "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -20118,62 +20771,36 @@ "node": ">=0.10.0" } }, - "node_modules/gulp-watch/node_modules/chokidar/node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/chokidar/node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/chokidar/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/gulp-watch/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "ms": "2.0.0" } }, - "node_modules/gulp-watch/node_modules/chokidar/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/gulp-watch/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, + "license": "MIT", "dependencies": { - "is-extendable": "^0.1.0" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-watch/node_modules/chokidar/node_modules/expand-brackets": { + "node_modules/gulp-watch/node_modules/expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -20187,11 +20814,12 @@ "node": ">=0.10.0" } }, - "node_modules/gulp-watch/node_modules/chokidar/node_modules/expand-brackets/node_modules/define-property": { + "node_modules/gulp-watch/node_modules/expand-brackets/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -20199,23 +20827,12 @@ "node": ">=0.10.0" } }, - "node_modules/gulp-watch/node_modules/chokidar/node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/chokidar/node_modules/expand-brackets/node_modules/is-descriptor": { + "node_modules/gulp-watch/node_modules/expand-brackets/node_modules/is-descriptor": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, + "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" @@ -20224,11 +20841,25 @@ "node": ">= 0.4" } }, - "node_modules/gulp-watch/node_modules/chokidar/node_modules/extglob": { + "node_modules/gulp-watch/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-watch/node_modules/extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, + "license": "MIT", "dependencies": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -20243,11 +20874,12 @@ "node": ">=0.10.0" } }, - "node_modules/gulp-watch/node_modules/chokidar/node_modules/extglob/node_modules/define-property": { + "node_modules/gulp-watch/node_modules/extglob/node_modules/define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^1.0.0" }, @@ -20255,95 +20887,12 @@ "node": ">=0.10.0" } }, - "node_modules/gulp-watch/node_modules/chokidar/node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/chokidar/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/chokidar/node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/chokidar/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/chokidar/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/chokidar/node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/gulp-watch/node_modules/fancy-log": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", "integrity": "sha512-7E6IFy84FpO6jcnzEsCcoxDleHpMTFzncmCXXBIVYq1/Oakqnbc/lTKPJyyW6edGeC/rnZmV78hJe7SuoZo0aQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-gray": "^0.1.1", "color-support": "^1.1.3", @@ -20358,6 +20907,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -20368,18 +20918,6 @@ "node": ">=0.10.0" } }, - "node_modules/gulp-watch/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/gulp-watch/node_modules/fsevents": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", @@ -20387,6 +20925,7 @@ "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -20404,25 +20943,18 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" } }, - "node_modules/gulp-watch/node_modules/glob-parent/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/gulp-watch/node_modules/glob-parent/node_modules/is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.0" }, @@ -20435,6 +20967,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^1.0.0" }, @@ -20447,6 +20980,7 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, + "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" @@ -20460,102 +20994,112 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-watch/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "node_modules/gulp-watch/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-watch/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "node_modules/gulp-watch/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, + "license": "MIT", "dependencies": { - "is-extglob": "^1.0.0" + "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-watch/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "node_modules/gulp-watch/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, + "license": "MIT", "dependencies": { - "kind-of": "^3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-watch/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/gulp-watch/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/gulp-watch/node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", "dev": true, + "license": "MIT", "dependencies": { - "is-buffer": "^1.1.5" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-watch/node_modules/micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", + "node_modules/gulp-watch/node_modules/micromatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, + "license": "MIT", "dependencies": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "is-plain-object": "^2.0.4" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-watch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "node_modules/gulp-watch/node_modules/micromatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/gulp-watch/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, "node_modules/gulp-watch/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -20571,6 +21115,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", @@ -20580,208 +21125,12 @@ "node": ">=0.10" } }, - "node_modules/gulp-watch/node_modules/readdirp/node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/readdirp/node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/readdirp/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/readdirp/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/readdirp/node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/readdirp/node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/readdirp/node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/readdirp/node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/gulp-watch/node_modules/readdirp/node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/readdirp/node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/readdirp/node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/readdirp/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/readdirp/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-watch/node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-watch/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/gulp-watch/node_modules/slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -20791,6 +21140,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -20800,6 +21150,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -20808,92 +21159,12 @@ "node": ">=0.10.0" } }, - "node_modules/gulp-watch/node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dev": true, - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/gulp/node_modules/gulp-cli": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.0.0.tgz", - "integrity": "sha512-RtMIitkT8DEMZZygHK2vEuLPqLPAFB4sntSxg4NoDta7ciwGZ18l7JuhCTiS5deOJi2IoK0btE+hs6R4sfj7AA==", - "dev": true, - "dependencies": { - "@gulpjs/messages": "^1.1.0", - "chalk": "^4.1.2", - "copy-props": "^4.0.0", - "gulplog": "^2.2.0", - "interpret": "^3.1.1", - "liftoff": "^5.0.0", - "mute-stdout": "^2.0.0", - "replace-homedir": "^2.0.0", - "semver-greatest-satisfied-range": "^2.0.0", - "string-width": "^4.2.3", - "v8flags": "^4.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "gulp": "bin/gulp.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gulp/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/gulplog": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==", "dev": true, + "license": "MIT", "dependencies": { "glogg": "^2.2.0" }, @@ -20906,6 +21177,7 @@ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", @@ -20927,6 +21199,7 @@ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "dev": true, + "license": "ISC", "engines": { "node": ">=4" } @@ -20937,6 +21210,7 @@ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "deprecated": "this library is no longer supported", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -20950,6 +21224,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -20965,13 +21240,15 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -20979,20 +21256,12 @@ "node": ">=0.10.0" } }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -21001,6 +21270,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -21010,6 +21280,7 @@ "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", "integrity": "sha512-+F4GzLjwHNNDEAJW2DC1xXfEoPkRDmUdJ7CBYw4MpqtDwOnqdImJl7GWlpqx+Wko6//J8uKTnIe4wZSv7yCqmw==", "dev": true, + "license": "MIT", "dependencies": { "sparkles": "^1.0.0" }, @@ -21022,6 +21293,7 @@ "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -21030,6 +21302,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -21041,6 +21314,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -21052,6 +21326,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -21064,6 +21339,7 @@ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -21078,13 +21354,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", "dev": true, + "license": "MIT", "dependencies": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -21099,6 +21377,7 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -21112,6 +21391,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -21124,6 +21404,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -21136,6 +21417,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -21148,6 +21430,7 @@ "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, + "license": "MIT", "dependencies": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" @@ -21164,6 +21447,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -21176,6 +21460,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -21184,6 +21469,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -21196,6 +21482,7 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, + "license": "MIT", "bin": { "he": "bin/he" } @@ -21204,19 +21491,22 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/hex2dec": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hex2dec/-/hex2dec-1.0.1.tgz", "integrity": "sha512-F9QO0+ZI8r1VZudxw21bD/U5pb2Y9LZY3TsnVqCPaijvw5mIhH5jsH29acLPijl5fECfD8FetJtgX8GN5YPM9Q==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/hexoid": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-2.0.0.tgz", "integrity": "sha512-qlspKUK7IlSQv2o+5I7yhUd7TxlOG2Vr5LTa3ve2XSNVKAL/n/u/7KLvKmFNimomDIKvZFXWHv0T12mv7rT8Aw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -21226,6 +21516,7 @@ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": "*" } @@ -21235,23 +21526,18 @@ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "dev": true, + "license": "BSD-3-Clause", "optional": true, "dependencies": { "react-is": "^16.7.0" } }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "optional": true - }, "node_modules/homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, + "license": "MIT", "dependencies": { "parse-passwd": "^1.0.0" }, @@ -21264,6 +21550,7 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^10.0.1" }, @@ -21275,13 +21562,15 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/hot-shots": { "version": "6.8.7", "resolved": "https://registry.npmjs.org/hot-shots/-/hot-shots-6.8.7.tgz", "integrity": "sha512-XH8iezBSZgVw2jegu96pUfF1Zv0VZ/iXjb7L5yE3F7mn7/bdhf4qeniXjO0wQWeefe433rhOsazNKLxM+XMI9w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" }, @@ -21293,13 +21582,15 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-0.1.2.tgz", "integrity": "sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/htmlparser2": { "version": "9.1.0", @@ -21313,6 +21604,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -21324,12 +21616,14 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -21346,6 +21640,7 @@ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -21354,46 +21649,12 @@ "node": ">= 14" } }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-proxy-agent/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/http-proxy-agent/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/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -21409,6 +21670,7 @@ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, + "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -21422,6 +21684,7 @@ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -21430,34 +21693,25 @@ "node": ">= 6" } }, - "node_modules/https-proxy-agent/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/https-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "debug": "4" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 6.0.0" } }, - "node_modules/https-proxy-agent/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/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -21467,6 +21721,7 @@ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.0.0" } @@ -21476,6 +21731,7 @@ "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, + "license": "MIT", "bin": { "husky": "bin.js" }, @@ -21491,6 +21747,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -21499,30 +21756,18 @@ } }, "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -21531,13 +21776,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ignore-walk": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", "dev": true, + "license": "ISC", "dependencies": { "minimatch": "^9.0.0" }, @@ -21550,6 +21797,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -21559,6 +21807,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -21574,6 +21823,7 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -21590,6 +21840,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -21599,6 +21850,7 @@ "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -21609,6 +21861,7 @@ "resolved": "https://registry.npmjs.org/imports-loader/-/imports-loader-5.0.0.tgz", "integrity": "sha512-tXgL8xxZFjOjQLLiE7my00UUQfktg4G8fdpXcZphL0bJWbk9eCxKKFaCwmFRcwyRJQl95GXBL1DoE1rCS/tcPw==", "dev": true, + "license": "MIT", "dependencies": { "source-map-js": "^1.0.2", "strip-comments": "^2.0.1" @@ -21629,6 +21882,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -21638,6 +21892,7 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -21647,6 +21902,7 @@ "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-0.1.2.tgz", "integrity": "sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -21658,7 +21914,8 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/inflight": { "version": "1.0.6", @@ -21666,6 +21923,7 @@ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -21674,13 +21932,15 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, "node_modules/ini": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -21690,6 +21950,7 @@ "resolved": "https://registry.npmjs.org/ink/-/ink-4.4.1.tgz", "integrity": "sha512-rXckvqPBB0Krifk5rn/5LvQGmyXwCUpBfmTwbkQNBY9JY8RSl3b8OftBNEYxg4+SWUhEKcPifgope28uL9inlA==", "dev": true, + "license": "MIT", "dependencies": { "@alcalzone/ansi-tokenize": "^0.1.3", "ansi-escapes": "^6.0.0", @@ -21739,6 +22000,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -21751,6 +22013,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -21763,6 +22026,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -21775,6 +22039,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -21782,22 +22047,170 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/ink/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ink/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ink/node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ink/node_modules/cli-truncate/node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, "node_modules/ink/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/ink/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ink/node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/ink/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ink/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ink/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/ink/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "node_modules/ink/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ink/node_modules/slice-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-6.0.0.tgz", + "integrity": "sha512-6bn4hRfkTvDfUoEQYkERg0BVF1D0vrX9HEkMl08uDiNWvVvjylLHvZFZWkDo6wjT8tUctbYl1nCOuE66ZTaUtA==", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/ink/node_modules/string-width": { @@ -21805,6 +22218,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -21822,6 +22236,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -21837,6 +22252,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz", "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -21849,6 +22265,7 @@ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", "dev": true, + "license": "MIT", "dependencies": { "string-width": "^5.0.1" }, @@ -21864,6 +22281,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -21881,6 +22299,7 @@ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^3.0.0", "chalk": "^2.0.0", @@ -21898,37 +22317,22 @@ "through": "^2.3.6" } }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/inquirer/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/inquirer/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, + "license": "MIT", "engines": { "node": ">=4" } @@ -21937,46 +22341,22 @@ "version": "0.4.2", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", - "dev": true - }, - "node_modules/inquirer/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "dev": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } + "license": "MIT" }, "node_modules/inquirer/node_modules/cli-width": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "license": "ISC" }, "node_modules/inquirer/node_modules/external-editor": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, + "license": "MIT", "dependencies": { "chardet": "^0.4.0", "iconv-lite": "^0.4.17", @@ -21986,29 +22366,12 @@ "node": ">=0.12" } }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/inquirer/node_modules/is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -22017,38 +22380,15 @@ "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", - "dev": true - }, - "node_modules/inquirer/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "dev": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "dev": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } + "license": "ISC" }, "node_modules/inquirer/node_modules/string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, + "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -22062,6 +22402,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" }, @@ -22069,23 +22410,12 @@ "node": ">=4" } }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/inquirer/node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, + "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -22098,6 +22428,7 @@ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -22112,6 +22443,7 @@ "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } @@ -22121,6 +22453,7 @@ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -22130,6 +22463,7 @@ "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.4.1.tgz", "integrity": "sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==", "dev": true, + "license": "MIT", "dependencies": { "@ioredis/commands": "^1.1.1", "cluster-key-slot": "^1.1.0", @@ -22149,34 +22483,12 @@ "url": "https://opencollective.com/ioredis" } }, - "node_modules/ioredis/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/ioredis/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/ip-address": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "dev": true, + "license": "MIT", "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" @@ -22185,22 +22497,18 @@ "node": ">= 12" } }, - "node_modules/ip-address/node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true - }, "node_modules/ip-address/node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -22210,6 +22518,7 @@ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, + "license": "MIT", "dependencies": { "is-relative": "^1.0.0", "is-windows": "^1.0.1" @@ -22223,6 +22532,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.0" }, @@ -22234,13 +22544,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-actual-promise/-/is-actual-promise-1.0.2.tgz", "integrity": "sha512-xsFiO1of0CLsQnPZ1iXHNTyR9YszOeWKYv+q6n8oSFW3ipooFJ1j1lbRMgiMCr+pp2gLruESI4zb5Ak6eK5OnQ==", - "dev": true + "dev": true, + "license": "BlueOak-1.0.0" }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -22257,6 +22569,7 @@ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -22272,13 +22585,31 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, + "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -22291,6 +22622,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -22303,6 +22635,7 @@ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -22318,13 +22651,15 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -22333,37 +22668,31 @@ } }, "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "dev": true, + "license": "MIT", "dependencies": { - "ci-info": "^3.2.0" + "ci-info": "^1.5.0" }, "bin": { "is-ci": "bin.js" } }, "node_modules/is-ci/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/is-core-module": { "version": "2.15.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -22379,6 +22708,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.0" }, @@ -22391,6 +22721,7 @@ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, + "license": "MIT", "dependencies": { "is-typed-array": "^1.1.13" }, @@ -22406,6 +22737,7 @@ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -22421,6 +22753,7 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, + "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" @@ -22434,6 +22767,7 @@ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -22449,6 +22783,7 @@ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", "integrity": "sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -22458,6 +22793,7 @@ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA==", "dev": true, + "license": "MIT", "dependencies": { "is-primitive": "^2.0.0" }, @@ -22470,6 +22806,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4" }, @@ -22482,6 +22819,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -22494,15 +22832,33 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", + "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-finite": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" }, @@ -22511,12 +22867,16 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-generator-function": { @@ -22524,6 +22884,7 @@ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -22539,6 +22900,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -22551,6 +22913,7 @@ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -22559,22 +22922,38 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-2.0.2.tgz", "integrity": "sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negated-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -22584,6 +22963,7 @@ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -22596,6 +22976,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -22605,6 +22986,7 @@ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -22620,6 +23002,7 @@ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -22629,6 +23012,7 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -22638,6 +23022,7 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -22647,6 +23032,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -22656,6 +23042,7 @@ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", "integrity": "sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -22665,6 +23052,7 @@ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", "integrity": "sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -22673,19 +23061,22 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-property": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -22695,6 +23086,7 @@ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -22711,6 +23103,7 @@ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -22720,6 +23113,7 @@ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, + "license": "MIT", "dependencies": { "is-unc-path": "^1.0.0" }, @@ -22731,22 +23125,38 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-relative-path/-/is-relative-path-1.0.2.tgz", "integrity": "sha512-i1h+y50g+0hRbBD+dbnInl3JlJ702aar58snAeX+MxBAPvzXGej7sYoPMhlnykabt0ZzCJNBEyzMlekuQZN7fA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-retry-allowed": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7" }, @@ -22762,6 +23172,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -22771,6 +23182,7 @@ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -22785,13 +23197,15 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", "integrity": "sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -22807,6 +23221,7 @@ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", "dev": true, + "license": "MIT", "dependencies": { "text-extensions": "^2.0.0" }, @@ -22819,6 +23234,7 @@ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" }, @@ -22833,13 +23249,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, + "license": "MIT", "dependencies": { "unc-path-regex": "^0.1.2" }, @@ -22852,6 +23270,7 @@ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -22864,6 +23283,7 @@ "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-2.0.2.tgz", "integrity": "sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } @@ -22872,13 +23292,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-url-superb": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz", "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -22890,22 +23312,38 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-valid-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -22913,11 +23351,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -22927,6 +23383,7 @@ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, + "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -22935,22 +23392,25 @@ } }, "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -22960,6 +23420,7 @@ "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", "dev": true, + "license": "MIT", "peerDependencies": { "ws": "*" } @@ -22968,13 +23429,15 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } @@ -22984,6 +23447,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "append-transform": "^2.0.0" }, @@ -22996,6 +23460,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.23.9", "@babel/parser": "^7.23.9", @@ -23007,23 +23472,12 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-instrument/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/istanbul-lib-processinfo": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, + "license": "ISC", "dependencies": { "archy": "^1.0.0", "cross-spawn": "^7.0.3", @@ -23036,47 +23490,13 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-processinfo/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo/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, - "engines": { - "node": ">=8" - } - }, "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -23087,56 +23507,22 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/istanbul-lib-processinfo/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, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo/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, - "engines": { - "node": ">=8" - } - }, "node_modules/istanbul-lib-processinfo/node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, - "node_modules/istanbul-lib-processinfo/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, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -23146,48 +23532,56 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "semver": "^7.5.3" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-lib-source-maps/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/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=8" } }, - "node_modules/istanbul-lib-source-maps/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/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } }, "node_modules/istanbul-reports": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -23200,12 +23594,14 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz", "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/iterare": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", + "license": "ISC", "engines": { "node": ">=6" } @@ -23215,6 +23611,7 @@ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -23230,6 +23627,7 @@ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", @@ -23243,17 +23641,85 @@ "node": ">=10" } }, + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jake/node_modules/async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/jiti": { "version": "1.21.6", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", "dev": true, + "license": "MIT", "bin": { "jiti": "bin/jiti.js" } @@ -23263,6 +23729,7 @@ "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">= 0.6.0" } @@ -23272,6 +23739,7 @@ "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", @@ -23285,6 +23753,7 @@ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/js-sdsl" @@ -23294,13 +23763,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -23310,16 +23781,18 @@ } }, "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true, + "license": "MIT" }, "node_modules/jsep": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.4.0.tgz", "integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.16.0" } @@ -23329,6 +23802,7 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -23341,6 +23815,7 @@ "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", "dev": true, + "license": "MIT", "dependencies": { "bignumber.js": "^9.0.0" } @@ -23349,36 +23824,42 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-loader": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-ref-resolver": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz", "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" } @@ -23386,25 +23867,29 @@ "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -23417,6 +23902,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -23431,13 +23917,15 @@ "dev": true, "engines": [ "node >= 0.2.0" - ] + ], + "license": "MIT" }, "node_modules/jsonpath-plus": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.2.0.tgz", "integrity": "sha512-T9V+8iNYKFL2n2rF+w02LBOT2JjDnTjioaNFrxRy0Bv1y/hNsqR/EBK7Ojy2ythRHwmz2cRIls+9JitQGZC/sw==", "dev": true, + "license": "MIT", "dependencies": { "@jsep-plugin/assignment": "^1.3.0", "@jsep-plugin/regex": "^1.0.4", @@ -23456,6 +23944,7 @@ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, + "license": "(MIT OR Apache-2.0)", "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -23472,6 +23961,7 @@ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "dev": true, + "license": "MIT", "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -23489,39 +23979,35 @@ "npm": ">=6" } }, + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, "node_modules/jsonwebtoken/node_modules/jws": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "dev": true, + "license": "MIT", "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } }, - "node_modules/jsonwebtoken/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/jsonwebtoken/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/jsprim": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -23536,13 +24022,15 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", "dev": true, + "license": "MIT", "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -23554,27 +24042,18 @@ "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", "dev": true, + "license": "MIT", "dependencies": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" } }, - "node_modules/jws/node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dev": true, - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, "node_modules/kafkajs": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/kafkajs/-/kafkajs-2.2.4.tgz", "integrity": "sha512-j/YeapB1vfPT2iOIUn/vxdyKEuhuY2PxMBvf5JWux6iSaukAccrMtXEY/Lb7OvavDhOWME589bpLrEdnVHjfjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } @@ -23584,6 +24063,7 @@ "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.0.0" } @@ -23593,15 +24073,20 @@ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, "engines": { "node": ">=0.10.0" } @@ -23611,6 +24096,7 @@ "resolved": "https://registry.npmjs.org/last-run/-/last-run-2.0.0.tgz", "integrity": "sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.13.0" } @@ -23620,6 +24106,7 @@ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "^2.0.5" }, @@ -23627,17 +24114,12 @@ "node": ">= 0.6.3" } }, - "node_modules/lazystream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/lazystream/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -23648,17 +24130,12 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/lazystream/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -23668,6 +24145,7 @@ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", "dev": true, + "license": "MIT", "dependencies": { "invert-kv": "^1.0.0" }, @@ -23680,6 +24158,7 @@ "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", "integrity": "sha512-aprLII/vPzuQvYZnDRU78Fns9I2Ag3gi4Ipga/hxnVMCZC8DnR2nI7XBqrPoywGfxqIx/DgarGvDJZAD3YBTgQ==", "dev": true, + "license": "BSD-3-Clause", "bin": { "lcov-parse": "bin/cli.js" } @@ -23689,6 +24168,7 @@ "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } @@ -23698,6 +24178,7 @@ "resolved": "https://registry.npmjs.org/lerna/-/lerna-2.11.0.tgz", "integrity": "sha512-kgM6zwe2P2tR30MYvgiLLW+9buFCm6E7o8HnRlhTgm70WVBvXVhydqv+q/MF2HrVZkCawfVtCfetyQmtd4oHhQ==", "dev": true, + "license": "MIT", "dependencies": { "async": "^1.5.0", "chalk": "^2.1.0", @@ -23751,6 +24232,7 @@ "resolved": "https://registry.npmjs.org/lerna-changelog/-/lerna-changelog-2.2.0.tgz", "integrity": "sha512-yjYNAHrbnw8xYFKmYWJEP52Tk4xSdlNmzpYr26+3glbSGDmpe8UMo8f9DlEntjGufL+opup421oVTXcLshwAaQ==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "cli-highlight": "^2.1.11", @@ -23768,96 +24250,65 @@ "node": "12.* || 14.* || >= 16" } }, - "node_modules/lerna-changelog/node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/lerna-changelog/node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "node_modules/lerna-changelog/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/lerna-changelog/node_modules/cacache/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/lerna-changelog/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "aggregate-error": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lerna-changelog/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/lerna-changelog/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/lerna-changelog/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "color-name": "~1.1.4" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=7.0.0" } }, + "node_modules/lerna-changelog/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/lerna-changelog/node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -23876,23 +24327,12 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/lerna-changelog/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/lerna-changelog/node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -23905,6 +24345,7 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -23912,25 +24353,12 @@ "node": ">=10" } }, - "node_modules/lerna-changelog/node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/lerna-changelog/node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -23943,6 +24371,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -23950,97 +24379,22 @@ "node": ">=10" } }, - "node_modules/lerna-changelog/node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/lerna-changelog/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lerna-changelog/node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/lerna-changelog/node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "dev": true, - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" - } - }, - "node_modules/lerna-changelog/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/lerna-changelog/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/lerna-changelog/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/lerna-changelog/node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -24048,161 +24402,48 @@ "node": ">=8" } }, - "node_modules/lerna-changelog/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "node_modules/lerna-changelog/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { - "aggregate-error": "^3.0.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/lerna-changelog/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/lerna-changelog/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lerna-changelog/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/lerna-changelog/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "license": "ISC" }, - "node_modules/lerna-changelog/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==", + "node_modules/lerna-changelog/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/lerna-changelog/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/lerna-changelog/node_modules/socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/lerna-changelog/node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/lerna-changelog/node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/lerna-changelog/node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/lerna-changelog/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, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/lerna/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lerna/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/lerna/node_modules/array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", "dev": true, + "license": "MIT", "dependencies": { "array-uniq": "^1.0.1" }, @@ -24214,44 +24455,50 @@ "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/lerna/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/lerna/node_modules/camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/lerna/node_modules/ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, "node_modules/lerna/node_modules/cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wrap-ansi": "^2.0.0" } }, + "node_modules/lerna/node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/lerna/node_modules/cliui/node_modules/string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, + "license": "MIT", "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -24261,26 +24508,12 @@ "node": ">=0.10.0" } }, - "node_modules/lerna/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/lerna/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, "node_modules/lerna/node_modules/cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", "dev": true, + "license": "MIT", "dependencies": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", @@ -24292,6 +24525,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", "integrity": "sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -24310,6 +24544,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^2.0.0" }, @@ -24322,6 +24557,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -24332,13 +24568,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/lerna/node_modules/get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -24348,6 +24586,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -24358,6 +24597,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^1.0.1", "glob": "^7.0.3", @@ -24369,43 +24609,21 @@ "node": ">=0.10.0" } }, - "node_modules/lerna/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/lerna/node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/lerna/node_modules/is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "dev": true, - "dependencies": { - "ci-info": "^1.5.0" - }, - "bin": { - "is-ci": "bin.js" - } + "license": "ISC" }, "node_modules/lerna/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, "node_modules/lerna/node_modules/is-glob": { @@ -24413,6 +24631,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.0" }, @@ -24425,6 +24644,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -24434,6 +24654,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -24447,6 +24668,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, + "license": "ISC", "dependencies": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -24457,6 +24679,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -24469,6 +24692,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^1.0.0" }, @@ -24481,6 +24705,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^1.1.0" }, @@ -24488,11 +24713,22 @@ "node": ">=4" } }, + "node_modules/lerna/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/lerna/node_modules/parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, + "license": "MIT", "dependencies": { "error-ex": "^1.2.0" }, @@ -24505,6 +24741,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -24514,6 +24751,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^3.0.0" }, @@ -24526,15 +24764,27 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, + "node_modules/lerna/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/lerna/node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, + "license": "MIT", "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", @@ -24549,6 +24799,7 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", "integrity": "sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^2.0.0", "read-pkg": "^2.0.0" @@ -24562,6 +24813,7 @@ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -24577,6 +24829,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", "integrity": "sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^2.0.0" }, @@ -24589,6 +24842,7 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", "integrity": "sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==", "dev": true, + "license": "MIT", "dependencies": { "load-json-file": "^2.0.0", "normalize-package-data": "^2.3.2", @@ -24598,24 +24852,52 @@ "node": ">=4" } }, - "node_modules/lerna/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/lerna/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/lerna/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, + "license": "MIT", "dependencies": { - "glob": "^7.1.3" + "shebang-regex": "^1.0.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lerna/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, + "node_modules/lerna/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/lerna/node_modules/slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -24625,6 +24907,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, + "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -24638,15 +24921,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/lerna/node_modules/string-width/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -24656,6 +24931,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" }, @@ -24668,6 +24944,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -24675,32 +24952,35 @@ "node": ">=0.10.0" } }, - "node_modules/lerna/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/lerna/node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } }, + "node_modules/lerna/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/lerna/node_modules/wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", "dev": true, + "license": "MIT", "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -24709,11 +24989,25 @@ "node": ">=0.10.0" } }, + "node_modules/lerna/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/lerna/node_modules/wrap-ansi/node_modules/string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, + "license": "MIT", "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -24727,19 +25021,22 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/lerna/node_modules/yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/lerna/node_modules/yargs": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", "integrity": "sha512-3RiZrpLpjrzIAKgGdPktBcMP/eG5bDFlkI+PHle1qwzyVXyDQL+pD/eZaMoOOO0Y7LLBfjpucObuUm/icvbpKQ==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^4.1.0", "cliui": "^3.2.0", @@ -24761,6 +25058,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", "integrity": "sha512-WhzC+xgstid9MbVUktco/bf+KJG+Uu6vMX0LN1sLJvwmbCQVxb4D8LzogobonKycNasCZLdOzTAk1SK7+K7swg==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^4.1.0" } @@ -24770,6 +25068,7 @@ "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" @@ -24781,13 +25080,15 @@ "node_modules/libphonenumber-js": { "version": "1.11.15", "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.11.15.tgz", - "integrity": "sha512-M7+rtYi9l5RvMmHyjyoF3BHHUpXTYdJ0PezZGHNs0GyW1lO+K7jxlXpbdIb7a56h0nqLYdjIw+E+z0ciGaJP7g==" + "integrity": "sha512-M7+rtYi9l5RvMmHyjyoF3BHHUpXTYdJ0PezZGHNs0GyW1lO+K7jxlXpbdIb7a56h0nqLYdjIw+E+z0ciGaJP7g==", + "license": "MIT" }, "node_modules/liftoff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-5.0.0.tgz", "integrity": "sha512-a5BQjbCHnB+cy+gsro8lXJ4kZluzOijzJ1UVVfyJYZC+IP2pLv1h4+aysQeKuTmyO8NAqfyQAk4HWaP/HjcKTg==", "dev": true, + "license": "MIT", "dependencies": { "extend": "^3.0.2", "findup-sync": "^5.0.0", @@ -24806,17 +25107,29 @@ "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-6.3.0.tgz", "integrity": "sha512-bWTAPJmeWQH5suJNYwG0f5cs0p6ho9e6f1Ppoxv5qMosY+s9Ir2+ZLvvHcgA7VTDop4zl/NCHhOVVqU+kd++Ow==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "cookie": "^1.0.1", "process-warning": "^4.0.0", "set-cookie-parser": "^2.6.0" } }, + "node_modules/light-my-request/node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/lightstep-tracer": { "version": "0.31.2", "resolved": "https://registry.npmjs.org/lightstep-tracer/-/lightstep-tracer-0.31.2.tgz", "integrity": "sha512-DRdyUrASPkr+hxyHQJ9ImPSIxpUCpqQvfgHwxoZ42G6iEJ2g0/2chCw39tuz60JUmLfTlVp1LFzLscII6YPRoA==", "dev": true, + "license": "MIT", "dependencies": { "async": "1.5.0", "eventemitter3": "1.1.1", @@ -24834,40 +25147,22 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/async/-/async-1.5.0.tgz", "integrity": "sha512-m9nMwCtLtz29LszVaR0q/FqsJWkrxVoQL95p7JU0us7qUx4WEcySQgwvuneYSGVyvirl81gz7agflS3V1yW14g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lightstep-tracer/node_modules/eventemitter3": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz", "integrity": "sha512-idmH3G0vJjQv2a5N74b+oXcOUKYBqSGJGN1eVV6ELGdUnesAO8RZsU74eaS3VfldRet8N9pFupxppBUKztrBdQ==", - "dev": true - }, - "node_modules/lightstep-tracer/node_modules/source-map": { - "version": "0.1.32", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", - "integrity": "sha512-htQyLrrRLkQ87Zfrir4/yN+vAUd6DNjVayEjTSHXu29AYQJw57I4/xEL/M6p6E/woPNJwvZt6rVlzc7gFEJccQ==", - "dev": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/lightstep-tracer/node_modules/source-map-support": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.3.3.tgz", - "integrity": "sha512-9O4+y9n64RewmFoKUZ/5Tx9IHIcXM6Q+RTSw6ehnqybUz4a7iwR3Eaw80uLtqqQ5D0C+5H03D4KKGo9PdP33Gg==", "dev": true, - "dependencies": { - "source-map": "0.1.32" - } + "license": "MIT" }, "node_modules/lilconfig": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -24879,13 +25174,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lint-staged": { "version": "15.2.10", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "~5.3.0", "commander": "~12.1.0", @@ -24913,6 +25210,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -24925,46 +25223,17 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } }, - "node_modules/lint-staged/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/lint-staged/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/lint-staged/node_modules/execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -24988,6 +25257,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -25000,6 +25270,7 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=16.17.0" } @@ -25009,6 +25280,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -25021,6 +25293,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -25028,17 +25301,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/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/lint-staged/node_modules/npm-run-path": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -25049,23 +25317,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/lint-staged/node_modules/onetime": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -25077,45 +25334,16 @@ } }, "node_modules/lint-staged/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/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, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lint-staged/node_modules/strip-final-newline": { @@ -25123,6 +25351,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -25130,38 +25359,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/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, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/lint-staged/node_modules/yaml": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", - "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", - "dev": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/listr2": { "version": "8.2.5", "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", "dev": true, + "license": "MIT", "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", @@ -25179,6 +25382,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -25191,6 +25395,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -25198,67 +25403,26 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", - "dev": true, - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/listr2/node_modules/emoji-regex": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/listr2/node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true - }, - "node_modules/listr2/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } + "license": "MIT" }, "node_modules/listr2/node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -25276,6 +25440,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -25291,6 +25456,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", @@ -25308,6 +25474,7 @@ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -25323,6 +25490,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, + "license": "MIT", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -25331,20 +25499,12 @@ "node": ">=4" } }, - "node_modules/load-json-file/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/locate-path": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^6.0.0" }, @@ -25359,91 +25519,106 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._basecopy": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", "integrity": "sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._basetostring": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", "integrity": "sha512-mTzAr1aNAv/i7W43vOR/uD/aJ4ngbtsRaCubp2BfZhlGU/eORUjg/7F6X0orNMdv33JOrdgGybtvMN/po3EWrA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._basevalues": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", "integrity": "sha512-H94wl5P13uEqlCg7OcNNhMQ8KvWSIyqXzOPusRgHC9DK3o54P6P3xtbXlVbRABG4q5gSmp7EDdJ0MSuW9HX6Mg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._getnative": { "version": "3.9.1", "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._isiterateecall": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", "integrity": "sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._reescape": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", "integrity": "sha512-Sjlavm5y+FUVIF3vF3B75GyXrzsfYV8Dlv3L4mEpuB9leg8N6yf/7rU06iLPx9fY0Mv3khVp9p7Dx0mGV6V5OQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._reevaluate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", "integrity": "sha512-OrPwdDc65iJiBeUe5n/LIjd7Viy99bKwDdk7Z5ljfZg0uFRFlfQaCy9tZ4YMAag9WAZmlVpe1iZrkIMMSMHD3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._root": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", "integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.escape": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", "integrity": "sha512-n1PZMXgaaDWZDSvuNZ/8XOcYO2hOKDqZel5adtR30VKQAtoWs/5AOeFA0vPV8moiPzlqe7F4cP2tzpFewQyelQ==", "dev": true, + "license": "MIT", "dependencies": { "lodash._root": "^3.0.0" } @@ -25452,79 +25627,92 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isarray": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isstring": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.keys": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", "dev": true, + "license": "MIT", "dependencies": { "lodash._getnative": "^3.0.0", "lodash.isarguments": "^3.0.0", @@ -25535,55 +25723,64 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.mergewith": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.omit": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", "integrity": "sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.restparam": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", "integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.snakecase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.startcase": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.template": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", "integrity": "sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ==", "dev": true, + "license": "MIT", "dependencies": { "lodash._basecopy": "^3.0.0", "lodash._basetostring": "^3.0.0", @@ -25601,6 +25798,7 @@ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", "integrity": "sha512-TcrlEr31tDYnWkHFWDCV3dHYroKEXpJZ2YJYvJdhN+y4AkWMDZ5I4I8XDtUKqSAyG81N7w+I1mFEJtcED+tGqQ==", "dev": true, + "license": "MIT", "dependencies": { "lodash._reinterpolate": "^3.0.0", "lodash.escape": "^3.0.0" @@ -25610,101 +25808,114 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.upperfirst": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-driver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", "dev": true, + "license": "ISC", "engines": { "node": ">=0.8.6" } }, "node_modules/log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^2.4.2" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/log-symbols/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/log-symbols/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "engines": { - "node": ">=4" - } + "license": "MIT" }, "node_modules/log-symbols/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/log-update": { @@ -25712,6 +25923,7 @@ "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^7.0.0", "cli-cursor": "^5.0.0", @@ -25731,6 +25943,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", "dev": true, + "license": "MIT", "dependencies": { "environment": "^1.0.0" }, @@ -25746,6 +25959,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -25758,6 +25972,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -25770,6 +25985,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^5.0.0" }, @@ -25784,13 +26000,15 @@ "version": "10.4.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", "dev": true, + "license": "MIT", "dependencies": { "get-east-asian-width": "^1.0.0" }, @@ -25806,6 +26024,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-function": "^5.0.0" }, @@ -25821,6 +26040,7 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" @@ -25832,23 +26052,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/log-update/node_modules/slice-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" @@ -25865,6 +26074,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -25882,6 +26092,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -25897,6 +26108,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", @@ -25914,6 +26126,7 @@ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" }, @@ -25926,13 +26139,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, + "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -25945,6 +26160,7 @@ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", "dev": true, + "license": "MIT", "dependencies": { "currently-unhandled": "^0.4.1", "signal-exit": "^3.0.0" @@ -25953,11 +26169,19 @@ "node": ">=0.10.0" } }, + "node_modules/loud-rejection/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/loupe": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, + "license": "MIT", "dependencies": { "get-func-name": "^2.0.1" } @@ -25967,6 +26191,7 @@ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -25976,6 +26201,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -25985,6 +26211,7 @@ "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", "dev": true, + "license": "MIT", "dependencies": { "es5-ext": "~0.10.2" } @@ -25994,6 +26221,7 @@ "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.1.tgz", "integrity": "sha512-FbAj6lXil6t8z4z3j0E5mfRlPzxkySotzUHwRXjlpRh10vc6AI6WN62ehZj82VG7M20rqogJ0GLwar2Xa05a8Q==", "dev": true, + "license": "MIT", "engines": { "bun": ">=1.0.0", "deno": ">=1.30.0", @@ -26005,59 +26233,105 @@ } }, "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, + "license": "MIT", "dependencies": { - "semver": "^7.5.3" + "semver": "^6.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/make-dir/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/make-fetch-happen": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", "dev": true, + "license": "ISC", "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", + "negotiator": "^0.6.2", "promise-retry": "^2.0.1", - "ssri": "^10.0.0" + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/map-cache": { @@ -26065,6 +26339,7 @@ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -26074,6 +26349,7 @@ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -26082,13 +26358,15 @@ "version": "0.0.7", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", "dev": true, + "license": "MIT", "dependencies": { "object-visit": "^1.0.0" }, @@ -26101,6 +26379,7 @@ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", "dev": true, + "license": "MIT", "dependencies": { "repeat-string": "^1.0.0" }, @@ -26114,6 +26393,7 @@ "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==", "dev": true, + "license": "MIT", "bin": { "marked": "bin/marked" }, @@ -26126,6 +26406,7 @@ "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-3.3.0.tgz", "integrity": "sha512-+IUQJ5VlZoAFsM5MHNT7g3RHSkA3eETqhRCdXv4niUMAKHQ7lb1yvAcuGPmm4soxhmtX13u4Li6ZToXtvSEH+A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^3.1.0", "cardinal": "^2.1.1", @@ -26138,64 +26419,12 @@ "marked": "^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0" } }, - "node_modules/marked-terminal/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/marked-terminal/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/marked-terminal/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/marked-terminal/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/marked-terminal/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/marked-terminal/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/marked-terminal/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, + "license": "MIT", "engines": { "node": ">=4" } @@ -26205,6 +26434,7 @@ "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-1.1.2.tgz", "integrity": "sha512-YQ/teqaOIIfUHedRam08PB3NK7Mjct6BvzRnJmpGDm8uFXpNr1sbY4yuflI5JcEs6COpYA0FpRQhSDBf1tT95g==", "dev": true, + "license": "ISC", "dependencies": { "minimatch": "^3.0.2" } @@ -26213,12 +26443,14 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -26228,6 +26460,7 @@ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", "integrity": "sha512-nOBDrc/wgpkd3X/JOhMqYR+/eLqlfLP4oQfoBA6QExIxEl+GU01oyEkwWyueyO8110pUKijtiHGhEmYoOn88oQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^1.0.0" }, @@ -26235,20 +26468,12 @@ "node": ">=4" } }, - "node_modules/mem/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/memoizee": { "version": "0.4.17", "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==", "dev": true, + "license": "ISC", "dependencies": { "d": "^1.0.2", "es5-ext": "^0.10.64", @@ -26267,15 +26492,17 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16.10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -26297,13 +26524,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -26312,6 +26541,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -26321,6 +26551,7 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -26330,44 +26561,47 @@ } }, "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "dev": true, "license": "MIT", "bin": { "mime": "cli.js" }, "engines": { - "node": ">=4" + "node": ">=10.0.0" } }, "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", + "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.0.tgz", + "integrity": "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==", + "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "^1.53.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/mimic-function": { @@ -26375,6 +26609,7 @@ "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -26387,6 +26622,7 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -26399,6 +26635,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -26411,6 +26648,7 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -26420,6 +26658,7 @@ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", "dev": true, + "license": "MIT", "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0" @@ -26429,41 +26668,47 @@ } }, "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=8" } }, "node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, + "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "minipass": "^3.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 8" } }, "node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^7.0.3", + "minipass": "^3.1.0", "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "minizlib": "^2.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" }, "optionalDependencies": { - "encoding": "^0.1.13" + "encoding": "^0.1.12" } }, "node_modules/minipass-flush": { @@ -26471,6 +26716,7 @@ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -26478,45 +26724,23 @@ "node": ">= 8" } }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/minipass-json-stream": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.2.tgz", "integrity": "sha512-myxeeTm57lYs8pH2nxPzmEEg8DGIgW+9mv6D4JZD2pa81I/OBjeU7PtICXV6c9eRGTA5JMDsuIPUZRCyBMYNhg==", "dev": true, + "license": "MIT", "dependencies": { "jsonparse": "^1.3.1", "minipass": "^3.0.0" } }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -26524,23 +26748,12 @@ "node": ">=8" } }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/minipass-sized": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -26548,23 +26761,12 @@ "node": ">=8" } }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, + "license": "MIT", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -26573,23 +26775,12 @@ "node": ">= 8" } }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, + "license": "MIT", "dependencies": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -26603,6 +26794,7 @@ "resolved": "https://registry.npmjs.org/mixpanel/-/mixpanel-0.13.0.tgz", "integrity": "sha512-YOWmpr/o4+zJ8LPjuLUkWLc2ImFeIkX6hF1t62Wlvq6loC6e8EK8qieYO4gYPTPxxtjAryl7xmIvf/7qnPwjrQ==", "dev": true, + "license": "MIT", "dependencies": { "https-proxy-agent": "5.0.0" }, @@ -26610,21 +26802,17 @@ "node": ">=10.0" } }, - "node_modules/mixpanel/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/mixpanel/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "debug": "4" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 6.0.0" } }, "node_modules/mixpanel/node_modules/https-proxy-agent": { @@ -26632,6 +26820,7 @@ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -26640,17 +26829,12 @@ "node": ">= 6" } }, - "node_modules/mixpanel/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/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -26659,10 +26843,11 @@ } }, "node_modules/mnemonist": { - "version": "0.39.6", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.39.6.tgz", - "integrity": "sha512-A/0v5Z59y63US00cRSLiloEIw3t5G+MiKz4BhX21FI+YBJXBOGW0ohFxTxO08dsOYlzxo87T7vGfZKYp2bcAWA==", + "version": "0.39.8", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.39.8.tgz", + "integrity": "sha512-vyWo2K3fjrUw8YeeZ1zF0fy6Mu59RHokURlld8ymdUPjMlD9EC9ov1/YPqTgqRvUN9nTr3Gqfz29LYAmu0PHPQ==", "dev": true, + "license": "MIT", "dependencies": { "obliterator": "^2.0.1" } @@ -26672,6 +26857,7 @@ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", @@ -26702,17 +26888,33 @@ "node": ">= 14.0.0" } }, + "node_modules/mocha/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/mocha/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/mocha/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, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -26722,6 +26924,7 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -26746,34 +26949,19 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, - "node_modules/mocha/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/mocha/node_modules/diff": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -26783,6 +26971,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -26795,6 +26984,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -26812,6 +27002,7 @@ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -26826,11 +27017,25 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/mocha/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/mocha/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -26843,6 +27048,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -26853,27 +27059,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mocha/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -26881,17 +27072,12 @@ "node": ">=10" } }, - "node_modules/mocha/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/mocha/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -26907,6 +27093,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -26922,6 +27109,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -26931,6 +27119,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -26938,38 +27127,12 @@ "node": ">=8.10.0" } }, - "node_modules/mocha/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/mocha/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -26983,20 +27146,12 @@ "node": ">=10" } }, - "node_modules/mocha/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/mocha/node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -27009,6 +27164,7 @@ "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -27018,6 +27174,7 @@ "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-5.0.1.tgz", "integrity": "sha512-kvw3B4G19IXk+BOXnYq/D/VeO9qfHaapMeuS7w7sNUqmGaA6hywdFHMi+VWeR9wUScXM7XjoryTffCZ5B0/8IA==", "dev": true, + "license": "MIT", "dependencies": { "ast-module-types": "^5.0.0", "node-source-walk": "^6.0.1" @@ -27034,6 +27191,7 @@ "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-8.0.5.tgz", "integrity": "sha512-vc3rYLjDo5Frjox8NZpiyLXsNWJ5BWshztc/5KSOMzpg9k5cHH652YsJ7VKKmtM4SvaxuE9RkrYGhiSjH3Ehow==", "dev": true, + "license": "MIT", "dependencies": { "commander": "^10.0.1", "glob": "^7.2.3", @@ -27052,6 +27210,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -27061,6 +27220,7 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -27070,6 +27230,7 @@ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.10.0.tgz", "integrity": "sha512-gP9vduuYWb9ZkDM546M+MP2qKVk5ZG2wPF63OvSRuUbqCR+11ZCAE1mOfllhlAG0wcoJY5yDL/rV3OmYEwXIzg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@mongodb-js/saslprep": "^1.1.5", "bson": "^6.7.0", @@ -27116,50 +27277,18 @@ "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@types/whatwg-url": "^11.0.2", "whatwg-url": "^13.0.0" } }, - "node_modules/mongodb-connection-string-url/node_modules/tr46": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", - "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", - "dev": true, - "dependencies": { - "punycode": "^2.3.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/mongodb-connection-string-url/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/mongodb-connection-string-url/node_modules/whatwg-url": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", - "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", - "dev": true, - "dependencies": { - "tr46": "^4.1.1", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/mongoose": { "version": "8.8.3", "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.8.3.tgz", "integrity": "sha512-/I4n/DcXqXyIiLRfAmUIiTjj3vXfeISke8dt4U4Y8Wfm074Wa6sXnQrXN49NFOFf2mM1kUdOXryoBvkuCnr+Qw==", "dev": true, + "license": "MIT", "dependencies": { "bson": "^6.7.0", "kareem": "2.6.3", @@ -27177,17 +27306,12 @@ "url": "https://opencollective.com/mongoose" } }, - "node_modules/mongoose/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/mpath": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -27197,6 +27321,7 @@ "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-5.10.2.tgz", "integrity": "sha512-Q8NrMXB6FwQ2DulGONeDb6BtFHxyQHmXWzDrSC724iyofxLleq/wuZmztV3kg1Kda9I7l0oHP+FKesowoFxyUg==", "dev": true, + "license": "MIT", "dependencies": { "@types/readable-stream": "^4.0.5", "@types/ws": "^8.5.9", @@ -27229,96 +27354,13 @@ "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-9.0.1.tgz", "integrity": "sha512-koZF1V/X2RZUI6uD9wN5OK1JxxcG1ofAR4H3LjCw1FkeKzruZQ26aAA6v2m1lZyWONZIR5wMMJFrZJDRNzbiQw==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^6.0.8", "debug": "^4.3.4", "process-nextick-args": "^2.0.1" } }, - "node_modules/mqtt-packet/node_modules/bl": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/bl/-/bl-6.0.16.tgz", - "integrity": "sha512-V/kz+z2Mx5/6qDfRCilmrukUXcXuCoXKg3/3hDvzKKoSUx8CJKudfIoT29XZc3UE9xBvxs5qictiHdprwtteEg==", - "dev": true, - "dependencies": { - "@types/readable-stream": "^4.0.0", - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^4.2.0" - } - }, - "node_modules/mqtt-packet/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/mqtt-packet/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/mqtt-packet/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/mqtt-packet/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dev": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/mqtt-packet/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/mqtt/node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -27338,6 +27380,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -27351,6 +27394,7 @@ "engines": [ "node >= 6.0" ], + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -27363,6 +27407,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -27372,40 +27417,40 @@ "node": ">= 6" } }, - "node_modules/mqtt/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/mqtt/node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } - } + ], + "license": "BSD-3-Clause" }, "node_modules/mqtt/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - }, - "node_modules/mqtt/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 + "dev": true, + "license": "ISC" }, "node_modules/mqtt/node_modules/readable-stream": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", "dev": true, + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -27417,20 +27462,12 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/mqtt/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/mquery": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "4.x" }, @@ -27438,33 +27475,11 @@ "node": ">=14.0.0" } }, - "node_modules/mquery/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/mquery/node_modules/ms": { + "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/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "license": "MIT" }, "node_modules/multer": { "version": "1.4.4", @@ -27472,6 +27487,7 @@ "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==", "deprecated": "Multer 1.x is affected by CVE-2022-24434. This is fixed in v1.4.4-lts.1 which drops support for versions of Node.js before 6. Please upgrade to at least Node.js 6 and version 1.4.4-lts.1 of Multer. If you need support for older versions of Node.js, we are open to accepting patches that would fix the CVE on the main 1.x release line, whilst maintaining compatibility with Node.js 0.10.", "dev": true, + "license": "MIT", "dependencies": { "append-field": "^1.0.0", "busboy": "^0.2.11", @@ -27491,6 +27507,7 @@ "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", "integrity": "sha512-7ZxrUybYv9NonoXgwoOqtStIu18D1c3eFZj27hqgf5kBrBF8Q+tE8V0MW8dKM5QLkQPh1JhhbKgHLY9kifov4Q==", "dev": true, + "license": "MIT", "dependencies": { "duplexer2": "0.0.2" } @@ -27500,6 +27517,7 @@ "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-2.0.0.tgz", "integrity": "sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.13.0" } @@ -27509,6 +27527,7 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", "dev": true, + "license": "ISC", "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -27518,6 +27537,7 @@ "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.11.4.tgz", "integrity": "sha512-Z2o3tY4Z8EvSRDwknaC40MdZ3+m0sKbpnXrShQLdxPrAvcNli7jLrD2Zd2IzsRMw4eK9Yle500FDmlkIqp+krg==", "dev": true, + "license": "MIT", "dependencies": { "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", @@ -27538,6 +27558,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -27549,13 +27570,15 @@ "version": "5.2.3", "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, + "license": "MIT", "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -27567,6 +27590,7 @@ "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", "dev": true, + "license": "MIT", "dependencies": { "lru-cache": "^7.14.1" }, @@ -27579,12 +27603,13 @@ "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, "funding": [ { @@ -27592,6 +27617,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -27604,6 +27630,7 @@ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, + "license": "MIT", "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -27626,15 +27653,45 @@ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, "engines": { "node": ">=0.10.0" } }, + "node_modules/nanomatch/node_modules/is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/nanomatch/node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -27643,13 +27700,15 @@ "version": "0.3.14", "resolved": "https://registry.npmjs.org/nanotimer/-/nanotimer-0.3.14.tgz", "integrity": "sha512-NpKXdP6ZLwZcODvDeyfoDBVoncbrgvC12txO3F4l9BxMycQjZD29AnasGAy7uSi3dcsTGnGn6/zzvQRwbjS4uw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/nats": { "version": "2.28.2", "resolved": "https://registry.npmjs.org/nats/-/nats-2.28.2.tgz", "integrity": "sha512-02cvR8EPach+0BfVaQjPgsbPFn6uMjEQAuvXS2ppg8jiWEm2KYdfmeFmtshiU9b2+kFh3LSEKMEaIfRgk3K8tw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "nkeys.js": "1.1.0" }, @@ -27661,12 +27720,15 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -27675,25 +27737,29 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/next-tick": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/nise": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/nise/-/nise-6.1.1.tgz", "integrity": "sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", "@sinonjs/fake-timers": "^13.0.1", @@ -27702,20 +27768,12 @@ "path-to-regexp": "^8.1.0" } }, - "node_modules/nise/node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, "node_modules/nkeys.js": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/nkeys.js/-/nkeys.js-1.1.0.tgz", "integrity": "sha512-tB/a0shZL5UZWSwsoeyqfTszONTt4k2YS0tuQioMOD180+MbombYVgzDUYHlx+gejYK6rgf08n/2Df99WY0Sxg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tweetnacl": "1.0.3" }, @@ -27723,23 +27781,19 @@ "node": ">=10.0.0" } }, - "node_modules/nkeys.js/node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - }, "node_modules/node-abort-controller": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.21" } @@ -27748,6 +27802,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -27763,11 +27818,34 @@ } } }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-gyp": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz", "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==", "dev": true, + "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", @@ -27787,69 +27865,238 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/node-gyp/node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/node-gyp/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, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, + "node_modules/node-gyp/node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/node-gyp/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/node-gyp/node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/node-gyp/node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/node-gyp/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/node-gyp/node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/node-gyp/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/node-gyp/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "aggregate-error": "^3.0.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "node_modules/node-gyp/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, "engines": { - "node": ">=16" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/node-gyp/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "unique-slug": "^4.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/node-gyp/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/node-gyp/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/node-gyp/node_modules/which": { @@ -27857,6 +28104,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -27871,13 +28119,15 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, + "license": "MIT", "dependencies": { "process-on-spawn": "^1.0.0" }, @@ -27889,13 +28139,15 @@ "version": "2.0.18", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-source-walk": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-6.0.2.tgz", "integrity": "sha512-jn9vOIK/nfqoFCcpK89/VCVaLg1IHE6UVfDOzvqmANaJ/rWCTEdH8RZ1V278nv2jr36BJdyQXIAavBLXpzdlag==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.21.8" }, @@ -27908,6 +28160,7 @@ "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.7.tgz", "integrity": "sha512-hLj7fuMow6f0lbB0cD14Lz2xNjwsyruH251Pk4t/yIitCFJbmY1myuLlHm/q06aST4jg6EgAh74PIBBrRqpVAQ==", "dev": true, + "license": "MIT", "dependencies": { "chokidar": "^3.5.2", "debug": "^4", @@ -27931,11 +28184,26 @@ "url": "https://opencollective.com/nodemon" } }, + "node_modules/nodemon/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/nodemon/node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -27955,21 +28223,17 @@ "fsevents": "~2.3.2" } }, - "node_modules/nodemon/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/nodemon/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { - "ms": "^2.1.3" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 6" } }, "node_modules/nodemon/node_modules/has-flag": { @@ -27977,21 +28241,17 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/nodemon/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/nodemon/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -27999,23 +28259,12 @@ "node": ">=8.10.0" } }, - "node_modules/nodemon/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/nodemon/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -28028,6 +28277,7 @@ "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", "dev": true, + "license": "ISC", "dependencies": { "abbrev": "^2.0.0" }, @@ -28043,6 +28293,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^7.0.0", "semver": "^7.3.5", @@ -28052,23 +28303,12 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/normalize-package-data/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/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -28078,6 +28318,7 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -28090,6 +28331,7 @@ "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" }, @@ -28102,6 +28344,7 @@ "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", "dev": true, + "license": "ISC", "dependencies": { "npm-normalize-package-bin": "^3.0.0" }, @@ -28114,6 +28357,7 @@ "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, @@ -28121,23 +28365,12 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm-install-checks/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/npm-normalize-package-bin": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -28147,6 +28380,7 @@ "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", "dev": true, + "license": "ISC", "dependencies": { "hosted-git-info": "^7.0.0", "proc-log": "^4.0.0", @@ -28157,23 +28391,12 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm-package-arg/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/npm-packlist": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", "dev": true, + "license": "ISC", "dependencies": { "ignore-walk": "^6.0.4" }, @@ -28186,6 +28409,7 @@ "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz", "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==", "dev": true, + "license": "ISC", "dependencies": { "npm-install-checks": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", @@ -28196,23 +28420,12 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm-pick-manifest/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/npm-registry-fetch": { "version": "16.2.1", "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.2.1.tgz", "integrity": "sha512-8l+7jxhim55S85fjiDGJ1rZXBWGtRLi1OSb4Z3BPLObPuIaeKRlPRiYMSHU4/81ck3t71Z+UwDDl47gcpmfQQA==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/redact": "^1.1.0", "make-fetch-happen": "^13.0.0", @@ -28227,11 +28440,236 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/npm-registry-fetch/node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm-registry-fetch/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-registry-fetch/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^2.0.0" }, @@ -28239,12 +28677,23 @@ "node": ">=4" } }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "deprecated": "This package is no longer supported.", "dev": true, + "license": "ISC", "dependencies": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -28257,6 +28706,7 @@ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -28269,39 +28719,18 @@ "resolved": "https://registry.npmjs.org/number-allocator/-/number-allocator-1.0.14.tgz", "integrity": "sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.1", "js-sdsl": "4.3.0" } }, - "node_modules/number-allocator/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/number-allocator/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/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -28311,6 +28740,7 @@ "resolved": "https://registry.npmjs.org/nyc/-/nyc-17.1.0.tgz", "integrity": "sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", @@ -28347,13 +28777,20 @@ "node": ">=18" } }, - "node_modules/nyc/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/nyc/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/nyc/node_modules/cliui": { @@ -28361,23 +28798,39 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, - "node_modules/nyc/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "node_modules/nyc/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/nyc/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" }, "node_modules/nyc/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -28391,6 +28844,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -28398,26 +28852,12 @@ "node": ">=8" } }, - "node_modules/nyc/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/nyc/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -28433,6 +28873,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -28440,32 +28881,12 @@ "node": ">=8" } }, - "node_modules/nyc/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/nyc/node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -28474,7 +28895,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/nyc/node_modules/rimraf": { "version": "3.0.2", @@ -28482,6 +28904,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -28492,20 +28915,19 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/nyc/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/nyc/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" - } + "license": "ISC" }, "node_modules/nyc/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -28519,13 +28941,15 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/nyc/node_modules/yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -28548,6 +28972,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -28561,6 +28986,7 @@ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "*" } @@ -28569,6 +28995,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -28578,6 +29005,7 @@ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", "dev": true, + "license": "MIT", "dependencies": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -28587,34 +29015,11 @@ "node": ">=0.10.0" } }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", "engines": { "node": ">= 6" } @@ -28623,6 +29028,7 @@ "version": "1.13.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -28635,6 +29041,7 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -28644,6 +29051,7 @@ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.0" }, @@ -28656,6 +29064,7 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -28674,6 +29083,7 @@ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", "dev": true, + "license": "MIT", "dependencies": { "array-each": "^1.0.1", "array-slice": "^1.0.0", @@ -28689,6 +29099,7 @@ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -28707,6 +29118,7 @@ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -28721,6 +29133,7 @@ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA==", "dev": true, + "license": "MIT", "dependencies": { "for-own": "^0.1.4", "is-extendable": "^0.1.1" @@ -28734,6 +29147,7 @@ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", "dev": true, + "license": "MIT", "dependencies": { "for-in": "^1.0.1" }, @@ -28746,6 +29160,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -28755,6 +29170,7 @@ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -28767,6 +29183,7 @@ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -28783,13 +29200,15 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/on-exit-leak-free": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } @@ -28798,6 +29217,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -28809,23 +29229,22 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", "dev": true, + "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "mimic-fn": "^1.0.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, "node_modules/open": { @@ -28833,6 +29252,7 @@ "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, + "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -28850,6 +29270,7 @@ "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true, + "license": "(WTFPL OR MIT)", "bin": { "opener": "bin/opener-bin.js" } @@ -28859,6 +29280,7 @@ "resolved": "https://registry.npmjs.org/opentracing/-/opentracing-0.14.7.tgz", "integrity": "sha512-vz9iS7MJ5+Bp1URw8Khvdyw1H/hGvzHWlKQ7eRrQojSCDL1/SrWfrY9QebLw97n2deyRtzHRC3MkQfVNUCo91Q==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=0.10" } @@ -28868,6 +29290,7 @@ "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.18.1.tgz", "integrity": "sha512-mLXNwWPa9dgFyDqkNi54sjDyNJ9/fTI6WGBLgnXku1vdKY/jovHfZT5r+aiVeFFLOz+foPNOm5YJ4mqgld2GBQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@wry/caches": "^1.0.0", @@ -28881,6 +29304,7 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -28897,13 +29321,15 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ora": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^3.0.0", "cli-cursor": "^3.1.0", @@ -28921,11 +29347,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/ora/node_modules/chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -28939,6 +29382,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -28946,17 +29390,146 @@ "node": ">=8" } }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ora/node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/log-symbols/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ora/node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ora/node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/ora/node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/ora/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/ora/node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -28965,26 +29538,42 @@ "node": ">=8" } }, + "node_modules/ora/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ordered-read-streams": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "^2.0.1" } }, - "node_modules/ordered-read-streams/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/ordered-read-streams/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -28995,17 +29584,12 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/ordered-read-streams/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/ordered-read-streams/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -29015,6 +29599,7 @@ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^0.7.0", "lcid": "^1.0.0", @@ -29029,6 +29614,7 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", "dev": true, + "license": "MIT", "dependencies": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", @@ -29040,6 +29626,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -29058,6 +29645,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -29067,22 +29655,68 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, + "license": "ISC", "dependencies": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" } }, + "node_modules/os-locale/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-locale/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-locale/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/os-locale/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/os-locale/node_modules/yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -29092,6 +29726,7 @@ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -29101,6 +29736,7 @@ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -29110,6 +29746,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^1.0.0" }, @@ -29125,6 +29762,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^4.0.0" }, @@ -29136,27 +29774,26 @@ } }, "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, + "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/package-hash": { @@ -29164,6 +29801,7 @@ "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, + "license": "ISC", "dependencies": { "graceful-fs": "^4.1.15", "hasha": "^5.0.0", @@ -29179,6 +29817,7 @@ "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", "integrity": "sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA==", "dev": true, + "license": "MIT", "dependencies": { "got": "^6.7.1", "registry-auth-token": "^3.0.1", @@ -29193,13 +29832,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true + "dev": true, + "license": "BlueOak-1.0.0" }, "node_modules/package-json/node_modules/get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -29209,6 +29850,7 @@ "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", "integrity": "sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg==", "dev": true, + "license": "MIT", "dependencies": { "create-error-class": "^3.0.0", "duplexer3": "^0.1.4", @@ -29231,15 +29873,27 @@ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/package-json/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/pacote": { "version": "17.0.7", "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.7.tgz", "integrity": "sha512-sgvnoUMlkv9xHwDUKjKQFXVyUi8dtJGKp3vg6sYy+TxbDic5RjZCHF3ygv0EJgNRZ2GfRONjlKPUfokJ9lDpwQ==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/git": "^5.0.0", "@npmcli/installed-package-contents": "^2.0.1", @@ -29267,11 +29921,194 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/pacote/node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/pacote/node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pacote/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/pacote/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pacote/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/pacote/node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/pacote/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pacote/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pacote/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -29284,6 +30121,7 @@ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-absolute": "^1.0.0", "map-cache": "^0.2.0", @@ -29297,13 +30135,15 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz", "integrity": "sha512-bSWyzBKqcSL4RrncTpGsEKoJ7H8a4L3++ifTAbTFeMHyq2wRV+42DGmQcHIrJIvdcacjIOxEuKH/w4tthF17gg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/parse-glob": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==", "dev": true, + "license": "MIT", "dependencies": { "glob-base": "^0.3.0", "is-dotfile": "^1.0.0", @@ -29319,6 +30159,7 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -29328,6 +30169,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^1.0.0" }, @@ -29340,6 +30182,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -29358,6 +30201,7 @@ "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -29367,6 +30211,7 @@ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -29376,6 +30221,7 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", "dev": true, + "license": "MIT", "dependencies": { "entities": "^4.5.0" }, @@ -29388,6 +30234,7 @@ "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", "dev": true, + "license": "MIT", "dependencies": { "domhandler": "^5.0.3", "parse5": "^7.0.0" @@ -29401,6 +30248,7 @@ "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", "dev": true, + "license": "MIT", "dependencies": { "parse5": "^7.0.0" }, @@ -29422,6 +30270,7 @@ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -29431,6 +30280,7 @@ "resolved": "https://registry.npmjs.org/patch-console/-/patch-console-2.0.0.tgz", "integrity": "sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } @@ -29439,19 +30289,22 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-exists": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } @@ -29461,30 +30314,34 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "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": ">=4" + "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-root": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", "dev": true, + "license": "MIT", "dependencies": { "path-root-regex": "^0.1.0" }, @@ -29497,6 +30354,7 @@ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -29506,6 +30364,7 @@ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -29521,27 +30380,44 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } }, "node_modules/path-starts-with": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-starts-with/-/path-starts-with-2.0.1.tgz", "integrity": "sha512-wZ3AeiRBRlNwkdUxvBANh0+esnt38DLffHDujZyRHkqkaKHTglnY2EP5UX3b8rdeiSutgO4y9NEJwXezNP5vHg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-to-regexp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", - "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==" + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -29551,6 +30427,7 @@ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -29560,6 +30437,10 @@ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", "dev": true, + "license": [ + "MIT", + "Apache2" + ], "dependencies": { "through": "~2.3" } @@ -29568,19 +30449,22 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -29593,6 +30477,7 @@ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, + "license": "MIT", "bin": { "pidtree": "bin/pidtree.js" }, @@ -29601,12 +30486,13 @@ } }, "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, "node_modules/pinkie": { @@ -29614,6 +30500,7 @@ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -29623,6 +30510,7 @@ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, + "license": "MIT", "dependencies": { "pinkie": "^2.0.0" }, @@ -29635,6 +30523,7 @@ "resolved": "https://registry.npmjs.org/pino/-/pino-9.5.0.tgz", "integrity": "sha512-xSEmD4pLnV54t0NOUN16yCl7RIB1c5UUOse5HSyEXtBp+FgFQyPeDutc+Q2ZO7/22vImV7VfEjH/1zV2QuqvYw==", "dev": true, + "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", @@ -29657,6 +30546,7 @@ "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", "dev": true, + "license": "MIT", "dependencies": { "split2": "^4.0.0" } @@ -29665,13 +30555,15 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pirates": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -29681,6 +30573,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -29693,6 +30586,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -29706,6 +30600,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -29718,6 +30613,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -29733,6 +30629,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -29740,29 +30637,41 @@ "node": ">=8" } }, - "node_modules/pkg-dir/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/pkg-dir/node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/playwright": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.0.tgz", + "integrity": "sha512-eKpmys0UFDnfNb3vfsf8Vx2LEOtflgRebl0Im2eQQnYMA4Aqd+Zw8bEOB+7ZKvN76901mRnqdsiOGKxzVTbi7A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.49.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, "node_modules/playwright-core": { "version": "1.49.0", "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.49.0.tgz", "integrity": "sha512-R+3KKTQF3npy5GTiKH/T+kdhoJfJojjHESR1YEWhYuEKRVfVaxH3+4+GvXE5xyCngCxhxnykk0Vlah9v8fs3jA==", "dev": true, + "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, @@ -29775,6 +30684,7 @@ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "^1.0.1", "arr-diff": "^4.0.0", @@ -29790,6 +30700,7 @@ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-wrap": "^0.1.0" }, @@ -29798,10 +30709,11 @@ } }, "node_modules/polite-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/polite-json/-/polite-json-5.0.0.tgz", - "integrity": "sha512-OLS/0XeUAcE8a2fdwemNja+udKgXNnY6yKVIXqAD2zVRx1KvY6Ato/rZ2vdzbxqYwPW0u6SCNC/bAMPNzpzxbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/polite-json/-/polite-json-4.0.1.tgz", + "integrity": "sha512-8LI5ZeCPBEb4uBbcYKNVwk4jgqNx1yHReWoW4H4uUihWlSqZsUDfSITrRhjliuPgxsNPFhNSudGO2Zu4cbWinQ==", "dev": true, + "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" }, @@ -29814,6 +30726,7 @@ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -29823,36 +30736,27 @@ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, "node_modules/postcss-values-parser": { @@ -29860,6 +30764,7 @@ "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz", "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==", "dev": true, + "license": "MPL-2.0", "dependencies": { "color-name": "^1.1.4", "is-url-superb": "^4.0.0", @@ -29872,11 +30777,26 @@ "postcss": "^8.2.9" } }, + "node_modules/postcss-values-parser/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true, + "license": "ISC" + }, "node_modules/posthog-node": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/posthog-node/-/posthog-node-2.6.0.tgz", "integrity": "sha512-/BiFw/jwdP0uJSRAIoYqLoBTjZ612xv74b1L/a3T/p1nJVL8e0OrHuxbJW56c6WVW/IKm9gBF/zhbqfaz0XgJQ==", "dev": true, + "license": "MIT", "dependencies": { "axios": "^0.27.0" }, @@ -29889,6 +30809,7 @@ "resolved": "https://registry.npmjs.org/precinct/-/precinct-11.0.5.tgz", "integrity": "sha512-oHSWLC8cL/0znFhvln26D14KfCQFFn4KOLSw6hmLhd+LQ2SKt9Ljm89but76Pc7flM9Ty1TnXyrA2u16MfRV3w==", "dev": true, + "license": "MIT", "dependencies": { "@dependents/detective-less": "^4.1.0", "commander": "^10.0.1", @@ -29915,6 +30836,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -29924,6 +30846,7 @@ "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" } @@ -29933,6 +30856,7 @@ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -29941,13 +30865,15 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/present/-/present-0.0.3.tgz", "integrity": "sha512-d0QMXYTKHuAO0n0IfI/x2lbNwybdNWjRQ08hQySzqMQ2M0gwh/IetTv2glkPJihFn+cMDYjK/BiVgcLcjsASgg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -29957,6 +30883,7 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -29985,6 +30912,7 @@ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -29994,6 +30922,7 @@ "resolved": "https://registry.npmjs.org/prismjs-terminal/-/prismjs-terminal-1.2.3.tgz", "integrity": "sha512-xc0zuJ5FMqvW+DpiRkvxURlz98DdfDsZcFHdO699+oL+ykbFfgI7O4VDEgUyc07BSL2NHl3zdb8m/tZ/aaqUrw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "chalk": "^5.2.0", "prismjs": "^1.29.0", @@ -30011,6 +30940,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -30023,6 +30953,7 @@ "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -30032,6 +30963,7 @@ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -30040,13 +30972,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/process-on-spawn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", "dev": true, + "license": "MIT", "dependencies": { "fromentries": "^1.2.0" }, @@ -30058,13 +30992,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz", "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -30074,6 +31010,7 @@ "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-14.2.0.tgz", "integrity": "sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tdigest": "^0.1.1" }, @@ -30086,6 +31023,7 @@ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", "dev": true, + "license": "MIT", "dependencies": { "asap": "~2.0.6" } @@ -30094,13 +31032,15 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/promise-breaker/-/promise-breaker-6.0.0.tgz", "integrity": "sha512-BthzO9yTPswGf7etOBiHCVuugs2N01/Q/94dIPls48z2zCmrnDptUUZzfIb+41xq0MnYZ/BzmOd6ikDR4ibNZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/promise-coalesce": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/promise-coalesce/-/promise-coalesce-1.1.2.tgz", "integrity": "sha512-zLaJ9b8hnC564fnJH6NFSOGZYYdzrAJn2JUUIwzoQb32fG2QAakpDNM+CZo1km6keXkRXRM+hml1BFAPVnPkxg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=16" } @@ -30109,13 +31049,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, + "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -30129,6 +31071,7 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -30138,6 +31081,7 @@ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "loose-envify": "^1.4.0", @@ -30145,19 +31089,13 @@ "react-is": "^16.13.1" } }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "optional": true - }, "node_modules/protobufjs": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", "dev": true, "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -30180,12 +31118,14 @@ "version": "5.2.3", "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -30198,28 +31138,42 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/psl": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.13.0.tgz", "integrity": "sha512-BFwmFXiJoFqlUpZ5Qssolv15DMyc84gTBds1BjsV1BfXEo1UyyD7GsmN67n7J77uRhoSNW1AXtXKPLcBFQn9Aw==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.3.1" } }, + "node_modules/psl/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pump": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -30230,6 +31184,7 @@ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, + "license": "MIT", "dependencies": { "duplexify": "^3.6.0", "inherits": "^2.0.3", @@ -30241,19 +31196,18 @@ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", "dev": true, - "engines": { - "node": ">=6" - } + "license": "MIT" }, "node_modules/q": { "version": "1.5.1", @@ -30261,6 +31215,7 @@ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -30270,6 +31225,7 @@ "version": "6.13.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" }, @@ -30294,7 +31250,8 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -30314,25 +31271,29 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/queue-tick": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/quick-format-unescaped": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -30344,13 +31305,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz", "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/randomatic": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^4.0.0", "kind-of": "^6.0.0", @@ -30365,6 +31328,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -30374,6 +31338,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -30383,6 +31348,7 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } @@ -30401,6 +31367,7 @@ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -30416,6 +31383,7 @@ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -30430,13 +31398,25 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dev": true, + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, @@ -30449,6 +31429,7 @@ "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz", "integrity": "sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==", "dev": true, + "license": "MIT", "dependencies": { "@base2/pretty-print-object": "1.0.1", "is-plain-object": "5.0.0", @@ -30459,17 +31440,27 @@ "react-dom": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0" } }, - "node_modules/react-is": { + "node_modules/react-element-to-jsx-string/node_modules/react-is": { "version": "18.1.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT", + "optional": true }, "node_modules/react-reconciler": { "version": "0.29.2", "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.29.2.tgz", "integrity": "sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==", "dev": true, + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -30486,6 +31477,7 @@ "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz", "integrity": "sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA==", "dev": true, + "license": "ISC", "dependencies": { "graceful-fs": "^4.1.2" } @@ -30496,6 +31488,7 @@ "integrity": "sha512-8PcDiZ8DXUjLf687Ol4BR8Bpm2umR7vhoZOzNRt+uxD9GpBh/K+CAAALVIiYFknmvlmyg7hM7BSNUXPaCCqd0Q==", "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", "dev": true, + "license": "ISC", "dependencies": { "glob": "^10.2.2", "json-parse-even-better-errors": "^3.0.0", @@ -30511,6 +31504,7 @@ "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", "dev": true, + "license": "ISC", "dependencies": { "json-parse-even-better-errors": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" @@ -30524,6 +31518,7 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", "dev": true, + "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -30533,6 +31528,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -30542,6 +31538,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -30562,6 +31559,7 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", "dev": true, + "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -30571,6 +31569,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -30581,11 +31580,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/read-package-json/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/read-package-up": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up-simple": "^1.0.0", "read-pkg": "^9.0.0", @@ -30599,10 +31609,11 @@ } }, "node_modules/read-package-up/node_modules/type-fest": { - "version": "4.27.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.27.0.tgz", - "integrity": "sha512-3IMSWgP7C5KSQqmo1wjhKrwsvXAtF33jO3QY+Uy++ia7hqvgSK6iXbbg5PbDBc1P2ZbNEDgejOrN4YooXvhwCw==", + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.29.0.tgz", + "integrity": "sha512-RPYt6dKyemXJe7I6oNstcH24myUGSReicxcHTvCLgzm4e0n8y05dGvcGB15/SoPRBmhlMthWQ9pvKyL81ko8nQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" }, @@ -30615,6 +31626,7 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.3", "normalize-package-data": "^6.0.0", @@ -30634,6 +31646,7 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -30647,6 +31660,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", "dev": true, + "license": "MIT", "dependencies": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -30659,13 +31673,15 @@ "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/read-pkg-up/node_modules/load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -30682,6 +31698,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -30694,6 +31711,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, + "license": "MIT", "dependencies": { "error-ex": "^1.2.0" }, @@ -30706,6 +31724,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", "dev": true, + "license": "MIT", "dependencies": { "pinkie-promise": "^2.0.0" }, @@ -30718,6 +31737,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", @@ -30727,11 +31747,22 @@ "node": ">=0.10.0" } }, + "node_modules/read-pkg-up/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/read-pkg-up/node_modules/read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", "dev": true, + "license": "MIT", "dependencies": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -30741,11 +31772,22 @@ "node": ">=0.10.0" } }, + "node_modules/read-pkg-up/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/read-pkg-up/node_modules/strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dev": true, + "license": "MIT", "dependencies": { "is-utf8": "^0.2.0" }, @@ -30758,6 +31800,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz", "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.22.13", "index-to-position": "^0.1.2", @@ -30771,10 +31814,11 @@ } }, "node_modules/read-pkg/node_modules/type-fest": { - "version": "4.27.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.27.0.tgz", - "integrity": "sha512-3IMSWgP7C5KSQqmo1wjhKrwsvXAtF33jO3QY+Uy++ia7hqvgSK6iXbbg5PbDBc1P2ZbNEDgejOrN4YooXvhwCw==", + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.29.0.tgz", + "integrity": "sha512-RPYt6dKyemXJe7I6oNstcH24myUGSReicxcHTvCLgzm4e0n8y05dGvcGB15/SoPRBmhlMthWQ9pvKyL81ko8nQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" }, @@ -30783,15 +31827,18 @@ } }, "node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/readdir-glob": { @@ -30799,6 +31846,7 @@ "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.1.0" } @@ -30808,6 +31856,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -30817,6 +31866,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -30829,6 +31879,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14.16.0" }, @@ -30842,6 +31893,7 @@ "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12.13.0" } @@ -30851,6 +31903,7 @@ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, + "license": "MIT", "dependencies": { "resolve": "^1.20.0" }, @@ -30863,6 +31916,7 @@ "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", "integrity": "sha512-XNwrTx77JQCEMXTeb8movBKuK75MgH0RZkujNuDKCezemx/voapl9i2gCSi8WWm8+ox5ycJi1gxF22fR7c0Ciw==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^3.0.0", "strip-indent": "^2.0.0" @@ -30876,6 +31930,7 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -30885,6 +31940,7 @@ "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", "dev": true, + "license": "MIT", "dependencies": { "esprima": "~4.0.0" } @@ -30894,6 +31950,10 @@ "resolved": "https://registry.npmjs.org/redis/-/redis-4.7.0.tgz", "integrity": "sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ==", "dev": true, + "license": "MIT", + "workspaces": [ + "./packages/*" + ], "dependencies": { "@redis/bloom": "1.2.0", "@redis/client": "1.6.0", @@ -30908,6 +31968,7 @@ "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -30917,6 +31978,7 @@ "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", "dev": true, + "license": "MIT", "dependencies": { "redis-errors": "^1.0.0" }, @@ -30927,19 +31989,44 @@ "node_modules/reflect-metadata": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz", + "integrity": "sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "which-builtin-type": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regex-cache": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, + "license": "MIT", "dependencies": { "is-equal-shallow": "^0.1.3" }, @@ -30952,6 +32039,7 @@ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, + "license": "MIT", "dependencies": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -30965,6 +32053,7 @@ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -30983,6 +32072,7 @@ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", "dev": true, + "license": "MIT", "dependencies": { "rc": "^1.1.6", "safe-buffer": "^5.0.1" @@ -30993,6 +32083,7 @@ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", "dev": true, + "license": "MIT", "dependencies": { "rc": "^1.0.1" }, @@ -31005,6 +32096,7 @@ "resolved": "https://registry.npmjs.org/rehackt/-/rehackt-0.1.0.tgz", "integrity": "sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==", "dev": true, + "license": "MIT", "optional": true, "peerDependencies": { "@types/react": "*", @@ -31023,13 +32115,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/reinterval/-/reinterval-1.1.0.tgz", "integrity": "sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", "dev": true, + "license": "ISC", "dependencies": { "es6-error": "^4.0.1" }, @@ -31042,6 +32136,7 @@ "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5", "is-utf8": "^0.2.1" @@ -31055,6 +32150,7 @@ "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", "dev": true, + "license": "MIT", "dependencies": { "remove-bom-buffer": "^3.0.0", "safe-buffer": "^5.1.0", @@ -31068,13 +32164,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/repeat-element": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -31084,6 +32182,7 @@ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } @@ -31093,6 +32192,7 @@ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", "dev": true, + "license": "MIT", "dependencies": { "is-finite": "^1.0.0" }, @@ -31101,12 +32201,12 @@ } }, "node_modules/replace-ext": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", - "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", "dev": true, "engines": { - "node": ">= 10" + "node": ">= 0.4" } }, "node_modules/replace-homedir": { @@ -31114,6 +32214,7 @@ "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-2.0.0.tgz", "integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.13.0" } @@ -31124,6 +32225,7 @@ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "dev": true, + "license": "Apache-2.0", "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -31156,6 +32258,7 @@ "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", "deprecated": "request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", "dev": true, + "license": "ISC", "dependencies": { "bluebird": "^3.5.0", "request-promise-core": "1.1.4", @@ -31174,6 +32277,7 @@ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", "dev": true, + "license": "ISC", "dependencies": { "lodash": "^4.17.19" }, @@ -31184,11 +32288,36 @@ "request": "^2.34" } }, + "node_modules/request-promise/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/request-promise/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/request/node_modules/form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -31198,21 +32327,70 @@ "node": ">= 0.12" } }, + "node_modules/request/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/request/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/request/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/request/node_modules/qs": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.6" } }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/request/node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, + "license": "MIT", "bin": { "uuid": "bin/uuid" } @@ -31222,6 +32400,7 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -31230,6 +32409,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -31238,13 +32418,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/requirejs": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.7.tgz", "integrity": "sha512-DouTG8T1WanGok6Qjg2SXuCMzszOo0eHeH9hDZ5Y4x8Je+9JB38HdTLT4/VA8OaUhBa0JPVHJ0pyBkM1z+pDsw==", "dev": true, + "license": "MIT", "bin": { "r_js": "bin/r.js", "r.js": "bin/r.js" @@ -31258,6 +32440,7 @@ "resolved": "https://registry.npmjs.org/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz", "integrity": "sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==", "dev": true, + "license": "MIT", "dependencies": { "esprima": "^4.0.0", "stringify-object": "^3.2.1" @@ -31270,13 +32453,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -31293,13 +32478,15 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/resolve-dependency-path": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-3.0.2.tgz", "integrity": "sha512-Tz7zfjhLfsvR39ADOSk9us4421J/1ztVBo4rWUkF38hgHK5m0OCZ3NxFVpqHRkjctnwVa15igEUHFJp8MCS7vA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -31309,6 +32496,7 @@ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dev": true, + "license": "MIT", "dependencies": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" @@ -31322,6 +32510,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -31331,6 +32520,7 @@ "resolved": "https://registry.npmjs.org/resolve-import/-/resolve-import-1.4.6.tgz", "integrity": "sha512-CIw9e64QcKcCFUj9+KxUCJPy8hYofv6eVfo3U9wdhCm2E4IjvFnZ6G4/yIC4yP3f11+h6uU5b3LdS7O64LgqrA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "glob": "^10.3.3", "walk-up-path": "^3.0.1" @@ -31347,6 +32537,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -31356,6 +32547,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -31376,6 +32568,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -31386,11 +32579,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/resolve-import/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/resolve-options": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", "dev": true, + "license": "MIT", "dependencies": { "value-or-function": "^4.0.0" }, @@ -31403,13 +32607,15 @@ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/response-iterator": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/response-iterator/-/response-iterator-0.2.6.tgz", "integrity": "sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.8" @@ -31420,6 +32626,7 @@ "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, + "license": "MIT", "dependencies": { "lowercase-keys": "^2.0.0" }, @@ -31428,26 +32635,32 @@ } }, "node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "dev": true, + "license": "MIT", "dependencies": { - "onetime": "^5.1.0", + "onetime": "^2.0.0", "signal-exit": "^3.0.2" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/ret": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.4.3.tgz", - "integrity": "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.5.0.tgz", + "integrity": "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -31457,6 +32670,7 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -31466,6 +32680,7 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -31474,65 +32689,21 @@ "node_modules/rfdc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" }, "node_modules/rimraf": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", - "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", - "dev": true, - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/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/rimraf/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "glob": "^7.1.3" }, "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/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" + "rimraf": "bin.js" } }, "node_modules/router": { @@ -31559,20 +32730,12 @@ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, - "node_modules/router/node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", - "license": "MIT", - "engines": { - "node": ">=16" - } - }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -31596,6 +32759,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -31619,6 +32783,7 @@ "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } @@ -31627,13 +32792,15 @@ "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.6.7.tgz", "integrity": "sha512-szN4fK+TqBPOFBcBcsR0g2cmTTUF/vaFEOZNuSdfU8/pGFnNmmn2u8SystYXG1QMrjOPBc6XTKHMVfENDf6hHw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/safe-array-concat": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", @@ -31651,32 +32818,22 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" }, "node_modules/safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", "dev": true, + "license": "MIT", "dependencies": { "ret": "~0.1.10" } @@ -31686,6 +32843,7 @@ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -31703,17 +32861,19 @@ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12" } }, "node_modules/safe-regex2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-3.1.0.tgz", - "integrity": "sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-4.0.0.tgz", + "integrity": "sha512-Hvjfv25jPDVr3U+4LDzBuZPPOymELG3PYcSk5hcevooo1yxxamQL/bHs/GrEPGmMoMEwRrHVGiCA1pXi97B8Ew==", "dev": true, + "license": "MIT", "dependencies": { - "ret": "~0.4.0" + "ret": "~0.5.0" } }, "node_modules/safe-stable-stringify": { @@ -31721,6 +32881,7 @@ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -31728,13 +32889,15 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" }, "node_modules/sass-lookup": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/sass-lookup/-/sass-lookup-5.0.1.tgz", "integrity": "sha512-t0X5PaizPc2H4+rCwszAqHZRtr4bugo4pgiCvrBFvIX0XFxnr29g77LJcpyj9A0DcKf7gXMLcgvRjsonYI6x4g==", "dev": true, + "license": "MIT", "dependencies": { "commander": "^10.0.1" }, @@ -31750,6 +32913,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -31758,36 +32922,44 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dev": true, + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } }, "node_modules/secure-json-parse": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", - "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", - "dev": true + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-3.0.1.tgz", + "integrity": "sha512-9QR7G96th4QJ2+dJwvZB+JoXyt8PN+DbEjOr6kL2/JU4KH8Eb2sFdU+gt8EDdzWDWoWH0uocDdfCoFzdVSixUA==", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/seedrandom": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/semver-greatest-satisfied-range": { @@ -31795,6 +32967,7 @@ "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz", "integrity": "sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==", "dev": true, + "license": "MIT", "dependencies": { "sver": "^1.8.3" }, @@ -31825,23 +32998,6 @@ "node": ">= 18" } }, - "node_modules/send/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/send/node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -31851,11 +33007,26 @@ "node": ">= 0.6" } }, - "node_modules/send/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==", - "license": "MIT" + "node_modules/send/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } }, "node_modules/seq-queue": { "version": "0.0.5", @@ -31868,6 +33039,7 @@ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -31891,18 +33063,21 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/set-cookie-parser": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -31920,6 +33095,7 @@ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -31935,6 +33111,7 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -31950,6 +33127,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -31962,6 +33140,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -31971,6 +33150,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -31981,13 +33161,15 @@ "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" }, "node_modules/sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, + "license": "(MIT AND BSD-3-Clause)", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -31997,31 +33179,37 @@ } }, "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "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": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "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": ">=0.10.0" + "node": ">=8" } }, "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -32030,6 +33218,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -32047,19 +33236,28 @@ "version": "17.1.3", "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/sigstore": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@sigstore/bundle": "^2.3.2", "@sigstore/core": "^1.0.0", @@ -32077,6 +33275,7 @@ "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -32084,23 +33283,12 @@ "node": ">=10" } }, - "node_modules/simple-update-notifier/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/sinon": { "version": "19.0.2", "resolved": "https://registry.npmjs.org/sinon/-/sinon-19.0.2.tgz", "integrity": "sha512-euuToqM+PjO4UgXeLETsfQiuoyPXlqFezr6YZDFwHR3t4qaX0fZUe1MfPMznTL5f8BWrVS89KduLdMUsxFCO6g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", "@sinonjs/fake-timers": "^13.0.2", @@ -32119,6 +33307,7 @@ "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-4.0.0.tgz", "integrity": "sha512-cWqO7O2I4XfJDWyWElAQ9D/dtdh5Mo0RHndsfiiYyjWnlPzBJdIvjCVURO4EjyYaC3BjV+ISNXCfTXPXTEIEWA==", "dev": true, + "license": "(BSD-2-Clause OR WTFPL)", "peerDependencies": { "chai": "^5.0.0", "sinon": ">=4.0.0" @@ -32129,30 +33318,46 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, + "node_modules/sinon/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/slice-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-6.0.0.tgz", - "integrity": "sha512-6bn4hRfkTvDfUoEQYkERg0BVF1D0vrX9HEkMl08uDiNWvVvjylLHvZFZWkDo6wjT8tUctbYl1nCOuE66ZTaUtA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", + "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" }, "engines": { - "node": ">=14.16" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/slice-ansi?sponsor=1" @@ -32163,6 +33368,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -32170,23 +33376,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -32197,6 +33392,7 @@ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, + "license": "MIT", "dependencies": { "base": "^0.11.1", "debug": "^2.2.0", @@ -32216,6 +33412,7 @@ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, + "license": "MIT", "dependencies": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -32230,6 +33427,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^1.0.0" }, @@ -32242,6 +33440,7 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, + "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.1", "is-data-descriptor": "^1.0.1" @@ -32255,6 +33454,7 @@ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^3.2.0" }, @@ -32262,28 +33462,14 @@ "node": ">=0.10.0" } }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "ms": "2.0.0" } }, "node_modules/snapdragon/node_modules/extend-shallow": { @@ -32291,6 +33477,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -32303,15 +33490,24 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, "node_modules/snapdragon/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -32322,6 +33518,7 @@ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dev": true, + "license": "MIT", "dependencies": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -32334,6 +33531,7 @@ "version": "4.8.1", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "license": "MIT", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", @@ -32351,36 +33549,17 @@ "version": "2.5.5", "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "license": "MIT", "dependencies": { "debug": "~4.3.4", "ws": "~8.17.1" } }, - "node_modules/socket.io-adapter/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/socket.io-adapter/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==" - }, "node_modules/socket.io-adapter/node_modules/ws": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -32402,6 +33581,7 @@ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", "dev": true, + "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", @@ -32412,33 +33592,11 @@ "node": ">=10.0.0" } }, - "node_modules/socket.io-client/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/socket.io-client/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/socket.io-parser": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" @@ -32447,59 +33605,62 @@ "node": ">=10.0.0" } }, - "node_modules/socket.io-parser/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/socket.io/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 0.6" } }, - "node_modules/socket.io-parser/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==" + "node_modules/socket.io/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/socket.io/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/socket.io/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "mime-db": "1.52.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 0.6" } }, - "node_modules/socket.io/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==" + "node_modules/socket.io/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, "node_modules/socketio-wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/socketio-wildcard/-/socketio-wildcard-2.0.0.tgz", "integrity": "sha512-Bf3ioZq15Z2yhFLDasRvbYitg82rwm+5AuER5kQvEQHhNFf4R4K5o/h57nEpN7A59T9FyRtTj34HZfMWAruw/A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/socks": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "dev": true, + "license": "MIT", "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" @@ -32510,59 +33671,39 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "^7.1.1", - "debug": "^4.3.4", - "socks": "^2.8.3" + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" }, "engines": { - "node": ">= 14" + "node": ">= 10" } }, "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/socks-proxy-agent/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "debug": "4" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 6.0.0" } }, - "node_modules/socks-proxy-agent/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/sonic-boom": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", "dev": true, + "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0" } @@ -32572,6 +33713,7 @@ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-obj": "^1.0.0" }, @@ -32584,6 +33726,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -32593,6 +33736,7 @@ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -32603,19 +33747,32 @@ "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dev": true, + "license": "MIT", "dependencies": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0" } }, "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.3.3.tgz", + "integrity": "sha512-9O4+y9n64RewmFoKUZ/5Tx9IHIcXM6Q+RTSw6ehnqybUz4a7iwR3Eaw80uLtqqQ5D0C+5H03D4KKGo9PdP33Gg==", "dev": true, + "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "source-map": "0.1.32" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.1.32", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", + "integrity": "sha512-htQyLrrRLkQ87Zfrir4/yN+vAUd6DNjVayEjTSHXu29AYQJw57I4/xEL/M6p6E/woPNJwvZt6rVlzc7gFEJccQ==", + "dev": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/source-map-url": { @@ -32623,13 +33780,15 @@ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/sparkles": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-2.1.0.tgz", "integrity": "sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.13.0" } @@ -32639,6 +33798,7 @@ "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", "dev": true, + "license": "MIT", "dependencies": { "memory-pager": "^1.0.2" } @@ -32648,6 +33808,7 @@ "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^2.0.0", "is-windows": "^1.0.2", @@ -32660,25 +33821,12 @@ "node": ">=8" } }, - "node_modules/spawn-wrap/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/spawn-wrap/node_modules/foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" @@ -32687,36 +33835,13 @@ "node": ">=8.0.0" } }, - "node_modules/spawn-wrap/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/spawn-wrap/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, - "engines": { - "node": ">=8" - } - }, "node_modules/spawn-wrap/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -32727,56 +33852,19 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/spawn-wrap/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/spawn-wrap/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, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/spawn-wrap/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==", + "node_modules/spawn-wrap/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/spawn-wrap/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, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } + "license": "ISC" }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -32786,13 +33874,15 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true + "dev": true, + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -32802,13 +33892,15 @@ "version": "3.0.20", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, + "license": "MIT", "dependencies": { "through": "2" }, @@ -32821,6 +33913,7 @@ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, + "license": "MIT", "dependencies": { "extend-shallow": "^3.0.0" }, @@ -32833,6 +33926,7 @@ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "dev": true, + "license": "ISC", "engines": { "node": ">= 10.x" } @@ -32841,13 +33935,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/sqlstring": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -32857,6 +33953,7 @@ "resolved": "https://registry.npmjs.org/sqs-consumer/-/sqs-consumer-5.8.0.tgz", "integrity": "sha512-pJReMEtDM9/xzQTffb7dxMD5MKagBfOW65m+ITsbpNk0oZmJ38tTC4LPmj0/7ZcKSOqi2LrpA1b0qGYOwxlHJg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "aws-sdk": "^2.1271.0", "debug": "^4.3.4" @@ -32865,34 +33962,12 @@ "aws-sdk": "^2.1271.0" } }, - "node_modules/sqs-consumer/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/sqs-consumer/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/sshpk": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, + "license": "MIT", "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -32913,16 +33988,31 @@ "node": ">=0.10.0" } }, + "node_modules/sshpk/node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true, + "license": "Unlicense" + }, "node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, + "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "minipass": "^3.1.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 8" } }, "node_modules/stack-utils": { @@ -32930,6 +34020,7 @@ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -32942,6 +34033,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -32950,13 +34042,15 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", "dev": true, + "license": "MIT", "dependencies": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -32965,22 +34059,11 @@ "node": ">=0.10.0" } }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -32990,6 +34073,7 @@ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", "dev": true, + "license": "ISC", "engines": { "node": ">=0.10.0" } @@ -32999,6 +34083,7 @@ "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4", "npm": ">=6" @@ -33009,6 +34094,7 @@ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", "dev": true, + "license": "MIT", "dependencies": { "duplexer": "~0.1.1", "through": "~2.3.4" @@ -33019,6 +34105,7 @@ "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", "dev": true, + "license": "MIT", "dependencies": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" @@ -33029,21 +34116,17 @@ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "readable-stream": "^2.0.2" } }, - "node_modules/stream-combiner2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/stream-combiner2/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -33054,17 +34137,12 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/stream-combiner2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/stream-combiner2/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -33074,6 +34152,7 @@ "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==", "dev": true, + "license": "MIT", "dependencies": { "streamx": "^2.13.2" } @@ -33082,22 +34161,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/stream-shift": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", - "dev": true - }, - "node_modules/stream-wormhole": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stream-wormhole/-/stream-wormhole-1.1.0.tgz", - "integrity": "sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==", "dev": true, - "engines": { - "node": ">=4.0.0" - } + "license": "MIT" }, "node_modules/streamsearch": { "version": "0.1.2", @@ -33113,6 +34185,7 @@ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.2.tgz", "integrity": "sha512-aDGDLU+j9tJcUdPGOaHmVF1u/hhI+CsGkT02V3OKlHDV7IukOI+nTWAGkiZEKCO35rWN1wIr4tS7YFr1f4qSvA==", "dev": true, + "license": "MIT", "dependencies": { "fast-fifo": "^1.3.2", "queue-tick": "^1.0.1", @@ -33123,16 +34196,42 @@ } }, "node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, "node_modules/string-argv": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.19" } @@ -33142,6 +34241,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-6.0.0.tgz", "integrity": "sha512-1U361pxZHEQ+FeSjzqRpV+cu2vTzYeWeafXFLykiFlv4Vc0n3njgU8HrMbyik5uwm77naWMuVG8fhEF+Ovb1Kg==", "dev": true, + "license": "MIT", "dependencies": { "strip-ansi": "^7.1.0" }, @@ -33157,6 +34257,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -33169,6 +34270,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -33184,6 +34286,23 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -33193,11 +34312,32 @@ "node": ">=8" } }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -33216,6 +34356,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -33230,6 +34371,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -33247,6 +34389,7 @@ "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", @@ -33261,6 +34404,7 @@ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -33270,6 +34414,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -33277,11 +34422,46 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -33291,6 +34471,7 @@ "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz", "integrity": "sha512-yH0+mD8oahBZWnY43vxs4pSinn8SMKAdml/EOGBewoe1Y0Eitd0h2Mg3ZRiXruUW6L4P+lvZiEgbh0NgUGia1w==", "dev": true, + "license": "MIT", "dependencies": { "first-chunk-stream": "^2.0.0", "strip-bom": "^2.0.0" @@ -33304,6 +34485,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dev": true, + "license": "MIT", "dependencies": { "is-utf8": "^0.2.0" }, @@ -33316,6 +34498,7 @@ "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -33325,6 +34508,7 @@ "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -33334,6 +34518,7 @@ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -33343,6 +34528,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -33352,30 +34538,37 @@ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/strnum": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/strong-log-transformer": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-1.0.6.tgz", "integrity": "sha512-6ssUU810zehJ9EeVwZJ/NHdS6l7ik9kpazIktl+p4y4YjZ5AWUcFATuN52hMaLqWtUn/i0xv45iJRsitnE2WJA==", "dev": true, + "license": "Artistic-2.0", "dependencies": { "byline": "^5.0.0", "duplexer": "^0.1.1", @@ -33391,13 +34584,15 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", "integrity": "sha512-wR5Ipl99t0mTGwLjQJnBjrP/O7zBbLZqvA3aw32DmLx+nXHfWctUjzDjnDx09pX1Po86WFQazF9xUzfMea3Cnw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/stylus-lookup": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-5.0.1.tgz", "integrity": "sha512-tLtJEd5AGvnVy4f9UHQMw4bkJJtaAcmo54N+ovQBjDY3DuWyK9Eltxzr5+KG0q4ew6v2EHyuWWNnHeiw/Eo7rQ==", "dev": true, + "license": "MIT", "dependencies": { "commander": "^10.0.1" }, @@ -33413,6 +34608,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -33423,6 +34619,7 @@ "integrity": "sha512-8D4C6DIH5tGiAIpp5I0wD/xRlNiZAPGHygzCe7VzyzUoxHtawzjNAY9SUTXU05/EY2NMY9/9GF0ycizkXr1CWQ==", "deprecated": "The `subscriptions-transport-ws` package is no longer maintained. We recommend you use `graphql-ws` instead. For help migrating Apollo software to `graphql-ws`, see https://www.apollographql.com/docs/apollo-server/data/subscriptions/#switching-from-subscriptions-transport-ws For general help using `graphql-ws`, see https://github.com/enisdenjo/graphql-ws/blob/master/README.md", "dev": true, + "license": "MIT", "dependencies": { "backo2": "^1.0.2", "eventemitter3": "^3.1.0", @@ -33434,11 +34631,29 @@ "graphql": "^15.7.2 || ^16.0.0" } }, + "node_modules/subscriptions-transport-ws/node_modules/eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/subscriptions-transport-ws/node_modules/symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/subscriptions-transport-ws/node_modules/ws": { "version": "7.5.10", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -33460,6 +34675,7 @@ "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", "dev": true, + "license": "MIT", "dependencies": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.4", @@ -33475,28 +34691,12 @@ "node": ">=14.18.0" } }, - "node_modules/superagent/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/superagent/node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -33504,17 +34704,12 @@ "node": ">=4.0.0" } }, - "node_modules/superagent/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/supertest": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.0.0.tgz", "integrity": "sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==", "dev": true, + "license": "MIT", "dependencies": { "methods": "^1.1.2", "superagent": "^9.0.1" @@ -33524,14 +34719,19 @@ } }, "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/supports-hyperlinks": { @@ -33539,6 +34739,7 @@ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz", "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^2.0.0", "supports-color": "^5.0.0" @@ -33552,6 +34753,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", "integrity": "sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -33561,6 +34763,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -33573,6 +34776,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -33582,6 +34786,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -33594,6 +34799,7 @@ "resolved": "https://registry.npmjs.org/sver/-/sver-1.8.4.tgz", "integrity": "sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==", "dev": true, + "license": "MIT", "optionalDependencies": { "semver": "^6.3.0" } @@ -33603,18 +34809,21 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "optional": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", "dev": true, + "license": "MIT", + "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.10" } }, "node_modules/sync-content": { @@ -33622,6 +34831,7 @@ "resolved": "https://registry.npmjs.org/sync-content/-/sync-content-1.0.2.tgz", "integrity": "sha512-znd3rYiiSxU3WteWyS9a6FXkTA/Wjk8WQsOyzHbineeL837dLn3DA4MRhsIX3qGcxDMH6+uuFV4axztssk7wEQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "glob": "^10.2.6", "mkdirp": "^3.0.1", @@ -33643,6 +34853,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -33652,6 +34863,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -33672,6 +34884,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -33682,11 +34895,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sync-content/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/sync-content/node_modules/mkdirp": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -33697,6 +34921,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sync-content/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/synckit": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", @@ -33719,6 +34959,7 @@ "resolved": "https://registry.npmjs.org/tap/-/tap-19.2.5.tgz", "integrity": "sha512-Mz7MznUuKCqrN9dr0s8REt6zLg6WLNrvGXwDSaUyPO73dpXXjakYA7YVKRWu6TBnj7NsSYKuHXpQFROlqZ2KTg==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@tapjs/after": "1.1.31", "@tapjs/after-each": "2.0.8", @@ -33756,6 +34997,7 @@ "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-16.0.1.tgz", "integrity": "sha512-vKianJzSSzLkJ3bHBwzvZDDRi9yGMwkRANJxwPAjAue50owB8rlluYySmTN4tZVH0nsh6stvrQbg9kuCL5svdg==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "events-to-array": "^2.0.3", "tap-yaml": "2.2.2" @@ -33772,6 +35014,7 @@ "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-2.2.2.tgz", "integrity": "sha512-MWG4OpAKtNoNVjCz/BqlDJiwTM99tiHRhHPS4iGOe1ZS0CgM4jSFH92lthSFvvy4EdDjQZDV7uYqUFlU9JuNhw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "yaml": "^2.4.1", "yaml-types": "^0.3.0" @@ -33785,6 +35028,7 @@ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -33794,6 +35038,7 @@ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, + "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -33811,6 +35056,7 @@ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -33822,51 +35068,41 @@ "node": ">=6" } }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tar-stream/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "node_modules/tar-stream/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/tar-stream/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, "node_modules/tar/node_modules/minipass": { @@ -33874,6 +35110,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=8" } @@ -33883,6 +35120,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -33895,6 +35133,7 @@ "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-7.0.1.tgz", "integrity": "sha512-JN5s7hgmg/Ya5HxZqCnywT+XiOGRFcJRgYhtMyt/1m+h0yWpWwApO7HIM8Bpwyno9hI151ljjp5eAPCHhIGbpQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "diff": "^5.2.0", "react-element-to-jsx-string": "^15.0.0" @@ -33908,6 +35147,7 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -33917,6 +35157,7 @@ "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", "dev": true, + "license": "MIT", "dependencies": { "bintrees": "1.0.2" } @@ -33926,6 +35167,7 @@ "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", "dev": true, + "license": "MIT", "dependencies": { "streamx": "^2.12.5" } @@ -33935,6 +35177,7 @@ "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", "dev": true, + "license": "MIT", "dependencies": { "mkdirp": "^0.5.1", "rimraf": "~2.6.2" @@ -33948,6 +35191,7 @@ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -33957,6 +35201,7 @@ "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-3.4.0.tgz", "integrity": "sha512-P8NK5aNqcGQBC37i/8pL/K9tFgx14CF2vdwluD/BA/dGWGD4T4E59TE7dAxPyb2wusts2FhMp36EiopBBsGJ2Q==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "is-stream": "^1.1.0", @@ -33974,6 +35219,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^3.0.0" }, @@ -33981,21 +35227,13 @@ "node": ">=4" } }, - "node_modules/temp-write/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/temp-write/node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, + "license": "MIT", "bin": { "uuid": "bin/uuid" } @@ -34006,6 +35244,7 @@ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -34018,6 +35257,7 @@ "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", "integrity": "sha512-NjT12fW6pSEKz1eVcADgaKfeM+XZ4+zSaqVz46XH7+CiEwcelnwtGWRRjF1p+xyW2PVgKKKS2UUw1LzRelntxg==", "dev": true, + "license": "MIT", "dependencies": { "os-tmpdir": "^1.0.0", "uuid": "^2.0.1" @@ -34031,13 +35271,15 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", "integrity": "sha512-FULf7fayPdpASncVy4DLh3xydlXEJJpvIELjYjNeQWYUZ9pclcpvCZSr2gkmN2FrrGcI7G/cJsIEwk5/8vfXpg==", "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -34051,13 +35293,15 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.1.tgz", "integrity": "sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/text-extensions": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -34069,13 +35313,15 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, + "license": "MIT", "dependencies": { "any-promise": "^1.0.0" } @@ -34085,6 +35331,7 @@ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dev": true, + "license": "MIT", "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -34097,6 +35344,7 @@ "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", "dev": true, + "license": "MIT", "dependencies": { "real-require": "^0.2.0" } @@ -34106,6 +35354,7 @@ "resolved": "https://registry.npmjs.org/thrift/-/thrift-0.14.2.tgz", "integrity": "sha512-bW8EaE6iw3hSt4HB2HpBdHW86Xpb9IUJfqufx4NwEu7OGuIpS0ISj+Yy1Z1Wvhfno6SPNhKRJ1qFXea84HcrOQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "browser-or-node": "^1.2.1", "isomorphic-ws": "^4.0.1", @@ -34122,6 +35371,7 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.4.tgz", "integrity": "sha512-fFCejsuC8f9kOSu9FYaOw8CdO68O3h5v0lg4p74o8JqWpwTf9tniOD+nOB78aWoVSS6WptVUmDrp/KPsMVBWFQ==", "dev": true, + "license": "MIT", "dependencies": { "async-limiter": "~1.0.0" } @@ -34130,13 +35380,15 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -34147,22 +35399,18 @@ "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", "dev": true, + "license": "MIT", "dependencies": { "through2": "~2.0.0", "xtend": "~4.0.0" } }, - "node_modules/through2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/through2/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -34173,17 +35421,12 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/through2/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -34193,6 +35436,7 @@ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -34202,6 +35446,7 @@ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -34211,6 +35456,7 @@ "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz", "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==", "dev": true, + "license": "ISC", "dependencies": { "es5-ext": "^0.10.64", "next-tick": "^1.1.0" @@ -34223,13 +35469,15 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tinyglobby": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.10.tgz", "integrity": "sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==", "dev": true, + "license": "MIT", "dependencies": { "fdir": "^6.4.2", "picomatch": "^4.0.2" @@ -34243,6 +35491,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -34251,28 +35500,31 @@ } }, "node_modules/tldts": { - "version": "6.1.63", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.63.tgz", - "integrity": "sha512-YWwhsjyn9sB/1rOkSRYxvkN/wl5LFM1QDv6F2pVR+pb/jFne4EOBxHfkKVWvDIBEAw9iGOwwubHtQTm0WRT5sQ==", + "version": "6.1.64", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.64.tgz", + "integrity": "sha512-ph4AE5BXWIOsSy9stpoeo7bYe/Cy7VfpciIH4RhVZUPItCJmhqWCN0EVzxd8BOHiyNb42vuJc6NWTjJkg91Tuw==", "dev": true, + "license": "MIT", "dependencies": { - "tldts-core": "^6.1.63" + "tldts-core": "^6.1.64" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "6.1.63", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.63.tgz", - "integrity": "sha512-H1XCt54xY+QPbwhTgmxLkepX0MVHu3USfMmejiCOdkMbRcP22Pn2FVF127r/GWXVDmXTRezyF3Ckvhn4Fs6j7Q==", - "dev": true + "version": "6.1.64", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.64.tgz", + "integrity": "sha512-uqnl8vGV16KsyflHOzqrYjjArjfXaU6rMPXYy2/ZWoRKCkXtghgB4VwTDXUG+t0OTGeSewNAG31/x1gCTfLt+Q==", + "dev": true, + "license": "MIT" }, "node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, + "license": "MIT", "dependencies": { "rimraf": "^3.0.0" }, @@ -34286,6 +35538,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -34301,6 +35554,7 @@ "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", "dev": true, + "license": "MIT", "dependencies": { "is-absolute": "^1.0.0", "is-negated-glob": "^1.0.0" @@ -34314,6 +35568,7 @@ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -34321,23 +35576,12 @@ "node": ">=0.10.0" } }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, + "license": "MIT", "dependencies": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -34353,6 +35597,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -34360,11 +35605,40 @@ "node": ">=8.0" } }, + "node_modules/to-regex/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/to-through": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", "dev": true, + "license": "MIT", "dependencies": { "streamx": "^2.12.5" }, @@ -34377,6 +35651,7 @@ "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" } @@ -34385,6 +35660,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", "engines": { "node": ">=0.6" } @@ -34394,33 +35670,53 @@ "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", "dev": true, + "license": "ISC", "bin": { "nodetouch": "bin/nodetouch.js" } }, "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "tldts": "^6.1.32" }, "engines": { - "node": ">=0.8" + "node": ">=16" } }, "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/tr46/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, + "license": "MIT", "bin": { "tree-kill": "cli.js" } @@ -34430,6 +35726,7 @@ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", "integrity": "sha512-MTBWv3jhVjTU7XR3IQHllbiJs8sc75a80OEhB6or/q7pLTWgQ0bMGQXXYQSrSuXe6WiKWDZ5txXY5P59a/coVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -34439,6 +35736,7 @@ "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz", "integrity": "sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -34448,15 +35746,17 @@ "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-2.0.0.tgz", "integrity": "sha512-iGbM7X2slv9ORDVj2y2FFUq3cP/ypbtu2nQ8S38ufjL0glBABvmR9pTdsib1XtS2LUhhLMbelaBUaf/s5J3dSw==", "dev": true, + "license": "ISC", "engines": { "node": ">= 8" } }, "node_modules/ts-api-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", - "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.2.tgz", + "integrity": "sha512-ZF5gQIQa/UmzfvxbHZI3JXN0/Jt+vnAfAviNRAMc491laiK6YCLpCW9ft8oaCRFOTxCZtUTE6XB0ZQAe3olntw==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -34468,13 +35768,15 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ts-invariant": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz", "integrity": "sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "tslib": "^2.1.0" @@ -34488,6 +35790,7 @@ "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-24.0.0.tgz", "integrity": "sha512-2OAOg/Ob5yx9Et7ZX4CvTCc0UFoZHwLEJ+dpDPSUi5TgwwlTlX47w+iFRrEwzUZwYACjq83cgjS/Da50Ga37uw==", "dev": true, + "license": "MIT", "dependencies": { "@ts-morph/common": "~0.25.0", "code-block-writer": "^13.0.3" @@ -34498,6 +35801,7 @@ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -34540,26 +35844,50 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ts-node/node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } }, "node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, + "license": "MIT", "dependencies": { - "json5": "^2.2.2", + "@types/json5": "^0.0.29", + "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" }, - "engines": { - "node": ">=6" + "bin": { + "json5": "lib/cli.js" } }, "node_modules/tshy": { @@ -34567,6 +35895,7 @@ "resolved": "https://registry.npmjs.org/tshy/-/tshy-1.18.0.tgz", "integrity": "sha512-FQudIujBazHRu7CVPHKQE9/Xq1Wc7lezxD/FCnTXx2PTcnoSN32DVpb/ZXvzV2NJBTDB3XKjqX8Cdm+2UK1DlQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "chalk": "^5.3.0", "chokidar": "^3.6.0", @@ -34587,11 +35916,26 @@ "node": "16 >=16.17 || 18 >=18.15.0 || >=20.6.1" } }, + "node_modules/tshy/node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/tshy/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, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -34601,35 +35945,71 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/tshy/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/tshy/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/tshy/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/tshy/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">= 6" } }, "node_modules/tshy/node_modules/minimatch": { @@ -34637,6 +36017,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -34647,11 +36028,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/tshy/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/tshy/node_modules/mkdirp": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -34662,11 +36054,25 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/tshy/node_modules/polite-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/polite-json/-/polite-json-5.0.0.tgz", + "integrity": "sha512-OLS/0XeUAcE8a2fdwemNja+udKgXNnY6yKVIXqAD2zVRx1KvY6Ato/rZ2vdzbxqYwPW0u6SCNC/bAMPNzpzxbw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/tshy/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -34674,16 +36080,34 @@ "node": ">=8.10.0" } }, + "node_modules/tshy/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^1.8.1" }, @@ -34698,13 +36122,15 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/tuf-js": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", "dev": true, + "license": "MIT", "dependencies": { "@tufjs/models": "2.0.1", "debug": "^4.3.4", @@ -34714,34 +36140,236 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/tuf-js/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/tuf-js/node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", "dev": true, + "license": "ISC", "dependencies": { - "ms": "^2.1.3" + "semver": "^7.3.5" }, "engines": { - "node": ">=6.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/tuf-js/node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/tuf-js/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/tuf-js/node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tuf-js/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/tuf-js/node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tuf-js/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/tuf-js/node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/tuf-js/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tuf-js/node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -34750,22 +36378,25 @@ } }, "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true, + "license": "Unlicense" }, "node_modules/type": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", - "dev": true + "dev": true, + "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" }, @@ -34778,6 +36409,7 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -34787,6 +36419,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -34799,6 +36432,7 @@ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -34807,11 +36441,35 @@ "node": ">= 0.6" } }, + "node_modules/type-is/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/typed-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -34826,6 +36484,7 @@ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -34841,17 +36500,19 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", + "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.13", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -34861,17 +36522,18 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -34884,13 +36546,15 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, + "license": "MIT", "dependencies": { "is-typedarray": "^1.0.0" } @@ -34900,6 +36564,7 @@ "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.20.tgz", "integrity": "sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q==", "dev": true, + "license": "MIT", "dependencies": { "@sqltools/formatter": "^1.2.5", "app-root-path": "^3.1.0", @@ -35001,11 +36666,28 @@ } } }, + "node_modules/typeorm/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/typeorm/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, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -35029,33 +36711,55 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, - "node_modules/typeorm/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/typeorm/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/typeorm/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, + "node_modules/typeorm/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/typeorm/node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -35071,11 +36775,33 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/typeorm/node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/typeorm/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, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -35086,11 +36812,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/typeorm/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/typeorm/node_modules/mkdirp": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -35101,11 +36838,18 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/typeorm/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/typeorm/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/typeorm/node_modules/uuid": { "version": "9.0.1", @@ -35116,6 +36860,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -35125,6 +36870,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -35165,6 +36911,7 @@ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", "dev": true, + "license": "BSD-2-Clause", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -35177,6 +36924,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", + "license": "MIT", "dependencies": { "@lukeed/csprng": "^1.0.0" }, @@ -35189,6 +36937,7 @@ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -35204,6 +36953,7 @@ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -35212,13 +36962,15 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/undertaker": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-2.0.0.tgz", "integrity": "sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==", "dev": true, + "license": "MIT", "dependencies": { "bach": "^2.0.1", "fast-levenshtein": "^3.0.0", @@ -35234,6 +36986,7 @@ "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-2.0.0.tgz", "integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.13.0" } @@ -35243,6 +36996,7 @@ "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.0.tgz", "integrity": "sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==", "dev": true, + "license": "MIT", "engines": { "node": ">=18.17" } @@ -35250,13 +37004,15 @@ "node_modules/undici-types": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" }, "node_modules/unicorn-magic": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -35269,6 +37025,7 @@ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -35284,32 +37041,29 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, + "license": "ISC", "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "unique-slug": "^2.0.0" } }, "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-stream": { @@ -35317,6 +37071,7 @@ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", "dev": true, + "license": "MIT", "dependencies": { "json-stable-stringify-without-jsonify": "^1.0.1", "through2-filter": "^3.0.0" @@ -35327,6 +37082,7 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -35337,6 +37093,7 @@ "integrity": "sha512-AURroAsb73BZ6CdAyMrTk/hYKNj3DuYYEuOaB8bYMOHGKupRNScw90Q5C71tWJc3uE7dIeXRyuwN0xLLq3vDTg==", "dev": true, "hasInstallScript": true, + "license": "ISC", "optional": true, "dependencies": { "bindings": "^1.5.0", @@ -35350,6 +37107,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -35359,6 +37117,7 @@ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", "dev": true, + "license": "MIT", "dependencies": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -35372,6 +37131,7 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", "dev": true, + "license": "MIT", "dependencies": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -35386,6 +37146,7 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", "dev": true, + "license": "MIT", "dependencies": { "isarray": "1.0.0" }, @@ -35398,21 +37159,17 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/unzip-response": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", "integrity": "sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -35422,6 +37179,7 @@ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4", "yarn": "*" @@ -35446,6 +37204,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.0" @@ -35462,22 +37221,35 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/url": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -35487,13 +37259,15 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, + "license": "MIT", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -35504,6 +37278,7 @@ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", "dev": true, + "license": "MIT", "dependencies": { "prepend-http": "^1.0.1" }, @@ -35511,17 +37286,12 @@ "node": ">=0.10.0" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - }, "node_modules/use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -35531,6 +37301,7 @@ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -35543,12 +37314,14 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -35561,6 +37334,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/esm/bin/uuid" } @@ -35569,13 +37343,15 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/v8-to-istanbul": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -35585,21 +37361,19 @@ "node": ">=10.12.0" } }, - "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } + "license": "MIT" }, "node_modules/v8flags": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.1.tgz", "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.13.0" } @@ -35609,6 +37383,7 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -35619,6 +37394,7 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -35627,6 +37403,7 @@ "version": "13.12.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -35636,6 +37413,7 @@ "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.13.0" } @@ -35645,6 +37423,7 @@ "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" } @@ -35653,6 +37432,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -35665,6 +37445,7 @@ "engines": [ "node >=0.6.0" ], + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -35672,19 +37453,21 @@ } }, "node_modules/vinyl": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", - "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", "dev": true, + "license": "MIT", "dependencies": { - "clone": "^2.1.2", + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", "clone-stats": "^1.0.0", - "remove-trailing-separator": "^1.1.0", - "replace-ext": "^2.0.0", - "teex": "^1.0.1" + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.10" } }, "node_modules/vinyl-contents": { @@ -35692,6 +37475,7 @@ "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^5.0.0", "vinyl": "^3.0.0" @@ -35705,6 +37489,7 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^6.0.3", "inherits": "^2.0.4", @@ -35730,32 +37515,58 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, - "node_modules/vinyl-contents/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/vinyl-contents/node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/vinyl-contents/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 6" + "node": ">= 10" } }, - "node_modules/vinyl-contents/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/vinyl-contents/node_modules/vinyl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" } }, "node_modules/vinyl-file": { @@ -35763,6 +37574,7 @@ "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-2.0.0.tgz", "integrity": "sha512-44i5QVLwRPbiRyuiHJ+zJXooNNRXUUifdfYIC1Gm7YTlemMgYQrZ+q1LERS6AYAN8w0xe7n9OgjEYckQjR5+4g==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "pify": "^2.3.0", @@ -35775,19 +37587,31 @@ "node": ">=0.10.0" } }, + "node_modules/vinyl-file/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, "node_modules/vinyl-file/node_modules/clone-stats": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/vinyl-file/node_modules/replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", + "node_modules/vinyl-file/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, "node_modules/vinyl-file/node_modules/strip-bom": { @@ -35795,6 +37619,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dev": true, + "license": "MIT", "dependencies": { "is-utf8": "^0.2.0" }, @@ -35807,6 +37632,7 @@ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", "integrity": "sha512-Ci3wnR2uuSAWFMSglZuB8Z2apBdtOyz8CV7dC6/U1XbltXBC+IuutUkXQISz01P+US2ouBuesSbV6zILZ6BuzQ==", "dev": true, + "license": "MIT", "dependencies": { "clone": "^1.0.0", "clone-stats": "^0.0.1", @@ -35821,6 +37647,7 @@ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.0.tgz", "integrity": "sha512-7GbgBnYfaquMk3Qu9g22x000vbYkOex32930rBnc3qByw6HfMEAoELjCjoJv4HuEQxHAurT+nvMHm6MnJllFLw==", "dev": true, + "license": "MIT", "dependencies": { "fs-mkdirp-stream": "^2.0.1", "glob-stream": "^8.0.0", @@ -35846,6 +37673,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -35853,11 +37681,39 @@ "node": ">=0.10.0" } }, + "node_modules/vinyl-fs/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/vinyl-fs/node_modules/vinyl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/vinyl-sourcemap": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", "dev": true, + "license": "MIT", "dependencies": { "convert-source-map": "^2.0.0", "graceful-fs": "^4.2.10", @@ -35870,13 +37726,48 @@ "node": ">=10.13.0" } }, - "node_modules/vinyl/node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "node_modules/vinyl-sourcemap/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vinyl-sourcemap/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.8" + "node": ">= 10" + } + }, + "node_modules/vinyl-sourcemap/node_modules/vinyl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/vinyl/node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" } }, "node_modules/walk-sync": { @@ -35884,6 +37775,7 @@ "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-0.2.7.tgz", "integrity": "sha512-OH8GdRMowEFr0XSHQeX5fGweO6zSVHo7bG/0yJQx6LAj9Oukz0C8heI3/FYectT66gY0IPGe89kOvU410/UNpg==", "dev": true, + "license": "MIT", "dependencies": { "ensure-posix-path": "^1.0.0", "matcher-collection": "^1.0.0" @@ -35893,27 +37785,35 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } }, "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "dev": true, + "license": "MIT", "dependencies": { "iconv-lite": "0.6.3" }, @@ -35926,6 +37826,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -35938,29 +37839,39 @@ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" } }, "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "dev": true, + "license": "MIT", "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" } }, "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "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": { "isexe": "^2.0.0" }, "bin": { - "which": "bin/which" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, "node_modules/which-boxed-primitive": { @@ -35968,6 +37879,7 @@ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, + "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -35979,17 +37891,73 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", + "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-module": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", + "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -36009,6 +37977,7 @@ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } @@ -36018,6 +37987,7 @@ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dev": true, + "license": "MIT", "dependencies": { "string-width": "^4.0.0" }, @@ -36030,6 +38000,7 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -36038,13 +38009,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/worker-timers": { "version": "7.1.8", "resolved": "https://registry.npmjs.org/worker-timers/-/worker-timers-7.1.8.tgz", "integrity": "sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.24.5", "tslib": "^2.6.2", @@ -36057,6 +38030,7 @@ "resolved": "https://registry.npmjs.org/worker-timers-broker/-/worker-timers-broker-6.1.8.tgz", "integrity": "sha512-FUCJu9jlK3A8WqLTKXM9E6kAmI/dR1vAJ8dHYLMisLNB/n3GuaFIjJ7pn16ZcD1zCOf7P6H62lWIEBi+yz/zQQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.24.5", "fast-unique-numbers": "^8.0.13", @@ -36069,6 +38043,7 @@ "resolved": "https://registry.npmjs.org/worker-timers-worker/-/worker-timers-worker-7.0.71.tgz", "integrity": "sha512-ks/5YKwZsto1c2vmljroppOKCivB/ma97g9y77MAAz2TBBjPPgpoOiS1qYQKIgvGTr2QYPT3XhJWIB6Rj2MVPQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.24.5", "tslib": "^2.6.2" @@ -36078,13 +38053,15 @@ "version": "6.5.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -36097,27 +38074,128 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, + "license": "ISC", "dependencies": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", "signal-exit": "^3.0.2" } }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/write-json-file": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-2.3.0.tgz", "integrity": "sha512-84+F0igFp2dPD6UpAQjOUX3CdKUOqUzn6oE9sDBNzUXINR5VceJ1rauZltqQB/bcYsx3EpKys4C7/PivKUAiWQ==", "dev": true, + "license": "MIT", "dependencies": { "detect-indent": "^5.0.0", "graceful-fs": "^4.1.2", @@ -36135,6 +38213,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^3.0.0" }, @@ -36142,20 +38221,12 @@ "node": ">=4" } }, - "node_modules/write-json-file/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/write-pkg": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-3.2.0.tgz", "integrity": "sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw==", "dev": true, + "license": "MIT", "dependencies": { "sort-keys": "^2.0.0", "write-json-file": "^2.2.0" @@ -36168,13 +38239,15 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/wrk/-/wrk-1.2.1.tgz", "integrity": "sha512-uJ93Je3il1dY9rBP05OHr91lwdHd5oNoX82oyHhuAfe69mdbEb0fxeufbaLChA9vBfDNj581OrbH/CbaM0az1g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ws": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -36196,6 +38269,7 @@ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", "dev": true, + "license": "MIT", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -36209,6 +38283,7 @@ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0" } @@ -36227,6 +38302,7 @@ "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz", "integrity": "sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==", "dev": true, + "license": "MIT", "dependencies": { "commander": "^2.20.3", "cssfilter": "0.0.10" @@ -36243,6 +38319,7 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4" } @@ -36252,6 +38329,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -36260,13 +38338,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yaml": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", - "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", "dev": true, + "license": "ISC", "bin": { "yaml": "bin.mjs" }, @@ -36278,13 +38358,15 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/yaml-js/-/yaml-js-0.2.3.tgz", "integrity": "sha512-6xUQtVKl1qcd0EXtTEzUDVJy9Ji1fYa47LtkDtYKlIjhibPE9knNPmoRyf6SGREFHlOAUyDe9OdYqRP4DuSi5Q==", - "dev": true + "dev": true, + "license": "WTFPL" }, "node_modules/yaml-types": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/yaml-types/-/yaml-types-0.3.0.tgz", "integrity": "sha512-i9RxAO/LZBiE0NJUy9pbN5jFz5EasYDImzRkj8Y81kkInTi1laia3P3K/wlMKzOxFQutZip8TejvQP/DwgbU7A==", "dev": true, + "license": "ISC", "engines": { "node": ">= 16", "npm": ">= 7" @@ -36298,6 +38380,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -36312,12 +38395,13 @@ } }, "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, + "license": "ISC", "engines": { - "node": ">=12" + "node": ">=10" } }, "node_modules/yargs-unparser": { @@ -36325,6 +38409,7 @@ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -36340,6 +38425,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -36352,6 +38438,7 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -36364,15 +38451,27 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -36382,6 +38481,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.20" }, @@ -36394,6 +38494,7 @@ "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -36405,13 +38506,15 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz", "integrity": "sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/zen-observable": { "version": "0.8.15", "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/zen-observable-ts": { @@ -36419,6 +38522,7 @@ "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz", "integrity": "sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "zen-observable": "0.8.15" @@ -36429,6 +38533,7 @@ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", "dev": true, + "license": "MIT", "dependencies": { "archiver-utils": "^3.0.4", "compress-commons": "^4.1.2", @@ -36443,6 +38548,7 @@ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", "dev": true, + "license": "MIT", "dependencies": { "glob": "^7.2.3", "graceful-fs": "^4.2.0", @@ -36458,29 +38564,6 @@ "engines": { "node": ">= 10" } - }, - "node_modules/zip-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/zip-stream/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } } } } diff --git a/package.json b/package.json index b2b0b281ba5..d43241b4608 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "fast-safe-stringify": "2.1.1", "iterare": "1.2.1", "object-hash": "3.0.0", - "path-to-regexp": "3.2.0", + "path-to-regexp": "8.2.0", "reflect-metadata": "0.2.2", "rxjs": "7.8.1", "socket.io": "4.8.1", @@ -84,10 +84,10 @@ "@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", - "@fastify/multipart": "8.3.0", + "@fastify/cors": "10.0.1", + "@fastify/formbody": "8.0.1", + "@fastify/middie": "9.0.2", + "@fastify/multipart": "9.0.1", "@fastify/static": "7.0.4", "@fastify/view": "9.1.0", "@grpc/grpc-js": "1.12.2", @@ -132,7 +132,7 @@ "eslint-plugin-prettier": "5.2.1", "eventsource": "2.0.2", "fancy-log": "2.0.0", - "fastify": "4.28.1", + "fastify": "5.1.0", "globals": "15.12.0", "graphql": "16.9.0", "graphql-tools": "9.0.3", diff --git a/packages/core/middleware/route-info-path-extractor.ts b/packages/core/middleware/route-info-path-extractor.ts index b8ef7b071b1..653db0a148e 100644 --- a/packages/core/middleware/route-info-path-extractor.ts +++ b/packages/core/middleware/route-info-path-extractor.ts @@ -71,7 +71,9 @@ export class RouteInfoPathExtractor { } private isAWildcard(path: string): boolean { - return ['*', '/*', '/*/', '(.*)', '/(.*)'].includes(path); + return ['*', '/*', '/*/', '*path', '/*path', '(.*)', '/(.*)'].includes( + path, + ); } private extractNonWildcardPathsFrom({ diff --git a/packages/core/middleware/utils.ts b/packages/core/middleware/utils.ts index 87ffb28d57a..ec71b77920f 100644 --- a/packages/core/middleware/utils.ts +++ b/packages/core/middleware/utils.ts @@ -6,27 +6,38 @@ import { isString, } from '@nestjs/common/utils/shared.utils'; import { iterate } from 'iterare'; -import * as pathToRegexp from 'path-to-regexp'; +import { pathToRegexp } from 'path-to-regexp'; import { uid } from 'uid'; import { ExcludeRouteMetadata } from '../router/interfaces/exclude-route-metadata.interface'; +import { LegacyRouteConverter } from '../router/legacy-route-converter'; import { isRouteExcluded } from '../router/utils'; export const mapToExcludeRoute = ( routes: (string | RouteInfo)[], ): ExcludeRouteMetadata[] => { return routes.map(route => { - if (isString(route)) { + const originalPath = isString(route) ? route : route.path; + const path = LegacyRouteConverter.tryConvert(originalPath); + + try { + if (isString(route)) { + return { + path, + requestMethod: RequestMethod.ALL, + pathRegex: pathToRegexp(addLeadingSlash(path)).regexp, + }; + } return { - path: route, - requestMethod: RequestMethod.ALL, - pathRegex: pathToRegexp(addLeadingSlash(route)), + path, + requestMethod: route.method, + pathRegex: pathToRegexp(addLeadingSlash(path)).regexp, }; + } catch (e) { + if (e instanceof TypeError) { + LegacyRouteConverter.printError(originalPath); + } + throw e; } - return { - path: route.path, - requestMethod: route.method, - pathRegex: pathToRegexp(addLeadingSlash(route.path)), - }; }); }; diff --git a/packages/core/package.json b/packages/core/package.json index ba764a123a6..20c6a817c22 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -31,7 +31,7 @@ "@nuxtjs/opencollective": "0.3.2", "fast-safe-stringify": "2.1.1", "iterare": "1.2.1", - "path-to-regexp": "3.3.0", + "path-to-regexp": "8.2.0", "tslib": "2.7.0", "uid": "2.0.2" }, diff --git a/packages/core/router/legacy-route-converter.ts b/packages/core/router/legacy-route-converter.ts new file mode 100644 index 00000000000..de7299cd857 --- /dev/null +++ b/packages/core/router/legacy-route-converter.ts @@ -0,0 +1,53 @@ +import { Logger } from '@nestjs/common'; + +const UNSUPPORTED_PATH_MESSAGE = (text: TemplateStringsArray, route: string) => + `Unsupported route path: "${route}". In previous versions, the symbols ?, *, and + were used to denote optional or repeating path parameters. The latest version of "path-to-regexp" now requires the use of named parameters. For example, instead of using a route like /users/* to capture all routes starting with "/users", you should use /users/*path. For more details, refer to the migration guide.`; + +export class LegacyRouteConverter { + private static readonly logger = new Logger(LegacyRouteConverter.name); + + /** + * Convert legacy routes to the new format (syntax). + * path-to-regexp used by Express>=v5 and @fastify/middie>=v9 no longer support unnamed wildcards. + * This method attempts to convert the old syntax to the new one, and logs an error if it fails. + * @param route The route to convert. + * @returns The converted route, or the original route if it cannot be converted. + */ + static tryConvert(route: string): string { + // Normalize path to eliminate additional conditions. + const routeWithLeadingSlash = route.startsWith('/') ? route : `/${route}`; + const normalizedRoute = route.endsWith('/') + ? routeWithLeadingSlash + : `${routeWithLeadingSlash}/`; + + if (normalizedRoute.endsWith('/(.*)/')) { + // Skip printing warning for the "all" wildcard. + if (normalizedRoute !== '/(.*)/') { + this.printWarning(route); + } + return route.replace('(.*)', '*path'); + } + if (normalizedRoute.endsWith('/*/')) { + // Skip printing warning for the "all" wildcard. + if (normalizedRoute !== '/*/') { + this.printWarning(route); + } + return route.replace('*', '*path'); + } + if (normalizedRoute.endsWith('/+/')) { + this.printWarning(route); + return route.replace('/+', '/*path'); + } + return route; + } + + static printError(route: string): void { + this.logger.error(UNSUPPORTED_PATH_MESSAGE`${route}`); + } + + static printWarning(route: string): void { + this.logger.warn( + UNSUPPORTED_PATH_MESSAGE`${route}` + ' Attempting to convert...', + ); + } +} diff --git a/packages/core/router/router-explorer.ts b/packages/core/router/router-explorer.ts index fb6060c0b90..f8624c5e375 100644 --- a/packages/core/router/router-explorer.ts +++ b/packages/core/router/router-explorer.ts @@ -10,7 +10,7 @@ import { addLeadingSlash, isUndefined, } from '@nestjs/common/utils/shared.utils'; -import * as pathToRegexp from 'path-to-regexp'; +import { pathToRegexp } from 'path-to-regexp'; import { ApplicationConfig } from '../application-config'; import { UnknownRequestMappingException } from '../errors/exceptions/unknown-request-mapping.exception'; import { GuardsConsumer, GuardsContextCreator } from '../guards'; @@ -39,6 +39,7 @@ import { MetadataScanner } from '../metadata-scanner'; import { PipesConsumer, PipesContextCreator } from '../pipes'; import { ExceptionsFilter } from './interfaces/exceptions-filter.interface'; import { RoutePathMetadata } from './interfaces/route-path-metadata.interface'; +import { LegacyRouteConverter } from './legacy-route-converter'; import { PathsExplorer } from './paths-explorer'; import { REQUEST_CONTEXT_ID } from './request/request-constants'; import { RouteParamsFactory } from './route-params-factory'; @@ -231,7 +232,15 @@ export class RouterExplorer { }; this.copyMetadataToCallback(targetCallback, routeHandler); - routerMethodRef(path, routeHandler); + try { + const convertedPath = LegacyRouteConverter.tryConvert(path); + routerMethodRef(convertedPath, routeHandler); + } catch (e) { + if (e instanceof TypeError) { + LegacyRouteConverter.printError(path); + } + throw e; + } this.graphInspector.insertEntrypointDefinition( entrypointDefinition, @@ -270,9 +279,19 @@ export class RouterExplorer { const httpAdapterRef = this.container.getHttpAdapterRef(); const hosts = Array.isArray(host) ? host : [host]; const hostRegExps = hosts.map((host: string | RegExp) => { - const keys: any[] = []; - const regexp = pathToRegexp(host, keys); - return { regexp, keys }; + if (typeof host === 'string') { + try { + return pathToRegexp(host); + } catch (e) { + if (e instanceof TypeError) { + this.logger.error( + `Unsupported host "${host}" syntax. In past releases, ?, *, and + were used to denote optional or repeating path parameters. The latest version of "path-to-regexp" now requires the use of named parameters. For example, instead of using a route like /users/* to capture all routes starting with "/users", you should use /users/*path. Please see the migration guide for more information.`, + ); + } + throw e; + } + } + return { regexp: host, keys: [] }; }); const unsupportedFilteringErrorMessage = Array.isArray(host) diff --git a/packages/core/test/middleware/utils.spec.ts b/packages/core/test/middleware/utils.spec.ts index 927d40d27ea..df94e8a5b79 100644 --- a/packages/core/test/middleware/utils.spec.ts +++ b/packages/core/test/middleware/utils.spec.ts @@ -1,6 +1,7 @@ -import { RequestMethod, Type } from '@nestjs/common'; +import { RequestMethod } from '@nestjs/common'; import { addLeadingSlash } from '@nestjs/common/utils/shared.utils'; import { expect } from 'chai'; +import { pathToRegexp } from 'path-to-regexp'; import * as sinon from 'sinon'; import { assignToken, @@ -11,7 +12,6 @@ import { mapToExcludeRoute, } from '../../middleware/utils'; import { NoopHttpAdapter } from '../utils/noop-adapter.spec'; -import * as pathToRegexp from 'path-to-regexp'; describe('middleware utils', () => { const noopAdapter = new NoopHttpAdapter({}); @@ -30,12 +30,12 @@ describe('middleware utils', () => { { path: stringRoute, requestMethod: RequestMethod.ALL, - pathRegex: pathToRegexp(addLeadingSlash(stringRoute)), + pathRegex: pathToRegexp(addLeadingSlash(stringRoute)).regexp, }, { path: routeInfo.path, requestMethod: routeInfo.method, - pathRegex: pathToRegexp(addLeadingSlash(routeInfo.path)), + pathRegex: pathToRegexp(addLeadingSlash(routeInfo.path)).regexp, }, ]); }); @@ -121,7 +121,20 @@ describe('middleware utils', () => { sinon.stub(adapter, 'getRequestMethod').callsFake(() => 'GET'); sinon.stub(adapter, 'getRequestUrl').callsFake(() => '/cats/3'); }); - describe('when route is excluded', () => { + describe('when route is excluded (new syntax *path)', () => { + const path = '/cats/*path'; + const excludedRoutes = mapToExcludeRoute([ + { + path, + method: RequestMethod.GET, + }, + ]); + it('should return true', () => { + expect(isMiddlewareRouteExcluded({}, excludedRoutes, adapter)).to.be + .true; + }); + }); + describe('when route is excluded (legacy syntax (.*))', () => { const path = '/cats/(.*)'; const excludedRoutes = mapToExcludeRoute([ { diff --git a/packages/core/test/router/route-path-factory.spec.ts b/packages/core/test/router/route-path-factory.spec.ts index 4c110651d01..acb3ca1f712 100644 --- a/packages/core/test/router/route-path-factory.spec.ts +++ b/packages/core/test/router/route-path-factory.spec.ts @@ -1,6 +1,6 @@ -import { RequestMethod, VersioningType, VERSION_NEUTRAL } from '@nestjs/common'; +import { RequestMethod, VERSION_NEUTRAL, VersioningType } from '@nestjs/common'; import { expect } from 'chai'; -import * as pathToRegexp from 'path-to-regexp'; +import { pathToRegexp } from 'path-to-regexp'; import * as sinon from 'sinon'; import { ApplicationConfig } from '../../application-config'; import { RoutePathFactory } from '../../router/route-path-factory'; @@ -248,7 +248,7 @@ describe('RoutePathFactory', () => { exclude: [ { path: '/random', - pathRegex: pathToRegexp('/random'), + pathRegex: pathToRegexp('/random').regexp, requestMethod: RequestMethod.ALL, }, ], @@ -267,7 +267,7 @@ describe('RoutePathFactory', () => { exclude: [ { path: '/cats', - pathRegex: pathToRegexp('/cats'), + pathRegex: pathToRegexp('/cats').regexp, requestMethod: RequestMethod.ALL, }, ], @@ -286,7 +286,7 @@ describe('RoutePathFactory', () => { exclude: [ { path: '/cats', - pathRegex: pathToRegexp('/cats'), + pathRegex: pathToRegexp('/cats').regexp, requestMethod: RequestMethod.GET, }, ], diff --git a/packages/platform-express/adapters/express-adapter.ts b/packages/platform-express/adapters/express-adapter.ts index ec27a19542b..23bf68cec3b 100644 --- a/packages/platform-express/adapters/express-adapter.ts +++ b/packages/platform-express/adapters/express-adapter.ts @@ -23,6 +23,7 @@ import { } from '@nestjs/common/utils/shared.utils'; import { AbstractHttpAdapter } from '@nestjs/core/adapters/http-adapter'; import { RouterMethodFactory } from '@nestjs/core/helpers/router-method-factory'; +import { LegacyRouteConverter } from '@nestjs/core/router/legacy-route-converter'; import * as bodyparser from 'body-parser'; import { json as bodyParserJson, @@ -224,9 +225,19 @@ export class ExpressAdapter extends AbstractHttpAdapter< public createMiddlewareFactory( requestMethod: RequestMethod, ): (path: string, callback: Function) => any { - return this.routerMethodFactory - .get(this.instance, requestMethod) - .bind(this.instance); + return (path: string, callback: Function) => { + try { + const convertedPath = LegacyRouteConverter.tryConvert(path); + return this.routerMethodFactory + .get(this.instance, requestMethod) + .call(this.instance, convertedPath, callback); + } catch (e) { + if (e instanceof TypeError) { + LegacyRouteConverter.printError(path); + } + throw e; + } + }; } public initHttpServer(options: NestApplicationOptions) { diff --git a/packages/platform-fastify/adapters/fastify-adapter.ts b/packages/platform-fastify/adapters/fastify-adapter.ts index c832397368d..03161c940e5 100644 --- a/packages/platform-fastify/adapters/fastify-adapter.ts +++ b/packages/platform-fastify/adapters/fastify-adapter.ts @@ -17,6 +17,7 @@ import { import { loadPackage } from '@nestjs/common/utils/load-package.util'; import { isString, isUndefined } from '@nestjs/common/utils/shared.utils'; import { AbstractHttpAdapter } from '@nestjs/core/adapters/http-adapter'; +import { LegacyRouteConverter } from '@nestjs/core/router/legacy-route-converter'; import { FastifyBaseLogger, FastifyBodyParser, @@ -34,6 +35,7 @@ import { RawServerBase, RawServerDefault, RequestGenericInterface, + RouteGenericInterface, RouteOptions, RouteShorthandOptions, fastify, @@ -48,7 +50,7 @@ import { Chain as LightMyRequestChain, Response as LightMyRequestResponse, } from 'light-my-request'; -import * as pathToRegexp from 'path-to-regexp'; +import { pathToRegexp } from 'path-to-regexp'; // `querystring` is used internally in fastify for registering urlencoded body parser. import { parse as querystringParse } from 'querystring'; import { @@ -130,16 +132,18 @@ export class FastifyAdapter< TRawRequest > = FastifyRequest, TReply extends FastifyReply< + RouteGenericInterface, TServer, TRawRequest, TRawResponse - > = FastifyReply, + > = FastifyReply, TInstance extends FastifyInstance< TServer, TRawRequest, TRawResponse > = FastifyInstance, > extends AbstractHttpAdapter { + protected readonly logger = new Logger(FastifyAdapter.name); protected readonly instance: TInstance; protected _pathPrefix?: string; @@ -468,7 +472,7 @@ export class FastifyAdapter< plugin: TRegister['0'], opts?: TRegister['1'], ) { - return this.instance.register(plugin, opts); + return (this.instance.register as any)(plugin, opts); } public inject(): LightMyRequestChain; @@ -619,39 +623,46 @@ export class FastifyAdapter< const hasEndOfStringCharacter = path.endsWith('$'); path = hasEndOfStringCharacter ? path.slice(0, -1) : path; - let normalizedPath = path.endsWith('/*') - ? `${path.slice(0, -1)}(.*)` - : path; + let normalizedPath = LegacyRouteConverter.tryConvert(path); - // Fallback to "(.*)" to support plugins like GraphQL - normalizedPath = normalizedPath === '/(.*)' ? '(.*)' : normalizedPath; + // Fallback to "*path" to support plugins like GraphQL + normalizedPath = normalizedPath === '/*path' ? '*path' : normalizedPath; // Normalize the path to support the prefix if it set in application normalizedPath = this._pathPrefix && !normalizedPath.startsWith(this._pathPrefix) - ? `${this._pathPrefix}${normalizedPath}(.*)` + ? `${this._pathPrefix}${normalizedPath}*path` : normalizedPath; - let re = pathToRegexp(normalizedPath); - re = hasEndOfStringCharacter ? new RegExp(re.source + '$', re.flags) : re; - - // The following type assertion is valid as we use import('@fastify/middie') rather than require('@fastify/middie') - // ref https://github.com/fastify/middie/pull/55 - this.instance.use( - normalizedPath, - (req: any, res: any, next: Function) => { - const queryParamsIndex = req.originalUrl.indexOf('?'); - const pathname = - queryParamsIndex >= 0 - ? req.originalUrl.slice(0, queryParamsIndex) - : req.originalUrl; - - if (!re.exec(pathname + '/') && normalizedPath) { - return next(); - } - return callback(req, res, next); - }, - ); + try { + let { regexp: re } = pathToRegexp(normalizedPath); + re = hasEndOfStringCharacter + ? new RegExp(re.source + '$', re.flags) + : re; + + // The following type assertion is valid as we use import('@fastify/middie') rather than require('@fastify/middie') + // ref https://github.com/fastify/middie/pull/55 + this.instance.use( + normalizedPath, + (req: any, res: any, next: Function) => { + const queryParamsIndex = req.originalUrl.indexOf('?'); + const pathname = + queryParamsIndex >= 0 + ? req.originalUrl.slice(0, queryParamsIndex) + : req.originalUrl; + + if (!re.exec(pathname + '/') && normalizedPath) { + return next(); + } + return callback(req, res, next); + }, + ); + } catch (e) { + if (e instanceof TypeError) { + LegacyRouteConverter.printError(path); + } + throw e; + } }; } diff --git a/packages/platform-fastify/package.json b/packages/platform-fastify/package.json index 855de422bcc..0375155aee0 100644 --- a/packages/platform-fastify/package.json +++ b/packages/platform-fastify/package.json @@ -23,7 +23,7 @@ "@fastify/middie": "9.0.2", "fastify": "5.1.0", "light-my-request": "6.3.0", - "path-to-regexp": "3.3.0", + "path-to-regexp": "8.2.0", "tslib": "2.7.0" }, "peerDependencies": { From 7197cc1a8ae439a67c5c130af8450fc4c7deab58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 28 Nov 2024 14:06:15 +0100 Subject: [PATCH 112/122] feat: add normalize path to http adapter --- .../interfaces/http/http-server.interface.ts | 1 + packages/core/adapters/http-adapter.ts | 8 ++++---- packages/core/router/router-explorer.ts | 14 ++++---------- .../platform-express/adapters/express-adapter.ts | 16 ++++++++++++++-- 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/packages/common/interfaces/http/http-server.interface.ts b/packages/common/interfaces/http/http-server.interface.ts index 91494021e57..8d2bac04505 100644 --- a/packages/common/interfaces/http/http-server.interface.ts +++ b/packages/common/interfaces/http/http-server.interface.ts @@ -102,4 +102,5 @@ export interface HttpServer< version: VersionValue, versioningOptions: VersioningOptions, ): (req: TRequest, res: TResponse, next: () => void) => Function; + normalizePath?(path: string): string; } diff --git a/packages/core/adapters/http-adapter.ts b/packages/core/adapters/http-adapter.ts index d36fc2c122f..5830faa3fa3 100644 --- a/packages/core/adapters/http-adapter.ts +++ b/packages/core/adapters/http-adapter.ts @@ -143,6 +143,10 @@ export abstract class AbstractHttpAdapter< return this.instance as T; } + public normalizePath(path: string): string { + return path; + } + abstract close(); abstract initHttpServer(options: NestApplicationOptions); abstract useStaticAssets(...args: any[]); @@ -158,11 +162,7 @@ export abstract class AbstractHttpAdapter< abstract setErrorHandler(handler: Function, prefix?: string); abstract setNotFoundHandler(handler: Function, prefix?: string); abstract isHeadersSent(response: any); - // TODO remove optional signature (v11) - abstract getHeader?(response: any, name: string); abstract setHeader(response: any, name: string, value: string); - // TODO remove optional signature (v11) - abstract appendHeader?(response: any, name: string, value: string); abstract registerParserMiddleware(prefix?: string, rawBody?: boolean); abstract enableCors( options: CorsOptions | CorsOptionsDelegate, diff --git a/packages/core/router/router-explorer.ts b/packages/core/router/router-explorer.ts index f8624c5e375..a4333a89cea 100644 --- a/packages/core/router/router-explorer.ts +++ b/packages/core/router/router-explorer.ts @@ -39,7 +39,6 @@ import { MetadataScanner } from '../metadata-scanner'; import { PipesConsumer, PipesContextCreator } from '../pipes'; import { ExceptionsFilter } from './interfaces/exceptions-filter.interface'; import { RoutePathMetadata } from './interfaces/route-path-metadata.interface'; -import { LegacyRouteConverter } from './legacy-route-converter'; import { PathsExplorer } from './paths-explorer'; import { REQUEST_CONTEXT_ID } from './request/request-constants'; import { RouteParamsFactory } from './route-params-factory'; @@ -232,15 +231,10 @@ export class RouterExplorer { }; this.copyMetadataToCallback(targetCallback, routeHandler); - try { - const convertedPath = LegacyRouteConverter.tryConvert(path); - routerMethodRef(convertedPath, routeHandler); - } catch (e) { - if (e instanceof TypeError) { - LegacyRouteConverter.printError(path); - } - throw e; - } + const normalizedPath = router.normalizePath + ? router.normalizePath(path) + : path; + routerMethodRef(normalizedPath, routeHandler); this.graphInspector.insertEntrypointDefinition( entrypointDefinition, diff --git a/packages/platform-express/adapters/express-adapter.ts b/packages/platform-express/adapters/express-adapter.ts index 23bf68cec3b..699992826a8 100644 --- a/packages/platform-express/adapters/express-adapter.ts +++ b/packages/platform-express/adapters/express-adapter.ts @@ -144,7 +144,7 @@ export class ExpressAdapter extends AbstractHttpAdapter< return response.headersSent; } - public getHeader?(response: any, name: string) { + public getHeader(response: any, name: string) { return response.get(name); } @@ -152,10 +152,22 @@ export class ExpressAdapter extends AbstractHttpAdapter< return response.set(name, value); } - public appendHeader?(response: any, name: string, value: string) { + public appendHeader(response: any, name: string, value: string) { return response.append(name, value); } + public normalizePath(path: string): string { + try { + const convertedPath = LegacyRouteConverter.tryConvert(path); + return convertedPath; + } catch (e) { + if (e instanceof TypeError) { + LegacyRouteConverter.printError(path); + } + throw e; + } + } + public listen(port: string | number, callback?: () => void): Server; public listen( port: string | number, From 700a85d211891e2486ba3f6ae09a97a049a5cf42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 28 Nov 2024 14:06:38 +0100 Subject: [PATCH 113/122] chore: update package.json --- lerna.json | 2 +- packages/common/package.json | 2 +- packages/core/package.json | 4 ++-- packages/microservices/package.json | 6 +++--- packages/platform-express/package.json | 6 +++--- packages/platform-fastify/package.json | 2 +- packages/platform-socket.io/package.json | 2 +- packages/platform-ws/package.json | 2 +- packages/testing/package.json | 2 +- packages/websockets/package.json | 6 +++--- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/lerna.json b/lerna.json index eee385437a2..93e8bae9ec7 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "packages": [ "packages/*" ], - "version": "10.4.11" + "version": "11.0.0-next.1" } diff --git a/packages/common/package.json b/packages/common/package.json index c9eb94c7679..a243e9501bb 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@nestjs/common", - "version": "10.4.11", + "version": "11.0.0-next.1", "description": "Nest - modern, fast, powerful node.js web framework (@common)", "author": "Kamil Mysliwiec", "homepage": "https://nestjs.com", diff --git a/packages/core/package.json b/packages/core/package.json index 20c6a817c22..5af4c272baa 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@nestjs/core", - "version": "10.4.11", + "version": "11.0.0-next.1", "description": "Nest - modern, fast, powerful node.js web framework (@core)", "author": "Kamil Mysliwiec", "license": "MIT", @@ -36,7 +36,7 @@ "uid": "2.0.2" }, "devDependencies": { - "@nestjs/common": "10.4.11" + "@nestjs/common": "^11.0.0-next.1" }, "peerDependencies": { "@nestjs/common": "^10.0.0", diff --git a/packages/microservices/package.json b/packages/microservices/package.json index 766a090db32..ca0d55c2e7b 100644 --- a/packages/microservices/package.json +++ b/packages/microservices/package.json @@ -1,6 +1,6 @@ { "name": "@nestjs/microservices", - "version": "10.4.11", + "version": "11.0.0-next.1", "description": "Nest - modern, fast, powerful node.js web framework (@microservices)", "author": "Kamil Mysliwiec", "license": "MIT", @@ -22,8 +22,8 @@ "tslib": "2.7.0" }, "devDependencies": { - "@nestjs/common": "10.4.11", - "@nestjs/core": "10.4.11" + "@nestjs/common": "^11.0.0-next.1", + "@nestjs/core": "^11.0.0-next.1" }, "peerDependencies": { "@grpc/grpc-js": "*", diff --git a/packages/platform-express/package.json b/packages/platform-express/package.json index f0dc49e2a8b..1d1afa31778 100644 --- a/packages/platform-express/package.json +++ b/packages/platform-express/package.json @@ -1,6 +1,6 @@ { "name": "@nestjs/platform-express", - "version": "10.4.11", + "version": "11.0.0-next.1", "description": "Nest - modern, fast, powerful node.js web framework (@platform-express)", "author": "Kamil Mysliwiec", "license": "MIT", @@ -25,8 +25,8 @@ "tslib": "2.7.0" }, "devDependencies": { - "@nestjs/common": "10.4.11", - "@nestjs/core": "10.4.11" + "@nestjs/common": "^11.0.0-next.1", + "@nestjs/core": "^11.0.0-next.1" }, "peerDependencies": { "@nestjs/common": "^10.0.0", diff --git a/packages/platform-fastify/package.json b/packages/platform-fastify/package.json index 0375155aee0..5fe2ecdf052 100644 --- a/packages/platform-fastify/package.json +++ b/packages/platform-fastify/package.json @@ -1,6 +1,6 @@ { "name": "@nestjs/platform-fastify", - "version": "10.4.11", + "version": "11.0.0-next.1", "description": "Nest - modern, fast, powerful node.js web framework (@platform-fastify)", "author": "Kamil Mysliwiec", "license": "MIT", diff --git a/packages/platform-socket.io/package.json b/packages/platform-socket.io/package.json index faa5ce19070..f82121d6d83 100644 --- a/packages/platform-socket.io/package.json +++ b/packages/platform-socket.io/package.json @@ -1,6 +1,6 @@ { "name": "@nestjs/platform-socket.io", - "version": "10.4.11", + "version": "11.0.0-next.1", "description": "Nest - modern, fast, powerful node.js web framework (@platform-socket.io)", "author": "Kamil Mysliwiec", "license": "MIT", diff --git a/packages/platform-ws/package.json b/packages/platform-ws/package.json index 0085eec8218..0fdb39ce2fd 100644 --- a/packages/platform-ws/package.json +++ b/packages/platform-ws/package.json @@ -1,6 +1,6 @@ { "name": "@nestjs/platform-ws", - "version": "10.4.11", + "version": "11.0.0-next.1", "description": "Nest - modern, fast, powerful node.js web framework (@platform-ws)", "author": "Kamil Mysliwiec", "license": "MIT", diff --git a/packages/testing/package.json b/packages/testing/package.json index ee67b048f2d..63b5bed9e97 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,6 +1,6 @@ { "name": "@nestjs/testing", - "version": "10.4.11", + "version": "11.0.0-next.1", "description": "Nest - modern, fast, powerful node.js web framework (@testing)", "author": "Kamil Mysliwiec", "license": "MIT", diff --git a/packages/websockets/package.json b/packages/websockets/package.json index 212a281b0ec..f9bc2a7f941 100644 --- a/packages/websockets/package.json +++ b/packages/websockets/package.json @@ -1,6 +1,6 @@ { "name": "@nestjs/websockets", - "version": "10.4.11", + "version": "11.0.0-next.1", "description": "Nest - modern, fast, powerful node.js web framework (@websockets)", "author": "Kamil Mysliwiec", "license": "MIT", @@ -18,8 +18,8 @@ "tslib": "2.7.0" }, "devDependencies": { - "@nestjs/common": "10.4.11", - "@nestjs/core": "10.4.11" + "@nestjs/common": "^11.0.0-next.1", + "@nestjs/core": "^11.0.0-next.1" }, "peerDependencies": { "@nestjs/common": "^10.0.0", From d2a45f3e254b564aaff3b1c2fa6ccc0c8063c3b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Tue, 3 Dec 2024 12:34:37 +0100 Subject: [PATCH 114/122] chore: use optional group wrapped splat param --- packages/core/router/legacy-route-converter.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/router/legacy-route-converter.ts b/packages/core/router/legacy-route-converter.ts index de7299cd857..5a9f8b01f56 100644 --- a/packages/core/router/legacy-route-converter.ts +++ b/packages/core/router/legacy-route-converter.ts @@ -25,14 +25,14 @@ export class LegacyRouteConverter { if (normalizedRoute !== '/(.*)/') { this.printWarning(route); } - return route.replace('(.*)', '*path'); + return route.replace('(.*)', '{*path}'); } if (normalizedRoute.endsWith('/*/')) { // Skip printing warning for the "all" wildcard. if (normalizedRoute !== '/*/') { this.printWarning(route); } - return route.replace('*', '*path'); + return route.replace('*', '{*path}'); } if (normalizedRoute.endsWith('/+/')) { this.printWarning(route); From 3080787d9b871539a8552034a623d5df36af4255 Mon Sep 17 00:00:00 2001 From: Flo Date: Tue, 3 Dec 2024 16:56:13 +0100 Subject: [PATCH 115/122] fix(core): call shutdown hooks in reverse distance order --- .../hooks/e2e/before-app-shutdown.spec.ts | 19 ++++++++----------- integration/hooks/e2e/on-app-shutdown.spec.ts | 16 +++++----------- packages/core/nest-application-context.ts | 10 ++++++++-- 3 files changed, 21 insertions(+), 24 deletions(-) diff --git a/integration/hooks/e2e/before-app-shutdown.spec.ts b/integration/hooks/e2e/before-app-shutdown.spec.ts index ed8eb6d3766..152c5efd491 100644 --- a/integration/hooks/e2e/before-app-shutdown.spec.ts +++ b/integration/hooks/e2e/before-app-shutdown.spec.ts @@ -23,10 +23,7 @@ describe('BeforeApplicationShutdown', () => { it('should sort modules by distance (topological sort) - DESC order', async () => { @Injectable() class BB implements BeforeApplicationShutdown { - public field: string; - async beforeApplicationShutdown() { - this.field = 'b-field'; - } + beforeApplicationShutdown = Sinon.spy(); } @Module({ @@ -37,12 +34,8 @@ describe('BeforeApplicationShutdown', () => { @Injectable() class AA implements BeforeApplicationShutdown { - public field: string; constructor(private bb: BB) {} - - async beforeApplicationShutdown() { - this.field = this.bb.field + '_a-field'; - } + beforeApplicationShutdown = Sinon.spy(); } @Module({ imports: [B], @@ -58,7 +51,11 @@ describe('BeforeApplicationShutdown', () => { await app.init(); await app.close(); - const instance = module.get(AA); - expect(instance.field).to.equal('b-field_a-field'); + const aa = module.get(AA); + const bb = module.get(BB); + Sinon.assert.callOrder( + aa.beforeApplicationShutdown, + bb.beforeApplicationShutdown, + ); }); }); diff --git a/integration/hooks/e2e/on-app-shutdown.spec.ts b/integration/hooks/e2e/on-app-shutdown.spec.ts index ec47a1a5031..67518878cbd 100644 --- a/integration/hooks/e2e/on-app-shutdown.spec.ts +++ b/integration/hooks/e2e/on-app-shutdown.spec.ts @@ -23,10 +23,7 @@ describe('OnApplicationShutdown', () => { it('should sort modules by distance (topological sort) - DESC order', async () => { @Injectable() class BB implements OnApplicationShutdown { - public field: string; - async onApplicationShutdown() { - this.field = 'b-field'; - } + onApplicationShutdown = Sinon.spy(); } @Module({ @@ -37,12 +34,8 @@ describe('OnApplicationShutdown', () => { @Injectable() class AA implements OnApplicationShutdown { - public field: string; constructor(private bb: BB) {} - - async onApplicationShutdown() { - this.field = this.bb.field + '_a-field'; - } + onApplicationShutdown = Sinon.spy(); } @Module({ imports: [B], @@ -58,7 +51,8 @@ describe('OnApplicationShutdown', () => { await app.init(); await app.close(); - const instance = module.get(AA); - expect(instance.field).to.equal('b-field_a-field'); + const aa = module.get(AA); + const bb = module.get(BB); + Sinon.assert.callOrder(aa.onApplicationShutdown, bb.onApplicationShutdown); }); }); diff --git a/packages/core/nest-application-context.ts b/packages/core/nest-application-context.ts index b3ba11fefd8..8d9eb92e04b 100644 --- a/packages/core/nest-application-context.ts +++ b/packages/core/nest-application-context.ts @@ -439,7 +439,10 @@ export class NestApplicationContext< * modules and children. */ protected async callShutdownHook(signal?: string): Promise { - const modulesSortedByDistance = this.getModulesToTriggerHooksOn(); + const modulesSortedByDistance = [ + ...this.getModulesToTriggerHooksOn(), + ].reverse(); + for (const module of modulesSortedByDistance) { await callAppShutdownHook(module, signal); } @@ -450,7 +453,10 @@ export class NestApplicationContext< * modules and children. */ protected async callBeforeShutdownHook(signal?: string): Promise { - const modulesSortedByDistance = this.getModulesToTriggerHooksOn(); + const modulesSortedByDistance = [ + ...this.getModulesToTriggerHooksOn(), + ].reverse(); + for (const module of modulesSortedByDistance) { await callBeforeAppShutdownHook(module, signal); } From 8bb562301fc6c3661c8d5a30b2f965de4d802b11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 5 Dec 2024 14:13:48 +0100 Subject: [PATCH 116/122] fix(core): set global modules distance to -1 --- packages/core/injector/container.ts | 4 ++++ packages/core/scanner.ts | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/core/injector/container.ts b/packages/core/injector/container.ts index 94e1ad925e7..edd1b9d6fc4 100644 --- a/packages/core/injector/container.ts +++ b/packages/core/injector/container.ts @@ -170,6 +170,10 @@ export class NestContainer { if (this.isGlobalModule(type, dynamicMetadata)) { moduleRef.isGlobal = true; + + // Set global module distance to -1 to ensure their lifecycle hooks + // are always executed first (when initializing the application) + moduleRef.distance = -1; this.addGlobalModule(moduleRef); } diff --git a/packages/core/scanner.ts b/packages/core/scanner.ts index e96bc2b6a7e..fa1fbdb05df 100644 --- a/packages/core/scanner.ts +++ b/packages/core/scanner.ts @@ -93,9 +93,13 @@ export class DependenciesScanner { }); await this.scanModulesForDependencies(); this.addScopedEnhancersMetadata(); - this.container.bindGlobalScope(); + // Modules distance calculation should be done after all modules are scanned + // but before global modules are registered (linked to all modules). + // Global modules have their distance set to -1 anyway. this.calculateModulesDistance(); + + this.container.bindGlobalScope(); } public async scanForModules({ From 6a84d6e25e753447357483a303f9c4a6cbb18a18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 5 Dec 2024 14:52:08 +0100 Subject: [PATCH 117/122] fix(core): set distance to max, dont override on calc --- packages/core/injector/container.ts | 4 ++-- packages/core/scanner.ts | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/core/injector/container.ts b/packages/core/injector/container.ts index edd1b9d6fc4..ffbfe557d69 100644 --- a/packages/core/injector/container.ts +++ b/packages/core/injector/container.ts @@ -171,9 +171,9 @@ export class NestContainer { if (this.isGlobalModule(type, dynamicMetadata)) { moduleRef.isGlobal = true; - // Set global module distance to -1 to ensure their lifecycle hooks + // Set global module distance to MAX_VALUE to ensure their lifecycle hooks // are always executed first (when initializing the application) - moduleRef.distance = -1; + moduleRef.distance = Number.MAX_VALUE; this.addGlobalModule(moduleRef); } diff --git a/packages/core/scanner.ts b/packages/core/scanner.ts index fa1fbdb05df..37086d47733 100644 --- a/packages/core/scanner.ts +++ b/packages/core/scanner.ts @@ -96,7 +96,7 @@ export class DependenciesScanner { // Modules distance calculation should be done after all modules are scanned // but before global modules are registered (linked to all modules). - // Global modules have their distance set to -1 anyway. + // Global modules have their distance set to MAX anyway. this.calculateModulesDistance(); this.container.bindGlobalScope(); @@ -413,7 +413,10 @@ export class DependenciesScanner { const moduleImports = moduleRef.imports; moduleImports.forEach(importedModuleRef => { if (importedModuleRef) { - if (distance > importedModuleRef.distance) { + if ( + distance > importedModuleRef.distance && + !importedModuleRef.isGlobal + ) { importedModuleRef.distance = distance; } calculateDistance(importedModuleRef, distance + 1, localModulesStack); From 5d3c284b862e3d978e8520f11a847d1369a6f214 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 12 Dec 2024 09:43:51 +0100 Subject: [PATCH 118/122] chore(microservices): dont reference mqtt pkg --- packages/microservices/client/client-mqtt.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/microservices/client/client-mqtt.ts b/packages/microservices/client/client-mqtt.ts index b3f774f1fe2..1379ee5ac2e 100644 --- a/packages/microservices/client/client-mqtt.ts +++ b/packages/microservices/client/client-mqtt.ts @@ -19,8 +19,8 @@ let mqttPackage: any = {}; // because it would require the user to install the mqtt package even if they dont use MQTT // Otherwise, TypeScript would fail to compile the code. // -type MqttClient = import('mqtt').MqttClient; -// type MqttClient = any; +// type MqttClient = import('mqtt').MqttClient; +type MqttClient = any; /** * @publicApi From 18b1bcec29dda548c30b90fc81c388806224a520 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 12 Dec 2024 10:07:06 +0100 Subject: [PATCH 119/122] chore: address todos, remove deprecated --- packages/core/injector/container.ts | 7 ++++-- packages/core/injector/module.ts | 25 +++++++------------ packages/core/scanner.ts | 15 ++++++----- .../microservices/external/kafka.interface.ts | 11 +------- packages/testing/testing-injector.ts | 2 +- 5 files changed, 23 insertions(+), 37 deletions(-) diff --git a/packages/core/injector/container.ts b/packages/core/injector/container.ts index ffbfe557d69..4a259a271c0 100644 --- a/packages/core/injector/container.ts +++ b/packages/core/injector/container.ts @@ -278,12 +278,15 @@ export class NestContainer { return moduleRef.addInjectable(injectable, enhancerSubtype, host); } - public addExportedProvider(provider: Type, token: string) { + public addExportedProviderOrModule( + toExport: Type | DynamicModule, + token: string, + ) { if (!this.modules.has(token)) { throw new UnknownModuleException(); } const moduleRef = this.modules.get(token)!; - moduleRef.addExportedProvider(provider); + moduleRef.addExportedProviderOrModule(toExport); } public addController(controller: Type, token: string) { diff --git a/packages/core/injector/module.ts b/packages/core/injector/module.ts index 38dd79df70e..5dd1d438680 100644 --- a/packages/core/injector/module.ts +++ b/packages/core/injector/module.ts @@ -447,21 +447,21 @@ export class Module { ); } - public addExportedProvider( - provider: Provider | string | symbol | DynamicModule, + public addExportedProviderOrModule( + toExport: Provider | string | symbol | DynamicModule, ) { const addExportedUnit = (token: InjectionToken) => this._exports.add(this.validateExportedProvider(token)); - if (this.isCustomProvider(provider as any)) { - return this.addCustomExportedProvider(provider as any); - } else if (isString(provider) || isSymbol(provider)) { - return addExportedUnit(provider); - } else if (this.isDynamicModule(provider)) { - const { module: moduleClassRef } = provider; + if (this.isCustomProvider(toExport as any)) { + return this.addCustomExportedProvider(toExport as any); + } else if (isString(toExport) || isSymbol(toExport)) { + return addExportedUnit(toExport); + } else if (this.isDynamicModule(toExport)) { + const { module: moduleClassRef } = toExport; return addExportedUnit(moduleClassRef); } - addExportedUnit(provider as Type); + addExportedUnit(toExport as Type); } public addCustomExportedProvider( @@ -527,13 +527,6 @@ export class Module { this._imports.add(moduleRef); } - /** - * @deprecated - */ - public addRelatedModule(module: Module) { - this._imports.add(module); - } - public replace(toReplace: InjectionToken, options: any) { if (options.isProvider && this.hasProvider(toReplace)) { const originalProvider = this._providers.get(toReplace); diff --git a/packages/core/scanner.ts b/packages/core/scanner.ts index 37086d47733..9016baa5386 100644 --- a/packages/core/scanner.ts +++ b/packages/core/scanner.ts @@ -274,7 +274,7 @@ export class DependenciesScanner { )!, ]; exports.forEach(exportedProvider => - this.insertExportedProvider(exportedProvider, token), + this.insertExportedProviderOrModule(exportedProvider, token), ); } @@ -532,15 +532,14 @@ export class DependenciesScanner { } } - public insertExportedProvider( - // TODO: improve the type definition below because it doesn't reflects the real usage of this method - exportedProvider: Type | ForwardReference, + public insertExportedProviderOrModule( + toExport: ForwardReference | DynamicModule | Type, token: string, ) { - const fulfilledProvider = this.isForwardReference(exportedProvider) - ? exportedProvider.forwardRef() - : exportedProvider; - this.container.addExportedProvider(fulfilledProvider, token); + const fulfilledProvider = this.isForwardReference(toExport) + ? toExport.forwardRef() + : toExport; + this.container.addExportedProviderOrModule(fulfilledProvider, token); } public insertController(controller: Type, token: string) { diff --git a/packages/microservices/external/kafka.interface.ts b/packages/microservices/external/kafka.interface.ts index e0baefa7416..5482d9806ba 100644 --- a/packages/microservices/external/kafka.interface.ts +++ b/packages/microservices/external/kafka.interface.ts @@ -1035,13 +1035,6 @@ export type ConsumerRunConfig = { eachMessage?: EachMessageHandler; }; -/** - * @deprecated Replaced by ConsumerSubscribeTopics - */ -export type ConsumerSubscribeTopic = { - topic: string | RegExp; - fromBeginning?: boolean; -}; export type ConsumerSubscribeTopics = { topics: (string | RegExp)[]; fromBeginning?: boolean; @@ -1050,9 +1043,7 @@ export type ConsumerSubscribeTopics = { export type Consumer = { connect(): Promise; disconnect(): Promise; - subscribe( - subscription: ConsumerSubscribeTopics | ConsumerSubscribeTopic, - ): Promise; + subscribe(subscription: ConsumerSubscribeTopics): Promise; stop(): Promise; run(config?: ConsumerRunConfig): Promise; commitOffsets( diff --git a/packages/testing/testing-injector.ts b/packages/testing/testing-injector.ts index 3ece834be9f..603544801c9 100644 --- a/packages/testing/testing-injector.ts +++ b/packages/testing/testing-injector.ts @@ -72,7 +72,7 @@ export class TestingInjector extends Injector { }, internalCoreModule.providers, ); - internalCoreModule.addExportedProvider(name); + internalCoreModule.addExportedProviderOrModule(name); return newWrapper; } else { throw err; From 2c6bf94a81233fe4c512f41558d1bf6e470fe3ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 12 Dec 2024 10:14:28 +0100 Subject: [PATCH 120/122] style: fix eslint errors --- packages/microservices/client/client-mqtt.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/microservices/client/client-mqtt.ts b/packages/microservices/client/client-mqtt.ts index 1379ee5ac2e..a341544f011 100644 --- a/packages/microservices/client/client-mqtt.ts +++ b/packages/microservices/client/client-mqtt.ts @@ -29,6 +29,7 @@ export class ClientMqtt extends ClientProxy { protected readonly logger = new Logger(ClientProxy.name); protected readonly subscriptionsCount = new Map(); protected readonly url: string; + /* eslint-disable @typescript-eslint/no-redundant-type-constituents */ protected mqttClient: MqttClient | null = null; protected connectionPromise: Promise | null = null; protected isInitialConnection = false; From 3da69f8467b279a6fa2686cce6efabf319afabd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 12 Dec 2024 10:34:22 +0100 Subject: [PATCH 121/122] test: update container method name --- packages/core/test/injector/container.spec.ts | 8 ++++---- packages/core/test/injector/module.spec.ts | 4 ++-- packages/core/test/scanner.spec.ts | 6 ++++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/core/test/injector/container.spec.ts b/packages/core/test/injector/container.spec.ts index 3083ed6b7a7..fe77d3ebb01 100644 --- a/packages/core/test/injector/container.spec.ts +++ b/packages/core/test/injector/container.spec.ts @@ -41,10 +41,10 @@ describe('NestContainer', () => { ); }); - it('should "addExportedProvider" throw "UnknownModuleException" when module is not stored in collection', () => { - expect(() => container.addExportedProvider(null!, 'TestModule')).throw( - UnknownModuleException, - ); + it('should "addExportedProviderOrModule" throw "UnknownModuleException" when module is not stored in collection', () => { + expect(() => + container.addExportedProviderOrModule(null!, 'TestModule'), + ).throw(UnknownModuleException); }); it('should "addInjectable" throw "UnknownModuleException" when module is not stored in collection', () => { diff --git a/packages/core/test/injector/module.spec.ts b/packages/core/test/injector/module.spec.ts index 784c247c739..b2ef4090ce9 100644 --- a/packages/core/test/injector/module.spec.ts +++ b/packages/core/test/injector/module.spec.ts @@ -332,7 +332,7 @@ describe('Module', () => { 'addCustomExportedProvider', ); - moduleRef.addExportedProvider({ provide: 'test' } as any); + moduleRef.addExportedProviderOrModule({ provide: 'test' } as any); expect(addCustomExportedProviderSpy.called).to.be.true; }); it('should support symbols', () => { @@ -341,7 +341,7 @@ describe('Module', () => { 'addCustomExportedProvider', ); const symb = Symbol('test'); - moduleRef.addExportedProvider({ provide: symb } as any); + moduleRef.addExportedProviderOrModule({ provide: symb } as any); expect(addCustomExportedProviderSpy.called).to.be.true; expect(untypedModuleRef._exports.has(symb)).to.be.true; }); diff --git a/packages/core/test/scanner.spec.ts b/packages/core/test/scanner.spec.ts index cbc8f9eb8a8..c7ec82295c1 100644 --- a/packages/core/test/scanner.spec.ts +++ b/packages/core/test/scanner.spec.ts @@ -108,8 +108,10 @@ describe('DependenciesScanner', () => { expectation.verify(); }); - it('should "insertExportedProvider" call once (1 component) container method "addExportedProvider"', async () => { - const expectation = mockContainer.expects('addExportedProvider').once(); + it('should "insertExportedProvider" call once (1 component) container method "addExportedProviderOrModule"', async () => { + const expectation = mockContainer + .expects('addExportedProviderOrModule') + .once(); await scanner.scan(TestModule); expectation.verify(); }); From 0354e5e946e7d8f2fbb747289b0e0ad1d03394cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20My=C5=9Bliwiec?= Date: Thu, 12 Dec 2024 10:51:28 +0100 Subject: [PATCH 122/122] test: update container method name --- packages/core/test/scanner.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/test/scanner.spec.ts b/packages/core/test/scanner.spec.ts index c7ec82295c1..89c8bf58d2c 100644 --- a/packages/core/test/scanner.spec.ts +++ b/packages/core/test/scanner.spec.ts @@ -95,7 +95,7 @@ describe('DependenciesScanner', () => { it('should "insertProvider" call twice (2 components) container method "addProvider"', async () => { const expectation = mockContainer.expects('addProvider').twice(); - const stub = sinon.stub(scanner, 'insertExportedProvider'); + const stub = sinon.stub(scanner, 'insertExportedProviderOrModule'); await scanner.scan(TestModule); expectation.verify(); @@ -108,7 +108,7 @@ describe('DependenciesScanner', () => { expectation.verify(); }); - it('should "insertExportedProvider" call once (1 component) container method "addExportedProviderOrModule"', async () => { + it('should "insertExportedProviderOrModule" call once (1 component) container method "addExportedProviderOrModule"', async () => { const expectation = mockContainer .expects('addExportedProviderOrModule') .once();